private void RemoveClinicalCaseSignedComment(
     ClinicalCaseSignedCommentDto dto,
     ClinicalCase clinicalCase,
     ClinicalCaseSignedComment clinicalCaseSignedComment)
 {
     clinicalCase.DeleteSignedComment(clinicalCaseSignedComment);
 }
        private void AddSpecialInitiative(LookupValueDto specialInitiativeDto, ClinicalCase clinicalCase)
        {
            var specialInitiative             = _mappingHelper.MapLookupField <SpecialInitiative> (specialInitiativeDto);
            var clinicalCaseSpecialInitiative = new ClinicalCaseSpecialInitiative(specialInitiative);

            clinicalCase.AddSpecialInitiative(clinicalCaseSpecialInitiative);
        }
Example #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Visit"/> class.
        /// </summary>
        /// <param name="staff">The staff.</param>
        /// <param name="appointmentDateTimeRange">The appointment date time range.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="visitStatus">The visit status.</param>
        /// <param name="placeOfService">The place of service.</param>
        /// <param name="name">The name.</param>
        /// <param name="cptCode">The CPT code.</param>
        protected internal Visit(Staff staff,
                                 DateTimeRange appointmentDateTimeRange,
                                 ClinicalCase clinicalCase,
                                 VisitStatus visitStatus,
                                 Location placeOfService,
                                 string name,
                                 string cptCode) : base(staff, appointmentDateTimeRange)
        {
            Check.IsNotNull(clinicalCase, "Clinical case is required.");
            Check.IsNotNull(visitStatus, "Visit status is required.");
            Check.IsNotNull(placeOfService, "Location is required.");
            Check.IsNotNull(name, "Name is required.");
            Check.IsNotNull(cptCode, "CptCode is required.");

            if (visitStatus.WellKnownName != WellKnownNames.VisitModule.VisitStatus.Scheduled)
            {
                throw new ArgumentException("Visits must always be created as scheduled visits.");
            }

            _clinicalCase    = clinicalCase;
            _visitStatus     = visitStatus;
            _serviceLocation = placeOfService;
            _name            = name;
            _cptCode         = cptCode;
            _activities      = new List <Activity> ();
            _problems        = new List <VisitProblem> ();
        }
Example #4
0
        private Problem BuildProblem(ClinicalCase clinicalCase, CodedConcept problemCode)
        {
            var problem = new Problem(clinicalCase, problemCode);

            Session.SaveOrUpdate(problem);
            return(problem);
        }
        private void AddPriorityPopulation(LookupValueDto priorityPopulationDto, ClinicalCase clinicalCase)
        {
            var priorityPopulation             = _mappingHelper.MapLookupField <PriorityPopulation> (priorityPopulationDto);
            var clinicalCasePriorityPopulation = new ClinicalCasePriorityPopulation(priorityPopulation);

            clinicalCase.AddPriorityPopulation(clinicalCasePriorityPopulation);
        }
Example #6
0
        private ClinicalCase BuildClinicalCase(Patient patient, Location location, long clinicalCaseNumber)
        {
            var clinicalCase = new ClinicalCase(patient, new ClinicalCaseProfileBuilder().WithInitialLocation(location), clinicalCaseNumber);

            Session.SaveOrUpdate(clinicalCase);
            return(clinicalCase);
        }
