Ebene 3 (Rollen verantwortlicher/pruefer) bekommt GET /faelle
(Posteingang aller offenen Anträge des Mandanten) und GET/POST
/faelle/{id} zum Entscheiden. Eine Entscheidung friert Regelwerk-,
Katalog- und den vollständigen Werkzeugdatensatz ein, verlangt eine
Begründung bei Abweichung vom abgeleiteten Vorschlag, erlaubt bei
Genehmigung nur ein durch die Bewertung zulässiges Werkzeug und
protokolliert die Entscheidung im Audit-Log. entscheidung ist
append-only wie bewertung.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
26 lines
1.3 KiB
SQL
26 lines
1.3 KiB
SQL
-- Entscheidung: der Mensch entscheidet, das System bereitet nur vor
|
|
-- (siehe CLAUDE.md, Grundregel). Eine Entscheidung bezieht sich auf
|
|
-- genau eine Bewertung (den Vorschlag, auf dessen Basis entschieden
|
|
-- wurde) und friert optional ein gewähltes Werkzeug als vollständigen
|
|
-- Datensatz ein (werkzeug_snapshot) — ein späterer Katalog-Wandel darf
|
|
-- nicht rückwirkend verändern, worauf eine Entscheidung beruhte.
|
|
-- Append-only wie bewertung/audit_log: eine Entscheidung wird nicht
|
|
-- korrigiert, sondern durch eine neue Entscheidung auf Basis einer
|
|
-- neuen Bewertung ersetzt (Neubewertung + erneute Entscheidung).
|
|
CREATE TABLE entscheidung (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
antrag_id UUID NOT NULL REFERENCES antrag (id),
|
|
bewertung_id UUID NOT NULL REFERENCES bewertung (id),
|
|
entscheider_user_id UUID NOT NULL REFERENCES app_user (id),
|
|
entscheidung TEXT NOT NULL CHECK (entscheidung IN ('genehmigt', 'genehmigt_mit_auflagen', 'abgelehnt', 'rueckfrage')),
|
|
werkzeug_id UUID REFERENCES werkzeug (id),
|
|
werkzeug_snapshot JSONB,
|
|
begruendung TEXT NOT NULL DEFAULT '',
|
|
gueltig_bis TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
CREATE TRIGGER entscheidung_append_only
|
|
BEFORE UPDATE OR DELETE ON entscheidung
|
|
FOR EACH ROW EXECUTE FUNCTION forbid_update_delete();
|