Gutschriften Phase 3b/1: Gutschrift-PDF (pdfkit)

PDF-Erzeugung fuer Gutschriften mit Firmenstammdaten als Absender,
Empfaenger (Kunde+Adresse), Netto/USt/Brutto (bzw. ohne USt-Ausweis),
Sachwert/'Ware erhalten' bzw. Ueberweisungs-Bankverbindung,
Unterschriftsblock, Firmen-Fusszeile.

Endpoint POST /credit-notes/:id/pdf; 'PDF'-Button in CreditNotesSection
(erzeugen + im Tab oeffnen bzw. vorhandenes ansehen). PDF-Pfad wird bei
inhaltlicher Aenderung geleert -> Neu-Erzeugung. Download ueber
fileDownload (credit-notes subDir, Vertrags-Ownership).

Lokal verifiziert (valides %PDF, korrekte Betraege).

ZUGFeRD-XML-Embedding (PDF/A-3, EN 16931) folgt als Teil 2 mit
Validator-Pruefung.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-06 13:32:34 +02:00
co-authored by Claude Opus 4.8
parent 2c705272ea
commit 642fb05c76
7 changed files with 225 additions and 6 deletions
+12 -3
View File
@@ -129,9 +129,18 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
`/upload/credit-notes/:id/receipt`, fileDownload-Ownership ergänzt).
Nummernkreis-Verwaltung als Settings-Seite `/settings/credit-note-number-
range` mit Live-Vorschau. Frontend-Typen + `creditNoteApi`.
- **Offen:** Phase 3 (PDF + ZUGFeRD/PDF-A3, muss gegen ZUGFeRD-Validator
geprüft werden). USt-Einordnung (Vermittlung vs. Abschlussbonus) mit
Steuerberater klären Modell deckt beide über `vatRelevant` ab.
- **Phase 3a (erledigt):** `CompanyProfile` (Firmenstammdaten/Absender) +
Migration + Settings-Seite `/settings/company-profile`.
- **Phase 3b Teil 1 (erledigt):** Gutschrift-**PDF** (pdfkit) mit Absender
aus CompanyProfile, Empfänger, Netto/USt/Brutto, Sachwert/„Ware erhalten"
bzw. Überweisungs-Bankverbindung, Unterschriftsblock, Fußzeile. Endpoint
`POST /credit-notes/:id/pdf`, „PDF"-Button in der Section (Ansehen/Erzeugen).
PDF-Pfad wird bei inhaltlicher Änderung geleert (Neu-Erzeugung). Lokal
verifiziert (valides PDF).
- **Offen:** Phase 3b Teil 2 (ZUGFeRD-XML EN 16931, Typ 381, in PDF/A-3
einbetten **muss gegen ZUGFeRD-Validator** geprüft werden). USt-
Einordnung (Vermittlung vs. Abschlussbonus) mit Steuerberater klären
Modell deckt beide über `vatRelevant` ab.
- [x] **📄➕ Vertrag kopieren (neuer eigenständiger Vertrag aus Vorlage)** (2026-08-03)
- „Kopieren"-Button in der Vertragsansicht (`contracts:create`) → öffnet das