public CompleteModalityPerformedProcedureStepResponse CompleteModalityPerformedProcedureStep(CompleteModalityPerformedProcedureStepRequest request) { var mpps = this.PersistenceContext.Load <ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef); // update extended properties (should this be in an assembler?) ExtendedPropertyUtils.Update(mpps.ExtendedProperties, request.Mpps.ExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, request.Mpps.DicomSeries, this.PersistenceContext); var op = new CompleteModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.CompletedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // Drill back to order so we can refresh procedure plan var onePs = CollectionUtils.FirstElement(mpps.Activities).As <ProcedureStep>(); var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return(new CompleteModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(onePs.Procedure.Order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext))); }
public GetProcedurePlanResponse GetProcedurePlan(GetProcedurePlanRequest request) { var order = this.PersistenceContext.Load <Order>(request.OrderRef); var assembler = new ProcedurePlanAssembler(); return(new GetProcedurePlanResponse(assembler.CreateProcedurePlanSummary(order, this.PersistenceContext))); }
public DiscontinueModalityProcedureStepsResponse DiscontinueModalityProcedureSteps(DiscontinueModalityProcedureStepsRequest request) { Platform.CheckForNullReference(request, "request"); Platform.CheckMemberIsSet(request.ModalityProcedureSteps, "ModalityProcedureSteps"); // load the set of mps var modalitySteps = CollectionUtils.Map <EntityRef, ModalityProcedureStep>( request.ModalityProcedureSteps, mpsRef => this.PersistenceContext.Load <ModalityProcedureStep>(mpsRef)); foreach (var step in modalitySteps) { var op = new DiscontinueModalityProcedureStepOperation(); op.Execute(step, request.DiscontinuedTime, new PersistentWorkflow(this.PersistenceContext)); // If discontinuing the procedure step caused the parent procedure to be discontinued, // create an HL7 event. if (step.Procedure.IsTerminated) { LogicalHL7Event.ProcedureCancelled.EnqueueEvents(step.Procedure); } } this.PersistenceContext.SynchState(); var assembler = new ProcedurePlanAssembler(); return(new DiscontinueModalityProcedureStepsResponse( assembler.CreateProcedurePlanSummary(modalitySteps[0].Procedure.Order, this.PersistenceContext))); }
public StartModalityProcedureStepsResponse StartModalityProcedureSteps(StartModalityProcedureStepsRequest request) { Platform.CheckForNullReference(request, "request"); Platform.CheckMemberIsSet(request.ModalityProcedureSteps, "ModalityProcedureSteps"); // load the set of mps var modalitySteps = CollectionUtils.Map <EntityRef, ModalityProcedureStep>( request.ModalityProcedureSteps, mpsRef => this.PersistenceContext.Load <ModalityProcedureStep>(mpsRef)); var hasProcedureNotCheckedIn = CollectionUtils.Contains( modalitySteps, mps => mps.Procedure.IsPreCheckIn); if (hasProcedureNotCheckedIn) { throw new RequestValidationException(SR.ExceptionProcedureNotCheckedIn); } var op = new StartModalityProcedureStepsOperation(); var mpps = op.Execute(modalitySteps, request.StartTime, this.CurrentUserStaff, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); var procedurePlanAssembler = new ProcedurePlanAssembler(); var mppsAssembler = new ModalityPerformedProcedureStepAssembler(); return(new StartModalityProcedureStepsResponse( procedurePlanAssembler.CreateProcedurePlanSummary(modalitySteps[0].Procedure.Order, this.PersistenceContext), mppsAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext))); }
public GetProcedurePlanForProtocollingWorklistItemResponse GetProcedurePlanForProtocollingWorklistItem(GetProcedurePlanForProtocollingWorklistItemRequest request) { var order = this.PersistenceContext.Load <Order>(request.OrderRef); var assembler = new ProcedurePlanAssembler(); var procedurePlanSummary = assembler.CreateProcedurePlanSummary(order, this.PersistenceContext); return(new GetProcedurePlanForProtocollingWorklistItemResponse(procedurePlanSummary)); }
public SaveOrderDocumentationDataResponse SaveOrderDocumentationData(SaveOrderDocumentationDataRequest request) { var order = this.PersistenceContext.Load <Order>(request.OrderRef); ExtendedPropertyUtils.Update(order.ExtendedProperties, request.OrderExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); foreach (var detail in request.ModalityPerformedProcedureSteps) { var mpps = this.PersistenceContext.Load <ModalityPerformedProcedureStep>(detail.ModalityPerformendProcedureStepRef); ExtendedPropertyUtils.Update(mpps.ExtendedProperties, detail.ExtendedProperties); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, detail.DicomSeries, this.PersistenceContext); } // add new order notes var noteAssembler = new OrderNoteAssembler(); noteAssembler.SynchronizeOrderNotes(order, request.OrderNotes, CurrentUserStaff, this.PersistenceContext); // assign all procedures for this order to the specified interpreter (or unassign them, if null) var interpreter = request.AssignedInterpreter == null ? null : this.PersistenceContext.Load <Staff>(request.AssignedInterpreter.StaffRef, EntityLoadFlags.Proxy); foreach (var procedure in order.Procedures) { if (procedure.IsPerformed) { var interpretationStep = GetPendingInterpretationStep(procedure); if (interpretationStep != null) { interpretationStep.Assign(interpreter); } } } this.PersistenceContext.SynchState(); var planAssembler = new ProcedurePlanAssembler(); return(new SaveOrderDocumentationDataResponse(planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext))); }
public CompleteOrderDocumentationResponse CompleteOrderDocumentation(CompleteOrderDocumentationRequest request) { var order = this.PersistenceContext.Load <Order>(request.OrderRef); var interpretationSteps = new List <InterpretationStep>(); foreach (var procedure in order.Procedures) { if (procedure.DocumentationProcedureStep != null && !procedure.DocumentationProcedureStep.IsTerminated) { procedure.DocumentationProcedureStep.Complete(); } // schedule the interpretation step if the procedure was performed // Note: this logic is probably UHN-specific... ideally this aspect of the workflow should be configurable, // because it may be desirable to scheduled the interpretation prior to completing the documentation if (procedure.IsPerformed) { var interpretationStep = GetPendingInterpretationStep(procedure); if (interpretationStep != null) { // bug #3037: schedule the interpretation for the performed time, which may be earlier than the current time // in downtime mode interpretationStep.Schedule(procedure.PerformedTime); interpretationSteps.Add(interpretationStep); } } } this.PersistenceContext.SynchState(); var planAssembler = new ProcedurePlanAssembler(); return(new CompleteOrderDocumentationResponse { ProcedurePlan = planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext), InterpretationStepRefs = CollectionUtils.Map <InterpretationStep, EntityRef>(interpretationSteps, step => step.GetRef()) }); }
public DiscontinueModalityPerformedProcedureStepResponse DiscontinueModalityPerformedProcedureStep(DiscontinueModalityPerformedProcedureStepRequest request) { var mpps = this.PersistenceContext.Load <ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef); // update extended properties (should this be in an assembler?) ExtendedPropertyUtils.Update(mpps.ExtendedProperties, request.Mpps.ExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, request.Mpps.DicomSeries, this.PersistenceContext); var op = new DiscontinueModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.DiscontinuedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // If discontinuing the MPPS caused any associated procedures to be discontinued, // create an HL7 event. foreach (var activity in mpps.Activities) { var procedure = activity.As <ProcedureStep>().Procedure; if (procedure.IsTerminated) { LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure); } } // Drill back to order so we can refresh procedure plan var order = CollectionUtils.FirstElement(mpps.Activities).As <ProcedureStep>().Procedure.Order; var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return(new DiscontinueModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext))); }
public GetProcedurePlanResponse GetProcedurePlan(GetProcedurePlanRequest request) { var order = this.PersistenceContext.Load<Order>(request.OrderRef); var assembler = new ProcedurePlanAssembler(); return new GetProcedurePlanResponse(assembler.CreateProcedurePlanSummary(order, this.PersistenceContext)); }
public CompleteOrderDocumentationResponse CompleteOrderDocumentation(CompleteOrderDocumentationRequest request) { var order = this.PersistenceContext.Load<Order>(request.OrderRef); var interpretationSteps = new List<InterpretationStep>(); foreach (var procedure in order.Procedures) { if (procedure.DocumentationProcedureStep != null && !procedure.DocumentationProcedureStep.IsTerminated) { procedure.DocumentationProcedureStep.Complete(); } // schedule the interpretation step if the procedure was performed // Note: this logic is probably UHN-specific... ideally this aspect of the workflow should be configurable, // because it may be desirable to scheduled the interpretation prior to completing the documentation if (procedure.IsPerformed) { var interpretationStep = GetPendingInterpretationStep(procedure); if (interpretationStep != null) { // bug #3037: schedule the interpretation for the performed time, which may be earlier than the current time // in downtime mode interpretationStep.Schedule(procedure.PerformedTime); interpretationSteps.Add(interpretationStep); } } } this.PersistenceContext.SynchState(); var planAssembler = new ProcedurePlanAssembler(); return new CompleteOrderDocumentationResponse { ProcedurePlan = planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext), InterpretationStepRefs = CollectionUtils.Map<InterpretationStep, EntityRef>(interpretationSteps, step => step.GetRef()) }; }
public SaveOrderDocumentationDataResponse SaveOrderDocumentationData(SaveOrderDocumentationDataRequest request) { var order = this.PersistenceContext.Load<Order>(request.OrderRef); ExtendedPropertyUtils.Update(order.ExtendedProperties, request.OrderExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); foreach (var detail in request.ModalityPerformedProcedureSteps) { var mpps = this.PersistenceContext.Load<ModalityPerformedProcedureStep>(detail.ModalityPerformendProcedureStepRef); ExtendedPropertyUtils.Update(mpps.ExtendedProperties, detail.ExtendedProperties); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, detail.DicomSeries, this.PersistenceContext); } // add new order notes var noteAssembler = new OrderNoteAssembler(); noteAssembler.SynchronizeOrderNotes(order, request.OrderNotes, CurrentUserStaff, this.PersistenceContext); // assign all procedures for this order to the specified interpreter (or unassign them, if null) var interpreter = request.AssignedInterpreter == null ? null : this.PersistenceContext.Load<Staff>(request.AssignedInterpreter.StaffRef, EntityLoadFlags.Proxy); foreach (var procedure in order.Procedures) { if (procedure.IsPerformed) { var interpretationStep = GetPendingInterpretationStep(procedure); if (interpretationStep != null) { interpretationStep.Assign(interpreter); } } } this.PersistenceContext.SynchState(); var planAssembler = new ProcedurePlanAssembler(); return new SaveOrderDocumentationDataResponse(planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext)); }
public DiscontinueModalityPerformedProcedureStepResponse DiscontinueModalityPerformedProcedureStep(DiscontinueModalityPerformedProcedureStepRequest request) { var mpps = this.PersistenceContext.Load<ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef); // update extended properties (should this be in an assembler?) ExtendedPropertyUtils.Update(mpps.ExtendedProperties, request.Mpps.ExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, request.Mpps.DicomSeries, this.PersistenceContext); var op = new DiscontinueModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.DiscontinuedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // If discontinuing the MPPS caused any associated procedures to be discontinued, // create an HL7 event. foreach (var activity in mpps.Activities) { var procedure = activity.As<ProcedureStep>().Procedure; if(procedure.IsTerminated) LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure); } // Drill back to order so we can refresh procedure plan var order = CollectionUtils.FirstElement(mpps.Activities).As<ProcedureStep>().Procedure.Order; var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return new DiscontinueModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext)); }
public CompleteModalityPerformedProcedureStepResponse CompleteModalityPerformedProcedureStep(CompleteModalityPerformedProcedureStepRequest request) { var mpps = this.PersistenceContext.Load<ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef); // update extended properties (should this be in an assembler?) ExtendedPropertyUtils.Update(mpps.ExtendedProperties, request.Mpps.ExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, request.Mpps.DicomSeries, this.PersistenceContext); var op = new CompleteModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.CompletedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // Drill back to order so we can refresh procedure plan var onePs = CollectionUtils.FirstElement(mpps.Activities).As<ProcedureStep>(); var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return new CompleteModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(onePs.Procedure.Order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext)); }
public DiscontinueModalityProcedureStepsResponse DiscontinueModalityProcedureSteps(DiscontinueModalityProcedureStepsRequest request) { Platform.CheckForNullReference(request, "request"); Platform.CheckMemberIsSet(request.ModalityProcedureSteps, "ModalityProcedureSteps"); // load the set of mps var modalitySteps = CollectionUtils.Map<EntityRef, ModalityProcedureStep>( request.ModalityProcedureSteps, mpsRef => this.PersistenceContext.Load<ModalityProcedureStep>(mpsRef)); foreach (var step in modalitySteps) { var op = new DiscontinueModalityProcedureStepOperation(); op.Execute(step, request.DiscontinuedTime, new PersistentWorkflow(this.PersistenceContext)); // If discontinuing the procedure step caused the parent procedure to be discontinued, // create an HL7 event. if (step.Procedure.IsTerminated) LogicalHL7Event.ProcedureCancelled.EnqueueEvents(step.Procedure); } this.PersistenceContext.SynchState(); var assembler = new ProcedurePlanAssembler(); return new DiscontinueModalityProcedureStepsResponse( assembler.CreateProcedurePlanSummary(modalitySteps[0].Procedure.Order, this.PersistenceContext)); }
public StartModalityProcedureStepsResponse StartModalityProcedureSteps(StartModalityProcedureStepsRequest request) { Platform.CheckForNullReference(request, "request"); Platform.CheckMemberIsSet(request.ModalityProcedureSteps, "ModalityProcedureSteps"); // load the set of mps var modalitySteps = CollectionUtils.Map<EntityRef, ModalityProcedureStep>( request.ModalityProcedureSteps, mpsRef => this.PersistenceContext.Load<ModalityProcedureStep>(mpsRef)); var hasProcedureNotCheckedIn = CollectionUtils.Contains( modalitySteps, mps => mps.Procedure.IsPreCheckIn); if (hasProcedureNotCheckedIn) throw new RequestValidationException(SR.ExceptionProcedureNotCheckedIn); var op = new StartModalityProcedureStepsOperation(); var mpps = op.Execute(modalitySteps, request.StartTime, this.CurrentUserStaff, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); var procedurePlanAssembler = new ProcedurePlanAssembler(); var mppsAssembler = new ModalityPerformedProcedureStepAssembler(); return new StartModalityProcedureStepsResponse( procedurePlanAssembler.CreateProcedurePlanSummary(modalitySteps[0].Procedure.Order, this.PersistenceContext), mppsAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext)); }