Caja — Pflichtenheft: Übersicht & Management-Summary

Dieses Dokument ist die Einstiegsseite des Pflichtenhefts. Es gibt Kontext, orientiert im Gesamtsystem, verlinkt auf alle Fachkapitel und hält die verbindlichen Entscheidungen fest. Alle nachgelagerten Kapitel bauen auf diesem Fundament auf. Letzte Aktualisierung: 2026-06-26.


1. Vision & Management-Summary

Caja (ES: Box und Kasse) ist die dedizierte All-in-One-Backend-Plattform der Dominicano Express GmbH — einem Schweizer Familienunternehmen, das seit 2026 See-Fracht zwischen der Schweiz und der Dominikanischen Republik betreibt.

Das Problem heute

Das operative Geschäft wird über eine Kombination aus einem Excel-ERP (Erfassung_Digitar, ERP_DASHBOARD FULL.xlsx), manuellen WhatsApp-Chats, Papierformularen am Depot und verstreuten Insellösungen abgewickelt. Konsequenzen:

  • Finanzbuchungen entstehen manuell, mit Zeitverzug und Fehlerrisiko
  • Kundenstamm ist dezentral; Duplikate sind die Regel
  • Box-Tracking und Container-Status sind nur im Kopf oder auf Papier
  • Affiliate-Provisionen werden nachträglich manuell ausgerechnet
  • MWST-Scharfschaltung würde heute einen Systemwechsel erzwingen

Die Lösung: Caja

Eine App ersetzt alle Insellösungen. Der entscheidende Kerngewinn: operative Events erzeugen die Finanzbuchungen automatisch — statt Excel-Zeilen manuell nachzupflegen. Das Prinzip zieht sich durch den gesamten Fluss:

Ohne CajaMit Caja
Offerte per WhatsApp, Preis im KopfOfferte aus Preisliste → PDF → WhatsApp, ein Klick
Auftrag = neue Excel-ZeileAuftrag → Boxen (UUID+QR) + Sendung automatisch
Tracking = Telefonanruf10 Schritte pro Box, sichtbar für alle Rollen
Zahlung = manuelle Ledger-ZeileZahlung → bucht automatisch ins movements-Ledger
Affiliate-Provision = MonatsrechercheProvision entsteht synchron mit dem Auftrag

Team & Rollen

PersonRolleCaja-Rollencode
MarcelGeschäftsführerADMIN
MarielaAdministration / MitgründerinBUCHHALTUNG
MarkusOperations / GründerOPERATIONS
ArkysFahrer / LogistikFAHRER

Externe Affiliates und ein optionaler Read-only-Zugang (z. B. Treuhänder) sind in Phase 2 vorgesehen.


2. Durchgängiger Fluss

Alle 8 Fachmodule sind durch einen einzigen, durchgängigen Datenfluss verbunden. Kein Modul ist eine Insel.

Diagramm wird geladen …

Geteilte Kern-Entitäten (modulübergreifend)

Diese Tabellen existieren einmal und werden von allen Modulen referenziert. Änderungen an ihnen haben modulübergreifende Konsequenzen.

EntitätHeimatKonsumiert von
contactsCRM (Modul 1)allen Modulen
movementsFinanzen (Modul 6)Logistik, Affiliate, Plattform
payment_methodsPlattform (Modul 8)Finanzen, Logistik, Depot
movement_typesPlattform (Modul 8)Finanzen, Auto-Posting-Engine
box_productsProdukte (Modul 3)Offerten, Logistik, Depot
boxesLogistik (Modul 5)Tracking, Depot, QR
shipmentsLogistik (Modul 5)Container, Tracking, CRM
containersLogistik (Modul 5)Shipments, Dashboard
quotesOfferten (Modul 4)Aufträge, Affiliate, Finanzen
ordersLogistik (Modul 5)Boxen, Sendung, Rechnungen, movements
invoicesFinanzen (Modul 6)movements, Affiliate-Trigger
deposit_orders / deposit_paymentsLogistik/Depot (Modul 5)movements, Boxen
affiliates + referral_codesAffiliate (Modul 7)Offerten, Aufträge, Provisionen
commission_entries + commission_payoutsAffiliate (Modul 7)movements
audit_logPlattform (Modul 8)alle schreibenden Tabellen

