L14 Abrechnungsübersicht: Services für Einträge, Aufstellung, Abrechnen/Stornieren, Meilensteine und PDF

syncBillingCandidates (idempotent, Event-Hook für work_order.released_for_billing und report.approved), Aufstellung ohne Preise (nur freigegebene Zeiten, Fahrzeit getrennt, Pausen informativ, Anfahrten-Zählung, Material), markBilled mit eingefrorenem Snapshot und Positionszuordnung, voidBilling mit Grund und neuem offenen Eintrag (billed → released_for_billing nur über applyTransition-Option billingVoid), Meilenstein-Flow mit Events, Job billing-pdf (Dokument other/backoffice_only), Sync-Op milestone.reach.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 10:35:38 +02:00
co-authored by Claude Opus 5
parent 6358d5762c
commit ac2d857e26
27 changed files with 2179 additions and 5 deletions
+16 -1
View File
@@ -48,7 +48,10 @@
"sync_failed": "Sync failed",
"time_approval_requested": "Time to approve",
"time_approved": "Time approved",
"time_rejected": "Time rejected"
"time_rejected": "Time rejected",
"milestone_reached": "Milestone reached",
"milestone_confirmed": "Milestone confirmed",
"milestone_rejected": "Milestone rejected"
},
"events": {
"work_order_assigned": {
@@ -130,6 +133,18 @@
"time_rejected": {
"title": "Time rejected: {number}",
"message": "{actor} rejected your time for {number}: {reason}"
},
"milestone_reached": {
"title": "Milestone reached: {number}",
"message": "{actor} reports a milestone of {number} as reached. Please confirm."
},
"milestone_confirmed": {
"title": "Milestone confirmed: {number}",
"message": "{actor} confirmed your reported milestone of {number}."
},
"milestone_rejected": {
"title": "Milestone rejected: {number}",
"message": "{actor} rejected your reported milestone of {number}: {reason}"
}
},
"fallback": {