seubert-claims/ondeck/prisma/migrations/20260120023729_init/migration.sql
lorentz b036a93da2 Initial commit: OnDeck project
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 13:20:52 +00:00

401 lines
13 KiB
SQL

-- CreateEnum
CREATE TYPE "TaskStatus" AS ENUM ('NOT_STARTED', 'IN_PROGRESS', 'COMPLETED', 'BLOCKED', 'NA', 'CANCELLED');
-- CreateEnum
CREATE TYPE "TaskPriority" AS ENUM ('LOW', 'MEDIUM', 'HIGH', 'URGENT');
-- CreateEnum
CREATE TYPE "TaskTiming" AS ENUM ('PRE_RENEWAL', 'POST_RENEWAL');
-- CreateEnum
CREATE TYPE "DepartmentType" AS ENUM ('PERSONAL_LINES', 'COMMERCIAL_LINES', 'CLAIMS', 'BENEFITS', 'OTHER');
-- CreateTable
CREATE TABLE "users" (
"id" TEXT NOT NULL,
"entra_oid" TEXT NOT NULL,
"email" TEXT NOT NULL,
"display_name" TEXT,
"department" TEXT,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"last_login_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "roles" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"permissions" JSONB NOT NULL DEFAULT '{}',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "roles_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "user_roles" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"role_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "user_roles_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "entra_group_role_mappings" (
"id" TEXT NOT NULL,
"entra_group_id" TEXT NOT NULL,
"role_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "entra_group_role_mappings_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shapes" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"color" TEXT NOT NULL,
"rules" TEXT,
"display_order" INTEGER NOT NULL,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "shapes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "clients" (
"id" TEXT NOT NULL,
"ams_customer_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"address_line1" TEXT,
"address_line2" TEXT,
"city" TEXT,
"state" TEXT,
"zip_code" TEXT,
"phone" TEXT,
"email" TEXT,
"producer_code" TEXT,
"ams_created_at" TIMESTAMP(3),
"ams_modified_at" TIMESTAMP(3),
"shape_id" TEXT,
"shape2_id" TEXT,
"primary_personnel_id" TEXT,
"notes" TEXT,
"custom_fields" JSONB NOT NULL DEFAULT '{}',
"last_synced_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "clients_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "client_personnel" (
"id" TEXT NOT NULL,
"client_id" TEXT NOT NULL,
"employee_name" TEXT NOT NULL,
"employee_code" TEXT NOT NULL,
"role" TEXT,
"is_primary" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "client_personnel_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "policies" (
"id" TEXT NOT NULL,
"ams_policy_id" TEXT NOT NULL,
"client_id" TEXT NOT NULL,
"policy_number" TEXT,
"policy_type" TEXT,
"effective_date" TIMESTAMP(3),
"expiration_date" TIMESTAMP(3) NOT NULL,
"carrier_name" TEXT,
"premium_amount" DECIMAL(12,2),
"status" TEXT,
"ams_created_at" TIMESTAMP(3),
"ams_modified_at" TIMESTAMP(3),
"last_synced_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "policies_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "task_templates" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"department" "DepartmentType" NOT NULL,
"timing" "TaskTiming" NOT NULL,
"days_offset" INTEGER NOT NULL,
"default_priority" "TaskPriority" NOT NULL,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"display_order" INTEGER,
"created_by" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "task_templates_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "tasks" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"department" "DepartmentType" NOT NULL,
"timing" "TaskTiming" NOT NULL,
"days_offset" INTEGER NOT NULL,
"due_date" TIMESTAMP(3) NOT NULL,
"status" "TaskStatus" NOT NULL DEFAULT 'NOT_STARTED',
"priority" "TaskPriority" NOT NULL,
"client_id" TEXT NOT NULL,
"policy_id" TEXT,
"template_id" TEXT,
"created_by" TEXT,
"completed_at" TIMESTAMP(3),
"completed_by" TEXT,
"na_reason" TEXT,
"cancelled_reason" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "tasks_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "task_assignments" (
"id" TEXT NOT NULL,
"task_id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"assigned_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "task_assignments_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "sync_logs" (
"id" TEXT NOT NULL,
"sync_type" TEXT NOT NULL,
"started_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"completed_at" TIMESTAMP(3),
"status" TEXT NOT NULL,
"rows_processed" INTEGER NOT NULL DEFAULT 0,
"rows_inserted" INTEGER NOT NULL DEFAULT 0,
"rows_updated" INTEGER NOT NULL DEFAULT 0,
"error_message" TEXT,
"triggered_by" TEXT,
CONSTRAINT "sync_logs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "sync_config" (
"id" TEXT NOT NULL,
"key" TEXT NOT NULL,
"value" TEXT NOT NULL,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "sync_config_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "audit_logs" (
"id" TEXT NOT NULL,
"user_id" TEXT,
"action" TEXT NOT NULL,
"entity_type" TEXT NOT NULL,
"entity_id" TEXT,
"old_values" JSONB,
"new_values" JSONB,
"ip_address" TEXT,
"user_agent" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "notifications" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"type" TEXT NOT NULL,
"title" TEXT NOT NULL,
"message" TEXT NOT NULL,
"related_entity_type" TEXT,
"related_entity_id" TEXT,
"is_read" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "notifications_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "notification_preferences" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"notification_type" TEXT NOT NULL,
"in_app" BOOLEAN NOT NULL DEFAULT true,
"email" BOOLEAN NOT NULL DEFAULT false,
"teams" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "notification_preferences_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_entra_oid_key" ON "users"("entra_oid");
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "roles_name_key" ON "roles"("name");
-- CreateIndex
CREATE UNIQUE INDEX "user_roles_user_id_role_id_key" ON "user_roles"("user_id", "role_id");
-- CreateIndex
CREATE UNIQUE INDEX "entra_group_role_mappings_entra_group_id_role_id_key" ON "entra_group_role_mappings"("entra_group_id", "role_id");
-- CreateIndex
CREATE UNIQUE INDEX "shapes_name_key" ON "shapes"("name");
-- CreateIndex
CREATE UNIQUE INDEX "clients_ams_customer_id_key" ON "clients"("ams_customer_id");
-- CreateIndex
CREATE INDEX "clients_name_idx" ON "clients"("name");
-- CreateIndex
CREATE INDEX "clients_shape_id_idx" ON "clients"("shape_id");
-- CreateIndex
CREATE INDEX "clients_shape2_id_idx" ON "clients"("shape2_id");
-- CreateIndex
CREATE UNIQUE INDEX "client_personnel_client_id_employee_code_key" ON "client_personnel"("client_id", "employee_code");
-- CreateIndex
CREATE UNIQUE INDEX "policies_ams_policy_id_key" ON "policies"("ams_policy_id");
-- CreateIndex
CREATE INDEX "policies_client_id_idx" ON "policies"("client_id");
-- CreateIndex
CREATE INDEX "policies_expiration_date_idx" ON "policies"("expiration_date");
-- CreateIndex
CREATE INDEX "tasks_client_id_idx" ON "tasks"("client_id");
-- CreateIndex
CREATE INDEX "tasks_policy_id_idx" ON "tasks"("policy_id");
-- CreateIndex
CREATE INDEX "tasks_status_idx" ON "tasks"("status");
-- CreateIndex
CREATE INDEX "tasks_due_date_idx" ON "tasks"("due_date");
-- CreateIndex
CREATE INDEX "tasks_department_idx" ON "tasks"("department");
-- CreateIndex
CREATE UNIQUE INDEX "task_assignments_task_id_user_id_key" ON "task_assignments"("task_id", "user_id");
-- CreateIndex
CREATE INDEX "sync_logs_sync_type_idx" ON "sync_logs"("sync_type");
-- CreateIndex
CREATE INDEX "sync_logs_started_at_idx" ON "sync_logs"("started_at");
-- CreateIndex
CREATE UNIQUE INDEX "sync_config_key_key" ON "sync_config"("key");
-- CreateIndex
CREATE INDEX "audit_logs_user_id_idx" ON "audit_logs"("user_id");
-- CreateIndex
CREATE INDEX "audit_logs_entity_type_idx" ON "audit_logs"("entity_type");
-- CreateIndex
CREATE INDEX "audit_logs_created_at_idx" ON "audit_logs"("created_at");
-- CreateIndex
CREATE INDEX "notifications_user_id_is_read_idx" ON "notifications"("user_id", "is_read");
-- CreateIndex
CREATE INDEX "notifications_created_at_idx" ON "notifications"("created_at");
-- CreateIndex
CREATE UNIQUE INDEX "notification_preferences_user_id_notification_type_key" ON "notification_preferences"("user_id", "notification_type");
-- AddForeignKey
ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "entra_group_role_mappings" ADD CONSTRAINT "entra_group_role_mappings_role_id_fkey" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "clients" ADD CONSTRAINT "clients_shape_id_fkey" FOREIGN KEY ("shape_id") REFERENCES "shapes"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "clients" ADD CONSTRAINT "clients_shape2_id_fkey" FOREIGN KEY ("shape2_id") REFERENCES "shapes"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "client_personnel" ADD CONSTRAINT "client_personnel_client_id_fkey" FOREIGN KEY ("client_id") REFERENCES "clients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "policies" ADD CONSTRAINT "policies_client_id_fkey" FOREIGN KEY ("client_id") REFERENCES "clients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "task_templates" ADD CONSTRAINT "task_templates_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_client_id_fkey" FOREIGN KEY ("client_id") REFERENCES "clients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_policy_id_fkey" FOREIGN KEY ("policy_id") REFERENCES "policies"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_template_id_fkey" FOREIGN KEY ("template_id") REFERENCES "task_templates"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_created_by_fkey" FOREIGN KEY ("created_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_completed_by_fkey" FOREIGN KEY ("completed_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "task_assignments" ADD CONSTRAINT "task_assignments_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "task_assignments" ADD CONSTRAINT "task_assignments_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "sync_logs" ADD CONSTRAINT "sync_logs_triggered_by_fkey" FOREIGN KEY ("triggered_by") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "notifications" ADD CONSTRAINT "notifications_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "notification_preferences" ADD CONSTRAINT "notification_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;