msolarczek and Claude Opus 5
bf92100661
Merge lane/planung in feature/craftvia-mvp
...
Konflikte gelöst (additiv): Benachrichtigungstexte (Zeiterfassung + Planung, JSON zusammengeführt),
Event-Typen, Navigation, Empfänger-Felder, handle-event (reason inkl. rejectionReason + Planungsfelder),
Smoke-Prüfungen (Teamleiter: Zeiten + Planung).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-15 10:15:47 +02:00
msolarczek and Claude Opus 5
604f2bfdc5
L13 Planung: Datenmodell (Kolonnenkapazität, Dauer, Geocoding-Cache) und Planungsregeln
...
Migration 20260915120000_planung (nur Spalten): Team.dailyCapacityMinutes/workingDays, OrderType.defaultDurationMinutes (+ Backfill Standardarten), WorkOrder.plannedDurationMinutes, Site.geocodedAt/geocodeStatus/geocodeQuery. Client-sichere Regeln: Haversine, Tage/Werktage, Dauer, Kolonnenkapazität, Konflikte inkl. Hinweis crew_incomplete, Vereinigung von Arbeitssegmenten, Fahrzeitschätzung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-15 10:13:18 +02:00
msolarczek and Claude Opus 5
03a2ccab4f
L12 Zeiterfassung: Datenmodell, Rechte und Events für die Zeitfreigabe
...
Migration zeiterfassung_freigabe (TimeEntry source/approvalStatus/pendingChange,
WorkSession.manual), Rechte field:record_own_time und time:approve,
PII approvedById, Events time.approval_requested/approved/rejected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-15 09:29:20 +02:00
msolarczek and Claude Opus 5
5f08df324f
L10b Betrieb & Aufräumen: Migrationen clientId je Mandant und KI-Token-Kontingent
...
- 20260915090000_betrieb_client_id_per_tenant (Aufräumpunkt f, L8 offener Punkt 6): globale
Unique-Indizes auf client_id (material_usages, work_sessions, time_entries, activity_notes,
photos, voice_notes, reports, signatures) → @@unique([tenantId, clientId]). Offline-IDs sind nur
je Mandant eindeutig; ein Replay derselben ID in einem anderen Mandanten scheiterte bisher mit
internem Fehler. Keine neuen Tabellen.
- 20260915091000_betrieb_ai_token_limit (Aufräumpunkt k): tenant_settings.ai_monthly_token_limit
(NULL = Plattform-Vorgabe AI_MONTHLY_TOKEN_LIMIT, 0 = unbegrenzt). Keine neue Tabelle.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 18:19:19 +02:00
msolarczek and Claude Opus 5
ff5c57f276
L9 Lotse – KI-Assistent: Transkription, Berichtsentwurf, Vollständigkeitsprüfung, Freigabeprinzip (Services)
...
- OpenAI-kompatible Transkription + Processor transcription (done/failed/disabled, AiGeneration, Notiz aus Sprachnotiz)
- Claude-Lotse (strukturierte Ausgabe, Refusal/Fallback), Datenminimierung, Vorschläge in content.lotse
- Vollständigkeitsprüfung (Regeln + KI-Hinweise mit Deep-Link), Einstellungen, KI-Protokoll
- Freigabeprinzip: Submit eines Lotse-Entwurfs nur mit Prüfbestätigung (serverseitig)
- Migration lotse_address_form (TenantSettings)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 17:19:38 +02:00
msolarczek and Claude Opus 5
b8b8bddefe
Fundament: Audit mit IP/User-Agent, Mail-Absender je Mandant
...
- Migration audit_request_context: ip_address, user_agent an audit_logs (Spec §26)
- writeAuditLog/writePlatformAudit erfassen IP (X-Forwarded-For) und User-Agent
aus dem Request; außerhalb eines Requests (Worker/Skripte) null
- Audit-Viewer liest die neuen Spalten statt Heuristik aus before/after
- deliverMail nutzt Anzeigename und Reply-To aus TenantSettings (Spec §33.2);
Absenderadresse bleibt Plattform-Domain (SPF/DKIM), Header-Injection bereinigt
Gate: tsc, lint, build, 24/24 Tests grün.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 12:20:41 +02:00
msolarczek and Claude Opus 5
7b37c41a83
L6 Benachrichtigungen & Audit: Empfängerregeln, In-App-Benachrichtigungen und Craftvia-Mails
...
- handleEvent (Signatur unverändert) löst alle 17 Domain-Events auf: Team/Assignees,
Backoffice (read_all + report:approve), Teamleiter-Freigaben, Ersteller, Abrechnung,
Notdienst, Import, Sync; Akteur ausgenommen, alle IDs über ctx.db neu aufgelöst.
- In-App-Notification über ctx.db (ungelesene gleiche Meldung wird aufgefrischt),
E-Mail über enqueueMail mit dedupeKey event:entity:user (+ optional occurrenceId),
Opt-out je Typ, Notdienst als Pflichtmail, feste Empfänger ohne Doppelmail.
- Mail-Templates craftvia_* (de/en) inkl. Notdienst-Format Spec §19.4 und Craftvia-Fußzeile.
- Migration tenant_mail_settings: mailFromName, mailReplyTo, emergencyRecipients,
billingRecipients an tenant_settings (keine neue Tabelle).
- Texte aus messages/{de,en}/notifications.json.
- Test scripts/test-benachrichtigungen-events.ts (63 Prüfungen).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 12:11:53 +02:00
msolarczek and Claude Opus 5
bf4456718e
Architektur: Craftvia-Domänenmodell, Verträge und Team-Schnitte
...
- Migration 0002_craftvia_domain: 27 Fachtabellen inkl. RLS (enable_tenant_rls)
- TENANT_MODELS (db.ts, backup/topology.ts) um alle Fachmodelle ergänzt
- moduleGuard liefert DB-autoritative Rechte; ServiceCtx für Domänen-Services
- Verträge: Statusmaschine, Events, Nummernkreise, Sichtbarkeits-Scopes,
Job-Queues + Worker, KI-Provider-Interfaces, Sync-Envelope
- docs/craftvia/ARCHITEKTUR.md mit Lanes, Ownership und DoD
Gate: tsc, lint, build, 22/22 Tests grün.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 11:49:21 +02:00
msolarczek and Claude Opus 5
8491c7f173
Fundament: ISMS-Module entfernt; Craftvia-Rollen, Module, Navigation, i18n-Split
...
- ISMS-Routen, Actions, Server-/Lib-Code, Komponenten, Prisma-Modelle, Seeds,
Importer, Skripte und ISMS-Tests entfernt (Fundament bleibt: Auth, Identity,
MFA/WebAuthn, RBAC, Audit, Mail, Storage, Backup/DSGVO, Plattform-Admin)
- Schema auf Fundament-Modelle reduziert; TenantSettings generisch (+phone/email)
- TENANT_MODELS (db.ts, backup/topology.ts) und PII-Felder ausgedünnt
- RBAC: Rollen tenant-admin/backoffice/team-lead/technician + Craftvia-Permissions
- Modul-Katalog (customers, sites, teams, work_orders, imports, field, reports,
emergency, documents, notifications, lotse) + Navigation aus src/lib/nav.ts
- Modul-Routen mit requireModule-Layout und Platzhalterseite
- Message-Katalog je Namespace (messages/<locale>/<namespace>.json), fs-Loader
- check-module-guards: Modul-Key aus src/server/actions/<moduleKey>/
- Provisionierung, Admin-Konsole, Einstellungen, Files-Route, Mail entkoppelt
- Seed minimal (demo/demo2, Nutzer je Rolle); Fundament-Tests auf Role/
NotificationPreference-Fixtures umgestellt
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 11:35:44 +02:00
msolarczek and Claude Opus 5
c8e6f30a27
Basis: Certvia dev@a48c5fb als Fundament für Craftvia
...
CI / build-and-check (push) Canceled after 0s
CI / audit (push) Canceled after 0s
CI / sbom (push) Canceled after 0s
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-09-14 11:05:39 +02:00