feature: qSOFA Scoring & Sepsis Bundle Compliance

This commit is contained in:
voltsrage
2026-06-18 22:52:43 +08:00
parent 3c54feb38a
commit 4b46c09f90
34 changed files with 2351 additions and 18 deletions
@@ -626,6 +626,111 @@ namespace VigilCareClinicalAPI.Migrations
});
});
modelBuilder.Entity("SepsisBundle", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<DateTimeOffset?>("CompletedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("completed_at");
b.Property<string>("ComplianceStatus")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(20)
.HasColumnType("character varying(20)")
.HasColumnName("compliance_status")
.HasDefaultValueSql("'IN_PROGRESS'");
b.Property<DateTimeOffset>("DeadlineAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("deadline_at");
b.Property<Guid>("EncounterId")
.HasColumnType("uuid")
.HasColumnName("encounter_id");
b.Property<DateTimeOffset>("RecognizedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("recognized_at");
b.Property<Guid>("TriggeringAlertId")
.HasColumnType("uuid")
.HasColumnName("triggering_alert_id");
b.Property<string>("TriggeringAlertType")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("character varying(50)")
.HasColumnName("triggering_alert_type");
b.HasKey("Id");
b.HasIndex("ComplianceStatus");
b.HasIndex("TriggeringAlertId");
b.HasIndex("EncounterId", "RecognizedAt");
b.ToTable("sepsis_bundles", null, t =>
{
t.HasCheckConstraint("chk_sepsis_bundles_compliance_status", "compliance_status IN ('IN_PROGRESS', 'COMPLIANT', 'NON_COMPLIANT')");
});
});
modelBuilder.Entity("SepsisBundleElement", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<Guid>("BundleId")
.HasColumnType("uuid")
.HasColumnName("bundle_id");
b.Property<DateTimeOffset?>("CompletedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("completed_at");
b.Property<string>("ElementType")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)")
.HasColumnName("element_type");
b.Property<Guid?>("OrderId")
.HasColumnType("uuid")
.HasColumnName("order_id");
b.Property<string>("Status")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(20)
.HasColumnType("character varying(20)")
.HasColumnName("status")
.HasDefaultValueSql("'PENDING'");
b.HasKey("Id");
b.HasIndex("OrderId");
b.HasIndex("BundleId", "ElementType")
.IsUnique();
b.ToTable("sepsis_bundle_elements", null, t =>
{
t.HasCheckConstraint("chk_sepsis_bundle_elements_element_type", "element_type IN ('BLOOD_CULTURES', 'SERUM_LACTATE', 'BROAD_SPECTRUM_ANTIBIOTICS', 'IV_FLUID_RESUSCITATION')");
t.HasCheckConstraint("chk_sepsis_bundle_elements_status", "status IN ('PENDING', 'COMPLETED')");
});
});
modelBuilder.Entity("ClinicalAlert", b =>
{
b.HasOne("Encounter", "Encounter")
@@ -698,6 +803,43 @@ namespace VigilCareClinicalAPI.Migrations
b.Navigation("Patient");
});
modelBuilder.Entity("SepsisBundle", b =>
{
b.HasOne("Encounter", "Encounter")
.WithMany()
.HasForeignKey("EncounterId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("ClinicalAlert", "TriggeringAlert")
.WithMany()
.HasForeignKey("TriggeringAlertId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Encounter");
b.Navigation("TriggeringAlert");
});
modelBuilder.Entity("SepsisBundleElement", b =>
{
b.HasOne("SepsisBundle", "Bundle")
.WithMany("Elements")
.HasForeignKey("BundleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Order", "Order")
.WithMany()
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.SetNull);
b.Navigation("Bundle");
b.Navigation("Order");
});
modelBuilder.Entity("Encounter", b =>
{
b.Navigation("Alerts");
@@ -711,6 +853,11 @@ namespace VigilCareClinicalAPI.Migrations
{
b.Navigation("Encounters");
});
modelBuilder.Entity("SepsisBundle", b =>
{
b.Navigation("Elements");
});
#pragma warning restore 612, 618
}
}