-- Globale Richtlinien-Vorlagen (Plattform-Ebene, KEIN tenantId/RLS — analog implementation_hints). -- Master-Quelle für den Mandanten-Import; Versionierung (DRAFT/PUBLISHED) + Sprache (locale). -- CreateEnum CREATE TYPE "PolicyTemplateStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED'); -- CreateTable CREATE TABLE "policy_template_versions" ( "id" TEXT NOT NULL, "version" TEXT NOT NULL, "status" "PolicyTemplateStatus" NOT NULL DEFAULT 'DRAFT', "notes" TEXT, "published_by" TEXT, "published_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "policy_template_versions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "policy_template_docs" ( "id" TEXT NOT NULL, "version_id" TEXT NOT NULL, "locale" TEXT NOT NULL, "code" TEXT NOT NULL, "type" "PolicyDocType" NOT NULL, "title" TEXT NOT NULL, "doc_version" TEXT NOT NULL DEFAULT '1.0', "policy_code" TEXT, "fulfills" TEXT[] DEFAULT ARRAY[]::TEXT[], "domain" "Domain", "raw_markdown" TEXT NOT NULL, "order_idx" INTEGER NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "policy_template_docs_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "policy_template_requirements" ( "id" TEXT NOT NULL, "version_id" TEXT NOT NULL, "locale" TEXT NOT NULL, "req_id" TEXT NOT NULL, "policy_code" TEXT NOT NULL, "control" TEXT NOT NULL, "obligation" TEXT NOT NULL, "condition" TEXT, "requirement" TEXT NOT NULL, "implementation" TEXT NOT NULL, "va_codes" TEXT[] DEFAULT ARRAY[]::TEXT[], "nachweis_link" TEXT, "order_idx" INTEGER NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "policy_template_requirements_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "policy_template_variables" ( "id" TEXT NOT NULL, "version_id" TEXT NOT NULL, "locale" TEXT NOT NULL, "key" TEXT NOT NULL, "title" TEXT NOT NULL, "kind" TEXT NOT NULL, "group_name" TEXT, "value" TEXT NOT NULL, "required" BOOLEAN NOT NULL DEFAULT false, "order_idx" INTEGER NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "policy_template_variables_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "policy_template_baseline_params" ( "id" TEXT NOT NULL, "version_id" TEXT NOT NULL, "locale" TEXT NOT NULL, "bl_id" TEXT NOT NULL, "section" TEXT NOT NULL, "name" TEXT NOT NULL, "vorgabe" TEXT NOT NULL, "order_idx" INTEGER NOT NULL DEFAULT 0, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "policy_template_baseline_params_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "policy_template_evidence" ( "id" TEXT NOT NULL, "version_id" TEXT NOT NULL, "locale" TEXT NOT NULL, "nr" INTEGER NOT NULL, "policy_code" TEXT NOT NULL, "nachweis" TEXT NOT NULL, "quelle" TEXT NOT NULL, "verantwortlich" TEXT NOT NULL, "turnus" TEXT NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "policy_template_evidence_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "policy_template_versions_version_key" ON "policy_template_versions"("version"); -- CreateIndex CREATE INDEX "policy_template_versions_status_idx" ON "policy_template_versions"("status"); -- CreateIndex CREATE INDEX "policy_template_docs_version_id_locale_idx" ON "policy_template_docs"("version_id", "locale"); -- CreateIndex CREATE UNIQUE INDEX "policy_template_docs_version_id_locale_code_key" ON "policy_template_docs"("version_id", "locale", "code"); -- CreateIndex CREATE INDEX "policy_template_requirements_version_id_locale_idx" ON "policy_template_requirements"("version_id", "locale"); -- CreateIndex CREATE UNIQUE INDEX "policy_template_requirements_version_id_locale_req_id_key" ON "policy_template_requirements"("version_id", "locale", "req_id"); -- CreateIndex CREATE INDEX "policy_template_variables_version_id_locale_idx" ON "policy_template_variables"("version_id", "locale"); -- CreateIndex CREATE UNIQUE INDEX "policy_template_variables_version_id_locale_key_key" ON "policy_template_variables"("version_id", "locale", "key"); -- CreateIndex CREATE INDEX "policy_template_baseline_params_version_id_locale_idx" ON "policy_template_baseline_params"("version_id", "locale"); -- CreateIndex CREATE UNIQUE INDEX "policy_template_baseline_params_version_id_locale_bl_id_key" ON "policy_template_baseline_params"("version_id", "locale", "bl_id"); -- CreateIndex CREATE INDEX "policy_template_evidence_version_id_locale_idx" ON "policy_template_evidence"("version_id", "locale"); -- CreateIndex CREATE UNIQUE INDEX "policy_template_evidence_version_id_locale_nr_key" ON "policy_template_evidence"("version_id", "locale", "nr"); -- AddForeignKey ALTER TABLE "policy_template_docs" ADD CONSTRAINT "policy_template_docs_version_id_fkey" FOREIGN KEY ("version_id") REFERENCES "policy_template_versions"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "policy_template_requirements" ADD CONSTRAINT "policy_template_requirements_version_id_fkey" FOREIGN KEY ("version_id") REFERENCES "policy_template_versions"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "policy_template_variables" ADD CONSTRAINT "policy_template_variables_version_id_fkey" FOREIGN KEY ("version_id") REFERENCES "policy_template_versions"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "policy_template_baseline_params" ADD CONSTRAINT "policy_template_baseline_params_version_id_fkey" FOREIGN KEY ("version_id") REFERENCES "policy_template_versions"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "policy_template_evidence" ADD CONSTRAINT "policy_template_evidence_version_id_fkey" FOREIGN KEY ("version_id") REFERENCES "policy_template_versions"("id") ON DELETE CASCADE ON UPDATE CASCADE;