feat(accounting): tax window shows all costs (incoming invoices + expenses) alongside revenue

Einnahmen-Ausgaben view for the Milchbüchlein/simple-accounting case:
- taxReportService.getTaxReport now returns a cost side (loadCosts:
  incoming invoices + internal expenses, company- or event-booked,
  schema-guarded) plus a summary (income / costs / result, VAT payable)
- declined/duplicate costs excluded; re-billed costs kept (matching
  re-bill revenue is counted, so the net is correct)
- CSV + PDF exports gain a Costs section and an income/costs/result
  summary; pdf-i18n keys added for all 6 locales (fr/nl/pt/ru machine —
  flag for native review)
- frontend tax page renders the summary card, a costs table (company
  vs event), and a 'verify with Treuhänder' disclaimer
- tax-report tests cover the cost aggregation + zeroed summary when the
  accounting tables are absent; adminCrmAuth test enables the accounting
  master flag the route now requires

fr/nl/pt/ru strings are machine-generated and need native review.
This commit is contained in:
Luca
2026-06-11 21:09:13 +02:00
parent 2e8e4a0f86
commit 545ef334f4
9 changed files with 701 additions and 16 deletions
+21 -1
View File
@@ -3769,6 +3769,25 @@
"grandTotalVat": "Gesamt MwSt.",
"grandTotalGross": "Gesamt Brutto",
"cancelledFootnote": "{{count}} stornierte Rechnung(en) — Beträge nicht in den Summen enthalten (für lückenlose Nummernfolge dargestellt).",
"skontoTooltip": "Mit Skonto bezahlt",
"costsTitle": "Kosten (Eingangsrechnungen + Spesen)",
"costsDisclaimer": "Diese Einnahmen-Ausgaben-Übersicht ist eine Orientierungshilfe für Ihre Aufzeichnungen (Milchbüchleinrechnung). Vorsteuerabzug und Ergebnis hängen von der steuerlichen Behandlung jeder Kostenposition ab — vor der Einreichung mit Ihrem Treuhänder / der Steuerverwaltung prüfen.",
"summary": {
"title": "Einnahmen / Ausgaben",
"income": "Einnahmen",
"costs": "Ausgaben",
"result": "Ergebnis",
"vatPayable": "MWST-Zahllast (Umsatz- Vorsteuer)"
},
"cost": {
"source": "Art",
"sourceIncoming": "Eingang",
"sourceExpense": "Spese",
"supplier": "Lieferant / Beschreibung",
"taxTreatment": "Steuerliche Behandlung",
"company": "Unternehmen",
"total": "Summe Kosten"
},
"col": {
"date": "Datum",
"invoice": "Rechnung",
@@ -3777,7 +3796,8 @@
"vatRate": "MwSt %",
"net": "Netto",
"vat": "MwSt.",
"total": "Brutto"
"total": "Brutto",
"skonto": "Skonto"
}
},
"quotes": {
+21 -1
View File
@@ -3769,6 +3769,25 @@
"grandTotalVat": "Total VAT",
"grandTotalGross": "Total gross",
"cancelledFootnote": "{{count}} cancelled invoice(s) — amounts excluded from totals (shown for audit-trail continuity).",
"skontoTooltip": "Paid with Skonto",
"costsTitle": "Costs (incoming invoices + expenses)",
"costsDisclaimer": "This income/expense overview is a guideline for your records (Einnahmen-Ausgaben-Rechnung). VAT reclaimability and the result figure depend on each costs tax treatment — verify with your Treuhänder / tax authority before filing.",
"summary": {
"title": "Income / costs",
"income": "Income",
"costs": "Costs",
"result": "Result",
"vatPayable": "VAT payable (output input)"
},
"cost": {
"source": "Type",
"sourceIncoming": "Incoming",
"sourceExpense": "Expense",
"supplier": "Supplier / description",
"taxTreatment": "Tax treatment",
"company": "Company",
"total": "Total costs"
},
"col": {
"date": "Date",
"invoice": "Invoice",
@@ -3777,7 +3796,8 @@
"vatRate": "VAT %",
"net": "Net",
"vat": "VAT",
"total": "Gross"
"total": "Gross",
"skonto": "Skonto"
}
},
"quotes": {