Class TreatmentService
- Namespace
- adas_core.Application.Services
- Assembly
- adas-core.Application.dll
Provides business logic for managing patient treatments, including insertion, update, deletion, archiving, pagination, and broadcasting of treatment events to subscribed clients.
public class TreatmentService : ITreatmentService, IApiRequestService
- Inheritance
-
TreatmentService
- Implements
- Inherited Members
- Extension Methods
Remarks
This service orchestrates interactions between the treatment repository, the
patient service, configuration/calculation observation services, and audit
services. It also handles inbound HL7-like pharmacy/treatment messages
(OMP_O09, ORM_O01, RAS_O17) and emits broadcasts to
subscribers based on the patient's point of care.
Constructors
TreatmentService(ITreatmentRepository, ITreatmentArchiveRepository, IPatientService, IConfigObservationService, ILogger<TreatmentService>, IClientMessageService, ISubscribersService, Lazy<ICalculatedObservationsService>, IUnitService, IHttpContextAccessor, ILocalAuditService)
Provides business logic for managing patient treatments, including insertion, update, deletion, archiving, pagination, and broadcasting of treatment events to subscribed clients.
public TreatmentService(ITreatmentRepository treatmentRepository, ITreatmentArchiveRepository treatmentArchiveRepository, IPatientService patientService, IConfigObservationService configObservationService, ILogger<TreatmentService> logger, IClientMessageService clientMessageService, ISubscribersService subscribersService, Lazy<ICalculatedObservationsService> calculatedObservationsService, IUnitService unitService, IHttpContextAccessor httpContextAccessor, ILocalAuditService auditService)
Parameters
treatmentRepositoryITreatmentRepositorytreatmentArchiveRepositoryITreatmentArchiveRepositorypatientServiceIPatientServiceconfigObservationServiceIConfigObservationServiceloggerILogger<TreatmentService>clientMessageServiceIClientMessageServicesubscribersServiceISubscribersServicecalculatedObservationsServiceLazy<ICalculatedObservationsService>unitServiceIUnitServicehttpContextAccessorIHttpContextAccessorauditServiceILocalAuditService
Remarks
This service orchestrates interactions between the treatment repository, the
patient service, configuration/calculation observation services, and audit
services. It also handles inbound HL7-like pharmacy/treatment messages
(OMP_O09, ORM_O01, RAS_O17) and emits broadcasts to
subscribers based on the patient's point of care.
Methods
Archive(Patient)
Archives all treatments associated with the supplied patient.
public Task Archive(Patient patient)
Parameters
Returns
- Task
A task that represents the asynchronous archive operation.
ArchiveByPatientId(ObjectId)
Copies all treatments of the specified patient into the treatment archive repository and subsequently removes them from the primary repository.
public Task ArchiveByPatientId(ObjectId id)
Parameters
idObjectIdThe MongoDB.Bson.ObjectId of the patient whose treatments will be archived.
Returns
- Task
A task that represents the asynchronous archive operation.
DeleteById(ObjectId)
Deletes a treatment by its identifier and writes an audit log entry capturing the deleted state.
public Task DeleteById(ObjectId id)
Parameters
idObjectIdThe MongoDB.Bson.ObjectId of the treatment to delete.
Returns
- Task
A task that represents the asynchronous delete operation.
Exceptions
- ConflictException
Thrown when the treatment does not exist.
DeleteByPatientId(ObjectId)
Deletes all treatments belonging to the specified patient and creates an audit log entry capturing the deleted state.
public Task<bool> DeleteByPatientId(ObjectId id)
Parameters
idObjectIdThe MongoDB.Bson.ObjectId of the patient whose treatments will be deleted.
Returns
- Task<bool>
A task that represents the asynchronous operation. The task result is true if the deletion succeeds or there is nothing to delete; otherwise the method throws.
Exceptions
- ConflictException
Thrown when the patient has no treatments to delete (no record was found) or when the underlying delete operation fails.
FindByPatientId(ObjectId)
Returns all treatments of the given patient as an enumerable.
public Task<IEnumerable<PatientTreatment>> FindByPatientId(ObjectId patientId)
Parameters
patientIdObjectIdThe MongoDB.Bson.ObjectId of the patient.
Returns
- Task<IEnumerable<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains an IEnumerable<T> of PatientTreatment.
FindByPatientIdAsync(ObjectId)
Returns an asynchronous cursor over all treatments of the given patient.
public Task<IAsyncCursor<PatientTreatment>> FindByPatientIdAsync(ObjectId patientId)
Parameters
patientIdObjectIdThe MongoDB.Bson.ObjectId of the patient.
Returns
- Task<IAsyncCursor<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains an MongoDB.Driver.IAsyncCursor<TDocument> of PatientTreatment.
GetActiveTreatmentsByPatient(ObjectId)
Returns the active (non-canceled, in-range) treatments of the specified patient, keeping the most recent active order per placer-order identifier.
public Task<IEnumerable<PatientTreatment?>> GetActiveTreatmentsByPatient(ObjectId id)
Parameters
idObjectIdThe MongoDB.Bson.ObjectId of the patient.
Returns
- Task<IEnumerable<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains an IEnumerable<T> of nullable PatientTreatment representing the active treatments. Treatments marked as
Dcor outside their validity window are excluded.
GetActiveTreatmentsByPatientIdAndOrder(ObjectId, string)
Returns the active treatments of a patient that match the specified placer order.
public Task<List<PatientTreatment>> GetActiveTreatmentsByPatientIdAndOrder(ObjectId patientId, string order)
Parameters
patientIdObjectIdThe MongoDB.Bson.ObjectId of the patient.
orderstringThe placer-order identifier to filter by.
Returns
- Task<List<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains a List<T> of PatientTreatment.
GetBolusTreatments(ObjectId)
Returns all bolus treatments of the specified patient.
public Task<List<PatientTreatment>> GetBolusTreatments(ObjectId patientId)
Parameters
patientIdObjectIdThe MongoDB.Bson.ObjectId of the patient.
Returns
- Task<List<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains a List<T> of PatientTreatment representing the bolus treatments.
GetPaginatedTreatments(PaginationFilter)
Returns a paginated list of treatments based on the supplied filter.
public Task<PaginationResponse<PatientTreatment>> GetPaginatedTreatments(PaginationFilter filter)
Parameters
filterPaginationFilterThe PaginationFilter containing page number and page size.
Returns
- Task<PaginationResponse<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains a PaginationResponse<T> of PatientTreatment.
GetTreatmentsByPatientId(ObjectId)
Retrieves all treatments associated with the specified patient identifier.
public Task<IEnumerable<PatientTreatment>> GetTreatmentsByPatientId(ObjectId id)
Parameters
idObjectIdThe MongoDB.Bson.ObjectId of the patient.
Returns
- Task<IEnumerable<PatientTreatment>>
A task that represents the asynchronous operation. The task result contains an IEnumerable<T> of PatientTreatment for the patient.
Insert(PatientTreatment)
Inserts a new patient treatment after applying mapping/calculation rules and creates an audit log entry.
public Task Insert(PatientTreatment treatment)
Parameters
treatmentPatientTreatmentThe PatientTreatment to insert.
Returns
- Task
A task that represents the asynchronous insert operation.
Remarks
If the treatment cannot be mapped, it is silently ignored. A broadcast is dispatched asynchronously upon successful insertion.
SaveRequest(ApiRequest)
Processes an inbound API request and persists the corresponding treatments for the referenced patient.
public Task SaveRequest(ApiRequest apiRequest)
Parameters
apiRequestApiRequestThe ApiRequest to process.
Returns
- Task
A task that represents the asynchronous save operation.
Remarks
Supported message types are OMP_O09, ORM_O01 and RAS_O17.
The method also enforces the unit's AutoAdt configuration when the
request does not originate from a panel.
Exceptions
- ApiRequestException
Thrown when the patient number is missing or the request type is not supported.
SaveRequestAsync(ApiRequest)
Asynchronous entry point that delegates to SaveRequest(ApiRequest).
public Task SaveRequestAsync(ApiRequest apiRequest)
Parameters
apiRequestApiRequestThe inbound ApiRequest to process.
Returns
- Task
A task that represents the asynchronous save operation.
UpdateManyObjectId(string, ObjectId, ObjectId)
Updates every occurrence of an identifier (e.g. a referenced MongoDB.Bson.ObjectId)
in stored treatments from oldId to id
and broadcasts the changes to subscribers.
public Task UpdateManyObjectId(string nameId, ObjectId id, ObjectId oldId)
Parameters
nameIdstringThe name of the field that holds the identifier.
idObjectIdThe new MongoDB.Bson.ObjectId value.
oldIdObjectIdThe previous MongoDB.Bson.ObjectId value being replaced.
Returns
- Task
A task that represents the asynchronous operation.
UpdateTreatment(PatientTreatment)
Updates an existing treatment and writes an audit log entry comparing the previous and updated values.
public Task<bool> UpdateTreatment(PatientTreatment patientTreatment)
Parameters
patientTreatmentPatientTreatmentThe PatientTreatment containing the updated values.
Returns
- Task<bool>
A task that represents the asynchronous operation. The task result is true if the update succeeds.
Exceptions
- ConflictException
Thrown when the treatment does not exist or the update operation fails.