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,57 @@
|
||||
-- PROJ: workflows / Consumption-Regeln
|
||||
-- Doku-only (siehe README.md in diesem Verzeichnis) — die tatsächliche
|
||||
-- Ausführung passiert idempotent über internal/storage/workflows.go
|
||||
-- initWorkflowsSchema(), aufgerufen aus (*Store).initSchema() NACH
|
||||
-- initClassificationTemplatesSchema (eine Workflow-Action kann eine
|
||||
-- Klassifizierungsvorlage referenzieren: apply_classification_template).
|
||||
--
|
||||
-- Workflows (Consumption-Regeln): tenant-skopierte Automatisierungsregeln, die
|
||||
-- an einem Trigger-Punkt (MVP: on_upload) ausgewertet werden. Ein passender
|
||||
-- Workflow führt seine geordneten Actions auf dem Dokument aus. Die
|
||||
-- Bedingung ist ein JSONB-Condition-Tree (bool. Gruppen and/or + Leaf-Knoten
|
||||
-- mit Feld/Algorithmus/Pattern, MVP-Verschachtelungstiefe 2). Jede Auswertung
|
||||
-- wird dokument-skopiert in workflow_runs protokolliert (GoBD-Reproduzierbarkeit
|
||||
-- parallel zum globalen internal/audit-Log).
|
||||
--
|
||||
-- Best-effort-Ausführung: eine fehlgeschlagene Action bricht den Upload niemals
|
||||
-- ab — Fehler werden in workflow_runs.error festgehalten und die Schleife läuft
|
||||
-- weiter (spiegelt die "never fail the upload"-Philosophie der OCR-/
|
||||
-- Auto-Assign-Schritte in storeUploadedFile).
|
||||
|
||||
CREATE TABLE IF NOT EXISTS workflows (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
tenant_id BIGINT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
enabled BOOLEAN NOT NULL DEFAULT true,
|
||||
trigger_type TEXT NOT NULL CHECK (trigger_type IN ('on_upload')),
|
||||
condition_tree JSONB NOT NULL,
|
||||
priority INT NOT NULL DEFAULT 100,
|
||||
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_workflows_tenant ON workflows(tenant_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS workflow_actions (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
workflow_id BIGINT NOT NULL REFERENCES workflows(id) ON DELETE CASCADE,
|
||||
step_order INT NOT NULL,
|
||||
action_type TEXT NOT NULL CHECK (action_type IN
|
||||
('add_tag','set_doc_type','set_correspondent','apply_classification_template','set_custom_field')),
|
||||
action_config JSONB NOT NULL DEFAULT '{}'
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_actions_workflow ON workflow_actions(workflow_id, step_order);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS workflow_runs (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
workflow_id BIGINT NOT NULL REFERENCES workflows(id) ON DELETE CASCADE,
|
||||
tenant_id BIGINT NOT NULL,
|
||||
document_id BIGINT,
|
||||
triggered_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
matched BOOLEAN NOT NULL,
|
||||
actions_applied JSONB,
|
||||
error TEXT
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_runs_workflow ON workflow_runs(workflow_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_runs_document ON workflow_runs(document_id);
|
||||
Reference in New Issue
Block a user