Factory-Defaults: Export + Import von Stammdaten-Katalogen

Ein neues System um Stammdaten-Kataloge zwischen Installationen zu teilen –
explizit ohne Kundendaten, Verträge oder Einstellungen.

**Was wird exportiert:**
- Anbieter + zugehörige Tarife
- Kündigungsfristen
- Vertragslaufzeiten
- Vertragskategorien
- PDF-Auftragsvorlagen (JSON + PDF-Dateien + Feldzuordnungen)

**Was NICHT:**
- Kundendaten, Verträge, Dokumente, Emails, SMTP-Einstellungen
  → dafür gibt es den Datenbank-Backup

**Neue Einstellungsseite /settings/factory-defaults:**
- Zeigt Anzahl pro Kategorie (Anbieter, Tarife, Fristen, …)
- "Exportieren"-Button lädt ZIP herunter (manifest.json + JSONs + PDFs)
- Import-Anleitung inline

**Import-Script:**
- `npm run seed:defaults` (tsx scripts/seed-factory-defaults.ts)
- Liest alle JSON-Dateien aus backend/factory-defaults/*/*.json
- Merged mehrere Dateien automatisch pro Kategorie (unique-key gewinnt zuletzt)
- Upsertet idempotent → kann mehrfach ausgeführt werden
- Kopiert PDF-Vorlagen aus factory-defaults/pdf-templates/ nach uploads/pdf-templates/
- Alte PDF-Dateien werden beim Re-Import entsorgt

Backend:
- services/factoryDefaults.service.ts: collectFactoryDefaults() + exportFactoryDefaults()
- controllers/factoryDefaults.controller.ts: preview + export
- routes/factoryDefaults.routes.ts: GET /api/factory-defaults/preview + /export
- scripts/seed-factory-defaults.ts: CLI-Import-Script
- .gitignore: factory-defaults/* außer .gitkeep und README.md

Frontend:
- pages/settings/FactoryDefaults.tsx: Übersicht + Export-Button
- Settings-Karte „Factory-Defaults" im System-Abschnitt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 14:10:12 +02:00
parent 9d5412cef0
commit ad49b92ee9
13 changed files with 913 additions and 40 deletions
View File
+45
View File
@@ -0,0 +1,45 @@
# Factory Defaults
Dieser Ordner enthält **Stammdaten-Kataloge**, die beim Initialisieren einer neuen
OpenCRM-Installation automatisch eingespielt werden können.
## Was ist drin?
- `providers.json` Anbieter inkl. zugehöriger Tarife
- `cancellation-periods.json` Kündigungsfristen (z.B. "14 Tage", "1 Monat")
- `contract-durations.json` Vertragslaufzeiten (z.B. "12 Monate", "24 Monate")
- `contract-categories.json` Vertragskategorien (Strom, Gas, DSL …)
- `pdf-templates.json` + `pdf-templates/*.pdf` PDF-Auftragsvorlagen mit Feldzuordnungen
**NICHT enthalten sind Kundendaten, Verträge, Dokumente, E-Mails oder SMTP-Einstellungen.**
Dafür gibt es den separaten Datenbank-Backup-Export.
## Wie nutze ich das?
### Export (aus bestehender Installation)
In den CRM-Einstellungen → Factory-Defaults → „Exportieren" → ZIP herunterladen
und den Inhalt in diesen Ordner entpacken.
### Import
```bash
npm run seed:defaults
```
Das Script liest alle Dateien aus diesem Ordner, merged mehrere JSONs automatisch
per unique-name und spielt sie per Prisma `upsert` ein. Kann mehrfach ausgeführt
werden (idempotent).
## Mehrere Export-Dateien mergen
Wenn du mehrere ZIPs entpackst (z.B. Provider-Pakete von verschiedenen Quellen),
kannst du die JSON-Dateien frei umbenennen das Script liest alle `*.json` im
jeweiligen Unterordner und merged den Inhalt zusammen.
Beispiel:
```
providers/
verivox.json
check24.json
eigene.json
```
Alle drei werden eingespielt, gleiche Anbieter werden über den `name` gemerged.