FDN-01: repository & projektgerüst
Git-Repository für bestehenden archivdms-Code initialisiert, Branch-/Commit-Konvention (feature/<ticket>-<slug>-Branches, Ticket-Prefix in Commit-Nachricht) etabliert.
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
-- PROJ: classification-templates
|
||||
-- Doku-only (siehe README.md in diesem Verzeichnis) — die tatsächliche
|
||||
-- Ausführung passiert idempotent über
|
||||
-- internal/storage/classification_templates.go
|
||||
-- initClassificationTemplatesSchema(), aufgerufen aus (*Store).initSchema()
|
||||
-- NACH initTaxonomySchema/initCustomFieldsSchema (FK auf document_types und
|
||||
-- custom_field_defs).
|
||||
--
|
||||
-- Klassifizierungsvorlagen (classification templates): tenant-skopierte,
|
||||
-- benannte Bündel aus Dokumenttyp, Tags, Custom-Field-Defaultwerten und einer
|
||||
-- Aufbewahrungsdauer, die in einem Schritt auf ein Dokument angewendet werden
|
||||
-- können. Bewusst KEINE persistente Kopplung template<->document (keine
|
||||
-- template_id-Spalte auf documents): eine spätere Vorlagen-Änderung darf
|
||||
-- Bestandsdokumente niemals rückwirkend verändern (GoBD-Nachvollziehbarkeit).
|
||||
-- Die Anwendung wird ausschliesslich über einen Audit-Log-Eintrag festgehalten.
|
||||
--
|
||||
-- Retention-Regel (absolut, ohne Ausnahme): eine Vorlage kann retain_until nur
|
||||
-- verlängern, niemals verkürzen — auch nicht mit overwrite=true. Ein
|
||||
-- abgelehnter Verkürzungsversuch wird als Audit-Eintrag protokolliert.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS classification_templates (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
tenant_id BIGINT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
doc_type_id BIGINT REFERENCES document_types(id) ON DELETE SET NULL,
|
||||
retain_years INT,
|
||||
active BOOLEAN NOT NULL DEFAULT true,
|
||||
created_by BIGINT,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
UNIQUE(tenant_id, name)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_classification_templates_tenant ON classification_templates(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_classification_templates_doc_type ON classification_templates(doc_type_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS classification_template_tags (
|
||||
template_id BIGINT NOT NULL REFERENCES classification_templates(id) ON DELETE CASCADE,
|
||||
tag_id BIGINT NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (template_id, tag_id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS classification_template_field_defaults (
|
||||
template_id BIGINT NOT NULL REFERENCES classification_templates(id) ON DELETE CASCADE,
|
||||
field_id BIGINT NOT NULL REFERENCES custom_field_defs(id) ON DELETE CASCADE,
|
||||
value_text TEXT,
|
||||
value_number NUMERIC,
|
||||
value_date DATE,
|
||||
value_bool BOOLEAN,
|
||||
overwrite BOOLEAN NOT NULL DEFAULT false,
|
||||
PRIMARY KEY (template_id, field_id)
|
||||
);
|
||||
Reference in New Issue
Block a user