Example #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Visit"/> class.
        /// </summary>
        /// <param name="staff">The staff.</param>
        /// <param name="appointmentDateTimeRange">The appointment date time range.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="visitStatus">The visit status.</param>
        /// <param name="placeOfService">The place of service.</param>
        /// <param name="name">The name.</param>
        /// <param name="cptCode">The CPT code.</param>
        protected internal Visit(Staff staff, 
            DateTimeRange appointmentDateTimeRange,
            ClinicalCase clinicalCase,
            VisitStatus visitStatus,
            Location placeOfService,
            string name,
            string cptCode )
            : base(staff, appointmentDateTimeRange)
        {
            Check.IsNotNull ( clinicalCase, "Clinical case is required." );
            Check.IsNotNull ( visitStatus, "Visit status is required." );
            Check.IsNotNull ( placeOfService, "Location is required." );
            Check.IsNotNull ( name, "Name is required." );
            Check.IsNotNull ( cptCode, "CptCode is required." );

            if ( visitStatus.WellKnownName != WellKnownNames.VisitModule.VisitStatus.Scheduled )
            {
                throw new ArgumentException ( "Visits must always be created as scheduled visits." );
            }

            _clinicalCase = clinicalCase;
            _visitStatus = visitStatus;
            _serviceLocation = placeOfService;
            _name = name;
            _cptCode = cptCode;
            _activities = new List<Activity> ();
            _problems = new List<VisitProblem> ();
        }
        /// <summary>
        /// Processes the single aggregate.
        /// </summary>
        /// <param name="dto">The dto to process.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <returns>A <see cref="System.Boolean"/></returns>
        protected override bool ProcessSingleAggregate(ClinicalCaseAdmissionDto dto, ClinicalCase clinicalCase)
        {
            var admittedByStaff =
                dto.AdmittedByStaff != null?Session.Load <Staff> (dto.AdmittedByStaff.Key) : null;

            clinicalCase.Admit(new ClinicalCaseAdmission(dto.AdmissionDate, admittedByStaff, dto.AdmissionNote));
            return(true);
        }
 private void ChangeClinicalCaseSignedComment(
     ClinicalCaseSignedCommentDto dto,
     ClinicalCase clinicalCase,
     ClinicalCaseSignedComment clinicalCaseSignedComment)
 {
     RemoveClinicalCaseSignedComment(dto, clinicalCase, clinicalCaseSignedComment);
     AddClinicalCaseSignedComment(dto, clinicalCase);
 }
Example #10
0
        /// <summary>
        /// Creates the problem.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="problemCodeCodedConcept">The problem code coded concept.</param>
        /// <returns>A Problem.</returns>
        public Problem CreateProblem(
            ClinicalCase clinicalCase,
            CodedConcept problemCodeCodedConcept)
        {
            var problem = new Problem ( clinicalCase, problemCodeCodedConcept);
            _problemRepository.MakePersistent ( problem );

            return problem;
        }
        /// <summary>
        /// Processes the single aggregate.
        /// </summary>
        /// <param name="dto">The dto to process.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <returns>A <see cref="System.Boolean"/></returns>
        protected override bool ProcessSingleAggregate(ClinicalCaseProfileDto dto, ClinicalCase clinicalCase)
        {
            _mappingResult &= ReviseProfile(dto, clinicalCase);
            _mappingResult &= MapSignedComments(dto, clinicalCase);
            _mappingResult &= MapSpecialInitiatives(dto, clinicalCase);
            _mappingResult &= MapPriorityPopulations(dto, clinicalCase);

            return(_mappingResult);
        }
        /// <summary>
        /// Processes the single aggregate.
        /// </summary>
        /// <param name="dto">The dto to process.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <returns>A <see cref="System.Boolean"/></returns>
        protected override bool ProcessSingleAggregate(ClinicalCaseStatusDto dto, ClinicalCase clinicalCase)
        {
            var clinicalCaseStatus = _mappingHelper.MapLookupField <ClinicalCaseStatus> (dto.ClinicalCaseStatus);

            clinicalCase.UpdateStatus(clinicalCaseStatus);
            clinicalCase.Close(new ClinicalCaseCloseInfo(dto.ClinicalCaseCloseDate, dto.ClinicalCaseClosingNote));

            return(true);
        }
Example #13
0
        /// <summary>
        /// Creates the immunization.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        /// <returns>An immunization.</returns>
        public Immunization CreateImmunization(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType>(WellKnownNames.VisitModule.ActivityType.Immunization);
            var immunization = new Immunization(clinicalCase, activityType, provenance, activityDateTimeRange);

            _immunizationRepository.MakePersistent(immunization);

            return(immunization);
        }
Example #14
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Activity"/> class.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <param name="activityType">Type of the activity.</param>
        protected internal Activity( Visit visit, ActivityType activityType )
        {
            Check.IsNotNull ( visit, "Visit is required." );
            Check.IsNotNull ( activityType, "Activity Type is required." );

            _visit = visit;
            _clinicalCase = visit.ClinicalCase;
            _activityType = activityType;
            _activityDateTimeRange = visit.AppointmentDateTimeRange;
        }
        /// <summary>
        /// Processes the single aggregate.
        /// </summary>
        /// <param name="dto">The dto to process.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <returns>A <see cref="System.Boolean"/></returns>
        protected override bool ProcessSingleAggregate(ClinicalCaseDischargeDto dto, ClinicalCase clinicalCase)
        {
            var dischargedByStaff = dto.DischargedByStaff != null?Session.Load <Staff> (dto.DischargedByStaff.Key) : null;

            var dischargeReason = _mappingHelper.MapLookupField <DischargeReason> (dto.DischargeReason);

            clinicalCase.Discharge(new ClinicalCaseDischarge(dto.DischargeDate, dto.DischargeNote, dischargeReason, dischargedByStaff));

            return(true);
        }
