Files
craftvia/messages/de/billing.json
T
msolarczekandClaude Opus 5 ac2d857e26 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>
2026-09-15 10:35:38 +02:00

251 lines
10 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"crumb": "Abrechnung",
"title": "Abrechnungsübersicht",
"subtitle": "Abgeschlossene Aufträge, bestätigte Meilensteine und freigegebene Tagesberichte für die Buchhaltung. Keine Preise, keine Rechnungen.",
"hm": "{value} h",
"tabs": { "open": "Offen", "billed": "Abgerechnet", "voided": "Storniert" },
"filter": {
"title": "Filter",
"q": "Suche",
"qPlaceholder": "Auftragsnummer oder Kunde",
"from": "Zeitraum von",
"to": "Zeitraum bis",
"customer": "Kunde",
"team": "Team",
"kind": "Art",
"any": "Alle",
"apply": "Anwenden",
"reset": "Zurücksetzen"
},
"list": {
"noPermission": "Die Abrechnungsübersicht ist für Ihre Rolle nicht freigeschaltet.",
"empty": {
"open": "Nichts offen – alle Einträge sind abgerechnet.",
"billed": "Noch keine Einträge abgerechnet.",
"voided": "Keine stornierten Einträge."
},
"selectHint": "Einträge auswählen und gemeinsam drucken.",
"print": "Abrechnungsblätter drucken",
"select": "Auswahl",
"selectRow": "{number} auswählen",
"order": "Auftrag",
"customerSite": "Kunde / Objekt",
"section": "Art / Abschnitt",
"period": "Zeitraum",
"work": "Arbeitszeit",
"travel": "Fahrzeit",
"trips": "Anfahrten",
"material": "Material",
"readySince": "Bereit seit",
"billedAt": "Abgerechnet am",
"voidedAt": "Storniert am",
"pending": "{value} h offene Zeiten",
"invoice": "Rechnung {number}",
"pagination": "Seiten",
"prev": "Zurück",
"next": "Weiter",
"page": "Seite {page} von {pages}"
},
"kind": { "order_completion": "Auftragsabschluss", "milestone": "Meilenstein", "daily_report": "Tagesbericht" },
"status": { "open": "Offen", "billed": "Abgerechnet", "voided": "Storniert" },
"milestoneStatus": { "open": "Offen", "reached": "Erreicht gemeldet", "confirmed": "Bestätigt", "billed": "Abgerechnet" },
"detail": {
"back": "Zur Abrechnungsübersicht",
"title": "Abrechnungsblatt {number}",
"markBilled": "Als abgerechnet markieren",
"pdf": "PDF",
"print": "Druckansicht",
"changeInvoice": "Rechnungsnummer ändern",
"void": "Stornieren",
"openOrder": "Zum Auftrag",
"photos": "Fotos",
"report": "Bericht {number} · v{version}",
"done": {
"billed": "Als abgerechnet markiert. Die Aufstellung ist eingefroren, das PDF wird erstellt.",
"voided": "Storniert. Die Positionen sind wieder frei – hier ist der neue offene Eintrag.",
"invoice": "Rechnungsnummer gespeichert."
},
"pdfPending": "Das PDF-Abrechnungsblatt wird erstellt.",
"pdfRequest": "PDF erneut anstoßen",
"pdfRequested": "PDF-Erstellung angestoßen.",
"voidedInfo": "Storniert am {at} von {by}"
},
"bill": {
"title": "Als abgerechnet markieren",
"sub": "Die Rechnung stellt Ihre Buchhaltung außerhalb von Craftvia.",
"submit": "Abgerechnet",
"pending": "Wird gespeichert …",
"invoiceNumber": "Rechnungsnummer (optional)",
"invoiceHint": "Nummer aus Ihrer Buchhaltung, falls schon vorhanden.",
"pendingWarning": "{value} h offene Zeiten ({count}) sind noch nicht freigegeben und nicht enthalten.",
"confirmPending": "Trotzdem abrechnen – offene Zeiten bleiben außen vor",
"freezeHint": "Die Aufstellung wird eingefroren; enthaltene Zeiten und Materialien können kein zweites Mal abgerechnet werden."
},
"invoice": { "title": "Rechnungsnummer ändern", "submit": "Speichern" },
"void": {
"title": "Abrechnung stornieren",
"sub": "Zeiten und Material werden wieder frei, ein neuer offener Eintrag entsteht.",
"submit": "Stornieren",
"pending": "Wird storniert …",
"reason": "Grund"
},
"print": {
"back": "Zur Übersicht",
"count": "{count, plural, =1 {1 Abrechnungsblatt} other {# Abrechnungsblätter}}",
"print": "Drucken",
"empty": "Keine Einträge ausgewählt."
},
"tab": {
"milestones": "Meilensteine",
"milestonesHint": "Erreichte Meilensteine bestätigen – danach erscheinen sie in der Abrechnungsübersicht.",
"noMilestonesHint": "Ohne Meilensteine wird bei mehrtägigen Aufträgen jeder freigegebene Tagesbericht als Abschnitt abrufbar.",
"noMilestones": "Keine Meilensteine definiert.",
"reachedBy": "Erreicht gemeldet von {name} am {at}",
"confirmedBy": "Bestätigt von {name} am {at}",
"rejected": "Zuletzt abgelehnt: {reason}",
"up": "Nach oben",
"down": "Nach unten",
"delete": "Löschen",
"confirm": "Bestätigen",
"reject": "Ablehnen",
"rejectReason": "Grund der Ablehnung",
"add": "Meilenstein anlegen",
"newTitle": "Titel",
"newTitlePlaceholder": "z. B. Rohinstallation abgeschlossen",
"newDescription": "Beschreibung",
"records": "Abrechnungseinträge",
"noRecords": "Noch keine Abrechnungseinträge.",
"open": "Öffnen"
},
"mobile": {
"title": "Meilensteine",
"rejected": "Vom Büro abgelehnt: {reason}",
"waiting": "Gemeldet – wartet auf Bestätigung durch das Büro.",
"queued": "Gespeichert – wird übertragen, sobald Verbindung besteht.",
"sent": "Erreicht gemeldet.",
"note": "Notiz",
"notePlaceholder": "Notiz (optional)",
"reachAria": "{title} als erreicht melden",
"confirmReach": "Jetzt melden",
"reach": "Erreicht melden",
"cancel": "Abbrechen"
},
"sheet": {
"title": "Abrechnungsblatt",
"dailyReportOf": "Tagesbericht vom {date}",
"period": "Zeitraum",
"status": "Status",
"invoiceNumber": "Rechnungsnummer",
"noAccounting": "Aufstellung für die Buchhaltung – keine Rechnung, ohne Preise."
},
"section": {
"order": "Auftragsdaten",
"time": "Zeiten",
"trips": "Anfahrten",
"material": "Material",
"texts": "Zusatzleistungen, Abweichungen, offene Restarbeiten",
"reports": "Berichte und Unterschrift"
},
"field": {
"customer": "Kunde",
"customerNumber": "Kundennummer",
"billingAddress": "Rechnungsadresse",
"site": "Objekt",
"orderNumber": "Auftragsnummer",
"externalOrderNumber": "Externe Auftragsnummer",
"offerNumber": "Angebotsnummer",
"title": "Auftrag",
"orderType": "Auftragsart",
"billingType": "Abrechnungsart",
"team": "Team",
"section": "Abschnitt",
"workDates": "Einsatztage",
"billedAt": "Abgerechnet",
"billingNotes": "Abrechnungshinweise des Kunden"
},
"billingType": { "fixed": "Festpreis", "time_material": "Nach Aufwand", "maintenance_contract": "Wartungsvertrag", "warranty": "Gewährleistung" },
"time": {
"hm": "{value} h",
"empty": "Keine freigegebenen Zeiten in diesem Abschnitt.",
"person": "Person",
"work": "Arbeit",
"travel": "Fahrzeit",
"materialProcurement": "Materialbeschaffung",
"total": "Summe",
"breaks": "Pausen (Info)",
"manual": "davon manuell nachgetragen (freigegeben): {value} h",
"sum": "Gesamt",
"breaksInfo": "Fahrzeit = Anfahrt + Rückfahrt. Pausen sind nur zur Information aufgeführt und nicht in den Summen enthalten.",
"pendingHint": "{value} h offen ({count} Einträge), noch nicht freigegeben – nicht enthalten.",
"runningHint": "Eine Zeit läuft noch und ist nicht enthalten."
},
"trips": {
"count": "{count, plural, =0 {Keine Anfahrt} =1 {1 Anfahrt} other {# Anfahrten}}",
"rule": "Gemeinsame Anfahrt einer Kolonne zählt als eine Fahrt."
},
"material": {
"name": "Bezeichnung",
"articleNumber": "Art.-Nr.",
"quantity": "Menge",
"planned": "Geplant",
"status": "Status",
"reason": "Abweichungsgrund",
"undocumented": "Nicht erfasst",
"empty": "Kein Material in diesem Abschnitt.",
"used": "Verwendetes Material",
"additional": "Zusätzlich verwendetes Material",
"notUsed": "Nicht verwendete Planpositionen",
"notUsedInfo": "Nur zur Information."
},
"materialStatus": { "fully_used": "Vollständig verwendet", "partially_used": "Teilweise verwendet", "not_used": "Nicht verwendet", "additional": "Zusätzlich" },
"texts": {
"fromReport": "({number})",
"empty": "Keine Angaben in den Berichten.",
"additionalWork": "Zusatzleistungen",
"deviations": "Abweichungen",
"openItems": "Offene Restarbeiten"
},
"reports": {
"empty": "Kein freigegebener Bericht in diesem Abschnitt.",
"number": "Bericht",
"type": "Art",
"date": "Datum",
"approvedAt": "Freigegeben",
"signature": "Unterschrift",
"noSignature": "Keine Unterschrift"
},
"reportType": { "daily": "Tagesbericht", "completion": "Abschlussbericht" },
"outcome": { "signed": "Unterschrieben", "customer_absent": "Kunde nicht anwesend", "refused": "Unterschrift verweigert", "later": "Wird nachgereicht", "not_required": "Nicht erforderlich" },
"pdf": {
"documentTitle": "Abrechnungsblatt {number} – {kind}",
"page": "Seite {page} von {pages}",
"recordId": "Eintrag-ID",
"created": "Erstellt"
},
"errors": {
"not_found": "Nicht gefunden oder keine Berechtigung.",
"forbidden": "Dafür fehlt die Berechtigung.",
"invalid": "Eingaben prüfen.",
"conflict": "Der Eintrag wurde inzwischen geändert. Seite neu laden.",
"blocked": "Noch nicht möglich.",
"internal": "Vorgang nicht möglich.",
"validation_failed": "Pflichtfelder prüfen.",
"billing_record_not_found": "Abrechnungseintrag nicht gefunden.",
"billing_record_not_open": "Der Eintrag ist nicht mehr offen.",
"billing_record_not_billed": "Der Eintrag ist nicht abgerechnet.",
"pending_time_entries": "Es gibt noch offene Zeiten. Bitte bestätigen, dass sie nicht enthalten sind.",
"positions_already_billed": "Einige Positionen wurden inzwischen anders abgerechnet. Seite neu laden.",
"milestone_not_found": "Meilenstein nicht gefunden.",
"milestone_not_open": "Nur offene Meilensteine können geändert werden.",
"milestone_not_confirmable": "Dieser Meilenstein kann nicht bestätigt werden.",
"milestone_not_reached": "Nur gemeldete Meilensteine können abgelehnt werden.",
"not_editable": "Der Auftrag kann in diesem Status nicht mehr geändert werden.",
"work_order_not_found": "Auftrag nicht gefunden.",
"work_order_status": "Für diesen Auftrag ist das nicht mehr möglich.",
"transition_blocked": "Der Auftragsstatus kann nicht zurückgesetzt werden – es fehlen Angaben.",
"transition_forbidden": "Diesen Statuswechsel dürfen Sie nicht ausführen.",
"reason_required": "Bitte einen Grund angeben.",
"version_conflict": "Der Auftrag wurde inzwischen geändert. Seite neu laden."
}
}