-- CreateEnum CREATE TYPE "SupplierStatus" AS ENUM ('ACTIVE', 'ONBOARDING', 'UNDER_REVIEW', 'OFFBOARDED'); -- CreateEnum CREATE TYPE "AssessmentType" AS ENUM ('QUESTIONNAIRE', 'SELF_ASSESSMENT', 'AUDIT'); -- CreateEnum CREATE TYPE "AssessmentStatus" AS ENUM ('SENT', 'RECEIVED', 'EVALUATED', 'OVERDUE'); -- CreateEnum CREATE TYPE "EvidenceKind" AS ENUM ('CERTIFICATE', 'TISAX_LABEL', 'ATTESTATION', 'AUDIT_REPORT', 'SELF_ASSESSMENT'); -- CreateEnum CREATE TYPE "ResponsibleParty" AS ENUM ('CLIENT', 'SUPPLIER', 'SHARED'); -- CreateTable CREATE TABLE "suppliers" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "ref_no" INTEGER NOT NULL, "name" TEXT NOT NULL, "sector" TEXT, "services" TEXT, "criticality" INTEGER NOT NULL DEFAULT 1, "data_categories" TEXT[] DEFAULT ARRAY[]::TEXT[], "confidentiality" INTEGER NOT NULL DEFAULT 1, "integrity" INTEGER NOT NULL DEFAULT 1, "availability" INTEGER NOT NULL DEFAULT 1, "nis2_relevant" BOOLEAN NOT NULL DEFAULT false, "status" "SupplierStatus" NOT NULL DEFAULT 'ACTIVE', "contact" TEXT, "next_review" TIMESTAMP(3), "notes" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, "created_by" TEXT, CONSTRAINT "suppliers_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "supplier_assets" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "asset_id" TEXT NOT NULL, CONSTRAINT "supplier_assets_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "supplier_assessments" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "type" "AssessmentType" NOT NULL, "status" "AssessmentStatus" NOT NULL DEFAULT 'SENT', "score" INTEGER, "date" TIMESTAMP(3), "next_review" TIMESTAMP(3), "result" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "supplier_assessments_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "contracts" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "type" TEXT NOT NULL DEFAULT 'service', "av_dpa" BOOLEAN NOT NULL DEFAULT false, "security_clauses" BOOLEAN NOT NULL DEFAULT false, "flowdown" BOOLEAN NOT NULL DEFAULT false, "customer_transparency" BOOLEAN NOT NULL DEFAULT false, "valid_from" TIMESTAMP(3), "valid_to" TIMESTAMP(3), "reference" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "contracts_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "ndas" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "parties" TEXT, "info_scope" TEXT, "subject" TEXT, "valid_from" TIMESTAMP(3), "valid_to" TIMESTAMP(3), "obligations" TEXT, "extension_status" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "ndas_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "supplier_evidence" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "kind" "EvidenceKind" NOT NULL, "name" TEXT, "protects_cia" TEXT, "valid_to" TIMESTAMP(3), "adequacy_checked" BOOLEAN NOT NULL DEFAULT false, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "supplier_evidence_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "service_responsibilities" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "it_service" TEXT NOT NULL, "requirement" TEXT NOT NULL, "responsible_party" "ResponsibleParty" NOT NULL DEFAULT 'SHARED', "isa_applicability" TEXT, "evidence" TEXT, "integrated_local_controls" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "service_responsibilities_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "subcontractors" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "name" TEXT NOT NULL, "flowdown_obligation" BOOLEAN NOT NULL DEFAULT false, CONSTRAINT "subcontractors_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "management_decisions" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "reason_no_audit" TEXT NOT NULL, "decision" TEXT NOT NULL, "decided_by" TEXT, "date" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "record_ref" TEXT, CONSTRAINT "management_decisions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "supplier_controls" ( "id" TEXT NOT NULL, "ref" TEXT NOT NULL, "title" TEXT NOT NULL, "objective" TEXT NOT NULL, "must_req" TEXT, "should_req" TEXT, "high_req" TEXT, "very_high_req" TEXT, "simplified_group_assessment" BOOLEAN NOT NULL DEFAULT false, "target_maturity" INTEGER NOT NULL DEFAULT 3, "references" TEXT, CONSTRAINT "supplier_controls_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "supplier_control_maturity" ( "id" TEXT NOT NULL, "tenant_id" TEXT NOT NULL, "supplier_id" TEXT NOT NULL, "control_id" TEXT NOT NULL, "maturity" INTEGER NOT NULL DEFAULT 0, "notes" TEXT, CONSTRAINT "supplier_control_maturity_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "suppliers_tenant_id_idx" ON "suppliers"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "suppliers_tenant_id_ref_no_key" ON "suppliers"("tenant_id", "ref_no"); -- CreateIndex CREATE INDEX "supplier_assets_tenant_id_idx" ON "supplier_assets"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "supplier_assets_supplier_id_asset_id_key" ON "supplier_assets"("supplier_id", "asset_id"); -- CreateIndex CREATE INDEX "supplier_assessments_tenant_id_idx" ON "supplier_assessments"("tenant_id"); -- CreateIndex CREATE INDEX "contracts_tenant_id_idx" ON "contracts"("tenant_id"); -- CreateIndex CREATE INDEX "ndas_tenant_id_idx" ON "ndas"("tenant_id"); -- CreateIndex CREATE INDEX "supplier_evidence_tenant_id_idx" ON "supplier_evidence"("tenant_id"); -- CreateIndex CREATE INDEX "service_responsibilities_tenant_id_idx" ON "service_responsibilities"("tenant_id"); -- CreateIndex CREATE INDEX "subcontractors_tenant_id_idx" ON "subcontractors"("tenant_id"); -- CreateIndex CREATE INDEX "management_decisions_tenant_id_idx" ON "management_decisions"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "supplier_controls_ref_key" ON "supplier_controls"("ref"); -- CreateIndex CREATE INDEX "supplier_control_maturity_tenant_id_idx" ON "supplier_control_maturity"("tenant_id"); -- CreateIndex CREATE UNIQUE INDEX "supplier_control_maturity_supplier_id_control_id_key" ON "supplier_control_maturity"("supplier_id", "control_id"); -- AddForeignKey ALTER TABLE "supplier_assets" ADD CONSTRAINT "supplier_assets_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "supplier_assets" ADD CONSTRAINT "supplier_assets_asset_id_fkey" FOREIGN KEY ("asset_id") REFERENCES "assets"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "supplier_assessments" ADD CONSTRAINT "supplier_assessments_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "contracts" ADD CONSTRAINT "contracts_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ndas" ADD CONSTRAINT "ndas_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "supplier_evidence" ADD CONSTRAINT "supplier_evidence_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "service_responsibilities" ADD CONSTRAINT "service_responsibilities_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "subcontractors" ADD CONSTRAINT "subcontractors_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "management_decisions" ADD CONSTRAINT "management_decisions_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "supplier_control_maturity" ADD CONSTRAINT "supplier_control_maturity_supplier_id_fkey" FOREIGN KEY ("supplier_id") REFERENCES "suppliers"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "supplier_control_maturity" ADD CONSTRAINT "supplier_control_maturity_control_id_fkey" FOREIGN KEY ("control_id") REFERENCES "supplier_controls"("id") ON DELETE CASCADE ON UPDATE CASCADE;