Initial version of the E-Invoice solution of JR IT Services

This commit is contained in:
2026-02-16 17:02:03 +01:00
commit e0c15fc7f2
36 changed files with 1407 additions and 0 deletions

120
Documentation.md Normal file
View File

@@ -0,0 +1,120 @@
# Documentation
## Resilienz & Logs
- YAML wird strikt validiert (Pydantic) -> frühzeitige, klare Fehler.
- Pro Run: `out/logs/run.log` (DEBUG-level File Log, inkl. Stacktraces).
- Mustang stdout/stderr wird ebenfalls geloggt.
## PDF Rendering
Priorität:
1) WeasyPrint (wenn installiert)
2) wkhtmltopdf (wenn vorhanden)
Wenn beides fehlt -> klarer Fehler.
## Combine + Validate (Mustang) standardmäßig aktiv
Combine:
`java -jar Mustang-CLI.jar --action combine --source invoice.pdf --source-xml factur-x.xml --out invoice.facturx.pdf --profile E`
Validate:
`java -jar Mustang-CLI.jar --no-notices --action validate --source invoice.facturx.pdf`
## YAML Schema
Siehe `examples/invoice.sample.yaml`
## Hinweis zum XML
Aktuell erzeugt `facturx.py` ein **minimal stabiles** EN16931 XML (Nummer/Datum/Währung/Gesamt).
Für maximale Empfänger-Kompatibilität erweitere `facturx.py` um Seller/Buyer/Lines/Tax breakdown etc.
## Init Command
`jr-einvoice init <invoice_dir>` erstellt:
- `invoice.yaml` (Vorlage)
- optional `assets/` Ordner (für Logos etc.)
- `.gitkeep` Dateien damit Git die Ordner behält
Damit kannst du pro Rechnung einen neuen Ordner anlegen und direkt editieren.
## Presets
- `presets/seller.default.yaml`: deine Standard-Seller- und Payment-Daten
- `presets/customers.yaml`: Kunden-Vorlagen (case-insensitive Keys)
Init merge order:
1) `examples/invoice.init.yaml` (Basis)
2) `presets/seller.default.yaml`
3) `presets/customers.yaml` (wenn --customer gesetzt)
4) Smart defaults (heutiges Datum, due_days, reference)
## Assets / Logo
`jr-einvoice init` kopiert standardmäßig `assets/logo.svg` nach `<invoice_dir>/assets/logo.svg`.
Das Template referenziert `assets/logo.svg` relativ WeasyPrint bekommt dafür `base_url=<invoice_dir>`.
## Setup Mustang
`jr-einvoice setup-mustang` lädt das Jar von Maven Central (repo1.maven.org) und prüft optional die `.sha1` Datei.
## Auto-Rechnungsnummer
Wenn du bei `init` **keine** `--invoice-number` angibst, aber `--invoices-root` setzt, dann wird die nächste Nummer vorgeschlagen.
Standard-Pattern: `YYYY-NNNN` (z.B. 2026-0007). Gesucht wird in Ordnernamen unter `--invoices-root`.
Implementierung: `jr_einvoice/invoice_number.py`.
## Customer Presets (Datei pro Kunde)
Bevorzugt: `presets/customers/<customer>.yaml`
Fallback: `presets/customers.yaml` (Map `customers:`)
## Mustang Update Check
`jr-einvoice mustang-update` liest Maven metadata und vergleicht mit `tools/mustang/VERSION.txt`.
Mit `--apply` wird die neueste Version geladen und installiert (inkl. optional SHA1-Check).
## Auto Folder Name
Mit `jr-einvoice init invoices --auto-folder --customer unicredit` wird ein Unterordner erzeugt:
`Rechnung_<invoice_number>_<customer>`
Sanitizing/slugging in `jr_einvoice/folder_naming.py`.
## Open Editor
Mit `--open` wird `invoice.yaml` nach dem Init in `$EDITOR` geöffnet.
Fallback-Reihenfolge: `code`, `codium`, `nano`, `vim`, `vi`.
## Script output
- `--print-path` prints the created folder path after the panel
- `--print-path-only` prints only the path (no rich output)
## Auto open
- `--open` opens unconditionally (needs an editor available)
- `--open-auto` opens only when a GUI session is detected (DISPLAY/WAYLAND_DISPLAY) and stdout is a TTY
## Generate artifact output
Options:
- `--print-artifacts`: prints paths after the rich OK output
- `--print-artifacts-only`: prints only the paths (one per line) in this order:
1) invoice.pdf
2) factur-x.xml
3) invoice.facturx.pdf
4) validation/validate_report.xml
5) out/logs/run.log
- `--json`: prints a JSON object with keys:
- invoice_dir, out_dir, invoice_pdf, facturx_xml, facturx_pdf, validate_report, log