-- 261002-fm5 — Finanzbuchhaltung: Modul "Kantinenabrechnung" (kantine-datev). -- -- Zweck: eine neue Tabelle `KantineDatevConfig` mit den drei Nummern, die der -- Administrator einmalig je Mandant hinterlegt (Beraternummer, Mandantennummer, -- Lohnart). Eine Zeile je Mandant (Singleton, Vorbild `DkvModuleConfig`). Die -- Felder sind Text, damit fuehrende Nullen erhalten bleiben, und haben -- ABSICHTLICH keinen Standardwert: solange sie leer sind, sperrt das Modul die -- Verarbeitung. Die hochgeladene Kantinen-CSV wird nicht gespeichert. -- -- Von Hand geschrieben (Vorbild 20260923140000_proxmox_server), von Hand -- gepflegter Kopfkommentar Pflicht bei jeder RLS-Migration in diesem Projekt. -- -- Zeilenschutz (Pflicht — sonst schlaegt rls-coverage.spec.ts fehl): die Tabelle -- traegt `tenantId` und `tenant_isolation_policy` OHNE Benutzerdimension -- (`USING ("tenantId" = current_tenant_id())`, Form aus `DkvModuleConfig`) — -- Verwaltungsdaten des Mandanten, nicht persoenliche Daten eines Benutzers. -- Keine `system_read_policy`: es gibt keinen Hintergrunddienst, der diese -- Einstellungen ueber alle Mandanten liest. -- -- Rechte fuer die Anwendungsrolle tessera_app kommen automatisch ueber -- ALTER DEFAULT PRIVILEGES aus 20260909130000_rls_app_role — hier nichts zu -- tun. -- -- WICHTIG: wie alle bisherigen RLS-Migrationen wirken diese Regeln erst, -- wenn die Anwendung als Rolle ohne Umgehungsrecht verbindet (Schalter -- heute AUS, siehe docs/mandantentrennung-datenbankrolle.md). CREATE TABLE "KantineDatevConfig" ( "id" TEXT NOT NULL, "tenantId" TEXT NOT NULL, "beraterNr" TEXT, "mandantNr" TEXT, "lohnart" TEXT, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "KantineDatevConfig_pkey" PRIMARY KEY ("id") ); CREATE UNIQUE INDEX "KantineDatevConfig_tenantId_key" ON "KantineDatevConfig"("tenantId"); CREATE INDEX "KantineDatevConfig_tenantId_idx" ON "KantineDatevConfig"("tenantId"); ALTER TABLE "KantineDatevConfig" ENABLE ROW LEVEL SECURITY; ALTER TABLE "KantineDatevConfig" FORCE ROW LEVEL SECURITY; CREATE POLICY tenant_isolation_policy ON "KantineDatevConfig" USING ("tenantId" = current_tenant_id());