-- PROJ: heuristische Metadaten-Vorschläge -- Doku-only (siehe README.md in diesem Verzeichnis) — die tatsächliche -- Ausführung passiert idempotent über -- internal/storage/metadata_suggestions.go initMetadataSuggestionsSchema(), -- aufgerufen aus (*Store).initSchema() NACH dem documents-/taxonomy-Schema -- (die Vorschläge scoren Taxonomie-Entitäten gegen ein Dokument). -- -- Metadaten-Vorschläge: regelbasiert (KEIN LLM). Pro Vorschlags-Lauf wird ein -- Dokument gegen alle Taxonomie-Entitäten (Tags/Dokumenttypen/Korrespondenten) -- fuzzy-gescored; Near-Misses oberhalb einer Schwelle (suggestionFloor), die -- noch NICHT zugewiesen sind, werden als nicht-bindende Kandidaten vorgeschlagen. -- Sieht der aktuelle Titel noch auto-generiert aus, wird zusätzlich ein -- neu abgeleiteter Titel vorgeschlagen. -- -- Diese Tabelle ist NUR ein Log/Cache dessen, was der heuristische Provider -- vorgeschlagen hat. Das Anwenden eines akzeptierten Feldes läuft über die -- normalen Edit-Endpunkte (PATCH title, tag-attach, ...), NIEMALS über diese -- Zeile. status wird beim Review ('reviewed') gesetzt, unabhängig davon welche -- Felder der Nutzer übernommen hat. CREATE TABLE IF NOT EXISTS metadata_suggestions ( id BIGSERIAL PRIMARY KEY, tenant_id BIGINT NOT NULL, document_id BIGINT NOT NULL, provider TEXT NOT NULL DEFAULT 'heuristic', requested_by BIGINT, requested_at TIMESTAMPTZ NOT NULL DEFAULT now(), suggestion JSONB NOT NULL, status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','reviewed')), reviewed_at TIMESTAMPTZ, reviewed_by BIGINT ); CREATE INDEX IF NOT EXISTS idx_metadata_suggestions_document ON metadata_suggestions(document_id);