feat(kantine-datev): Kantinenabrechnung als Modul in neuer Gruppe Finanzbuchhaltung
- neue Seitenleisten-Kategorie accounting (Finanzbuchhaltung / Financial accounting) - CSV (UTF-8, UTF-8 mit BOM, Windows-1252) pruefen, Vorschau mit Zeilenfehlern, DATEV-Lohn-ASCII-Export - Beraternummer, Mandantennummer, Lohnart je Mandant als Admin-Einstellung (KantineDatevConfig mit Zeilenschutz), anfangs leer - hochgeladene Daten werden nicht gespeichert; Download per Blob (auch im Desktop-Client) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
-- 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());
|
||||
@@ -344,6 +344,23 @@ model DkvModuleConfig {
|
||||
@@index([tenantId])
|
||||
}
|
||||
|
||||
// quick-261002-fm5: Kantinenabrechnung (Modul kantine-datev). Eine Zeile je
|
||||
// Mandant (Singleton wie DkvModuleConfig). Die drei Nummern stehen als Text,
|
||||
// damit fuehrende Nullen erhalten bleiben; sie haben bewusst KEINEN
|
||||
// Standardwert — der Administrator hinterlegt sie einmalig, bis dahin ist die
|
||||
// Verarbeitung gesperrt. Die hochgeladene CSV selbst wird nie gespeichert.
|
||||
model KantineDatevConfig {
|
||||
id String @id @default(uuid())
|
||||
tenantId String @unique
|
||||
beraterNr String?
|
||||
mandantNr String?
|
||||
lohnart String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@index([tenantId])
|
||||
}
|
||||
|
||||
// Phase 14, Plan 03 (INGEST-05, CONFIG-02, D-06/D-07) — per-tenant portal-
|
||||
// alert mailbox config, mirroring DkvModuleConfig's shape/pattern exactly
|
||||
// (own tenantId @unique row, own encrypted creds — D-03: each module keeps
|
||||
|
||||
Reference in New Issue
Block a user