Jede Genehmigung (genehmigt/genehmigt_mit_auflagen) erzeugt jetzt automatisch einen append-only registereintrag mit Zweck, Abteilung, Werkzeug, Datenklasse, Einstufung, Auflagen, Verantwortliche/r und Gültigkeit. Ebene 3 (verantwortlicher/pruefer) kann das Register unter GET /registereintraege einsehen und als CSV oder PDF exportieren. Der PDF-Export nutzt das bereits vorhandene, bisher ungenutzte go-pdf/fpdf (keine neue Abhängigkeit) mit UnicodeTranslatorFromDescriptor für deutsche Umlaute. Abgelehnte Entscheidungen und Rückfragen erzeugen bewusst keinen Registereintrag. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
28 lines
1.2 KiB
SQL
28 lines
1.2 KiB
SQL
-- Registereintrag: wird automatisch bei jeder Genehmigung erzeugt
|
|
-- (genehmigt / genehmigt_mit_auflagen), siehe CLAUDE.md, Entscheidung/
|
|
-- Register/Wiedervorlage. Bewusst denormalisiert (eigene Textspalten
|
|
-- statt Joins über bewertung/entscheidung/werkzeug) — ein Registereintrag
|
|
-- ist ein für sich lesbarer, exportierbarer Nachweis, der nicht von
|
|
-- einem späteren Katalog- oder Abteilungs-Wandel abhängen darf.
|
|
-- Append-only wie bewertung/entscheidung.
|
|
CREATE TABLE registereintrag (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
account_id UUID NOT NULL REFERENCES account (id),
|
|
antrag_id UUID NOT NULL REFERENCES antrag (id),
|
|
entscheidung_id UUID NOT NULL REFERENCES entscheidung (id),
|
|
zweck TEXT NOT NULL,
|
|
abteilung TEXT NOT NULL DEFAULT '',
|
|
werkzeug TEXT NOT NULL,
|
|
datenklasse TEXT NOT NULL,
|
|
einstufung TEXT NOT NULL,
|
|
auflagen TEXT[] NOT NULL DEFAULT '{}',
|
|
verantwortlicher TEXT NOT NULL,
|
|
entschieden_am TIMESTAMPTZ NOT NULL,
|
|
gueltig_bis TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TRIGGER registereintrag_append_only
|
|
BEFORE UPDATE OR DELETE ON registereintrag
|
|
FOR EACH ROW EXECUTE FUNCTION forbid_update_delete();
|