The destination of the wayfinder map: directory and module structure, the domain model as real schema files, permission boundaries expressed as code, and typed seams where the undecided parts land. Satisfies the four structural requirements earlier resolutions handed to a layout that did not exist: - a single database entry point (#11) — the pool is not exported - a scheduler entry point with actor context and no request (#13) - an entitlement assertion helper (#20, #34) — its call sites are the paid-feature list - an enumerated list of privileged RLS bypasses (#33) — three of them Seams carry real types and throw with the ticket that owns them, so the skeleton wires up and fails only where a decision is genuinely missing. Verified: tsc --noEmit clean; drizzle-kit generate produces RLS on 18 tables and 6 policies calling the release-level functions. Resolves #35 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
445 lines
28 KiB
SQL
445 lines
28 KiB
SQL
CREATE TYPE "public"."capability" AS ENUM('issuer', 'vendor');--> statement-breakpoint
|
|
CREATE TYPE "public"."category_change_kind" AS ENUM('split', 'merge', 'retire', 'remap');--> statement-breakpoint
|
|
CREATE TYPE "public"."grant_provenance" AS ENUM('manual', 'split_event', 'merge_event');--> statement-breakpoint
|
|
CREATE TYPE "public"."amendment_class" AS ENUM('substantive', 'clarification');--> statement-breakpoint
|
|
CREATE TYPE "public"."confirmation_state" AS ENUM('unconfirmed', 'confirmed', 'corrected');--> statement-breakpoint
|
|
CREATE TYPE "public"."requirement_kind" AS ENUM('mandatory_gate', 'scored_criterion', 'certification_form', 'compliance_schedule', 'pricing', 'narrative');--> statement-breakpoint
|
|
CREATE TYPE "public"."solicitation_stage" AS ENUM('draft', 'open', 'evaluating', 'finalists', 'awarded', 'cancelled');--> statement-breakpoint
|
|
CREATE TYPE "public"."coverage" AS ENUM('answered', 'not_answered', 'indeterminate');--> statement-breakpoint
|
|
CREATE TYPE "public"."participation_state" AS ENUM('invited', 'opened', 'acknowledged', 'intends_to_bid', 'submitted', 'withdrawn');--> statement-breakpoint
|
|
CREATE TYPE "public"."disclosure_class" AS ENUM('vendor_identity', 'participation_signal', 'scenario_quantity', 'answer_text', 'exception_text', 'price_quote', 'derived_cost', 'vault_document', 'own_scoring');--> statement-breakpoint
|
|
CREATE TYPE "public"."release_level" AS ENUM('none', 'invited', 'acknowledged', 'submitted', 'open', 'evaluating', 'finalist', 'awarded');--> statement-breakpoint
|
|
CREATE TYPE "public"."expiry_state" AS ENUM('current', 'expiring_soon', 'expired');--> statement-breakpoint
|
|
CREATE TYPE "public"."tier" AS ENUM('base', 'pro', 'enterprise');--> statement-breakpoint
|
|
CREATE TYPE "public"."sweep_finding_kind" AS ENUM('asserted_obligation', 'uncovered_span');--> statement-breakpoint
|
|
CREATE TABLE "actor" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"email" text NOT NULL,
|
|
"display_name" text NOT NULL,
|
|
CONSTRAINT "actor_email_unique" UNIQUE("email")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "membership" (
|
|
"actor_id" uuid NOT NULL,
|
|
"org_id" uuid NOT NULL,
|
|
CONSTRAINT "membership_actor_id_org_id_pk" PRIMARY KEY("actor_id","org_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "org_capability" (
|
|
"org_id" uuid NOT NULL,
|
|
"capability" "capability" NOT NULL,
|
|
"granted_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT "org_capability_org_id_capability_pk" PRIMARY KEY("org_id","capability")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "organization" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"legal_name" text NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "roster_entry" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"retailer_org_id" uuid NOT NULL,
|
|
"name" text NOT NULL,
|
|
"contact_email" text,
|
|
"duns" text,
|
|
"claimed_vendor_org_id" uuid,
|
|
"claimed_at" timestamp with time zone,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT "roster_entry_retailer_org_id_name_unique" UNIQUE("retailer_org_id","name")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "category_change_event" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"kind" "category_change_kind" NOT NULL,
|
|
"retailer_org_id" uuid,
|
|
"from_ids" uuid[] NOT NULL,
|
|
"to_ids" uuid[] NOT NULL,
|
|
"rows_written" integer DEFAULT 0 NOT NULL,
|
|
"performed_by" uuid NOT NULL,
|
|
"performed_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "eligibility" (
|
|
"retailer_org_id" uuid NOT NULL,
|
|
"vendor_org_id" uuid NOT NULL,
|
|
"local_category_id" uuid NOT NULL,
|
|
"provenance" "grant_provenance" DEFAULT 'manual' NOT NULL,
|
|
"provenance_event_id" uuid,
|
|
"granted_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"revoked_at" timestamp with time zone,
|
|
CONSTRAINT "eligibility_retailer_org_id_vendor_org_id_local_category_id_pk" PRIMARY KEY("retailer_org_id","vendor_org_id","local_category_id")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "local_category" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"retailer_org_id" uuid NOT NULL,
|
|
"label" text NOT NULL,
|
|
"spine_leaf_id" uuid,
|
|
"valid_from" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"valid_to" timestamp with time zone,
|
|
"superseded_by" uuid[] DEFAULT '{}' NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "spine_node" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"label" text NOT NULL,
|
|
"group_id" uuid,
|
|
"unspsc_families" text[] DEFAULT '{}' NOT NULL,
|
|
"valid_from" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"valid_to" timestamp with time zone,
|
|
"superseded_by" uuid[] DEFAULT '{}' NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "criterion" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"label" text NOT NULL,
|
|
"max_points" numeric(8, 2) NOT NULL,
|
|
"weight" numeric(8, 2) NOT NULL,
|
|
"scale_anchors" jsonb DEFAULT '[]'::jsonb NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "criterion" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "criterion_requirement" (
|
|
"criterion_id" uuid NOT NULL,
|
|
"requirement_id" uuid NOT NULL,
|
|
"authored_by" uuid NOT NULL,
|
|
"frozen_at" timestamp with time zone,
|
|
CONSTRAINT "criterion_requirement_criterion_id_requirement_id_pk" PRIMARY KEY("criterion_id","requirement_id")
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "criterion_requirement" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "evaluation_scenario" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"declared_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "price_line" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"label" text NOT NULL,
|
|
"unit" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "requirement" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"ordinal" integer NOT NULL,
|
|
"kind" "requirement_kind" NOT NULL,
|
|
"text" text NOT NULL,
|
|
"response_obligation" text,
|
|
"provenance_document_id" uuid,
|
|
"provenance_page" integer,
|
|
"provenance_span" jsonb,
|
|
"confirmation_state" "confirmation_state" DEFAULT 'unconfirmed' NOT NULL,
|
|
"confirmed_by" uuid,
|
|
"confirmed_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "requirement" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "scenario_quantity" (
|
|
"scenario_id" uuid NOT NULL,
|
|
"price_line_id" uuid NOT NULL,
|
|
"quantity" numeric(14, 3) NOT NULL,
|
|
CONSTRAINT "scenario_quantity_scenario_id_price_line_id_pk" PRIMARY KEY("scenario_id","price_line_id")
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "scenario_quantity" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "solicitation" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"issuer_org_id" uuid NOT NULL,
|
|
"local_category_id" uuid NOT NULL,
|
|
"title" text NOT NULL,
|
|
"stage" "solicitation_stage" DEFAULT 'draft' NOT NULL,
|
|
"issued_at" timestamp with time zone,
|
|
"responses_due_at" timestamp with time zone,
|
|
"acknowledgement_required" boolean DEFAULT false NOT NULL,
|
|
"volume_band" text
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "solicitation" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "solicitation_amendment" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"class" "amendment_class" NOT NULL,
|
|
"summary" text NOT NULL,
|
|
"requirement_ids" uuid[] DEFAULT '{}' NOT NULL,
|
|
"deadline_extended_to" timestamp with time zone,
|
|
"authored_by" uuid NOT NULL,
|
|
"authored_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "solicitation_document" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"kind" text NOT NULL,
|
|
"blob_ref" text NOT NULL,
|
|
"sha256" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "solicitation_document" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "answer" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"requirement_id" uuid NOT NULL,
|
|
"coverage" "coverage" NOT NULL,
|
|
"text" text,
|
|
"provenance_document_id" uuid,
|
|
"provenance_page" integer,
|
|
"provenance_span" jsonb,
|
|
"vendor_attested" boolean DEFAULT false NOT NULL,
|
|
"reopened_by_amendment_id" uuid
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "answer" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "derived_cost" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"scenario_id" uuid NOT NULL,
|
|
"amount" numeric(16, 2) NOT NULL,
|
|
"computed_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "derived_cost" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "exception" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"requirement_id" uuid,
|
|
"text" text NOT NULL,
|
|
"price_delta" numeric(14, 2)
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "exception" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "participation" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"vendor_org_id" uuid NOT NULL,
|
|
"state" "participation_state" DEFAULT 'invited' NOT NULL,
|
|
"acknowledged_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "participation" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "price_quote" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"price_line_id" uuid NOT NULL,
|
|
"rate_structure" jsonb NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "price_quote" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "response" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"vendor_org_id" uuid NOT NULL,
|
|
"submitted_at" timestamp with time zone,
|
|
"attested_by" uuid,
|
|
"attested_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "response" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "response_document" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"blob_ref" text NOT NULL,
|
|
"sha256" text NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "response_document" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "gate_result" (
|
|
"response_id" uuid NOT NULL,
|
|
"requirement_id" uuid NOT NULL,
|
|
"passed" boolean NOT NULL,
|
|
"computed_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "gate_result" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "rubric_amendment" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"reason" text NOT NULL,
|
|
"voided_score_ids" uuid[] DEFAULT '{}' NOT NULL,
|
|
"authored_by" uuid NOT NULL,
|
|
"authored_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "score" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"criterion_id" uuid NOT NULL,
|
|
"points" numeric(8, 2) NOT NULL,
|
|
"committed_by" uuid NOT NULL,
|
|
"committed_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"derived_from_suggestion_id" uuid,
|
|
"voided_by_amendment_id" uuid
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "score" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "suggestion" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"response_id" uuid NOT NULL,
|
|
"criterion_id" uuid NOT NULL,
|
|
"proposed_points" numeric(8, 2),
|
|
"anchor_matched" text,
|
|
"citations" jsonb DEFAULT '[]'::jsonb NOT NULL,
|
|
"confidence" numeric(4, 3),
|
|
"model_version" text NOT NULL,
|
|
"no_evidence_found" boolean DEFAULT false NOT NULL,
|
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "suggestion" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "export_event" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"actor_id" uuid NOT NULL,
|
|
"org_id" uuid NOT NULL,
|
|
"capability" text NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"classes" text[] NOT NULL,
|
|
"row_count" integer NOT NULL,
|
|
"at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "release_matrix" (
|
|
"version" integer NOT NULL,
|
|
"class" "disclosure_class" NOT NULL,
|
|
"level" "release_level" NOT NULL,
|
|
"released" text NOT NULL,
|
|
"effective_from" timestamp with time zone DEFAULT now() NOT NULL,
|
|
CONSTRAINT "release_matrix_version_class_level_pk" PRIMARY KEY("version","class","level")
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "document_type" (
|
|
"id" text PRIMARY KEY NOT NULL,
|
|
"label" text NOT NULL,
|
|
"expiry_rule" text
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "retailer_acceptance" (
|
|
"document_id" uuid NOT NULL,
|
|
"retailer_org_id" uuid NOT NULL,
|
|
"accepted_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"vendor_disclosed_name" text,
|
|
CONSTRAINT "retailer_acceptance_document_id_retailer_org_id_pk" PRIMARY KEY("document_id","retailer_org_id")
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "retailer_acceptance" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "vault_document" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"vendor_org_id" uuid NOT NULL,
|
|
"type_id" text NOT NULL,
|
|
"blob_ref" text NOT NULL,
|
|
"sha256" text NOT NULL,
|
|
"expires_at" timestamp with time zone,
|
|
"expiry_state" "expiry_state" DEFAULT 'current' NOT NULL,
|
|
"expiry_computed_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "vault_document" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
|
|
CREATE TABLE "entitlement" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"beneficiary_org_id" uuid NOT NULL,
|
|
"payer_org_id" uuid NOT NULL,
|
|
"tier" "tier" NOT NULL,
|
|
"seats" integer,
|
|
"started_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"lapsed_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "confirmation_event" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"requirement_id" uuid NOT NULL,
|
|
"confirmed_by" uuid NOT NULL,
|
|
"corrected" text,
|
|
"at" timestamp with time zone DEFAULT now() NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "sweep_finding" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"document_id" uuid NOT NULL,
|
|
"kind" "sweep_finding_kind" NOT NULL,
|
|
"page" integer NOT NULL,
|
|
"span" jsonb NOT NULL,
|
|
"quoted_text" text NOT NULL,
|
|
"resolved_by_requirement_id" uuid,
|
|
"dismissed_by" uuid,
|
|
"dismissed_at" timestamp with time zone
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "vendor_omission_report" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"solicitation_id" uuid NOT NULL,
|
|
"vendor_org_id" uuid NOT NULL,
|
|
"body" text NOT NULL,
|
|
"reported_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
"acted_on_at" timestamp with time zone,
|
|
"acted_on_by" uuid
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "membership" ADD CONSTRAINT "membership_actor_id_actor_id_fk" FOREIGN KEY ("actor_id") REFERENCES "public"."actor"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "membership" ADD CONSTRAINT "membership_org_id_organization_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "org_capability" ADD CONSTRAINT "org_capability_org_id_organization_id_fk" FOREIGN KEY ("org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "roster_entry" ADD CONSTRAINT "roster_entry_retailer_org_id_organization_id_fk" FOREIGN KEY ("retailer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "roster_entry" ADD CONSTRAINT "roster_entry_claimed_vendor_org_id_organization_id_fk" FOREIGN KEY ("claimed_vendor_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "category_change_event" ADD CONSTRAINT "category_change_event_retailer_org_id_organization_id_fk" FOREIGN KEY ("retailer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "eligibility" ADD CONSTRAINT "eligibility_retailer_org_id_organization_id_fk" FOREIGN KEY ("retailer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "eligibility" ADD CONSTRAINT "eligibility_vendor_org_id_organization_id_fk" FOREIGN KEY ("vendor_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "eligibility" ADD CONSTRAINT "eligibility_local_category_id_local_category_id_fk" FOREIGN KEY ("local_category_id") REFERENCES "public"."local_category"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "local_category" ADD CONSTRAINT "local_category_retailer_org_id_organization_id_fk" FOREIGN KEY ("retailer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "local_category" ADD CONSTRAINT "local_category_spine_leaf_id_spine_node_id_fk" FOREIGN KEY ("spine_leaf_id") REFERENCES "public"."spine_node"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "criterion" ADD CONSTRAINT "criterion_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "criterion_requirement" ADD CONSTRAINT "criterion_requirement_criterion_id_criterion_id_fk" FOREIGN KEY ("criterion_id") REFERENCES "public"."criterion"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "criterion_requirement" ADD CONSTRAINT "criterion_requirement_requirement_id_requirement_id_fk" FOREIGN KEY ("requirement_id") REFERENCES "public"."requirement"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "evaluation_scenario" ADD CONSTRAINT "evaluation_scenario_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "price_line" ADD CONSTRAINT "price_line_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "requirement" ADD CONSTRAINT "requirement_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "requirement" ADD CONSTRAINT "requirement_provenance_document_id_solicitation_document_id_fk" FOREIGN KEY ("provenance_document_id") REFERENCES "public"."solicitation_document"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "scenario_quantity" ADD CONSTRAINT "scenario_quantity_scenario_id_evaluation_scenario_id_fk" FOREIGN KEY ("scenario_id") REFERENCES "public"."evaluation_scenario"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "scenario_quantity" ADD CONSTRAINT "scenario_quantity_price_line_id_price_line_id_fk" FOREIGN KEY ("price_line_id") REFERENCES "public"."price_line"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "solicitation" ADD CONSTRAINT "solicitation_issuer_org_id_organization_id_fk" FOREIGN KEY ("issuer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "solicitation" ADD CONSTRAINT "solicitation_local_category_id_local_category_id_fk" FOREIGN KEY ("local_category_id") REFERENCES "public"."local_category"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "solicitation_amendment" ADD CONSTRAINT "solicitation_amendment_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "solicitation_document" ADD CONSTRAINT "solicitation_document_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "answer" ADD CONSTRAINT "answer_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "answer" ADD CONSTRAINT "answer_requirement_id_requirement_id_fk" FOREIGN KEY ("requirement_id") REFERENCES "public"."requirement"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "answer" ADD CONSTRAINT "answer_provenance_document_id_response_document_id_fk" FOREIGN KEY ("provenance_document_id") REFERENCES "public"."response_document"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "derived_cost" ADD CONSTRAINT "derived_cost_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "derived_cost" ADD CONSTRAINT "derived_cost_scenario_id_evaluation_scenario_id_fk" FOREIGN KEY ("scenario_id") REFERENCES "public"."evaluation_scenario"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "exception" ADD CONSTRAINT "exception_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "exception" ADD CONSTRAINT "exception_requirement_id_requirement_id_fk" FOREIGN KEY ("requirement_id") REFERENCES "public"."requirement"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "participation" ADD CONSTRAINT "participation_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "participation" ADD CONSTRAINT "participation_vendor_org_id_organization_id_fk" FOREIGN KEY ("vendor_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "price_quote" ADD CONSTRAINT "price_quote_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "price_quote" ADD CONSTRAINT "price_quote_price_line_id_price_line_id_fk" FOREIGN KEY ("price_line_id") REFERENCES "public"."price_line"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "response" ADD CONSTRAINT "response_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "response" ADD CONSTRAINT "response_vendor_org_id_organization_id_fk" FOREIGN KEY ("vendor_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "response_document" ADD CONSTRAINT "response_document_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "gate_result" ADD CONSTRAINT "gate_result_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "gate_result" ADD CONSTRAINT "gate_result_requirement_id_requirement_id_fk" FOREIGN KEY ("requirement_id") REFERENCES "public"."requirement"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "score" ADD CONSTRAINT "score_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "score" ADD CONSTRAINT "score_criterion_id_criterion_id_fk" FOREIGN KEY ("criterion_id") REFERENCES "public"."criterion"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "score" ADD CONSTRAINT "score_derived_from_suggestion_id_suggestion_id_fk" FOREIGN KEY ("derived_from_suggestion_id") REFERENCES "public"."suggestion"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "suggestion" ADD CONSTRAINT "suggestion_response_id_response_id_fk" FOREIGN KEY ("response_id") REFERENCES "public"."response"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "suggestion" ADD CONSTRAINT "suggestion_criterion_id_criterion_id_fk" FOREIGN KEY ("criterion_id") REFERENCES "public"."criterion"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "retailer_acceptance" ADD CONSTRAINT "retailer_acceptance_document_id_vault_document_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."vault_document"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "retailer_acceptance" ADD CONSTRAINT "retailer_acceptance_retailer_org_id_organization_id_fk" FOREIGN KEY ("retailer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "vault_document" ADD CONSTRAINT "vault_document_vendor_org_id_organization_id_fk" FOREIGN KEY ("vendor_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "vault_document" ADD CONSTRAINT "vault_document_type_id_document_type_id_fk" FOREIGN KEY ("type_id") REFERENCES "public"."document_type"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "entitlement" ADD CONSTRAINT "entitlement_beneficiary_org_id_organization_id_fk" FOREIGN KEY ("beneficiary_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "entitlement" ADD CONSTRAINT "entitlement_payer_org_id_organization_id_fk" FOREIGN KEY ("payer_org_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "confirmation_event" ADD CONSTRAINT "confirmation_event_requirement_id_requirement_id_fk" FOREIGN KEY ("requirement_id") REFERENCES "public"."requirement"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "sweep_finding" ADD CONSTRAINT "sweep_finding_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "sweep_finding" ADD CONSTRAINT "sweep_finding_document_id_solicitation_document_id_fk" FOREIGN KEY ("document_id") REFERENCES "public"."solicitation_document"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "sweep_finding" ADD CONSTRAINT "sweep_finding_resolved_by_requirement_id_requirement_id_fk" FOREIGN KEY ("resolved_by_requirement_id") REFERENCES "public"."requirement"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "vendor_omission_report" ADD CONSTRAINT "vendor_omission_report_solicitation_id_solicitation_id_fk" FOREIGN KEY ("solicitation_id") REFERENCES "public"."solicitation"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
CREATE POLICY "scenario_quantity_read" ON "scenario_quantity" AS PERMISSIVE FOR SELECT TO public USING (class_released(release_level_for_solicitation(
|
|
(SELECT solicitation_id FROM evaluation_scenario WHERE id = scenario_id)
|
|
), 'scenario_quantity'));--> statement-breakpoint
|
|
CREATE POLICY "answer_read" ON "answer" AS PERMISSIVE FOR SELECT TO public USING (class_released(release_level_for_response(response_id), 'answer_text'));--> statement-breakpoint
|
|
CREATE POLICY "derived_cost_read" ON "derived_cost" AS PERMISSIVE FOR SELECT TO public USING (class_released(release_level_for_response(response_id), 'derived_cost'));--> statement-breakpoint
|
|
CREATE POLICY "exception_read" ON "exception" AS PERMISSIVE FOR SELECT TO public USING (class_released(release_level_for_response(response_id), 'exception_text'));--> statement-breakpoint
|
|
CREATE POLICY "price_quote_read" ON "price_quote" AS PERMISSIVE FOR SELECT TO public USING (class_released(release_level_for_response(response_id), 'price_quote'));--> statement-breakpoint
|
|
CREATE POLICY "score_read" ON "score" AS PERMISSIVE FOR SELECT TO public USING (class_released(release_level_for_response(response_id), 'own_scoring')); |