Example #16
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Problem"/> class.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="problemCodeCodedConcept">The problem code coded concept.</param>
        protected internal Problem(
            ClinicalCase clinicalCase,
            CodedConcept problemCodeCodedConcept )
        {
            Check.IsNotNull ( clinicalCase, "Clinical case is required." );
            Check.IsNotNull ( problemCodeCodedConcept, "Problem code coded concept is required." );

            _clinicalCase = clinicalCase;
            _problemCodeCodedConcept = problemCodeCodedConcept;
        }
Example #17
0
        /// <summary>
        /// Creates the lab specimen.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        /// <returns>A LabSpecimen.</returns>
        public LabSpecimen CreateLabSpecimen(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            var type = _lookupValueRepository.GetLookupByWellKnownName <VisitModule.ActivityType>(ActivityType.LabSpecimen);

            var labSpecimen = new LabSpecimen(clinicalCase, type, provenance, activityDateTimeRange);

            _labSpecimenRepository.MakePersistent(labSpecimen);

            return(labSpecimen);
        }
Example #18
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Activity"/> class.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <param name="activityType">Type of the activity.</param>
        protected internal Activity(Visit visit, ActivityType activityType)
        {
            Check.IsNotNull(visit, "Visit is required.");
            Check.IsNotNull(activityType, "Activity Type is required.");

            _visit                 = visit;
            _clinicalCase          = visit.ClinicalCase;
            _activityType          = activityType;
            _activityDateTimeRange = visit.AppointmentDateTimeRange;
        }
Example #19
0
        /// <summary>
        /// Creates the vital sign.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        /// <returns>Vital Sign</returns>
        public VitalSign CreateVitalSign(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            var type = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.VitalSign);

            var vitalSign = new VitalSign(clinicalCase, type, provenance, activityDateTimeRange);

            _vitalSignRepository.MakePersistent(vitalSign);

            return(vitalSign);
        }
Example #20
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Activity"/> class.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="activityType">Type of the activity.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        protected internal Activity(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            Check.IsNotNull(clinicalCase, "Clinical Case is required.");
            Check.IsNotNull(provenance, "Provenance is required.");
            Check.IsNotNull(activityType, "Activity Type is required.");

            _clinicalCase          = clinicalCase;
            _provenance            = provenance;
            _activityType          = activityType;
            _activityDateTimeRange = activityDateTimeRange;
        }
        private bool MapSignedComments(ClinicalCaseProfileDto dto, ClinicalCase clinicalCase)
        {
            var result =
                new AggregateNodeCollectionMapper <ClinicalCaseSignedCommentDto, ClinicalCase, ClinicalCaseSignedComment> (
                    dto.SignedComments, clinicalCase, clinicalCase.SignedComments)
                .MapRemovedItem(RemoveClinicalCaseSignedComment)
                .MapAddedItem(AddClinicalCaseSignedComment)
                .MapChangedItem(ChangeClinicalCaseSignedComment)
                .Map();

            return(result);
        }
Example #22
0
        /// <summary>
        /// Creates the visit.
        /// </summary>
        /// <param name="staff">The staff.</param>
        /// <param name="appointmentDateTimeRange">The appointment date time range.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="visitTemplate">The visit template.</param>
        /// <param name="serviceLocation">The service location.</param>
        /// <returns>
        /// A Visit.
        /// </returns>
        public Visit CreateVisit(Staff staff,
                                 DateTimeRange appointmentDateTimeRange,
                                 ClinicalCase clinicalCase,
                                 VisitTemplate visitTemplate,
                                 Location serviceLocation)
        {
            var visitStatus = _visitStatusRepository.GetByWellKnownName(WellKnownNames.VisitModule.VisitStatus.Scheduled);
            var visit       = new Visit(staff, appointmentDateTimeRange, clinicalCase, visitStatus, serviceLocation, visitTemplate.Name, visitTemplate.CptCode);

            _visitRepository.MakePersistent(visit);
            return(visit);
        }
