4.7 KiB
4.7 KiB
Buchhaltung Implementation Plan — 2026-03-30
Priority Order
- P1: Transfers (bank → bank) — needs migration first
- P2: BankkontoDetail page — depends on P1 migration for transfer direction
- P3: Konto-Typen + Einstellungen UI — pure frontend, self-contained
- P4: Bestellungen integration — einzelpreis validation + auto-pending
- P5: Haushaltsplan pages — large feature
- P6: PDF Export — last, all data endpoints stable
Key Findings
typ='transfer'is NOT in the current DB CHECK constraint — migration requiredeinzelpreisonbestellpositionenalready exists (migration 038) — no schema change for P4buchhaltung_planungandbuchhaltung_planpositionentables exist (migrations 075/077), 2-level hierarchy (not 3-level as in original design sketch)- All konto-typen and einstellungen backend routes exist — P3 is frontend-only
- Split-booking dialog and Freigaben-from-plan flow (design sections 4/8) are deferred
P1: Transfers [x]
Migration 082_buchhaltung_transfer.sql
- Extend CHECK: add
'transfer'totypenum - Add column
transfer_ziel_bankkonto_id INT REFERENCES buchhaltung_bankkonten(id) ON DELETE SET NULL
Backend
buchhaltung.service.ts— addcreateTransfer(data, userId): DB transaction creating two rows (debit on source, credit on target)buchhaltung.controller.ts— addcreateTransferhandlerbuchhaltung.routes.ts—POST /transfers- Update
listTransaktionenJOIN to includetransfer_ziel_bezeichnung
Frontend
buchhaltung.types.ts— add'transfer'toTransaktionTyp; addtransfer_ziel_bankkonto_id?,transfer_ziel_bezeichnung?toTransaktion; addTransferFormDatabuchhaltung.ts(service) — addcreateTransferAPI methodBuchhaltung.tsx— addTransferDialogcomponent + "Transfer" button in TransaktionenTab toolbar; show Transfer chip in typ column
P2: BankkontoDetail Page [x]
Backend
buchhaltung.service.ts— addgetBankkontoStatement(id, filters): queries transactions for one bank account, computes running balance per row (einnahme=+, ausgabe=−, transfer direction fromtransfer_ziel_bankkonto_id)buchhaltung.controller.ts— addgetBankkontoStatementhandlerbuchhaltung.routes.ts—GET /bankkonten/:id/transaktionen
Frontend
buchhaltung.types.ts— addBankkontoStatementinterfacebuchhaltung.ts— addgetBankkontoStatement(id, filters?)API method- New file
BuchhaltungBankkontoDetail.tsx— date range filter, summary cards, table with running balance column App.tsx— add route/buchhaltung/bankkonto/:idBuchhaltung.tsx(KontenTab, Bankkonten sub-tab) — make table rows clickable → navigate to detail
P3: Einstellungen UI [x]
Frontend only
buchhaltung.ts— addgetEinstellungen+setEinstellungenAPI methodsBuchhaltung.tsx— add 4th sub-tab "Einstellungen" in KontenTab:- KontoTypen CRUD table + add/edit dialog
- Default alert threshold TextField + save button
- Gate with
hasPermission('buchhaltung:manage_settings')
P4: Bestellungen Integration [x]
Backend
bestellung.service.ts— blockvollstaendig/abgeschlossentransition if any position has null/zeroeinzelpreisbuchhaltung.service.ts— addcreatePendingFromBestellung(bestellungId, userId): non-fatal, finds open Haushaltsjahr, inserts pending ausgabe transactionbestellung.service.ts— callcreatePendingFromBestellungafter status →abgeschlossen
Frontend
BestellungDetail.tsx— show warning Alert when advancing toabgeschlossenbut prices missing
P5: Haushaltsplan [x]
Backend
buchhaltung.service.ts— Planung CRUD + Planposition CRUD +createHaushaltsjahrFromPlanbuchhaltung.controller.ts— handlers for allbuchhaltung.routes.ts— full set of Planung + Planposition routes +POST /planung/:id/create-haushaltsjahr
Frontend
buchhaltung.types.ts— addPlanung,Planposition,PlanungDetail, form data interfacesbuchhaltung.ts— add all Planung API methods- New file
Haushaltsplan.tsx— list view + detail view, position inline editing, "Haushaltsjahr erstellen" action App.tsx— routes/haushaltsplanand/haushaltsplan/:idSidebar.tsx— add Haushaltsplan sub-item under Buchhaltung group
P6: PDF Export (client-side jsPDF) [x]
Frontend
Buchhaltung.tsx(UebersichtTab) — addgeneratePdf()using jsPDF +fetchPdfSettings()pattern- Cover: year name + totals summary
- Page 2+: konten tree table with budget/spent/utilization
- Page 3+: full transaction list sorted by date
- "PDF exportieren" button gated by
buchhaltung:export