Full SOFA Score: Data Layer + Scoring Engine

Glasgow Coma Scale: Data Layer + Scoring Engine
This commit is contained in:
voltsrage
2026-06-21 01:09:50 +08:00
parent 78c043e4d3
commit 93ea473d2b
62 changed files with 7133 additions and 72 deletions
@@ -156,7 +156,7 @@ namespace VigilCareClinicalAPI.Migrations
b.ToTable("clinical_alerts", null, t =>
{
t.HasCheckConstraint("chk_clinical_alerts_alert_type", "alert_type IN ('SEPSIS_WARNING', 'CRITICAL_HEART_RATE', 'CRITICAL_TEMP_C', 'CRITICAL_POTASSIUM_MEQ_L', 'CRITICAL_SPO2', 'CRITICAL_RESP_RATE', 'CRITICAL_WBC_K_UL')");
t.HasCheckConstraint("chk_clinical_alerts_alert_type", "alert_type IN ('SEPSIS_WARNING', 'CRITICAL_HEART_RATE', 'CRITICAL_TEMP_C', 'CRITICAL_POTASSIUM_MEQ_L', 'CRITICAL_SPO2', 'CRITICAL_RESP_RATE', 'CRITICAL_WBC_K_UL', 'CRITICAL_SYSTOLIC_BP', 'CRITICAL_DIASTOLIC_BP', 'CRITICAL_LACTATE_MMOL_L', 'CRITICAL_AVPU', 'CRITICAL_GLUCOSE_MG_DL', 'WARNING_HEART_RATE', 'WARNING_TEMP_C', 'WARNING_POTASSIUM_MEQ_L', 'WARNING_SPO2', 'WARNING_RESP_RATE', 'WARNING_WBC_K_UL', 'WARNING_SYSTOLIC_BP', 'WARNING_DIASTOLIC_BP', 'WARNING_LACTATE_MMOL_L', 'WARNING_GLUCOSE_MG_DL', 'NEWS2_WARNING', 'NEWS2_EMERGENCY', 'RAPID_DETERIORATION', 'QSOFA_WARNING', 'GCS_CRITICAL', 'GCS_WARNING')");
t.HasCheckConstraint("chk_clinical_alerts_severity", "severity IN ('WARNING', 'CRITICAL')");
@@ -250,6 +250,62 @@ namespace VigilCareClinicalAPI.Migrations
});
});
modelBuilder.Entity("GcsScore", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<DateTimeOffset>("CalculatedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("calculated_at");
b.Property<string>("Classification")
.IsRequired()
.HasMaxLength(16)
.HasColumnType("character varying(16)")
.HasColumnName("classification");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
b.Property<Guid>("EncounterId")
.HasColumnType("uuid")
.HasColumnName("encounter_id");
b.Property<int>("EyeScore")
.HasColumnType("integer")
.HasColumnName("eye_score");
b.Property<int>("MotorScore")
.HasColumnType("integer")
.HasColumnName("motor_score");
b.Property<Guid>("PatientId")
.HasColumnType("uuid")
.HasColumnName("patient_id");
b.Property<int>("TotalScore")
.HasColumnType("integer")
.HasColumnName("total_score");
b.Property<int>("VerbalScore")
.HasColumnType("integer")
.HasColumnName("verbal_score");
b.HasKey("Id");
b.HasIndex("EncounterId", "CalculatedAt");
b.ToTable("gcs_scores", null, t =>
{
t.HasCheckConstraint("chk_gcs_scores_classification", "classification IN ('MILD', 'MODERATE', 'SEVERE')");
});
});
modelBuilder.Entity("MedicationAdministration", b =>
{
b.Property<Guid>("Id")
@@ -785,6 +841,81 @@ namespace VigilCareClinicalAPI.Migrations
});
});
modelBuilder.Entity("SofaScore", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<DateTimeOffset>("CalculatedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("calculated_at");
b.Property<int>("CardiovascularScore")
.HasColumnType("integer")
.HasColumnName("cardiovascular_score");
b.Property<int>("CnsScore")
.HasColumnType("integer")
.HasColumnName("cns_score");
b.Property<int>("CoagulationScore")
.HasColumnType("integer")
.HasColumnName("coagulation_score");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
b.Property<int?>("DeltaFromBaseline")
.HasColumnType("integer")
.HasColumnName("delta_from_baseline");
b.Property<Guid>("EncounterId")
.HasColumnType("uuid")
.HasColumnName("encounter_id");
b.Property<bool>("IsBaseline")
.HasColumnType("boolean")
.HasColumnName("is_baseline");
b.Property<int>("LiverScore")
.HasColumnType("integer")
.HasColumnName("liver_score");
b.Property<Guid>("PatientId")
.HasColumnType("uuid")
.HasColumnName("patient_id");
b.Property<int>("RenalScore")
.HasColumnType("integer")
.HasColumnName("renal_score");
b.Property<int>("RespiratoryScore")
.HasColumnType("integer")
.HasColumnName("respiratory_score");
b.Property<string>("StalenessFlags")
.HasColumnType("jsonb")
.HasColumnName("staleness_flags");
b.Property<int>("TotalScore")
.HasColumnType("integer")
.HasColumnName("total_score");
b.HasKey("Id");
b.HasIndex("EncounterId")
.HasDatabaseName("idx_sofa_scores_baseline")
.HasFilter("is_baseline = true");
b.HasIndex("EncounterId", "CalculatedAt");
b.ToTable("sofa_scores", (string)null);
});
modelBuilder.Entity("ClinicalAlert", b =>
{
b.HasOne("Encounter", "Encounter")
@@ -807,6 +938,17 @@ namespace VigilCareClinicalAPI.Migrations
b.Navigation("Patient");
});
modelBuilder.Entity("GcsScore", b =>
{
b.HasOne("Encounter", "Encounter")
.WithMany()
.HasForeignKey("EncounterId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Encounter");
});
modelBuilder.Entity("MedicationAdministration", b =>
{
b.HasOne("Encounter", "Encounter")
@@ -905,6 +1047,17 @@ namespace VigilCareClinicalAPI.Migrations
b.Navigation("Order");
});
modelBuilder.Entity("SofaScore", b =>
{
b.HasOne("Encounter", "Encounter")
.WithMany()
.HasForeignKey("EncounterId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Encounter");
});
modelBuilder.Entity("Encounter", b =>
{
b.Navigation("Alerts");