Gutschriften Phase 3a: Firmenstammdaten (Absender) fuer PDF/ZUGFeRD

Neues CompanyProfile-Modell (Einzel-Zeile) + Migration (IF NOT EXISTS):
Firmenname, Anschrift, USt-IdNr, Steuernummer, Handelsregister,
Geschaeftsfuehrer, Kontakt, IBAN/BIC/Bank. Fliesst spaeter in
Gutschrift-PDF + ZUGFeRD-Verkaeuferdaten ein.

Backend: Service (getOrCreate/update mit Feld-Whitelist), Controller,
Routes GET/PUT /api/company-profile (settings:read/update), auditiert.

Frontend: Settings-Seite 'Firmenstammdaten (Absender)'
(/settings/company-profile) mit Firma/Anschrift, Steuer/Register,
Kontakt/Bank. Typ + companyProfileApi + Menue-Eintrag.

Phase 3b (PDF + ZUGFeRD-Erzeugung) folgt darauf auf.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-06 13:19:36 +02:00
co-authored by Claude Opus 4.8
parent 9e38cb32f0
commit 2c705272ea
11 changed files with 279 additions and 1 deletions
@@ -0,0 +1,23 @@
-- Absender-/Firmenstammdaten (Einzel-Zeile) fuer Gutschrift-PDF + ZUGFeRD.
CREATE TABLE IF NOT EXISTS `CompanyProfile` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL DEFAULT '',
`street` VARCHAR(191) NOT NULL DEFAULT '',
`houseNumber` VARCHAR(191) NOT NULL DEFAULT '',
`postalCode` VARCHAR(191) NOT NULL DEFAULT '',
`city` VARCHAR(191) NOT NULL DEFAULT '',
`country` VARCHAR(191) NOT NULL DEFAULT 'DE',
`vatId` VARCHAR(191) NOT NULL DEFAULT '',
`taxNumber` VARCHAR(191) NOT NULL DEFAULT '',
`commercialRegister` VARCHAR(191) NOT NULL DEFAULT '',
`managingDirector` VARCHAR(191) NOT NULL DEFAULT '',
`email` VARCHAR(191) NOT NULL DEFAULT '',
`phone` VARCHAR(191) NOT NULL DEFAULT '',
`website` VARCHAR(191) NOT NULL DEFAULT '',
`iban` VARCHAR(191) NOT NULL DEFAULT '',
`bic` VARCHAR(191) NOT NULL DEFAULT '',
`bankName` VARCHAR(191) NOT NULL DEFAULT '',
`logoPath` VARCHAR(191) NULL,
`updatedAt` DATETIME(3) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+24
View File
@@ -1021,6 +1021,30 @@ model CreditNote {
@@index([contractId])
}
// Absender-/Firmenstammdaten (Einzel-Zeile). Fließen in Gutschrift-PDF und
// ZUGFeRD-XML (Verkäufer/Seller-Party) sowie in die Bankangaben ein.
model CompanyProfile {
id Int @id @default(autoincrement())
name String @default("")
street String @default("")
houseNumber String @default("")
postalCode String @default("")
city String @default("")
country String @default("DE") // ISO-2, für ZUGFeRD countryID
vatId String @default("") // USt-IdNr (DE...)
taxNumber String @default("") // Steuernummer
commercialRegister String @default("") // z.B. HRB 12345, Amtsgericht
managingDirector String @default("") // Geschäftsführer/Inhaber
email String @default("")
phone String @default("")
website String @default("")
iban String @default("")
bic String @default("")
bankName String @default("")
logoPath String?
updatedAt DateTime @updatedAt
}
// Nummernkreis für Gutschriften (Einzel-Zeile, in den Einstellungen
// verwaltbar). Nummer wird transaktional vergeben, damit keine Lücken/
// Doppelvergaben entstehen.