Initial commit: digital reception monorepo (M1-M11 + demo extensions)

This commit is contained in:
2026-05-25 12:59:54 +05:00
commit b9f88194d9
182 changed files with 20578 additions and 0 deletions
@@ -0,0 +1,266 @@
-- CreateExtension
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- CreateExtension
CREATE EXTENSION IF NOT EXISTS "vector";
-- CreateEnum
CREATE TYPE "Role" AS ENUM ('MANAGER', 'SENIOR_ADMIN', 'SECURITY', 'SYSADMIN');
-- CreateEnum
CREATE TYPE "ConsentAction" AS ENUM ('GRANTED', 'REVOKED');
-- CreateEnum
CREATE TYPE "ZoneCode" AS ENUM ('A', 'B', 'C');
-- CreateEnum
CREATE TYPE "TrackStatus" AS ENUM ('UNMATCHED', 'MATCHED', 'ANONYMIZED');
-- CreateEnum
CREATE TYPE "TrackEventType" AS ENUM ('arrived', 'waiting', 'service_started', 'service_ended', 'left_without_service');
-- CreateEnum
CREATE TYPE "ConsentRevocationStatus" AS ENUM ('PENDING', 'DONE');
-- CreateTable
CREATE TABLE "users" (
"id" UUID NOT NULL,
"email" TEXT NOT NULL,
"full_name" TEXT NOT NULL,
"password_hash" TEXT NOT NULL,
"role" "Role" 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 "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "refresh_tokens" (
"id" UUID NOT NULL,
"user_id" UUID NOT NULL,
"token_hash" TEXT NOT NULL,
"expires_at" TIMESTAMP(3) NOT NULL,
"revoked_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "patients" (
"id" UUID NOT NULL,
"polimed_patient_id" TEXT,
"full_name" TEXT,
"consent_received_at" TIMESTAMP(3),
"consent_revoked_at" TIMESTAMP(3),
"pending_deletion_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "patients_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "patient_consents" (
"id" UUID NOT NULL,
"patient_id" UUID NOT NULL,
"action" "ConsentAction" NOT NULL,
"paper_ref" TEXT,
"actor_user_id" UUID NOT NULL,
"occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "patient_consents_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "zones" (
"id" UUID NOT NULL,
"code" "ZoneCode" NOT NULL,
"name" TEXT NOT NULL,
CONSTRAINT "zones_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "cameras" (
"id" UUID NOT NULL,
"name" TEXT NOT NULL,
"rtsp_url" TEXT,
"zone_id" UUID NOT NULL,
CONSTRAINT "cameras_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "tracks" (
"id" UUID NOT NULL,
"patient_id" UUID,
"status" "TrackStatus" NOT NULL DEFAULT 'UNMATCHED',
"first_seen_at" TIMESTAMP(3) NOT NULL,
"last_seen_at" TIMESTAMP(3) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "tracks_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "track_events" (
"id" UUID NOT NULL,
"track_id" UUID NOT NULL,
"type" "TrackEventType" NOT NULL,
"camera_id" UUID NOT NULL,
"zone_id" UUID NOT NULL,
"occurred_at" TIMESTAMP(3) NOT NULL,
"evidence_key" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "track_events_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "face_embeddings" (
"id" UUID NOT NULL,
"embedding" vector(512) NOT NULL,
"patient_id" UUID,
"track_id" UUID,
"camera_id" UUID NOT NULL,
"quality" DOUBLE PRECISION NOT NULL DEFAULT 0,
"captured_at" TIMESTAMP(3) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "face_embeddings_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "visits" (
"id" UUID NOT NULL,
"patient_id" UUID NOT NULL,
"polimed_appointment_id" TEXT,
"arrived_at" TIMESTAMP(3) NOT NULL,
"service_started_at" TIMESTAMP(3),
"service_ended_at" TIMESTAMP(3),
"left_without_service" BOOLEAN NOT NULL DEFAULT false,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "visits_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "biometry_access_log" (
"id" UUID NOT NULL,
"actor_user_id" UUID,
"subject_patient_id" UUID,
"action" TEXT NOT NULL,
"request_path" TEXT,
"occurred_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "biometry_access_log_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "consent_revocation_jobs" (
"id" UUID NOT NULL,
"patient_id" UUID NOT NULL,
"revoked_at" TIMESTAMP(3) NOT NULL,
"scheduled_for" TIMESTAMP(3) NOT NULL,
"status" "ConsentRevocationStatus" NOT NULL DEFAULT 'PENDING',
"completed_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "consent_revocation_jobs_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "refresh_tokens_token_hash_key" ON "refresh_tokens"("token_hash");
-- CreateIndex
CREATE INDEX "refresh_tokens_user_id_idx" ON "refresh_tokens"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "patients_polimed_patient_id_key" ON "patients"("polimed_patient_id");
-- CreateIndex
CREATE INDEX "patient_consents_patient_id_idx" ON "patient_consents"("patient_id");
-- CreateIndex
CREATE UNIQUE INDEX "zones_code_key" ON "zones"("code");
-- CreateIndex
CREATE UNIQUE INDEX "cameras_name_key" ON "cameras"("name");
-- CreateIndex
CREATE INDEX "tracks_status_first_seen_at_idx" ON "tracks"("status", "first_seen_at");
-- CreateIndex
CREATE INDEX "tracks_patient_id_idx" ON "tracks"("patient_id");
-- CreateIndex
CREATE INDEX "track_events_track_id_occurred_at_idx" ON "track_events"("track_id", "occurred_at");
-- CreateIndex
CREATE INDEX "face_embeddings_track_id_idx" ON "face_embeddings"("track_id");
-- CreateIndex
CREATE INDEX "face_embeddings_patient_id_idx" ON "face_embeddings"("patient_id");
-- CreateIndex
CREATE INDEX "face_embeddings_captured_at_idx" ON "face_embeddings"("captured_at");
-- CreateIndex
CREATE INDEX "visits_patient_id_arrived_at_idx" ON "visits"("patient_id", "arrived_at");
-- CreateIndex
CREATE INDEX "biometry_access_log_occurred_at_idx" ON "biometry_access_log"("occurred_at");
-- CreateIndex
CREATE INDEX "biometry_access_log_subject_patient_id_idx" ON "biometry_access_log"("subject_patient_id");
-- CreateIndex
CREATE INDEX "consent_revocation_jobs_status_scheduled_for_idx" ON "consent_revocation_jobs"("status", "scheduled_for");
-- AddForeignKey
ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "patient_consents" ADD CONSTRAINT "patient_consents_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "patients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "patient_consents" ADD CONSTRAINT "patient_consents_actor_user_id_fkey" FOREIGN KEY ("actor_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "cameras" ADD CONSTRAINT "cameras_zone_id_fkey" FOREIGN KEY ("zone_id") REFERENCES "zones"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tracks" ADD CONSTRAINT "tracks_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "patients"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "track_events" ADD CONSTRAINT "track_events_track_id_fkey" FOREIGN KEY ("track_id") REFERENCES "tracks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "track_events" ADD CONSTRAINT "track_events_camera_id_fkey" FOREIGN KEY ("camera_id") REFERENCES "cameras"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "track_events" ADD CONSTRAINT "track_events_zone_id_fkey" FOREIGN KEY ("zone_id") REFERENCES "zones"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "face_embeddings" ADD CONSTRAINT "face_embeddings_track_id_fkey" FOREIGN KEY ("track_id") REFERENCES "tracks"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "face_embeddings" ADD CONSTRAINT "face_embeddings_camera_id_fkey" FOREIGN KEY ("camera_id") REFERENCES "cameras"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "visits" ADD CONSTRAINT "visits_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "patients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "biometry_access_log" ADD CONSTRAINT "biometry_access_log_actor_user_id_fkey" FOREIGN KEY ("actor_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "consent_revocation_jobs" ADD CONSTRAINT "consent_revocation_jobs_patient_id_fkey" FOREIGN KEY ("patient_id") REFERENCES "patients"("id") ON DELETE CASCADE ON UPDATE CASCADE;