Example #23
0
        /// <summary>
        /// Creates the visit.
        /// </summary>
        /// <param name="staff">The staff.</param>
        /// <param name="appointmentDateTimeRange">The appointment date time range.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="visitTemplate">The visit template.</param>
        /// <param name="serviceLocation">The service location.</param>
        /// <returns>
        /// A Visit.
        /// </returns>
        public Visit CreateVisit(Staff staff, 
            DateTimeRange appointmentDateTimeRange,
            ClinicalCase clinicalCase,
            VisitTemplate visitTemplate,
            Location serviceLocation )
        {
            var visitStatus = _visitStatusRepository.GetByWellKnownName ( WellKnownNames.VisitModule.VisitStatus.Scheduled );
            var visit = new Visit (staff, appointmentDateTimeRange, clinicalCase, visitStatus, serviceLocation, visitTemplate.Name, visitTemplate.CptCode );

            _visitRepository.MakePersistent ( visit );
            return visit;
        }
Example #24
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ProgramEnrollment"/> class.
        /// </summary>
        /// <param name="programOffering">The program offering.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="enrollmentDate">The enrollment date.</param>
        /// <param name="enrollingStaff">The enrolling staff.</param>
        protected internal ProgramEnrollment(ProgramOffering programOffering, ClinicalCase clinicalCase, DateTime enrollmentDate, Staff enrollingStaff)
            : this()
        {
            Check.IsNotNull(programOffering, "Program Offering is required.");
            Check.IsNotNull(clinicalCase, "Clinical Case is required.");
            Check.IsNotNull(enrollmentDate, "Enrollment Date is required.");
            Check.IsNotNull(enrollingStaff, "Enrolling Staff is required.");

            _programOffering = programOffering;
            _clinicalCase    = clinicalCase;
            _enrollmentDate  = enrollmentDate;
            _enrollingStaff  = enrollingStaff;
        }