Kanonisches Schema (DDL, alle 48 Tabellen, Konflikt-Auflösungen K-01..K-21): Dokument 30 — Schema konsolidiert


3. Die 8 Fachmodule

#ModulKernfunktionDokument
1CRM / KundenstammGolden Record aller Parteien (Kunden, Leads, Lieferanten, Affiliates, Empfänger DR); Lead-Intake (Website + WhatsApp); Dedup/Merge10-crm.md
2WhatsApp + OCR / AusweisID-Scan (Cédula/Pass) via WhatsApp/Kamera → OCR → Kundensatz vorfüllen (KYC/Zoll-Matching)11-whatsapp-ocr.md
3Produkte & PreiseBox-/Fass-Typen; variable Preislisten (saisonal/effective-dated); Zonen-/Zielortpreise; Depot-Sätze12-produkte-preise.md
4OffertenAus Katalog + Rabatte + Affiliate-Code → PDF → WhatsApp/E-Mail; Statusfluss draft→sent→accepted→Auftrag13-offerten.md
5Logistik / ERPAuftrag → Boxen (UUID+QR) → 10 Tracking-Schritte; Container-Management; Depot-Lifecycle (Rückgabe/Verfall)14-logistik-tracking.md
6Finanzenmovements-Ledger (Single SoT); Auto-Posting; Kasse/Bank/Twint; Debitoren/Kreditoren; MWST schema-ready; Monats-/Jahresabschluss15-finanzen.md
7Affiliate-ProgrammAffiliates + Rabatt-/Referral-Codes; Provisions-Berechnung; Affiliate-Abrechnung/Payout; Mini-Portal (spätere Phase)16-affiliate.md
8PlattformAuth (Magic-Link); Rollen/RLS; i18n DE/ES/EN; Audit-Log (OR 957/GeBüV); Dokument-Storage; Notifications (WhatsApp/E-Mail)17-plattform.md

Design-System & Mobile-Patterns

Das Design-System ist kein eigenes Fachmodul, aber ein verbindliches Querschnittskapitel, das alle anderen Module beeinflusst.

ThemaDokument
Design-System, Breakpoints, Navigation, Kamera-Flows18-design-mobile.md

Querschnitts-Kapitel

ThemaDokument
IST-Kontext: Alt-ERP „LCCargo" — bestehende Fachlogik als Anforderungsbasis05-legacy-ist.md
Technische Architektur (Monorepo, App-Router, RLS, i18n, PWA, Auto-Posting-Engine, Deployment)20-architektur.md
Kanonisches Supabase-Schema (konsolidiert, alle 48 Tabellen, Konflikt-Auflösungen)30-schema-konsolidiert.md
Roadmap & 4-Wochen-Umsetzungsplan (Go-Live 25.07.2026, Mermaid-Timeline) + Phasen-Detail P0–P440-roadmap.md
Compliance- & Sicherheits-Matrix (OR 957, GeBüV, MWST, revDSG, ZG)45-compliance.md
Offene Punkte / Completeness-Critic (Lücken, Widersprüche, fehlende Verbindungen)99-offene-punkte.md

4. Tech-Stack ("Atlas")

Der Stack ist fix und abgeleitet vom internen Atlas-Projekt (atlas.zvv.dev). Er ist nicht verhandelbar — alle Modulspezifikationen gehen von diesem Stack aus.

Core

LayerTechnologieRolle in Caja
FrameworkNext.js 15 (App Router) + TypeScriptServer Components, Server Actions, API-Routes
StylingTailwind CSS 4 + shadcn/ui (Radix UI + lucide-react)Design-Tokens, Komponenten-Bibliothek
Daten (Tabellen)TanStack TableAdaptive Listen → Karten auf Mobile
ChartsRecharts / EChartsDashboard KPI-Kacheln, Trend-Charts
BackendSupabasePostgres 15+, Auth (Magic-Link), RLS, Storage
HostingVercelSeparate Vercel-Projekte pro App (Web, Caja, CajaSpec)
AnalyticsVercel Web AnalyticsDatenschutzkonform, ohne Cookie-Banner

