feature: Schema, Migrations, Core CRUD, and Redis Threshold Cache

This commit is contained in:
voltsrage
2026-06-16 17:59:16 +08:00
commit 882d4af3e6
63 changed files with 3923 additions and 0 deletions
@@ -0,0 +1,18 @@
public enum AlertSeverity { Warning, Critical }
public static class AlertSeverityExtensions
{
public static string ToDbString(this AlertSeverity s) => s switch
{
AlertSeverity.Warning => "WARNING",
AlertSeverity.Critical => "CRITICAL",
_ => throw new ArgumentOutOfRangeException(nameof(s))
};
public static AlertSeverity FromDbString(string v) => v switch
{
"WARNING" => AlertSeverity.Warning,
"CRITICAL" => AlertSeverity.Critical,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown alert severity: '{v}'")
};
}
@@ -0,0 +1,22 @@
public enum AlertStatus { Open, Acknowledged, Resolved, Escalated }
public static class AlertStatusExtensions
{
public static string ToDbString(this AlertStatus s) => s switch
{
AlertStatus.Open => "OPEN",
AlertStatus.Acknowledged => "ACKNOWLEDGED",
AlertStatus.Resolved => "RESOLVED",
AlertStatus.Escalated => "ESCALATED",
_ => throw new ArgumentOutOfRangeException(nameof(s))
};
public static AlertStatus FromDbString(string v) => v switch
{
"OPEN" => AlertStatus.Open,
"ACKNOWLEDGED" => AlertStatus.Acknowledged,
"RESOLVED" => AlertStatus.Resolved,
"ESCALATED" => AlertStatus.Escalated,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown alert status: '{v}'")
};
}
@@ -0,0 +1,50 @@
public enum AlertType
{
SepsisWarning,
CriticalHeartRate,
CriticalTempC,
CriticalPotassiumMeqL,
CriticalSpo2,
CriticalRespRate,
CriticalWbcKUl
}
public static class AlertTypeExtensions
{
public static string ToDbString(this AlertType t) => t switch
{
AlertType.SepsisWarning => "SEPSIS_WARNING",
AlertType.CriticalHeartRate => "CRITICAL_HEART_RATE",
AlertType.CriticalTempC => "CRITICAL_TEMP_C",
AlertType.CriticalPotassiumMeqL => "CRITICAL_POTASSIUM_MEQ_L",
AlertType.CriticalSpo2 => "CRITICAL_SPO2",
AlertType.CriticalRespRate => "CRITICAL_RESP_RATE",
AlertType.CriticalWbcKUl => "CRITICAL_WBC_K_UL",
_ => throw new ArgumentOutOfRangeException(nameof(t))
};
public static AlertType FromDbString(string v) => v switch
{
"SEPSIS_WARNING" => AlertType.SepsisWarning,
"CRITICAL_HEART_RATE" => AlertType.CriticalHeartRate,
"CRITICAL_TEMP_C" => AlertType.CriticalTempC,
"CRITICAL_POTASSIUM_MEQ_L"=> AlertType.CriticalPotassiumMeqL,
"CRITICAL_SPO2" => AlertType.CriticalSpo2,
"CRITICAL_RESP_RATE" => AlertType.CriticalRespRate,
"CRITICAL_WBC_K_UL" => AlertType.CriticalWbcKUl,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown alert type: '{v}'")
};
// Threshold alerts are derived from observation codes in alert_thresholds — not free-form strings.
public static AlertType CriticalFor(string observationCode) => observationCode switch
{
"HEART_RATE" => AlertType.CriticalHeartRate,
"TEMP_C" => AlertType.CriticalTempC,
"POTASSIUM_MEQ_L" => AlertType.CriticalPotassiumMeqL,
"SPO2" => AlertType.CriticalSpo2,
"RESP_RATE" => AlertType.CriticalRespRate,
"WBC_K_UL" => AlertType.CriticalWbcKUl,
_ => throw new ArgumentOutOfRangeException(
nameof(observationCode), $"No critical alert type for observation code '{observationCode}'")
};
}
@@ -0,0 +1,22 @@
public enum EncounterStatus { Scheduled, Active, Discharged, Cancelled }
public static class EncounterStatusExtensions
{
public static string ToDbString(this EncounterStatus s) => s switch
{
EncounterStatus.Scheduled => "SCHEDULED",
EncounterStatus.Active => "ACTIVE",
EncounterStatus.Discharged => "DISCHARGED",
EncounterStatus.Cancelled => "CANCELLED",
_ => throw new ArgumentOutOfRangeException(nameof(s))
};
public static EncounterStatus FromDbString(string v) => v switch
{
"SCHEDULED" => EncounterStatus.Scheduled,
"ACTIVE" => EncounterStatus.Active,
"DISCHARGED" => EncounterStatus.Discharged,
"CANCELLED" => EncounterStatus.Cancelled,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown encounter status: '{v}'")
};
}
@@ -0,0 +1,20 @@
public enum EncounterType { Inpatient, Outpatient, Emergency }
public static class EncounterTypeExtensions
{
public static string ToDbString(this EncounterType t) => t switch
{
EncounterType.Inpatient => "INPATIENT",
EncounterType.Outpatient => "OUTPATIENT",
EncounterType.Emergency => "EMERGENCY",
_ => throw new ArgumentOutOfRangeException(nameof(t))
};
public static EncounterType FromDbString(string v) => v switch
{
"INPATIENT" => EncounterType.Inpatient,
"OUTPATIENT" => EncounterType.Outpatient,
"EMERGENCY" => EncounterType.Emergency,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown encounter type: '{v}'")
};
}
@@ -0,0 +1,20 @@
public enum ObservationSource { Manual, Device, Lab }
public static class ObservationSourceExtensions
{
public static string ToDbString(this ObservationSource s) => s switch
{
ObservationSource.Manual => "MANUAL",
ObservationSource.Device => "DEVICE",
ObservationSource.Lab => "LAB",
_ => throw new ArgumentOutOfRangeException(nameof(s))
};
public static ObservationSource FromDbString(string v) => v switch
{
"MANUAL" => ObservationSource.Manual,
"DEVICE" => ObservationSource.Device,
"LAB" => ObservationSource.Lab,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown observation source: '{v}'")
};
}
@@ -0,0 +1,22 @@
public enum OrderType { Lab, Imaging, Medication, Procedure }
public static class OrderTypeExtensions
{
public static string ToDbString(this OrderType t) => t switch
{
OrderType.Lab => "LAB",
OrderType.Imaging => "IMAGING",
OrderType.Medication => "MEDICATION",
OrderType.Procedure => "PROCEDURE",
_ => throw new ArgumentOutOfRangeException(nameof(t))
};
public static OrderType FromDbString(string v) => v switch
{
"LAB" => OrderType.Lab,
"IMAGING" => OrderType.Imaging,
"MEDICATION" => OrderType.Medication,
"PROCEDURE" => OrderType.Procedure,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown order type: '{v}'")
};
}
@@ -0,0 +1,25 @@
public enum ReconciliationCheckType
{
UnacknowledgedCriticalAlert,
PendingOrderNoResult,
ActiveInpatientNoObservation
}
public static class ReconciliationCheckTypeExtensions
{
public static string ToDbString(this ReconciliationCheckType t) => t switch
{
ReconciliationCheckType.UnacknowledgedCriticalAlert => "UNACKNOWLEDGED_CRITICAL_ALERT",
ReconciliationCheckType.PendingOrderNoResult => "PENDING_ORDER_NO_RESULT",
ReconciliationCheckType.ActiveInpatientNoObservation => "ACTIVE_INPATIENT_NO_OBSERVATION",
_ => throw new ArgumentOutOfRangeException(nameof(t))
};
public static ReconciliationCheckType FromDbString(string v) => v switch
{
"UNACKNOWLEDGED_CRITICAL_ALERT" => ReconciliationCheckType.UnacknowledgedCriticalAlert,
"PENDING_ORDER_NO_RESULT" => ReconciliationCheckType.PendingOrderNoResult,
"ACTIVE_INPATIENT_NO_OBSERVATION" => ReconciliationCheckType.ActiveInpatientNoObservation,
_ => throw new ArgumentOutOfRangeException(nameof(v), $"Unknown reconciliation check type: '{v}'")
};
}