Commit Graph

6 Commits

Author SHA1 Message Date
dfuhrmann3 27f6d8bab7 fix(cii): format ZUGFeRD BilledQuantity like UBL (no trailing 1.0000)
Ganze Mengen erscheinen als 1.00 statt 1.0000; gebrochene Mengen (z.B. 1.375
Tage) bleiben vollstaendig erhalten. Vereinheitlicht mit dem UBL-Generator.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 16:35:19 +02:00
dfuhrmann3 3b3a2dce90 feat: extend regex parser for IT-Systemhaus service periods, contract types, and serial numbers
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 15:16:30 +02:00
dfuhrmann3 0dd9916079 feat: add document-level discount (BT-21) and Skonto payment terms (BT-20) 2026-07-07 15:10:35 +02:00
dfuhrmann3 d7b851ae36 feat: support mixed VAT rates per line (BG-23) in both XML generators 2026-07-07 15:03:09 +02:00
dfuhrmann3 6ecd59e5ea feat: make payment means code (BT-81) dynamically selectable 2026-07-07 14:54:17 +02:00
dfuhrmann3 ae986b4f3f refactor: extract pure invoice logic into invoice_logic.py for testability
Move all dependency-free business logic (metadata schema, rounding/parsing
helpers, item extraction, and the XRechnung/ZUGFeRD XML generators plus the
PDF/A output-intent helpers) out of main.py into a new invoice_logic.py that
imports only pydantic and pikepdf. This makes the logic unit-testable without
a Streamlit runtime. Pure cut-and-paste, no behavior change; main.py now
imports these names from invoice_logic instead of defining them locally.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 13:43:13 +02:00