// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;

#nullable disable

namespace VigilCareRecordsAPI.Data.Migrations
{
    [DbContext(typeof(AppDbContext))]
    [Migration("20260626074837_AddLiveEncountersAndObservations")]
    partial class AddLiveEncountersAndObservations
    {
        /// <inheritdoc />
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("ProductVersion", "8.0.4")
                .HasAnnotation("Relational:MaxIdentifierLength", 63);

            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);

            modelBuilder.Entity("AuthAuditEvent", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<string>("EventType")
                        .IsRequired()
                        .HasMaxLength(30)
                        .HasColumnType("character varying(30)")
                        .HasColumnName("event_type");

                    b.Property<string>("MetadataJson")
                        .HasColumnType("jsonb")
                        .HasColumnName("metadata_json");

                    b.Property<DateTimeOffset>("OccurredAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("occurred_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid")
                        .HasColumnName("user_id");

                    b.HasKey("Id");

                    b.HasIndex("UserId", "OccurredAt");

                    b.ToTable("auth_audit_events", null, t =>
                        {
                            t.HasCheckConstraint("chk_auth_audit_events_event_type", "event_type IN ('USER_LOGOUT', 'TOKEN_REFRESHED')");
                        });
                });

            modelBuilder.Entity("DigitizationBatch", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<Guid?>("ApprovedByUserId")
                        .HasColumnType("uuid")
                        .HasColumnName("approved_by_user_id");

                    b.Property<string>("BatchType")
                        .IsRequired()
                        .HasMaxLength(30)
                        .HasColumnType("character varying(30)")
                        .HasColumnName("batch_type");

                    b.Property<bool>("ClinicianAttestation")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(false)
                        .HasColumnName("clinician_attestation");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("DocumentRef")
                        .IsRequired()
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("document_ref");

                    b.Property<string>("DocumentSha256")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasColumnName("document_sha256");

                    b.Property<bool>("EnableRetroactiveAlerts")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(false)
                        .HasColumnName("enable_retroactive_alerts");

                    b.Property<Guid?>("EncounterDraftId")
                        .HasColumnType("uuid")
                        .HasColumnName("encounter_draft_id");

                    b.Property<Guid?>("EnteredByUserId")
                        .HasColumnType("uuid")
                        .HasColumnName("entered_by_user_id");

                    b.Property<Guid?>("PatientId")
                        .HasColumnType("uuid")
                        .HasColumnName("patient_id");

                    b.Property<DateTimeOffset?>("PromotedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("promoted_at");

                    b.Property<Guid?>("PromotionEncounterId")
                        .HasColumnType("uuid")
                        .HasColumnName("promotion_encounter_id");

                    b.Property<string>("RejectionReason")
                        .HasColumnType("text")
                        .HasColumnName("rejection_reason");

                    b.Property<string>("Status")
                        .IsRequired()
                        .ValueGeneratedOnAdd()
                        .HasMaxLength(30)
                        .HasColumnType("character varying(30)")
                        .HasColumnName("status")
                        .HasDefaultValueSql("'UPLOADED'");

                    b.Property<Guid?>("SupersedesBatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("supersedes_batch_id");

                    b.Property<string>("Track")
                        .IsRequired()
                        .ValueGeneratedOnAdd()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("track")
                        .HasDefaultValueSql("'BACKFILL'");

                    b.Property<DateTimeOffset>("UpdatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("updated_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<Guid?>("VerifiedByUserId")
                        .HasColumnType("uuid")
                        .HasColumnName("verified_by_user_id");

                    b.HasKey("Id");

                    b.HasIndex("ApprovedByUserId");

                    b.HasIndex("EnteredByUserId");

                    b.HasIndex("Status");

                    b.HasIndex("SupersedesBatchId")
                        .HasFilter("supersedes_batch_id IS NOT NULL");

                    b.HasIndex("VerifiedByUserId");

                    b.HasIndex("DocumentSha256", "PatientId", "CreatedAt");

                    b.ToTable("digitization_batches", null, t =>
                        {
                            t.HasCheckConstraint("chk_batches_batch_type", "batch_type IN ('PATIENT_REGISTRATION', 'ENCOUNTER_SUMMARY', 'VITALS_SHEET', 'LAB_RESULTS', 'MEDICATION_LIST', 'ALLERGY_UPDATE', 'MIXED')");

                            t.HasCheckConstraint("chk_batches_status", "status IN ('UPLOADED', 'IN_ENTRY', 'PENDING_VERIFICATION', 'REJECTED', 'VERIFIED', 'AWAITING_CLINICAL_APPROVAL', 'APPROVED', 'PROMOTED')");

                            t.HasCheckConstraint("chk_batches_track", "track IN ('BACKFILL', 'LIVE_CAPTURE')");
                        });
                });

            modelBuilder.Entity("DigitizationEvent", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<Guid>("ActorUserId")
                        .HasColumnType("uuid")
                        .HasColumnName("actor_user_id");

                    b.Property<Guid>("BatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("batch_id");

                    b.Property<string>("EventType")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("event_type");

                    b.Property<string>("MetadataJson")
                        .HasColumnType("jsonb")
                        .HasColumnName("metadata_json");

                    b.Property<DateTimeOffset>("OccurredAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("occurred_at")
                        .HasDefaultValueSql("NOW()");

                    b.HasKey("Id");

                    b.HasIndex("ActorUserId");

                    b.HasIndex("BatchId", "OccurredAt");

                    b.ToTable("digitization_events", null, t =>
                        {
                            t.HasCheckConstraint("chk_digitization_events_event_type", "event_type IN ('uploaded', 'entry_started', 'submitted_for_verification', 'rejected', 'verified', 'verified_pending_clinical', 'awaiting_clinical_approval', 'approved', 'promoted', 'live_capture_attested', 'correction_requested', 'verification_failed', 'superseded', 'correction_promoted', 'correction_uploaded', 'promotion_retry_succeeded', 'promotion_retry_failed', 'promotion_retry_exhausted', 'promotion_failed')");
                        });
                });

            modelBuilder.Entity("DraftEncounter", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset?>("AdmissionDate")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("admission_date");

                    b.Property<string>("AdmissionReason")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("admission_reason");

                    b.Property<Guid>("BatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("batch_id");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("Department")
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("department");

                    b.Property<string>("DischargeDiagnosis")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("discharge_diagnosis");

                    b.Property<string>("RoomBed")
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("room_bed");

                    b.Property<string>("Status")
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("status");

                    b.Property<DateTimeOffset>("UpdatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("updated_at")
                        .HasDefaultValueSql("NOW()");

                    b.HasKey("Id");

                    b.HasIndex("BatchId")
                        .IsUnique();

                    b.ToTable("draft_encounters", null, t =>
                        {
                            t.HasCheckConstraint("chk_draft_encounters_department", "department IS NULL OR department IN ('Emergency Department', 'Internal Medicine', 'General Medicine', 'Surgery', 'ICU', 'NICU', 'Medical-Surgical', 'Outpatient Clinic', 'Pediatrics', 'Obstetrics & Gynecology', 'Labor & Delivery', 'Cardiology', 'Orthopedics', 'Neurology', 'Oncology', 'Radiology', 'Laboratory', 'Psychiatry', 'Physical Therapy', 'Anesthesiology')");
                        });
                });

            modelBuilder.Entity("DraftObservation", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<Guid>("BatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("batch_id");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("Note")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("note");

                    b.Property<string>("ObservationCode")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("observation_code");

                    b.Property<DateTimeOffset>("RecordedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("recorded_at");

                    b.Property<string>("Unit")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("unit");

                    b.Property<decimal>("Value")
                        .HasColumnType("decimal(10,3)")
                        .HasColumnName("value");

                    b.HasKey("Id");

                    b.HasIndex("BatchId", "ObservationCode");

                    b.ToTable("draft_observations", (string)null);
                });

            modelBuilder.Entity("DraftPatient", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<string>("AllergiesJson")
                        .HasColumnType("jsonb")
                        .HasColumnName("allergies_json");

                    b.Property<Guid>("BatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("batch_id");

                    b.Property<string>("BloodType")
                        .HasMaxLength(10)
                        .HasColumnType("character varying(10)")
                        .HasColumnName("blood_type");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<DateOnly?>("DateOfBirth")
                        .HasColumnType("date")
                        .HasColumnName("date_of_birth");

                    b.Property<string>("EmergencyContact")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("emergency_contact");

                    b.Property<string>("FullName")
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)")
                        .HasColumnName("full_name");

                    b.Property<string>("MedicationsJson")
                        .HasColumnType("jsonb")
                        .HasColumnName("medications_json");

                    b.Property<bool>("NoActiveMedications")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(false)
                        .HasColumnName("no_active_medications");

                    b.Property<bool>("NoKnownAllergies")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(false)
                        .HasColumnName("no_known_allergies");

                    b.Property<string>("Sex")
                        .HasMaxLength(10)
                        .HasColumnType("character varying(10)")
                        .HasColumnName("sex");

                    b.Property<DateTimeOffset>("UpdatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("updated_at")
                        .HasDefaultValueSql("NOW()");

                    b.HasKey("Id");

                    b.HasIndex("BatchId")
                        .IsUnique();

                    b.ToTable("draft_patients", null, t =>
                        {
                            t.HasCheckConstraint("chk_draft_patients_blood_type", "blood_type IS NULL OR blood_type IN ('A+', 'A-', 'B+', 'B-', 'AB+', 'AB-', 'O+', 'O-')");
                        });
                });

            modelBuilder.Entity("Encounter", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset?>("AdmissionDate")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("admission_date");

                    b.Property<string>("AdmissionReason")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("admission_reason");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("Department")
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("department");

                    b.Property<string>("DischargeDiagnosis")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("discharge_diagnosis");

                    b.Property<Guid>("PatientId")
                        .HasColumnType("uuid")
                        .HasColumnName("patient_id");

                    b.Property<string>("RoomBed")
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("room_bed");

                    b.Property<Guid?>("SourceBatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("source_batch_id");

                    b.Property<string>("Status")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("status");

                    b.Property<DateTimeOffset>("UpdatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("updated_at")
                        .HasDefaultValueSql("NOW()");

                    b.HasKey("Id");

                    b.HasIndex("PatientId", "Status")
                        .HasDatabaseName("ix_encounters_patient_status");

                    b.ToTable("encounters", "clinical", t =>
                        {
                            t.HasCheckConstraint("chk_encounters_department", "department IS NULL OR department IN ('Emergency Department', 'Internal Medicine', 'General Medicine', 'Surgery', 'ICU', 'NICU', 'Medical-Surgical', 'Outpatient Clinic', 'Pediatrics', 'Obstetrics & Gynecology', 'Labor & Delivery', 'Cardiology', 'Orthopedics', 'Neurology', 'Oncology', 'Radiology', 'Laboratory', 'Psychiatry', 'Physical Therapy', 'Anesthesiology')");
                        });
                });

            modelBuilder.Entity("IdempotencyRecord", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<DateTimeOffset>("ExpiresAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("expires_at");

                    b.Property<int>("HttpStatusCode")
                        .HasColumnType("integer")
                        .HasColumnName("http_status_code");

                    b.Property<string>("IdempotencyKey")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("idempotency_key");

                    b.Property<string>("OperationName")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("operation_name");

                    b.Property<Guid>("ResourceId")
                        .HasColumnType("uuid")
                        .HasColumnName("resource_id");

                    b.Property<string>("ResponseBodyJson")
                        .IsRequired()
                        .HasColumnType("jsonb")
                        .HasColumnName("response_body_json");

                    b.HasKey("Id");

                    b.HasIndex("ExpiresAt")
                        .HasDatabaseName("ix_idempotency_records_expires_at");

                    b.HasIndex("IdempotencyKey", "OperationName")
                        .IsUnique()
                        .HasDatabaseName("ix_idempotency_records_key_operation");

                    b.ToTable("idempotency_records", (string)null);
                });

            modelBuilder.Entity("LiveEncounter", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset>("AdmissionDate")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("admission_date");

                    b.Property<string>("AdmissionReason")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("admission_reason");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("Department")
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("department");

                    b.Property<string>("DischargeDiagnosis")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("discharge_diagnosis");

                    b.Property<Guid>("PatientId")
                        .HasColumnType("uuid")
                        .HasColumnName("patient_id");

                    b.Property<string>("RoomBed")
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("room_bed");

                    b.Property<string>("Status")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("status");

                    b.HasKey("Id");

                    b.HasIndex("PatientId", "Status");

                    b.ToTable("live_encounters", null, t =>
                        {
                            t.HasCheckConstraint("chk_live_encounters_department", "department IS NULL OR department IN ('Emergency Department', 'Internal Medicine', 'General Medicine', 'Surgery', 'ICU', 'NICU', 'Medical-Surgical', 'Outpatient Clinic', 'Pediatrics', 'Obstetrics & Gynecology', 'Labor & Delivery', 'Cardiology', 'Orthopedics', 'Neurology', 'Oncology', 'Radiology', 'Laboratory', 'Psychiatry', 'Physical Therapy', 'Anesthesiology')");
                        });
                });

            modelBuilder.Entity("LiveObservation", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<Guid>("EncounterId")
                        .HasColumnType("uuid")
                        .HasColumnName("encounter_id");

                    b.Property<bool>("IsSuperseded")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(false)
                        .HasColumnName("is_superseded");

                    b.Property<string>("Note")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("note");

                    b.Property<string>("ObservationCode")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("observation_code");

                    b.Property<Guid?>("PatientId")
                        .HasColumnType("uuid")
                        .HasColumnName("patient_id");

                    b.Property<DateTimeOffset>("RecordedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("recorded_at");

                    b.Property<Guid>("SourceBatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("source_batch_id");

                    b.Property<DateTimeOffset?>("SupersededAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("superseded_at");

                    b.Property<Guid?>("SupersededByBatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("superseded_by_batch_id");

                    b.Property<string>("Unit")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("unit");

                    b.Property<decimal>("Value")
                        .HasColumnType("decimal(10,3)")
                        .HasColumnName("value");

                    b.HasKey("Id");

                    b.HasIndex("IsSuperseded")
                        .HasFilter("is_superseded = true");

                    b.HasIndex("SourceBatchId");

                    b.HasIndex("EncounterId", "ObservationCode");

                    b.ToTable("live_observations", (string)null);
                });

            modelBuilder.Entity("Observation", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<Guid>("EncounterId")
                        .HasColumnType("uuid")
                        .HasColumnName("encounter_id");

                    b.Property<string>("Note")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("note");

                    b.Property<string>("ObservationCode")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("observation_code");

                    b.Property<Guid>("PatientId")
                        .HasColumnType("uuid")
                        .HasColumnName("patient_id");

                    b.Property<DateTimeOffset>("RecordedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("recorded_at");

                    b.Property<string>("Source")
                        .IsRequired()
                        .HasMaxLength(30)
                        .HasColumnType("character varying(30)")
                        .HasColumnName("source");

                    b.Property<Guid?>("SourceBatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("source_batch_id");

                    b.Property<Guid?>("SourceDraftObservationId")
                        .HasColumnType("uuid")
                        .HasColumnName("source_draft_observation_id");

                    b.Property<string>("Unit")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("unit");

                    b.Property<decimal>("Value")
                        .HasColumnType("decimal(10,3)")
                        .HasColumnName("value");

                    b.HasKey("Id");

                    b.HasIndex("PatientId");

                    b.HasIndex("SourceBatchId")
                        .HasDatabaseName("ix_observations_source_batch")
                        .HasFilter("source_batch_id IS NOT NULL");

                    b.HasIndex("EncounterId", "ObservationCode")
                        .HasDatabaseName("ix_observations_encounter_code");

                    b.ToTable("observations", "clinical");
                });

            modelBuilder.Entity("OutboxEvent", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<Guid>("AggregateId")
                        .HasColumnType("uuid")
                        .HasColumnName("aggregate_id");

                    b.Property<string>("AggregateType")
                        .IsRequired()
                        .HasMaxLength(50)
                        .HasColumnType("character varying(50)")
                        .HasColumnName("aggregate_type");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("EventType")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("event_type");

                    b.Property<string>("PayloadJson")
                        .IsRequired()
                        .HasColumnType("jsonb")
                        .HasColumnName("payload_json");

                    b.Property<DateTimeOffset?>("ProcessedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("processed_at");

                    b.Property<int>("RetryCount")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("integer")
                        .HasDefaultValue(0)
                        .HasColumnName("retry_count");

                    b.HasKey("Id");

                    b.HasIndex("ProcessedAt")
                        .HasDatabaseName("ix_outbox_events_unprocessed")
                        .HasFilter("processed_at IS NULL");

                    b.ToTable("outbox_events", "clinical");
                });

            modelBuilder.Entity("Patient", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<string>("AllergiesJson")
                        .HasColumnType("jsonb")
                        .HasColumnName("allergies_json");

                    b.Property<string>("BloodType")
                        .HasMaxLength(10)
                        .HasColumnType("character varying(10)")
                        .HasColumnName("blood_type");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<DateOnly?>("DateOfBirth")
                        .HasColumnType("date")
                        .HasColumnName("date_of_birth");

                    b.Property<string>("EmergencyContact")
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("emergency_contact");

                    b.Property<string>("FullName")
                        .IsRequired()
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)")
                        .HasColumnName("full_name");

                    b.Property<string>("Mrn")
                        .IsRequired()
                        .HasMaxLength(20)
                        .HasColumnType("character varying(20)")
                        .HasColumnName("mrn");

                    b.Property<bool>("NoKnownAllergies")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(false)
                        .HasColumnName("no_known_allergies");

                    b.Property<string>("Sex")
                        .HasMaxLength(10)
                        .HasColumnType("character varying(10)")
                        .HasColumnName("sex");

                    b.Property<DateTimeOffset>("UpdatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("updated_at")
                        .HasDefaultValueSql("NOW()");

                    b.HasKey("Id");

                    b.HasIndex("Mrn")
                        .IsUnique()
                        .HasDatabaseName("ix_patients_mrn");

                    b.ToTable("patients", "clinical", t =>
                        {
                            t.HasCheckConstraint("chk_patients_blood_type", "blood_type IS NULL OR blood_type IN ('A+', 'A-', 'B+', 'B-', 'AB+', 'AB-', 'O+', 'O-')");
                        });
                });

            modelBuilder.Entity("RefreshToken", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<DateTimeOffset>("ExpiresAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("expires_at");

                    b.Property<Guid?>("ReplacedByTokenId")
                        .HasColumnType("uuid")
                        .HasColumnName("replaced_by_token_id");

                    b.Property<DateTimeOffset?>("RevokedAt")
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("revoked_at");

                    b.Property<string>("TokenHash")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasColumnName("token_hash");

                    b.Property<Guid>("UserId")
                        .HasColumnType("uuid")
                        .HasColumnName("user_id");

                    b.HasKey("Id");

                    b.HasIndex("ReplacedByTokenId");

                    b.HasIndex("TokenHash")
                        .IsUnique();

                    b.HasIndex("UserId", "RevokedAt");

                    b.ToTable("refresh_tokens", (string)null);
                });

            modelBuilder.Entity("ScannedDocument", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<Guid>("BatchId")
                        .HasColumnType("uuid")
                        .HasColumnName("batch_id");

                    b.Property<string>("ContentType")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("content_type");

                    b.Property<long>("FileSizeBytes")
                        .HasColumnType("bigint")
                        .HasColumnName("file_size_bytes");

                    b.Property<string>("ObjectKey")
                        .IsRequired()
                        .HasMaxLength(500)
                        .HasColumnType("character varying(500)")
                        .HasColumnName("object_key");

                    b.Property<string>("Sha256")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("character varying(64)")
                        .HasColumnName("sha256");

                    b.Property<DateTimeOffset>("UploadedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("uploaded_at")
                        .HasDefaultValueSql("NOW()");

                    b.HasKey("Id");

                    b.HasIndex("BatchId")
                        .IsUnique();

                    b.HasIndex("Sha256");

                    b.ToTable("scanned_documents", (string)null);
                });

            modelBuilder.Entity("User", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("uuid")
                        .HasColumnName("id")
                        .HasDefaultValueSql("gen_random_uuid()");

                    b.Property<DateTimeOffset>("CreatedAt")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("timestamp with time zone")
                        .HasColumnName("created_at")
                        .HasDefaultValueSql("NOW()");

                    b.Property<string>("FullName")
                        .IsRequired()
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)")
                        .HasColumnName("full_name");

                    b.Property<bool>("IsActive")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("boolean")
                        .HasDefaultValue(true)
                        .HasColumnName("is_active");

                    b.Property<string>("PasswordHash")
                        .IsRequired()
                        .HasMaxLength(200)
                        .HasColumnType("character varying(200)")
                        .HasColumnName("password_hash");

                    b.Property<string>("Role")
                        .IsRequired()
                        .HasMaxLength(30)
                        .HasColumnType("character varying(30)")
                        .HasColumnName("role");

                    b.Property<string>("Username")
                        .IsRequired()
                        .HasMaxLength(100)
                        .HasColumnType("character varying(100)")
                        .HasColumnName("username");

                    b.HasKey("Id");

                    b.HasIndex("Username")
                        .IsUnique();

                    b.ToTable("users", null, t =>
                        {
                            t.HasCheckConstraint("chk_users_role", "role IN ('INTAKE_CLERK', 'DATA_ENTRY_CLERK', 'VERIFIER', 'CLINICAL_APPROVER', 'CLINICIAN', 'ADMINISTRATOR')");
                        });
                });

            modelBuilder.Entity("AuthAuditEvent", b =>
                {
                    b.HasOne("User", "User")
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("User");
                });

            modelBuilder.Entity("DigitizationBatch", b =>
                {
                    b.HasOne("User", "ApprovedByUser")
                        .WithMany()
                        .HasForeignKey("ApprovedByUserId")
                        .OnDelete(DeleteBehavior.Restrict);

                    b.HasOne("User", "EnteredByUser")
                        .WithMany()
                        .HasForeignKey("EnteredByUserId")
                        .OnDelete(DeleteBehavior.Restrict);

                    b.HasOne("User", "VerifiedByUser")
                        .WithMany()
                        .HasForeignKey("VerifiedByUserId")
                        .OnDelete(DeleteBehavior.Restrict);

                    b.Navigation("ApprovedByUser");

                    b.Navigation("EnteredByUser");

                    b.Navigation("VerifiedByUser");
                });

            modelBuilder.Entity("DigitizationEvent", b =>
                {
                    b.HasOne("User", "Actor")
                        .WithMany()
                        .HasForeignKey("ActorUserId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.HasOne("DigitizationBatch", "Batch")
                        .WithMany("Events")
                        .HasForeignKey("BatchId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Actor");

                    b.Navigation("Batch");
                });

            modelBuilder.Entity("DraftEncounter", b =>
                {
                    b.HasOne("DigitizationBatch", "Batch")
                        .WithOne("DraftEncounter")
                        .HasForeignKey("DraftEncounter", "BatchId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Batch");
                });

            modelBuilder.Entity("DraftObservation", b =>
                {
                    b.HasOne("DigitizationBatch", "Batch")
                        .WithMany("DraftObservations")
                        .HasForeignKey("BatchId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Batch");
                });

            modelBuilder.Entity("DraftPatient", b =>
                {
                    b.HasOne("DigitizationBatch", "Batch")
                        .WithOne("DraftPatient")
                        .HasForeignKey("DraftPatient", "BatchId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Batch");
                });

            modelBuilder.Entity("Encounter", b =>
                {
                    b.HasOne("Patient", "Patient")
                        .WithMany()
                        .HasForeignKey("PatientId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Patient");
                });

            modelBuilder.Entity("LiveEncounter", b =>
                {
                    b.HasOne("Patient", null)
                        .WithMany()
                        .HasForeignKey("PatientId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();
                });

            modelBuilder.Entity("LiveObservation", b =>
                {
                    b.HasOne("LiveEncounter", "Encounter")
                        .WithMany("Observations")
                        .HasForeignKey("EncounterId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Encounter");
                });

            modelBuilder.Entity("Observation", b =>
                {
                    b.HasOne("Encounter", "Encounter")
                        .WithMany()
                        .HasForeignKey("EncounterId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.HasOne("Patient", "Patient")
                        .WithMany()
                        .HasForeignKey("PatientId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Encounter");

                    b.Navigation("Patient");
                });

            modelBuilder.Entity("RefreshToken", b =>
                {
                    b.HasOne("RefreshToken", "ReplacedByToken")
                        .WithMany()
                        .HasForeignKey("ReplacedByTokenId")
                        .OnDelete(DeleteBehavior.SetNull);

                    b.HasOne("User", "User")
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("ReplacedByToken");

                    b.Navigation("User");
                });

            modelBuilder.Entity("ScannedDocument", b =>
                {
                    b.HasOne("DigitizationBatch", "Batch")
                        .WithOne("Document")
                        .HasForeignKey("ScannedDocument", "BatchId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Batch");
                });

            modelBuilder.Entity("DigitizationBatch", b =>
                {
                    b.Navigation("Document");

                    b.Navigation("DraftEncounter");

                    b.Navigation("DraftObservations");

                    b.Navigation("DraftPatient");

                    b.Navigation("Events");
                });

            modelBuilder.Entity("LiveEncounter", b =>
                {
                    b.Navigation("Observations");
                });
#pragma warning restore 612, 618
        }
    }
}
