fix: finish all patient related upgrades
This commit is contained in:
@@ -191,21 +191,82 @@ public class EncounterService : IEncounterService
|
||||
if (encounter is null)
|
||||
throw new NotFoundException("Encounter not found.", "ENCOUNTER_NOT_FOUND");
|
||||
|
||||
var events = new List<object>();
|
||||
|
||||
events.Add(new
|
||||
{
|
||||
type = "status",
|
||||
timestamp = encounter.AdmittedAt,
|
||||
status = EncounterStatus.Active.ToDbString(),
|
||||
label = "Patient admitted"
|
||||
});
|
||||
|
||||
if (encounter.DischargedAt is not null)
|
||||
{
|
||||
events.Add(new
|
||||
{
|
||||
type = "status",
|
||||
timestamp = encounter.DischargedAt.Value,
|
||||
status = EncounterStatus.Discharged.ToDbString(),
|
||||
label = "Patient discharged"
|
||||
});
|
||||
}
|
||||
|
||||
var observations = await _db.Observations
|
||||
.Where(o => o.EncounterId == encounterId)
|
||||
.OrderByDescending(o => o.RecordedAt)
|
||||
.Select(o => new { type = "observation", timestamp = o.RecordedAt, o.ObservationCode, o.Value, o.Unit })
|
||||
.Select(o => new
|
||||
{
|
||||
type = "observation",
|
||||
timestamp = o.RecordedAt,
|
||||
o.ObservationCode,
|
||||
o.Value,
|
||||
o.Unit
|
||||
})
|
||||
.ToListAsync();
|
||||
events.AddRange(observations);
|
||||
|
||||
var alerts = await _db.ClinicalAlerts
|
||||
.Where(a => a.EncounterId == encounterId)
|
||||
.OrderByDescending(a => a.TriggeredAt)
|
||||
.Select(a => new { type = "alert", timestamp = a.TriggeredAt, a.AlertType, a.Severity, a.Status })
|
||||
.Select(a => new
|
||||
{
|
||||
type = "alert",
|
||||
timestamp = a.TriggeredAt,
|
||||
alertType = a.AlertType.ToString(),
|
||||
severity = a.Severity.ToString(),
|
||||
status = a.Status.ToString()
|
||||
})
|
||||
.ToListAsync();
|
||||
events.AddRange(alerts);
|
||||
|
||||
var timeline = observations.Cast<object>()
|
||||
.Concat(alerts.Cast<object>())
|
||||
.OrderByDescending(x => (DateTimeOffset)((dynamic)x).timestamp)
|
||||
var orders = await _db.Orders
|
||||
.Where(o => o.EncounterId == encounterId)
|
||||
.Select(o => new
|
||||
{
|
||||
type = "order",
|
||||
timestamp = o.OrderedAt,
|
||||
o.Description,
|
||||
orderType = o.OrderType.ToString(),
|
||||
status = o.Status.ToString()
|
||||
})
|
||||
.ToListAsync();
|
||||
events.AddRange(orders);
|
||||
|
||||
var medications = await _db.MedicationAdministrations
|
||||
.Where(m => m.EncounterId == encounterId)
|
||||
.Select(m => new
|
||||
{
|
||||
type = "medication",
|
||||
timestamp = m.AdministeredAt,
|
||||
m.DrugName,
|
||||
m.Dose,
|
||||
m.DoseUnit,
|
||||
m.Route
|
||||
})
|
||||
.ToListAsync();
|
||||
events.AddRange(medications);
|
||||
|
||||
var timeline = events
|
||||
.OrderByDescending(e => (DateTimeOffset)((dynamic)e).timestamp)
|
||||
.ToList();
|
||||
|
||||
return new { encounterId, events = timeline };
|
||||
|
||||
Reference in New Issue
Block a user