using adas_core.Domain.Enums; using adas_core.Domain.Models; using adas_core.Domain.Models.DTO; using adas_core.Domain.Models.Filter; using adas_core.Domain.Models.Masters; using adas_core.Domain.Models.MongoModels; using adas_core.Domain.Models.Responses; using MongoDB.Bson; namespace adas_core.Application.Services.Interfaces; public interface IPatientService : IApiRequestService { Task FindByPatientId(string patientId, bool withLocation = false); Task FindByPatientIdWithLocale(string patientId, LocaleEnum localeEnum); Task FindByPatientNumberArchived(string patientNumber); Task FindByPatientNumber(string patientNumber, bool withLocation = false); Task FindByLocation(PatientLocation? location); Task FindByPointOfCareId(ObjectId pocId); Task FindByUnitAndPocId(ObjectId unit, ObjectId pointOfCare); Task> FindByPointOfCare(string pointOfCare); Task CountPatientsByUnitId(ObjectId unitId); Task FindPatient(string? patientId, string? patientNumber, PatientLocation? location, bool findByLocation = false); Task Insert(Patient patient); Task InsertAsync(Patient patient); Task ArchivePatient(Patient patient); Task ArchivePatientData(ObjectId patientid); Task MergePatient(Patient patient, string oldPatienNumber); Task UpdateLocation(ObjectId id, PatientLocation? location); Task UpdateAttendingDoctor(ObjectId id, Person doctor); Task UpdatePatientData(ObjectId id, string patientNumber, Person data, bool updatePatientNumber = true); Task UpdatePatientData(ObjectId id, string patientNumber, Patient patient, bool updatePatientNumber = true); Task Update(Patient patient); Task Move(Patient patient, ObjectId newPocId, ObjectId oldPocId); Task FindById(ObjectId id, bool withLocation = false); Task GetBox(PointOfCare poc, bool observations = false, List? filterObservations = null); Task CreatePatientFromRequest(ApiRequest apiRequest, bool ignoreLocation = false); Task FindPatientByApiRequest(ApiRequest apiRequest); Task ArchivePatientWithoutObservationsSinceDate(DateTime date); Task ArchiveDischargedPatients(int hoursBeforeArchive); Task> FindAll(bool withLocation = false); Task> GetPaginatedPatients(PaginationFilter filter); Task DischargeInactivePatients(DateTime sinceDate, int hoursBeforeArchive); Task UpdateOne(Patient updatedPatient); Task SendNewPatientBroadcast(Patient patient); Task SendPatientUpdateBroadcast(Patient patient); Task> FindInActivePoC(); Task> FindInInactivePoC(); Task GetByPointOfCare(PointOfCare item, bool observations = false, List? filterObservations = null); Task GetByPointOfCareAndLocale(PointOfCare item, Unit? unit, LocaleEnum? localeEnum); Task UpdatePatientAltable(ObjectId patientId, OptionList altable, User? user); Task ExitPatientById(ObjectId id, bool archivePatient = true); Task UpdatePatientMasterList(ObjectId patientId, MasterListType typeName, List updatedOptions, User? user, List? carePlanLog); Task GenerateNurseCarePlanAndInsert(MasterListType carePlanType, List? options, Patient patient, User? user); Task UpdatePatientIncomingData(ObjectId patientId, Patient person); Task UpdatePatientDemographicData(ObjectId patientId, Patient person, User? user); Task SearchByPatientNumberAndDistinctUnit(string patientNumber, ObjectId unitId); Task> FindAllPatientWithFinishedProcedures(int archiveProcedureEndDateAfterMinutes); Task> FindAllPatientWithFinishedTest(int archiveTestEndDateAfterMinutes); Task> FindAllPatientWithFinishedTreatment(int archiveTreatmentEndDateAfterMinutes); Task UpdatePatientIncomingData(ObjectId patientId, Patient person, PatientIncomeData personDataChange, User user); Task UpdatePatientMasterListItemChange(UpdateOptionMasterListDto opt, IEnumerable unitList, string typeName); Task DeletePatientMasterListItem(OptionList opt, IEnumerable unitList, string typeName); }