UI-Konventionen (Atlas-Muster)

  • Sidebar (Desktop/Tablet) + Command-Palette (⌘K) — globale Navigation und Schnellsuche
  • KPI-Kacheln — Dashboard-Einstieg jedes Moduls
  • Action-State-Forms + Toasts — Formular-Feedback ohne Page-Reload
  • Empty-States + Skeletons — kein leeres Weiss, kein FOUC
  • Light / Dark via Design-Tokens (CSS Custom Properties) — systemseitig oder manuell wählbar

Monorepo-Struktur (Soll-Zustand)

dominicanoexpress.com/          ← Privates Familien-GmbH-Repo
├── apps/
│   ├── web/                    ← LIVE: statische Website (nicht anfassen)
│   ├── cajaspec/               ← DIESE Spec-Site (cajaspec.dominicanoexpress.com)
│   └── caja/                   ← NEU: die App (Next.js App Router, caja.dominicanoexpress)
├── packages/
│   ├── db/                     ← @caja/db: Supabase-Clients, Typen, Query-Helfer, RLS
│   ├── ui/                     ← @caja/ui: geteilte shadcn-Komponenten
│   ├── i18n/                   ← @caja/i18n: Locale-Loading, Type-safe Keys
│   └── config/                 ← @caja/config: ESLint, TSConfig, Tailwind-Preset
└── dokumente/                  ← gitignored (sensibel → SharePoint)

Details: Dokument 20 — Technische Architektur


5. Mobile/Tablet-First — Harte Kern-Pflicht

Mobile/Tablet-First ist keine Responsive-Nachbesserung, sondern eine strukturelle Entscheidung, die jede Layout-, Navigations- und Datenbankdesign-Entscheidung beeinflusst.

Warum

Das Feldteam (Arkys am Depot, Markus am Container-Terminal) arbeitet ausschliesslich auf Handy oder Tablet. Mariela arbeitet im Büro vorwiegend auf Tablet. Marcel hat als einziger einen regulären Desktop-Kontext.

Verbindliche Regeln

RegelKonkret
Design ab 375pxKein Feature ist nur Desktop-tauglich
Tablet als Haupt-FormfaktorAlle primären Workflows passen auf 768px ohne Horizontal-Scroll
Adaptive ListenTabelle (Tablet/Desktop) → Karten (Handy); KEIN Horizontal-Scroll
NavigationBottom-Tab-Bar + Drawer (Handy); kollabierbare Sidebar (Tablet+Desktop)
Touch-TargetsAlle interaktiven Elemente ≥ 44px
Quick-Entry thumb-optimiertBottom-Sheet-Selects, inputmode="numeric", Swipe-Aktionen
Camera-FirstBox-QR scannen, Ausweis/OCR, Belege direkt aus Kamera
PWA installierbarmanifest.json, offline-tolerant (Cache + Queue für Tracking-Updates)
Performance-BudgetMittelklasse-Android (z. B. Motorola G52); LCP < 2.5s auf 4G

Details: Dokument 18 — Design-System & Mobile-Patterns


6. Dreisprachigkeit DE / ES / EN

Caja ist vollständig dreisprachig. Die Sprache ist nie in der Logik verdrahtet — interne Fachcodes (IDs, source_type, Rollen-Codes, Status-Werte) sind die Wahrheit; DE/ES/EN sind Anzeige-Schichten.

SchichtMechanismus
Lookup-TabellenInline-Spalten label_de / label_es / label_en auf allen Lookup-Entitäten
Freie UI-Textelocale_strings(namespace, key, locale, value) — Seed aus GLOSSAR-ERP_DE-ES-EN.csv
Stabile CodesImmer englischsprachige Kurzformen (ADMIN, EXPENSE, EMPTY_DELIVERED), nie übersetzt, nie in Logik hartkodiert
Benutzerpräferenzapp_users.preferred_locale ∈ {de, es, en}

