feature:
Full SOFA Score: Data Layer + Scoring Engine Glasgow Coma Scale: Data Layer + Scoring Engine
This commit is contained in:
@@ -68,6 +68,44 @@ public class QsofaDetector
|
||||
return created ? QsofaResult.AlertCreated : QsofaResult.AlertAlreadyOpen;
|
||||
}
|
||||
|
||||
public async Task<QsofaResult> SyncAlteredMentationAsync(
|
||||
Guid encounterId,
|
||||
Guid patientId,
|
||||
CancellationToken ct = default)
|
||||
{
|
||||
var cache = _redis.GetDatabase();
|
||||
var avpuKey = QsofaCalculator.CriterionKey(encounterId, "AVPU");
|
||||
var gcsValues = await cache.StringGetAsync(GcsCalculator.AllComponentKeys(encounterId));
|
||||
|
||||
if (gcsValues.All(v => v.HasValue))
|
||||
{
|
||||
var eye = decimal.Parse(gcsValues[0]!);
|
||||
var verbal = decimal.Parse(gcsValues[1]!);
|
||||
var motor = decimal.Parse(gcsValues[2]!);
|
||||
var total = GcsCalculator.ComputeTotal(eye, verbal, motor)!.Value;
|
||||
|
||||
if (QsofaCalculator.MeetsGcsAlteredMentation(total))
|
||||
{
|
||||
await cache.StringSetAsync(
|
||||
avpuKey, "1", TimeSpan.FromSeconds(QsofaTtlSeconds));
|
||||
}
|
||||
else
|
||||
{
|
||||
await cache.KeyDeleteAsync(avpuKey);
|
||||
}
|
||||
}
|
||||
|
||||
var allKeys = QsofaCalculator.AllCriterionKeys(encounterId);
|
||||
var values = await cache.StringGetAsync(allKeys);
|
||||
var activeCount = QsofaCalculator.CountActiveCriteria(values);
|
||||
|
||||
if (activeCount < 2)
|
||||
return QsofaResult.InsufficientCriteria(activeCount);
|
||||
|
||||
var created = await TryCreateAlertAsync(encounterId, patientId, activeCount, values, ct);
|
||||
return created ? QsofaResult.AlertCreated : QsofaResult.AlertAlreadyOpen;
|
||||
}
|
||||
|
||||
private async Task<bool> TryCreateAlertAsync(
|
||||
Guid encounterId,
|
||||
Guid patientId,
|
||||
|
||||
Reference in New Issue
Block a user