Darstellung
09 – Rapport (Baustellenrapport)
Reifegrad: 🟢 produktiv · Schicht: rapports + rapport_entries + rapport_materials, @work7/domain (Rapport-Funktionen), src/lib/rapport-draft-guard.ts, src/app/rapport, src/app/api/rapports/*, src/templates/rapport-template.html
Zweck
Tägliche/auftragsbezogene Leistungsnachweise von der Baustelle: erbrachte Arbeitsstunden (je Mitarbeiter/Tätigkeit) und verbrauchtes Material – als Grundlage für die Abrechnung nach Aufwand (Regie).
Datenmodell
rapports:rapport_number(UNIQUE),completed(BOOLEAN – Abschluss-Flag),customer_id,project_id,created_by_user_id, Signatur (signed_pdf,signed_at,signed_by_name/_email),billing_status∈ {unbilled,partial,billed} (Migration 006).rapport_entries: Arbeitszeile –date,job_category,hours,employee_user_id.rapport_materials: Materialzeile –name,quantity,unit,notes.
Geschäftslogik (@work7/domain)
listRapports, getRapport, createRapport, addRapportEntry, addRapportMaterial, updateRapport, completeRapport, deleteRapport, sendRapportEmail.
- Draft-Guard:
assertRapportDraft(completed)+src/lib/rapport-draft-guard.tsverhindern Änderungen an abgeschlossenen Rapporten (completed=true→ gesperrt).completeRapportschließt ab. - E-Mail-Versand:
sendRapportEmailrendert das Rapport-PDF und versendet es (an Kunde).
API-Endpunkte
| Endpoint | Funktion |
|---|---|
GET/POST /api/rapports | Liste / anlegen |
GET/PUT/DELETE /api/rapports/[id] | Detail / ändern / löschen |
GET/POST /api/rapports/[id]/entries · /entries/[entryId] | Arbeitszeilen |
GET/POST /api/rapports/[id]/materials · /materials/[materialId] | Materialzeilen |
POST /api/rapports/[id]/send-email | Rapport per E-Mail senden |
GET /api/pdf/rapport/[id] | Rapport-PDF |
… /api/signing/rapport/[id] | digitale Signatur (DocuSign, siehe 14-docusign-signing) |
Hinweis: Es existiert zusätzlich eine ältere Singular-Route
/api/rapport/route.ts; der aktuelle Funktionsumfang liegt unter/api/rapports/*(Plural).
Verzahnung mit anderen Features
- Zeiterfassung → Rapport: Projektzeiten aus
time_logswerden perimportProjectTimesToRapportalsrapport_entriesübernommen;time_logs.rapport_entry_idhält die 1:1-Verknüpfung (siehe 08-zeiterfassung). - Rapport → Rechnung:
POST /api/invoices/from-rapportserzeugt eine Rechnung aus einem oder mehreren Rapporten;invoice_rapport_linksdokumentiert die Zuordnung inkl.billing_percentage. Stunden werden überlabor_rates(job_category)bepreist (siehe 10-rechnungen-e-rechnung).billing_statuswird fortgeschrieben. - WhatsApp-Agent: Rapport-Entwürfe können per Sprache/Text auf der Baustelle entstehen – Capability-Stub
rapport-draft+ Draft-Store (siehe 11-whatsapp-agent).
UI
/rapport (Liste), /rapport/[id] (Detail mit Zeilen, Material, Abschluss, Versand, Signatur). Komponenten: src/components/rapports/*.
Bekannte Befunde / offene Punkte
- Abschluss-Logik basiert auf einem einfachen
completed-Flag (kein mehrstufiger Status). - Doppelte Route-Welt
rapport(Singular, legacy) vs.rapports(Plural, aktuell) – bei Aufräumarbeiten konsolidieren.