using adas_core.Application.Services.Interfaces; using adas_core.Domain.Enums; using adas_core.Domain.Models; using adas_core.Domain.Models.Pumps; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using MongoDB.Bson; namespace adas_core.Application.Customizations.BD; public class CalculatedObservations(IServiceProvider serviceProvider) : ICalculatedObservations { private readonly ILogger _logger = serviceProvider.GetRequiredService>(); private readonly Lazy _observationService = serviceProvider.GetRequiredService>(); public Task Map(T obs, bool onlyByName = false) where T : BasePatientObservation { return Task.FromResult(obs)!; } public Task Map(PatientTreatment treatment) { return Task.FromResult(treatment); } public Task Map(PatientDiagnosis diagnosis) { return Task.FromResult(diagnosis); } public async Task Map(PumpObservation pumpObservation) { if (pumpObservation.Code == "IHE PCD-04") await CreatePumpAlarmObservation(pumpObservation); return pumpObservation; } public Task CalculateMedicineObservation(List activeMedicines, ObjectId patientId) { return Task.CompletedTask; } public Task CalculateActiveBolus(ObjectId patientId) { return Task.CompletedTask; } public Task> GetActiveTreatmentsByPatient(ObjectId id) { throw new NotImplementedException(); } public Task FixTimeInconsistencyWithLast(PatientObservation newObservation) { throw new NotImplementedException(); } public Task> PreMapList(List listToInsert) { return Task.FromResult(listToInsert); } public Task MapSourceAlarm(PatientObservation obs, PatientObservationAlarm alarmToInsert) { throw new NotImplementedException(); } public Task SendAlarm(PatientObservation obs, string name, AlarmEnum.Name? code) { throw new NotImplementedException(); } private Task CreatePumpAlarmObservation(PumpObservation pumpObservation) { PatientObservation patientObservationAlarm = new() { CodingSystem = "ADAS_ALARM", Code = pumpObservation.AlarmState, Name = $"Alarm_Pump_{pumpObservation.AlarmType}", Value = pumpObservation.DeviceId != null ? $"Device Id: {pumpObservation.DeviceId}" : $"Infusion Id {pumpObservation.InfusionId}", Time = pumpObservation.Time }; if (pumpObservation.PatientId.HasValue) patientObservationAlarm.PatientId = pumpObservation.PatientId.Value; //CheckAlarmConfig(patientObservationAlarm); try { _ = _observationService.Value.InsertObservation(patientObservationAlarm, mapObs: false); } catch (Exception e) { _logger.LogError("Error inserting Pump Observation Alarm. Exception: {e}", e); } return Task.CompletedTask; } }