7. Fixe Entscheidungen

Diese Entscheidungen sind abgeschlossen und werden in den Modul-Specs als gegeben behandelt. Sie werden hier nicht mehr zur Diskussion gestellt.

#EntscheidungBegründung
E-01Buchhaltung = Cash-Basis + Offene Posten, KEINE doppelte BuchführungGmbH 2026, Startphase; Treuhänder erhält Export, erstellt formalen Abschluss
E-02MWST: schema-ready, inaktivPflicht erst ab CHF 100'000 Umsatz; Aktivierung ohne Schema-Migration via vat_rates.active
E-03Alle fachlich erweiterbaren Status-Mengen als Lookup-Tabellen (TEXT-Code-PK), nicht als Postgres-enumMigrations-Flexibilität, i18n, keine ALTER TYPE bei Erweiterung
E-04Postgres-enum nur für technisch-geschlossene Mengen ohne i18n-Bedarf: discount_kind, commission_kindZweielementige, stabile Mengen (PERCENT/ABSOLUTE)
E-05contacts und app_users getrenntcontacts = Geschäftspartei; app_users = Login-Identität (Team + Affiliate)
E-06app_users(id) als Referenz für alle created_by/actor_id-SpaltenEinheitlich, kein Mix mit contacts(id) oder auth.users direkt
E-07Kein hartes DELETE auf finanziell relevante DatenStorno via voided_at + Neubuchung; RLS-Policy for delete using (false) auf movements
E-08Auto-Posting via idempotenten Upsert auf (source_type, source_id)Verhindert Doppelbuchungen bei Retry/Webhook-Wiederholung
E-09Caja ist ein eigenständiges Vercel-Projekt im selben MonorepoLive-Website (apps/web) bleibt unberührt; separate Build-Pipeline
E-10Mehrwährung (DOP/USD) ist out of scope für MVPAlle Beträge in CHF (numeric(12,2)); Erweiterung möglich, aber nicht spezifiziert
E-11Kanonisches Schema = Dokument 30Bei Widerspruch zwischen Modul-Spec und Dok 30 gewinnt immer Dok 30
E-12Affiliate-Mini-Portal ist spätere Phase (nach P2)Genug Daten erst verfügbar, wenn Affiliate-Programm läuft

8. Roadmap-Phasen (Übersicht)

PhaseNameKerngewinnAufwand ca.
P0FundamentAuth, RLS, i18n, Audit-Log, Lookups — produktionsreif, bevor Fach-Code entsteht3–4 Wochen
P1CRM + Finanzen-KernErster produktiver Excel-Ersatz; Ledger läuft, Kunden sind drin4–5 Wochen
P2Produkte, Preise, Offerten, Affiliate-CodesVollständiger kommerzieller Zyklus: Preisliste → Offerte → Auftrag → Provision3–4 Wochen
P3Logistik: Boxen, Tracking, ContainerOperativer Kernfluss; Box-QR, 10 Schritte, Container-Board, Depot-Lifecycle4–5 Wochen
P4WhatsApp + OCR + DedupAutomatisierter Lead-Intake; Ausweis-Scan → Kontakt; Duplikat-Bereinigung3–4 Wochen

Umsetzung als 4-Wochen-Plan bis Go-Live 25.07.2026 (parallelisiert, KI-gestützt aus der Spec — s. 40-roadmap.md mit Mermaid-Timeline). Die sequentielle Schätzung (~18–22 Wochen) bleibt die fachliche Aufschlüsselung der Phasen.

Details: Dokument 40 — Roadmap


9. Compliance-Rahmen (Kurzübersicht)

Vollständige Matrix: Dokument 45 — Compliance & Sicherheit

