using adas_core.Domain.Models; using adas_core.Domain.Models.Filter; using adas_core.Domain.Models.GroupedObservations; using adas_core.Domain.Models.MongoModels; using adas_core.Domain.Models.Responses; using MongoDB.Bson; using MongoDB.Driver; namespace adas_core.Application.Services.Interfaces; public interface IObservationService : IApiRequestService { //REMOVE /* List FindLastObservations(ObjectId patientId, string codingSystem, string code, int num = 2); */ Task> FindByPatientIdAsync(ObjectId patientId); Task> FindByPatientIdAndCodingSystemAsync(ObjectId patientId, string codingSystem, string name); Task> FindLastObservations(ObjectId patientId, int num = 2, List? filterObservations = null); Task UpdateExpiredObservations(List expiredObservations); Task ExpireObservationsAndRecalculateAsync(); Task ExpireAlertsAndPowerOffAsync(); Task> FindLatestUniqueValuesByName(ObjectId patientId, string name, int? expires); Task> FindLastObservationsByField(ObjectId patientId, List? filterObservations = null, bool mapped = true, CancellationToken ct = default); Task> FindLastIntravenousLinesObservationByLocation(ObjectId patientId); Task InsertObservation(PatientObservation patientObservation, bool persistObs = true, bool mapObs = true); Task InsertIfChanged(string name, PatientObservation observation, bool persistObs = true, bool mapObs = true); Task InsertNurseObservation(PatientObservation obs); Task DeleteByPatientId(ObjectId id); Task Archive(PatientObservation observation); Task MapObservation(PatientObservation obs, bool onlyByName = false); Task> FindAllLastPatientObservationTime(); Task MapObservationsByName(PatientObservation obs); Task Archive(Patient patient); Task ArchiveByPatientId(ObjectId id); Task UpdateObservation(PatientObservation observation); Task UpdateManyObjectId(string nameId, ObjectId id, ObjectId oldId); Task SendObsBroadcast(BasePatientObservation obs); Task SendObsBroadcast(List obs, PatientLocation location); Task SendObsBroadcast(List obs, ObjectId pocId); Task FindLastBeforeDate(ObjectId patientId, DateTime date, string? obsName); Task?> FindAnyWithSameDate(ObjectId patientId, DateTime date, string? obsName); //TODO To implement Task> FindAllBeforeDate(ObjectId patientId, DateTime date, List? filterObservations = null); //TODO To implement Task> FindAllAfterDate(ObjectId patientId, DateTime date, List? filterObservations = null); Task> FindAllBetweenDates(ObjectId patientId, DateTime? startDate, DateTime? endDate, List? filterObservations = null, bool fromArchived = false, PaginationFilter? filter = null); Task> FindLastNotExpiredObservatonsByPatient(ObjectId patientId, string name, int? endAfter = null, int? num = null); Task CheckAndExpireObservations(); IAsyncEnumerable FindNotExpiredObservationsShouldBeExpired(); void ProcessObservations(List observations, Patient patient, DateTime messageTime, ObservationData? observationData = null); Task ExpireObservations(); Task InsertSimpleObservation(PatientObservation observation); Task> GetPaginatedObservations(PaginationFilter filter); Task SaveRequestNurseObsAsync(ApiRequest request); }