Example #25
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ProgramEnrollment"/> class.
        /// </summary>
        /// <param name="programOffering">The program offering.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="enrollmentDate">The enrollment date.</param>
        /// <param name="enrollingStaff">The enrolling staff.</param>
        protected internal ProgramEnrollment(ProgramOffering programOffering, ClinicalCase clinicalCase, DateTime enrollmentDate, Staff enrollingStaff)
            : this()
        {
            Check.IsNotNull(programOffering, "Program Offering is required.");
            Check.IsNotNull(clinicalCase, "Clinical Case is required.");
            Check.IsNotNull(enrollmentDate, "Enrollment Date is required.");
            Check.IsNotNull(enrollingStaff, "Enrolling Staff is required.");

            _programOffering = programOffering;
            _clinicalCase = clinicalCase;
            _enrollmentDate = enrollmentDate;
            _enrollingStaff = enrollingStaff;
        }
        /// <summary>
        /// Gets the HL7 message.
        /// </summary>
        /// <param name="keyValues">The key values.</param>
        /// <returns>A <see cref="System.String"/></returns>
        public string GetHl7Message(Dictionary <string, long> keyValues)
        {
            var problemKey = keyValues[HttpHandlerQueryStrings.ProblemKey];
            var session    = _sessionProvider.GetSession();

            _messageLocalDateTime = DateTime.Now;
            _problem = session.Get <Problem> (keyValues[HttpHandlerQueryStrings.ProblemKey]);
            Check.IsNotNull(_problem, string.Format("Problem not found for key {0}.", problemKey));

            // Derive a visit appointment date for a problem associated with multiple visits.
            // Return the first minimum Appointment.ScheduledStartDateTime and Visit.Key where the Problem.Key is found.
            var queryResult = session.CreateQuery(
                @"select min(v.AppointmentDateTimeRange.StartDateTime) as AppointmentStartDateTime, vp.Visit.Key as VisitKey
                from VisitProblem as vp
                join vp.Visit as v
                where vp.Problem.Key = :problemKey
                group by vp.Visit.Key")
                              .SetParameter("problemKey", problemKey)
                              .List();

            _minimumVisitScheduledStartDateTime = ( DateTime )(( object[] )queryResult[0])[0];
            _minimumVisitKey = ( long )(( object[] )queryResult[0])[1];
            VerifyDerivedVisit();
            _clinicalCase = _problem.ClinicalCase;
            _patient      = _problem.ClinicalCase.Patient;

            var dto = new SyndromicSurveillanceDto
            {
                MshDto            = GetMshDto(),
                PidDto            = GetPidDto(),
                EVNDto            = GetEvnDto(),
                PV1Dto            = GetPv1Dto(),
                Observations      = GetObservations(),
                PresentedProblems = GetPresentedProblems()
            };

            var helper  = IoC.CurrentContainer.Resolve <IMessageHelper <ADT_A01, SyndromicSurveillanceDto> > ();
            var factory = IoC.CurrentContainer.Resolve <MessageFactoryBase <ADT_A01, SyndromicSurveillanceDto> >();

            AbstractMessage message;

            if (helper != null && factory != null)
            {
                message = factory.CreateMessage(dto);
            }
            else
            {
                throw new ArgumentException("HL7 message helper or factory instances were not created.");
            }
            return((new PipeParser()).Encode(message));
        }
        private bool MapSpecialInitiatives(ClinicalCaseProfileDto dto, ClinicalCase clinicalCase)
        {
            var specialInitiativeResult = new AggregateNodeLookupCollectionMapper <LookupValueDto, ClinicalCase, ClinicalCaseSpecialInitiative> (
                dto.SpecialInitiatives,
                clinicalCase,
                clinicalCase.SpecialInitiatives)
                                          .MapAddedItem(AddSpecialInitiative)
                                          .MapRemovedItem(
                (specialInitiativeDto, localClinicalCase, specialInitiative) => localClinicalCase.RemoveSpecialInitiative(specialInitiative))
                                          .FindCollectionEntity((pr, key) => clinicalCase.SpecialInitiatives.FirstOrDefault(r => r.SpecialInitiative.Key == key))
                                          .Map();

            return(specialInitiativeResult);
        }
        private bool MapPriorityPopulations(ClinicalCaseProfileDto dto, ClinicalCase clinicalCase)
        {
            var priorityPopulationResult = new AggregateNodeLookupCollectionMapper <LookupValueDto, ClinicalCase, ClinicalCasePriorityPopulation> (
                dto.PriorityPopulations,
                clinicalCase,
                clinicalCase.PriorityPopulations)
                                           .MapAddedItem(AddPriorityPopulation)
                                           .MapRemovedItem(
                (priorityPopulationDto, localClinicalCase, priorityPopulation) =>
                localClinicalCase.RemovePriorityPopulation(priorityPopulation))
                                           .FindCollectionEntity((pr, key) => clinicalCase.PriorityPopulations.FirstOrDefault(r => r.PriorityPopulation.Key == key))
                                           .Map();

            return(priorityPopulationResult);
        }
Example #29
0
        public void CreateClinicalCase_GivenValidArguments_Succeeds()
        {
            var clinicalCaseRepositoryMock = new Mock <IClinicalCaseRepository> ();
            var clinicalCaseFactory        = new ClinicalCaseFactory(
                clinicalCaseRepositoryMock.Object);

            var patient  = new Mock <Patient> ();
            var location = new Mock <Location> ();

            ClinicalCase clinicalCase = clinicalCaseFactory.CreateClinicalCase(
                patient.Object,
                new ClinicalCaseProfileBuilder().WithInitialLocation(location.Object));

            Assert.IsNotNull(clinicalCase);
        }
Example #30
0
        /// <summary>
        /// Creates the clinical case.
        /// </summary>
        /// <param name="patient">The patient.</param>
        /// <param name="clinicalCaseProfile">The clinical case profile.</param>
        /// <returns>A ClinicalCase.</returns>
        public ClinicalCase CreateClinicalCase(
            Patient patient,
            ClinicalCaseProfile clinicalCaseProfile )
        {
            Check.IsNotNull(patient, "Patient is required.");
            Check.IsNotNull(clinicalCaseProfile, "Clinical case profile is required.");

            long mostRecentCaseNumber = _clinicalCaseRepository.GetMostRecentCaseNumber ( patient.Key );

            var clinicalCase = new ClinicalCase(patient, clinicalCaseProfile, mostRecentCaseNumber);

            _clinicalCaseRepository.MakePersistent ( clinicalCase );

            return clinicalCase;
        }
        private bool ReviseProfile(ClinicalCaseProfileDto dto, ClinicalCase clinicalCase)
        {
            var initialLocation  = Session.Load <Location> (dto.InitialLocation.Key);
            var performedByStaff =
                dto.PerformedByStaff != null?Session.Load <Staff> (dto.PerformedByStaff.Key) : null;

            var referralType         = _mappingHelper.MapLookupField <ReferralType> (dto.ReferralType);
            var initialContactMethod = _mappingHelper.MapLookupField <InitialContactMethod> (dto.InitialContactMethod);

            var profile = new ClinicalCaseProfileBuilder()
                          .WithClinicalCaseStartDate(dto.ClinicalCaseStartDate)
                          .WithInitialContactMethod(initialContactMethod)
                          .WithInitialLocation(initialLocation)
                          .WithPatientPresentingProblemNote(dto.PatientPresentingProblemNote)
                          .WithPerformedByStaff(performedByStaff)
                          .WithReferralType(referralType);

            clinicalCase.ReviseClinicalCaseProfile(profile);

            return(true);
        }
        /// <summary>
        /// Creates the program enrollment.
        /// </summary>
        /// <param name="programOffering">The program offering.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="enrollmentDate">The enrollment date.</param>
        /// <param name="enrollingStaff">The enrolling staff.</param>
        /// <returns>
        /// A ProgramEnrollment.
        /// </returns>
        public ProgramEnrollment CreateProgramEnrollment(ProgramOffering programOffering, ClinicalCase clinicalCase, DateTime enrollmentDate, Staff enrollingStaff)
        {
            Check.IsNotNull(programOffering, "Program Offering is required.");
            Check.IsNotNull(clinicalCase, "Clinical Case is required.");
            Check.IsNotNull(enrollmentDate, "Enrollment Date is required.");
            Check.IsNotNull(enrollingStaff, "Enrolling Staff is required.");

            var newProgramEnrollment = new ProgramEnrollment ( programOffering, clinicalCase, enrollmentDate, enrollingStaff );
            ProgramEnrollment createdProgramEnrollment = null;

            DomainRuleEngine.CreateRuleEngine ( newProgramEnrollment, "CreateProgramEnrollmentRuleSet" )
                .WithContext ( enrollmentDate )
                .WithContext ( enrollingStaff )
                .Execute ( () =>
                    {
                        _programEnrollmentRepository.MakePersistent(newProgramEnrollment);
                        createdProgramEnrollment = newProgramEnrollment;
                    });

            return createdProgramEnrollment;
        }
 private ClinicalCase BuildClinicalCase( Patient patient, Location location, long clinicalCaseNumber )
 {
     var clinicalCase = new ClinicalCase ( patient, new ClinicalCaseProfileBuilder().WithInitialLocation(location), clinicalCaseNumber );
     Session.SaveOrUpdate ( clinicalCase );
     return clinicalCase;
 }
Example #34
0
 /// <summary>
 /// Creates the activity.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 /// <returns>An Activity.</returns>
 public Activity CreateActivity(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
 {
     return(CreateImmunization(clinicalCase, provenance, activityDateTimeRange));
 }
 private Problem BuildProblem( ClinicalCase clinicalCase, CodedConcept problemCode )
 {
     var problem = new Problem ( clinicalCase, problemCode );
     Session.SaveOrUpdate ( problem );
     return problem;
 }
Example #36
0
        /// <summary>
        /// Creates the program enrollment.
        /// </summary>
        /// <param name="programOffering">The program offering.</param>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="enrollmentDate">The enrollment date.</param>
        /// <param name="enrollingStaff">The enrolling staff.</param>
        /// <returns>
        /// A ProgramEnrollment.
        /// </returns>
        public ProgramEnrollment CreateProgramEnrollment(ProgramOffering programOffering, ClinicalCase clinicalCase, DateTime enrollmentDate, Staff enrollingStaff)
        {
            Check.IsNotNull(programOffering, "Program Offering is required.");
            Check.IsNotNull(clinicalCase, "Clinical Case is required.");
            Check.IsNotNull(enrollmentDate, "Enrollment Date is required.");
            Check.IsNotNull(enrollingStaff, "Enrolling Staff is required.");

            var newProgramEnrollment = new ProgramEnrollment(programOffering, clinicalCase, enrollmentDate, enrollingStaff);
            ProgramEnrollment createdProgramEnrollment = null;

            DomainRuleEngine.CreateRuleEngine(newProgramEnrollment, "CreateProgramEnrollmentRuleSet")
            .WithContext(enrollmentDate)
            .WithContext(enrollingStaff)
            .Execute(() =>
            {
                _programEnrollmentRepository.MakePersistent(newProgramEnrollment);
                createdProgramEnrollment = newProgramEnrollment;
            });

            return(createdProgramEnrollment);
        }
        private Visit BuildScheduledVisit( Staff staff, DateTimeRange appointmentDateTimeRange, ClinicalCase clinicalCase, Problem problem = null )
        {
            var visitTemplate = new VisitTemplate ( SafeHarborAgency, "Initial Behavioral Health - Adult", "99204" );
            Session.SaveOrUpdate ( visitTemplate );

            var visit = new Visit ( staff, appointmentDateTimeRange, clinicalCase, ScheduledVisitStatus, SafeHarborLocation, visitTemplate.Name, visitTemplate.CptCode );

            if ( problem != null )
            {
                visit.AddProblem ( problem );
            }

            Session.SaveOrUpdate ( visit );

            return visit;
        }
Example #38
0
 /// <summary>
 /// Initializes a new instance of the <see cref="VitalSign"/> class.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="activityType">Type of the activity.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 protected internal VitalSign(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
     : base(clinicalCase, activityType, provenance, activityDateTimeRange)
 {
     _bloodPressures = new List<BloodPressure> ();
     _heartRates = new List<HeartRate> ();
 }
Example #39
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LabSpecimen"/> class.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="activityType">Type of the activity.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 protected internal LabSpecimen(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
     : base(clinicalCase, activityType, provenance, activityDateTimeRange)
 {
     _labTests = new List<LabTest>();
 }
Example #40
0
        /// <summary>
        /// Creates the immunization.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        /// <returns>An immunization.</returns>
        public Immunization CreateImmunization(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            var activityType = _lookupValueRepository.GetLookupByWellKnownName<ActivityType>(WellKnownNames.VisitModule.ActivityType.Immunization);
            var immunization = new Immunization(clinicalCase, activityType, provenance, activityDateTimeRange);

            _immunizationRepository.MakePersistent(immunization);

            return immunization;
        }
Example #41
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Activity"/> class.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="activityType">Type of the activity.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        protected internal Activity(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            Check.IsNotNull(clinicalCase, "Clinical Case is required.");
            Check.IsNotNull(provenance, "Provenance is required.");
            Check.IsNotNull(activityType, "Activity Type is required.");

            _clinicalCase = clinicalCase;
            _provenance = provenance;
            _activityType = activityType;
            _activityDateTimeRange = activityDateTimeRange;
        }
Example #42
0
 /// <summary>
 /// Initializes a new instance of the <see cref="VitalSign"/> class.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="activityType">Type of the activity.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 protected internal VitalSign(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
     : base(clinicalCase, activityType, provenance, activityDateTimeRange)
 {
     _bloodPressures = new List <BloodPressure> ();
     _heartRates     = new List <HeartRate> ();
 }
        private Visit BuildCheckedInVisit( Staff staff, DateTimeRange appointmentDateTimeRange, ClinicalCase clinicalCase, Problem problem = null )
        {
            Visit visit = BuildScheduledVisit ( staff, appointmentDateTimeRange, clinicalCase, problem );

            visit.CheckIn ( new DateTime ( 2002, 3, 28, 9, 0, 0 ) );

            Session.SaveOrUpdate ( visit );

            return visit;
        }
Example #44
0
 /// <summary>
 /// Creates the activity.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 /// <returns>
 /// An Activity.
 /// </returns>
 public Activity CreateActivity( ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange )
 {
     return CreateVitalSign ( clinicalCase, provenance, activityDateTimeRange );
 }
Example #45
0
        /// <summary>
        /// Creates the vital sign.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        /// <returns>Vital Sign</returns>
        public VitalSign CreateVitalSign( ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange )
        {
            var type = _lookupValueRepository.GetLookupByWellKnownName<ActivityType> ( WellKnownNames.VisitModule.ActivityType.VitalSign );

            var vitalSign = new VitalSign ( clinicalCase, type, provenance, activityDateTimeRange );

            _vitalSignRepository.MakePersistent ( vitalSign );

            return vitalSign;
        }
        /// <summary>
        /// Gets the HL7 message.
        /// </summary>
        /// <param name="keyValues">The key values.</param>
        /// <returns>A <see cref="System.String"/></returns>
        public string GetHl7Message( Dictionary<string, long> keyValues )
        {
            var problemKey = keyValues[HttpHandlerQueryStrings.ProblemKey];
            var session = _sessionProvider.GetSession ();

            _messageLocalDateTime = DateTime.Now;
            _problem = session.Get<Problem> ( keyValues[HttpHandlerQueryStrings.ProblemKey] );
            Check.IsNotNull ( _problem, string.Format ( "Problem not found for key {0}.", problemKey ) );

            // Derive a visit appointment date for a problem associated with multiple visits.
            // Return the first minimum Appointment.ScheduledStartDateTime and Visit.Key where the Problem.Key is found.
            var queryResult = session.CreateQuery (
                @"select min(v.AppointmentDateTimeRange.StartDateTime) as AppointmentStartDateTime, vp.Visit.Key as VisitKey
                from VisitProblem as vp
                join vp.Visit as v
                where vp.Problem.Key = :problemKey
                group by vp.Visit.Key" )
                .SetParameter ( "problemKey", problemKey )
                .List ();

            _minimumVisitScheduledStartDateTime = ( DateTime )( ( object[] )queryResult[0] )[0];
            _minimumVisitKey = ( long )( ( object[] )queryResult[0] )[1];
            VerifyDerivedVisit ();
            _clinicalCase = _problem.ClinicalCase;
            _patient = _problem.ClinicalCase.Patient;

            var dto = new SyndromicSurveillanceDto
                {
                    MshDto = GetMshDto (),
                    PidDto = GetPidDto (),
                    EVNDto = GetEvnDto (),
                    PV1Dto = GetPv1Dto (),
                    Observations = GetObservations (),
                    PresentedProblems = GetPresentedProblems ()
                };

            var helper = IoC.CurrentContainer.Resolve<IMessageHelper<ADT_A01, SyndromicSurveillanceDto>> ();
            var factory = IoC.CurrentContainer.Resolve<MessageFactoryBase<ADT_A01, SyndromicSurveillanceDto>>();

            AbstractMessage message;
            if ( helper != null && factory != null )
            {
                message = factory.CreateMessage ( dto );
            }
            else
            {
                throw new ArgumentException ( "HL7 message helper or factory instances were not created." );
            }
            return ( new PipeParser () ).Encode ( message );
        }
Example #47
0
 /// <summary>
 /// Creates the activity.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 /// <returns>An Activity.</returns>
 public Activity CreateActivity(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
 {
     return CreateImmunization(clinicalCase, provenance, activityDateTimeRange);
 }
        private void AddClinicalCaseSignedComment(ClinicalCaseSignedCommentDto dto, ClinicalCase clinicalCase)
        {
            var staff = Session.Load <Staff> (dto.Staff.Key);

            clinicalCase.AddSignedComment(new ClinicalCaseSignedComment(staff, DateTime.UtcNow, dto.SignedNote));
        }
Example #49
0
 /// <summary>
 /// Destroys the clinical case.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 public void DestroyClinicalCase( ClinicalCase clinicalCase )
 {
     _clinicalCaseRepository.MakeTransient ( clinicalCase );
 }
Example #50
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Immunization"/> class.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="activityType">Type of the activity.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 protected internal Immunization(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
     : base(clinicalCase, activityType, provenance, activityDateTimeRange)
 {
 }
Example #51
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LabSpecimen"/> class.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="activityType">Type of the activity.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 protected internal LabSpecimen(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
     : base(clinicalCase, activityType, provenance, activityDateTimeRange)
 {
     _labTests = new List <LabTest>();
 }
Example #52
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Immunization"/> class.
 /// </summary>
 /// <param name="clinicalCase">The clinical case.</param>
 /// <param name="activityType">Type of the activity.</param>
 /// <param name="provenance">The provenance.</param>
 /// <param name="activityDateTimeRange">The activity date time range.</param>
 protected internal Immunization(ClinicalCase clinicalCase, ActivityType activityType, Provenance provenance, DateTimeRange activityDateTimeRange)
     : base(clinicalCase, activityType, provenance, activityDateTimeRange)
 {
 }
Example #53
0
        /// <summary>
        /// Creates the lab specimen.
        /// </summary>
        /// <param name="clinicalCase">The clinical case.</param>
        /// <param name="provenance">The provenance.</param>
        /// <param name="activityDateTimeRange">The activity date time range.</param>
        /// <returns>A LabSpecimen.</returns>
        public LabSpecimen CreateLabSpecimen(ClinicalCase clinicalCase, Provenance provenance, DateTimeRange activityDateTimeRange)
        {
            var type = _lookupValueRepository.GetLookupByWellKnownName<VisitModule.ActivityType>(ActivityType.LabSpecimen);

            var labSpecimen = new LabSpecimen(clinicalCase, type, provenance, activityDateTimeRange);

            _labSpecimenRepository.MakePersistent(labSpecimen);

            return labSpecimen;
        }