RegelwerkCaja-Relevanz
OR 957–963bLedger movements als ordnungsgemässe Buchhaltung; 10 Jahre Aufbewahrung
GeBüVaudit_log append-only; Periodensperre; Backup; Export-Migrierbarkeit
MWSTG/MWSTVSchema-ready, inaktiv (Pflicht ab CHF 100'000 Umsatz)
revDSGPersonendaten (contacts, kyc_scans), Drittland-Transfer CH→DR, Bearbeitungsverzeichnis
ZGKYC-Zweckbindung (Cédula/Pass für Zolldossier)

10. 🔲 Zu bestätigen — Index

Alle offenen Geschäftsentscheide und Klärungspunkte, die die Implementierung blockieren könnten. Technische Lücken/Widersprüche sind in Dokument 99 — Offene Punkte separat geführt.

#ThemaEntscheid gebraucht vonHeimat
OE-01MWST-Pflicht-Eintritt: ab wann, Saldosteuermethode oder effektiv?Finanzen (Modul 6), Compliance (Dok 45)Treuhänder
OE-02OCR-Provider: Google Vision, AWS Textract oder anderer?Modul 2 (WhatsApp/OCR)Marcel + Tech
OE-03Depot-Rückgabefrist: nach wie vielen Tagen verfällt das Depot (heute mündliche Regel)?Modul 5 (Logistik)Markus/Mariela
OE-04Zonen-Taxonomie DR: welche Provinzen/Municipios bilden welche Preiszone?Modul 3 (Produkte/Preise)Markus
OE-05Empfänger-Benachrichtigung in DR: WhatsApp via welchem Business-Konto / API-Tier?Modul 8 (Plattform)Marcel
OE-06Affiliate-Provisions-Satz: einheitlich oder pro Produkt-Typ?Modul 7 (Affiliate)Marcel
OE-07Revisionspflicht: ordentliche Revision oder Opting-out (OR 727a)?Compliance (Dok 45)Treuhänder
OE-08Mehrwährung DOP/USD: explizit out of scope für Vollausbau, oder spätere Phase?Modul 6 (Finanzen)Marcel
OE-09Gelöst (F-01): keine eigene order_lines-Tabelle — Positionen leben (eingefroren) in quote_lines + Box-Materialisierung. Siehe Dok 30 §2.6.Modul 4/5, Dok 30erledigt
OE-10Kreditoren-Workflow: Struktur ✅ gelöst (F-02) — Kreditoren bleiben manuell (movements, source_type='manual', Typen EXPENSE/SUPPLIER_PAYMENT/SUPPLIER_DEBT). Offen nur noch (🔲): welche Lieferantentypen werden in Phase 1 erfasst?Modul 6, Dok 99 F-02Marcel/Mariela
OE-11OCR-Rohbild-Aufbewahrung: serverseitig löschen nach Verarbeitung (Datenschutz) oder aufbewahren (Zoll-Nachweis)?Modul 2, Dok 99 F-21Marcel + Rechtsgutachten
OE-12WhatsApp-API-Tier für Lead-Intake: Cloud API (Meta) oder Business-App-Webhook?Modul 2, PlattformMarcel

11. Lesereihenfolge

Empfohlene Reihenfolge für Erstleser:

  1. Dieses Dokument (00-overview.md) — Gesamtüberblick, Fluss, Entscheidungen
  2. 05-legacy-ist.md — IST-Kontext: was das Alt-ERP fachlich kann (Anforderungsbasis)
  3. 20-architektur.md — wie alles technisch verdrahtet ist (Monorepo, RLS, i18n, Auto-Posting)
  4. 30-schema-konsolidiert.md — die einzige Wahrheitsquelle des Datenmodells
  5. 10-crm.md11-whatsapp-ocr.md — Einstiegspunkte des Flusses
  6. 12-produkte-preise.md13-offerten.md — kommerzieller Zyklus
  7. 14-logistik-tracking.md — operativer Kernfluss
  8. 15-finanzen.md — Ledger + Auto-Posting
  9. 16-affiliate.md — Provisions-Layer
  10. 17-plattform.md — Auth, RLS, i18n, Audit, Notifications
  11. 18-design-mobile.md — Design-System, Mobile-Patterns
  12. 40-roadmap.md — Phasen und Prioritäten
  13. 45-compliance.md — rechtliche Anforderungen
  14. 50-us-logistik.md ff. — User Stories (Connextra + Gherkin) je Epic
  15. 99-offene-punkte.md — technische Lücken (vor Implementierung lesen!)