39 lines
1.3 KiB
C#
39 lines
1.3 KiB
C#
using Microsoft.Extensions.Options;
|
|
|
|
public class MedicationCorrelationHelper
|
|
{
|
|
private readonly IMedicationService _medicationService;
|
|
private readonly MedicationCorrelationOptions _options;
|
|
|
|
public MedicationCorrelationHelper(
|
|
IMedicationService medicationService,
|
|
IOptions<MedicationCorrelationOptions> options)
|
|
{
|
|
_medicationService = medicationService;
|
|
_options = options.Value;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Appends medication context to alert details if a correlated administration
|
|
/// exists within the lookback window. Returns the original details if none found.
|
|
/// </summary>
|
|
public async Task<string> TryAnnotateDetailsAsync(
|
|
Guid encounterId,
|
|
string observationCode,
|
|
string details,
|
|
CancellationToken ct = default)
|
|
{
|
|
var recent = await _medicationService.GetRecentForEncounterAsync(
|
|
encounterId, observationCode, _options.CorrelationWindowMinutes);
|
|
|
|
if (recent.Count == 0)
|
|
return details;
|
|
|
|
// Use the most recent correlated administration
|
|
var med = recent[0];
|
|
var minutesAgo = (int)(DateTimeOffset.UtcNow - med.AdministeredAt).TotalMinutes;
|
|
|
|
return $"{details} — note: {med.DrugName} {med.Dose}{med.DoseUnit} " +
|
|
$"({med.Route}) administered {minutesAgo} min ago";
|
|
}
|
|
} |