feat(accounting): Layer A frontend — chart of accounts CRUD + Treuhänder export UI

- ledger.service.ts: accounts/VAT-codes/mappings CRUD + export client
- ChartOfAccountsPage: full CRUD for the Swiss/LI KMU chart + MWST codes,
  category→account mapping, default/system accounts + tax-treatment/rate→VAT
  maps, with a 'guideline only' note
- LedgerExportPage: period + currency + target tool (generic/Banana/bexio)
  → collective-journal CSV download, with accrual-only + Treuhänder disclaimer
- AccountingLayout: 'Treuhänder export' (taxReport flag) + 'Chart of accounts'
  (accounting flag) sub-nav entries; App routes wired
- en/de translations (accounting.taxTreatment.* enum + ledger.* namespace)

de/en authored natively; no machine-translated locales touched here.
This commit is contained in:
Luca
2026-06-12 00:48:39 +02:00
parent 03cc250b47
commit 7e0098edcd
7 changed files with 687 additions and 4 deletions
+59 -1
View File
@@ -3450,7 +3450,15 @@
"subnav": {
"incomingInvoices": "Eingangsrechnungen",
"expenses": "Aufwände",
"taxReport": "Steuer"
"taxReport": "Steuer",
"export": "Treuhänder-Export",
"chartOfAccounts": "Kontenplan"
},
"taxTreatment": {
"domestic": "Inland (mit MWST)",
"reverse_charge_service": "Bezugsteuer (Dienstleistungen)",
"foreign_vat_non_reclaimable": "Ausländische MWST (nicht abziehbar)",
"import_goods": "Wareneinfuhr"
},
"disposition": {
"rebill": "An Kunde weiterverrechnen",
@@ -3757,6 +3765,56 @@
}
}
},
"ledger": {
"intro": "Dient nur dem Treuhänder-Export — picpeak führt keine doppelte Buchhaltung. Der vorbelegte Kontenplan + die MWST-Codes folgen dem Schweizer/LI KMU-Kontenrahmen; passe sie an das Setup deines Treuhänders an.",
"settingsSaved": "Zuordnungen gespeichert.",
"saveDefaults": "Zuordnungen speichern",
"accountType": {
"asset": "Aktiven", "liability": "Passiven", "equity": "Eigenkapital", "revenue": "Ertrag", "expense": "Aufwand"
},
"vatDirection": {
"input": "Vorsteuer", "output": "Umsatzsteuer"
},
"defaults": {
"title": "Standard- & Systemkonten",
"none": "— keines —",
"ledger_account_debitoren": "Forderungen (Debitoren)",
"ledger_account_kreditoren": "Verbindlichkeiten (Kreditoren)",
"ledger_account_bank": "Bank",
"ledger_account_cash": "Kasse",
"ledger_account_default_revenue": "Standard-Ertragskonto",
"ledger_account_default_expense": "Standard-Aufwandkonto",
"ledger_account_mileage": "Kilometer-Konto",
"ledger_account_per_diem": "Spesenpauschalen-Konto",
"ledger_account_rebilled_revenue": "Weiterverrechnete Spesen (Ertrag)"
},
"vatMap": { "title": "MWST-Code nach steuerlicher Behandlung (Kosten)" },
"outputVatMap": { "title": "MWST-Code nach Umsatzsatz" },
"categoryMap": { "title": "Aufwandkategorie → Konto" },
"accounts": { "title": "Kontenplan" },
"vatCodes": { "title": "MWST-Codes" },
"account": {
"addTitle": "Konto hinzufügen", "editTitle": "Konto bearbeiten",
"number": "Kontonummer", "name": "Name", "type": "Art",
"confirmDelete": "Dieses Konto löschen?"
},
"vat": {
"addTitle": "MWST-Code hinzufügen", "editTitle": "MWST-Code bearbeiten",
"code": "Code", "name": "Name", "rate": "Satz %", "direction": "Richtung",
"account": "MWST-Konto", "noAccount": "— keines —", "confirmDelete": "Diesen MWST-Code löschen?"
},
"export": {
"title": "Treuhänder-Export",
"intro": "Lade das Sammeljournal (Erträge + Kosten als periodengerechte Buchungssätze mit Konto- und MWST-Codes) zum Import in die Buchhaltungssoftware deines Treuhänders herunter.",
"format": "Zielsoftware",
"format_generic": "Generisch (alle Spalten)",
"format_banana": "Banana Buchhaltung",
"format_bexio": "bexio",
"download": "CSV herunterladen",
"failed": "Export fehlgeschlagen.",
"disclaimer": "Nur periodengerecht (Belegdaten) — Zahlungen/Bankbewegungen sind nicht enthalten. Konto- + MWST-Codes folgen deiner Kontenplan-Zuordnung. Den Import vor der Einreichung immer mit dem Treuhänder prüfen."
}
},
"taxReport": {
"title": "Steuerliste",
"intro": "Periodenbezogene Umsatzliste mit Netto- und MwSt-Aufschlüsselung, gruppiert nach MwSt-Satz. Stornierte Rechnungen bleiben für die lückenlose Nummernfolge sichtbar, sind aber nicht in den Summen enthalten.",
+59 -1
View File
@@ -3450,7 +3450,15 @@
"subnav": {
"incomingInvoices": "Incoming invoices",
"expenses": "Expenses",
"taxReport": "Tax"
"taxReport": "Tax",
"export": "Treuhänder export",
"chartOfAccounts": "Chart of accounts"
},
"taxTreatment": {
"domestic": "Domestic (with VAT)",
"reverse_charge_service": "Reverse charge (services)",
"foreign_vat_non_reclaimable": "Foreign VAT (non-reclaimable)",
"import_goods": "Import of goods"
},
"disposition": {
"rebill": "Re-bill to client",
@@ -3757,6 +3765,56 @@
}
}
},
"ledger": {
"intro": "Used only to produce the Treuhänder export — picpeak does not keep double-entry books. The seeded chart + VAT codes follow the Swiss/LI KMU-Kontenrahmen; adjust them to match your Treuhänders setup.",
"settingsSaved": "Mappings saved.",
"saveDefaults": "Save mappings",
"accountType": {
"asset": "Asset", "liability": "Liability", "equity": "Equity", "revenue": "Revenue", "expense": "Expense"
},
"vatDirection": {
"input": "Input (Vorsteuer)", "output": "Output (Umsatzsteuer)"
},
"defaults": {
"title": "Default & system accounts",
"none": "— none —",
"ledger_account_debitoren": "Accounts receivable (Debitoren)",
"ledger_account_kreditoren": "Accounts payable (Kreditoren)",
"ledger_account_bank": "Bank",
"ledger_account_cash": "Cash",
"ledger_account_default_revenue": "Default revenue account",
"ledger_account_default_expense": "Default expense account",
"ledger_account_mileage": "Mileage account",
"ledger_account_per_diem": "Per-diem account",
"ledger_account_rebilled_revenue": "Re-billed expenses (revenue)"
},
"vatMap": { "title": "VAT code by tax treatment (costs)" },
"outputVatMap": { "title": "VAT code by revenue rate" },
"categoryMap": { "title": "Expense category → account" },
"accounts": { "title": "Chart of accounts" },
"vatCodes": { "title": "VAT codes" },
"account": {
"addTitle": "Add account", "editTitle": "Edit account",
"number": "Account number", "name": "Name", "type": "Type",
"confirmDelete": "Delete this account?"
},
"vat": {
"addTitle": "Add VAT code", "editTitle": "Edit VAT code",
"code": "Code", "name": "Name", "rate": "Rate %", "direction": "Direction",
"account": "VAT account", "noAccount": "— none —", "confirmDelete": "Delete this VAT code?"
},
"export": {
"title": "Treuhänder export",
"intro": "Download the collective journal (revenue + costs as accrual postings with account and VAT codes) for import into your Treuhänders accounting software.",
"format": "Target tool",
"format_generic": "Generic (all columns)",
"format_banana": "Banana Accounting",
"format_bexio": "bexio",
"download": "Download CSV",
"failed": "Export failed.",
"disclaimer": "Accrual basis only (document dates) — payments/bank movements are not included. Account + VAT codes follow your Chart-of-accounts mapping. Always review the import with your Treuhänder before filing."
}
},
"taxReport": {
"title": "Tax report",
"intro": "Period-scoped revenue list with net + VAT breakdown grouped by VAT rate. Cancelled invoices stay visible for audit-trail continuity but are excluded from totals.",