Пример #1
0
        /// <summary>
        /// Translates the specified clinical payor coverage.
        /// </summary>
        /// <param name="clinicalPayorCoverage">The clinical payor coverage.</param>
        /// <returns>A billing PayorCoverage.</returns>
        public PayorCoverage Translate(PayorCoverageCache clinicalPayorCoverage)
        {
            if (clinicalPayorCoverage == null)
            {
                return(null);
            }

            var payor = _payorRepository.GetByKey(clinicalPayorCoverage.PayorCache.Key);

            var clinicalPayorSubscriber         = clinicalPayorCoverage.PayorSubscriberCache;
            var payorSubscriberRelationshipType =
                _lookupValueRepository.GetLookupByWellKnownName <PayorSubscriberRelationshipType> (
                    clinicalPayorSubscriber.PayorSubscriberRelationshipCacheType.WellKnownName);
            var payorSubscriber = new PayorSubscriber(
                clinicalPayorSubscriber.Address,
                clinicalPayorSubscriber.BirthDate,
                clinicalPayorSubscriber.AdministrativeGender,
                clinicalPayorSubscriber.Name,
                payorSubscriberRelationshipType);

            var payorCoverageType =
                _lookupValueRepository.GetLookupByWellKnownName <PayorCoverageType> (clinicalPayorCoverage.PayorCoverageCacheType.WellKnownName);

            var billingPayorCoverage = new PayorCoverage(
                payor, payorSubscriber, clinicalPayorCoverage.MemberNumber, clinicalPayorCoverage.EffectiveDateRange, payorCoverageType);

            return(billingPayorCoverage);
        }
Пример #2
0
        /// <summary>
        /// Creates the immunization.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>An Immunization.</returns>
        public Immunization CreateImmunization(Visit visit)
        {
            var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.Immunization);
            var immunization = new Immunization(visit, activityType);

            _immunizationRepository.MakePersistent(immunization);

            return(immunization);
        }
Пример #3
0
        /// <summary>
        /// Creates the lab specimen.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A LabSpecimen.</returns>
        public LabSpecimen CreateLabSpecimen(Visit visit)
        {
            var type = _lookupValueRepository.GetLookupByWellKnownName <VisitModule.ActivityType>(ActivityType.LabSpecimen);

            var labSpecimen = new LabSpecimen(visit, type);

            _labSpecimenRepository.MakePersistent(labSpecimen);

            return(labSpecimen);
        }
Пример #4
0
        /// <summary>
        /// Creates the vital sign.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>
        /// A VitalSign.
        /// </returns>
        public VitalSign CreateVitalSign(Visit visit)
        {
            var type = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.VitalSign);

            var vitalSign = new VitalSign(visit, type);

            _vitalSignRepository.MakePersistent(vitalSign);

            return(vitalSign);
        }
Пример #5
0
        /// <summary>
        /// If the visit does not have a Phq9, then it returns a newly created Phq9,
        /// else, it returns an existing one from the visit.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A Phq9.</returns>
        public Phq9 CreatePhq9(Visit visit)
        {
            Check.IsNotNull(visit, "visit is required.");

            Phq9 phq9;
            var  existingNidaDrugQuestionnaire = _phq9Repository.GetPhq9ByVisitKey(visit.Key);

            if (existingNidaDrugQuestionnaire != null)
            {
                phq9 = existingNidaDrugQuestionnaire;
            }
            else
            {
                var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.Phq9);
                phq9 = new Phq9(visit, activityType);

                _phq9Repository.MakePersistent(phq9);

                DomainEvent.Raise(new Phq9CreatedEvent {
                    Phq9 = phq9
                });
            }

            return(phq9);
        }
Пример #6
0
        /// <summary>
        /// If the visit does not have a NidaDrugQuestionnaire, then it returns a newly created NidaDrugQuestionnaire,
        /// else, it returns an existing one from the visit.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A NidaDrugQuestionnaire.</returns>
        public NidaDrugQuestionnaire CreateNidaDrugQuestionnaire(Visit visit)
        {
            Check.IsNotNull(visit, "visit is required.");

            NidaDrugQuestionnaire nidaDrugQuestionnaire;
            var existingNidaDrugQuestionnaire = _nidaDrugQuestionnaireRepository.GetNidaDrugQuestionnaireInVisit(visit.Key);

            if (existingNidaDrugQuestionnaire != null)
            {
                nidaDrugQuestionnaire = existingNidaDrugQuestionnaire;
            }
            else
            {
                var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.NidaDrugQuestionnaire);
                nidaDrugQuestionnaire = new NidaDrugQuestionnaire(visit, activityType);

                _nidaDrugQuestionnaireRepository.MakePersistent(nidaDrugQuestionnaire);

                DomainEvent.Raise(new NidaDrugQuestionnaireCreatedEvent {
                    NidaDrugQuestionnaire = nidaDrugQuestionnaire
                });
            }

            return(nidaDrugQuestionnaire);
        }
Пример #7
0
        /// <summary>
        /// If the visit does not have a Dast10, then it returns a newly created Dast10,
        /// else, it returns an existing one from the visit.
        /// </summary>
        /// <param name="visit">A visit.</param>
        /// <returns>A Dast10.</returns>
        public Dast10 CreateDast10(Visit visit)
        {
            Check.IsNotNull(visit, "visit is required.");

            Dast10 dast10;
            var    existingNidaDrugQuestionnaire = _dast10Repository.GetDast10ByVisitKey(visit.Key);

            if (existingNidaDrugQuestionnaire != null)
            {
                dast10 = existingNidaDrugQuestionnaire;
            }
            else
            {
                var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.Dast10);
                dast10 = new Dast10(visit, activityType);

                _dast10Repository.MakePersistent(dast10);

                DomainEvent.Raise(new Dast10CreatedEvent {
                    Dast10 = dast10
                });
            }

            return(dast10);
        }
Пример #8
0
        /// <summary>
        /// Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>A <see cref="Agatha.Common.Response"/></returns>
        public override Response Handle(CreateNewClinicalCaseRequest request)
        {
            var patient            = _patientRepository.GetByKey(request.PatientKey);
            var location           = _locationRepository.GetByKey(request.LocationKey);
            var clinicalCaseStatus = _lookupValueRepository.GetLookupByWellKnownName <ClinicalCaseStatus> (
                WellKnownNames.ClinicalCaseModule.ClinicalCaseStatus.CaseInitiation);

            var entity = _clinicalCaseFactory.CreateClinicalCase(
                patient, new ClinicalCaseProfileBuilder().WithInitialLocation(location));

            entity.UpdateStatus(clinicalCaseStatus);

            var response = CreateTypedResponse();

            response.ClinicalCaseDto = new ClinicalCaseDto
            {
                Key = entity.Key,
                ClinicalCaseProfile = new ClinicalCaseProfileDto
                {
                    Key                = entity.Key,
                    PatientKey         = entity.Patient.Key,
                    PatientFullName    = entity.Patient.Name.First + " " + entity.Patient.Name.Last,
                    InitialLocation    = Mapper.Map <Location, LocationDisplayNameDto> (entity.ClinicalCaseProfile.InitialLocation),
                    ClinicalCaseNumber = entity.ClinicalCaseNumber
                },
                ClinicalCaseStatus = new ClinicalCaseStatusDto
                {
                    ClinicalCaseStatus = Mapper.Map <ClinicalCaseStatus, LookupValueDto> (entity.ClinicalCaseStatus)
                }
            };

            return(response);
        }
Пример #9
0
        /// <summary>
        /// Synchronizes the service.
        /// </summary>
        /// <param name="encounter">The encounter.</param>
        /// <param name="procedure">The procedure.</param>
        /// <param name="diagnosis">The diagnosis.</param>
        /// <returns>A service.</returns>
        public Service SynchronizeService(Encounter encounter, Procedure procedure, CodedConcept diagnosis)
        {
            Check.IsNotNull(encounter, "Encounter is required.");
            Check.IsNotNull(procedure, "Procedure is required.");
            Check.IsNotNull(diagnosis, "Diagnosis is required.");

            var medicalProcedure = _medicalProcedureTranslator.Translate(procedure);

            var service = _serviceRepository.GetByTrackingNumber(procedure.Key);

            var primaryIndicator = (procedure.ProcedureType != ProcedureType.Activity);

            if (service == null)
            {
                service = _serviceFactory.CreateService(encounter, diagnosis, medicalProcedure, primaryIndicator, procedure.Key);
            }
            else
            {
                if (encounter.Key != service.Encounter.Key)
                {
                    service.ReviseEncounter(encounter);
                }

                if (diagnosis != service.Diagnosis)
                {
                    service.ReviseDiagnosis(diagnosis);
                }

                if (medicalProcedure != service.MedicalProcedure)
                {
                    service.ReviseMedicalProcedure(medicalProcedure);
                }

                if (procedure.Key != service.TrackingNumber)
                {
                    service.ReviseTrackingNumber(procedure.Key);
                }

                if (primaryIndicator != service.PrimaryIndicator)
                {
                    service.RevisePrimaryIndicator(primaryIndicator);
                }

                if (procedure.BillingUnitCount != service.BillingUnitCount)
                {
                    service.ReviseBillingUnitCount(procedure.BillingUnitCount);
                }
            }

            //TODO: move them to ctor
            var currency = _lookupValueRepository.GetLookupByWellKnownName <Currency>(WellKnownNames.CommonModule.Currency.USDollars);

            service.ReviseChargeAmount(new Money(currency, 1));

            var c = new UnitCount(1);

            service.ReviseBillingUnitCount(c);
            return(service);
        }
Пример #10
0
        /// <summary>
        /// Creates the gain short screener.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A GainShortScreener.</returns>
        public GainShortScreener CreateGainShortScreener(Visit visit)
        {
            var activityType      = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.GainShortScreener);
            var gainShortScreener = new GainShortScreener(visit, activityType);

            _gainShortScreenerRepository.MakePersistent(gainShortScreener);
            return(gainShortScreener);
        }
Пример #11
0
        /// <summary>
        /// Creates the DensAsi interview.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A DensAsiInterview.</returns>
        public DensAsiInterview CreateDensAsiInterview(Visit visit)
        {
            var activityType     = _lookupValueRepository.GetLookupByWellKnownName <ActivityType>(WellKnownNames.VisitModule.ActivityType.DensAsiInterview);
            var densAsiInterview = new DensAsiInterview(visit, activityType);

            _densAsiInterviewRepository.MakePersistent(densAsiInterview);

            return(densAsiInterview);
        }
Пример #12
0
        /// <summary>
        /// Creates the radiology order.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A <see cref="T:Rem.Domain.Clinical.RadiologyModule.RadiologyOrder">RadiologyOrder</see>.</returns>
        public RadiologyOrder CreateRadiologyOrder(Visit visit)
        {
            var type      = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.RadiologyOrder);
            var radiology = new RadiologyOrder(visit, type);

            _radiologyOrderRepository.MakePersistent(radiology);

            return(radiology);
        }
Пример #13
0
        /// <summary>
        /// Creates the Gpra interview.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A GpraInterview.</returns>
        public GpraInterview CreateGpraInterview(Visit visit)
        {
            var activityType  = _lookupValueRepository.GetLookupByWellKnownName <ActivityType>(WellKnownNames.VisitModule.ActivityType.GpraInterview);
            var gpraInterview = new GpraInterview(visit, activityType);

            _gpraInterviewRepository.MakePersistent(gpraInterview);

            return(gpraInterview);
        }
Пример #14
0
        /// <summary>
        /// Creates the individual counseling.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>
        /// An IndividualCounseling.
        /// </returns>
        public IndividualCounseling CreateIndividualCounseling(Visit visit)
        {
            var activityType         = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.IndividualCounseling);
            var individualCounseling = new IndividualCounseling(visit, activityType);

            _individualCounselingRepository.MakePersistent(individualCounseling);

            return(individualCounseling);
        }
Пример #15
0
        /// <summary>
        /// Creates the Teds interview.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A TedsAdmissionInterview.</returns>
        public TedsAdmissionInterview CreateTedsAdmissionInterview(Visit visit)
        {
            var activityType           = _lookupValueRepository.GetLookupByWellKnownName <ActivityType>(WellKnownNames.VisitModule.ActivityType.TedsAdmissionInterview);
            var TedsAdmissionInterview = new TedsAdmissionInterview(visit, activityType);

            _tedsAdmissionInterviewRepository.MakePersistent(TedsAdmissionInterview);

            return(TedsAdmissionInterview);
        }
Пример #16
0
        /// <summary>
        /// Creates the brief intervention.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A BriefIntervention.</returns>
        public BriefIntervention CreateBriefIntervention(Visit visit)
        {
            var activityType      = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.BriefIntervention);
            var briefIntervention = new BriefIntervention(visit, activityType);

            _briefInterventionRepository.MakePersistent(briefIntervention);

            return(briefIntervention);
        }
Пример #17
0
        private void ScheduleActivity(string activityWellKnownName)
        {
            if (_activitySchedulerService == null)
            {
                _activitySchedulerService = IoC.CurrentContainer.Resolve <IActivitySchedulerService>();
            }

            if (_lookupValueRepository == null)
            {
                _lookupValueRepository = IoC.CurrentContainer.Resolve <ILookupValueRepository>();
            }

            var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType>(activityWellKnownName);

            _activitySchedulerService.ScheduleActivity(Visit.Key, activityType);
        }
Пример #18
0
        private NidaDrugQuestionnaire ScheduleNidaDrugQuestionnaire()
        {
            if (_activitySchedulerService == null)
            {
                _activitySchedulerService = IoC.CurrentContainer.Resolve <IActivitySchedulerService> ();
            }

            if (_lookupValueRepository == null)
            {
                _lookupValueRepository = IoC.CurrentContainer.Resolve <ILookupValueRepository> ();
            }

            var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.NidaDrugQuestionnaire);

            return(( NidaDrugQuestionnaire )_activitySchedulerService.ScheduleActivity(Visit.Key, activityType));
        }
Пример #19
0
        private T MapLookupObject <T>(string wellKnownName)
            where T : LookupBase
        {
            var lookupObject = _lookupValueRepository.GetLookupByWellKnownName(typeof(T), wellKnownName);

            if (lookupObject == null)
            {
                throw new SystemException(
                          "LookupValue for type " + typeof(T).Name + " and well known name " + wellKnownName +
                          " cannot be found.");
            }

            var typedLookup = lookupObject as T;

            return(typedLookup);
        }
Пример #20
0
        /// <summary>
        /// Creates the audit.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>
        /// An Audit.
        /// </returns>
        public Audit CreateAudit(Visit visit)
        {
            // TODO: This checks only the currently submitted session activities. Need to implement a solution that addresses multiple session concurrency issues.
            var auditFirst = visit.Activities.FirstOrDefault(a => a.ActivityType.WellKnownName == WellKnownNames.VisitModule.ActivityType.Audit);

            if (auditFirst != null)
            {
                return(auditFirst as Audit);
            }

            var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType>(WellKnownNames.VisitModule.ActivityType.Audit);
            var audit        = new Audit(visit, activityType);

            _auditRepository.MakePersistent(audit);

            return(audit);
        }
        /// <summary>
        /// Synchronizes the encounter with the clinical visit.
        /// </summary>
        /// <param name="patientAccount">The patient account.</param>
        /// <param name="visit">The visit.</param>
        /// <returns>
        /// An <see cref="Encounter"/> instance.
        /// </returns>
        public Encounter SynchronizeEncounter(PatientAccount patientAccount, Visit visit)
        {
            Check.IsNotNull(patientAccount, "Patient account is required.");
            Check.IsNotNull(visit, "Visit is required.");

            var serviceProvider = visit.Staff;
            var placeOfService  = visit.ServiceLocation;

            var encounter = _encounterRepository.GetByTrackingNumber(visit.Key);

            if (encounter == null)
            {
                encounter = _encounterFactory.CreateEncounter(
                    patientAccount,
                    placeOfService,
                    serviceProvider,
                    visit.Key,
                    visit.CheckedInDateTime ?? DateTime.Now);
            }
            else
            {
                if (encounter.PatientAccount.Key != patientAccount.Key)
                {
                    encounter.RevisePatientAccount(patientAccount);
                }

                if (encounter.ServiceLocation.Key != placeOfService.Key)
                {
                    encounter.RevisePlaceOfService(placeOfService);
                }

                if (encounter.ServiceProviderStaff.Key != serviceProvider.Key)
                {
                    encounter.ReviseServiceProvider(serviceProvider);
                }
            }

            //TODO: move them to ctor
            var currency = _lookupValueRepository.GetLookupByWellKnownName <Currency>(WellKnownNames.CommonModule.Currency.USDollars);

            encounter.ReviseChargeAmount(new Money(currency, 2));

            return(encounter);
        }
Пример #22
0
        /// <summary>
        /// Translates the specified patient phone.
        /// </summary>
        /// <param name="patientPhone">The patient phone.</param>
        /// <returns>A PatientAccountPhone.</returns>
        public PatientAccountPhone Translate(PatientPhone patientPhone)
        {
            if (patientPhone == null)
            {
                return(null);
            }

            var patientAccountPhoneTypeWellKnownName = WellKnownNames.PatientAccountModule.PatientAccountPhoneType.Home;

            if (patientPhone.PatientPhoneType.WellKnownName == WellKnownNames.PatientModule.PatientPhoneType.Cell)
            {
                patientAccountPhoneTypeWellKnownName = WellKnownNames.PatientAccountModule.PatientAccountPhoneType.Cell;
            }

            var patientAccountPhoneType = _lookupValueRepository.GetLookupByWellKnownName <PatientAccountPhoneType>(patientAccountPhoneTypeWellKnownName);

            var patientAccountPhone = new PatientAccountPhone(patientAccountPhoneType, new Phone(patientPhone.PhoneNumber, patientPhone.PhoneExtensionNumber));

            return(patientAccountPhone);
        }
Пример #23
0
        /// <summary>
        /// If the visit does not have a SocialHistory, then it returns a newly created SocialHistory,
        /// else, it returns an existing one from the visit.
        /// </summary>
        /// <param name="visit">The visit.</param>
        /// <returns>A SocialHistory.</returns>
        public SocialHistory CreateSocialHistory(Visit visit)
        {
            Check.IsNotNull(visit, "visit is required.");

            //NOTE : There can be only one 'Social History' per visit.
            SocialHistory socialHistory;

            var existingSocialHistory = _socialHistoryRepository.GetSocialHistoryInVisit(visit.Key);

            if (existingSocialHistory != null)
            {
                socialHistory = existingSocialHistory;
            }
            else
            {
                var type = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.SocialHistory);
                socialHistory = new SocialHistory(visit, type);

                _socialHistoryRepository.MakePersistent(socialHistory);
            }
            return(socialHistory);
        }
        /// <summary>
        /// Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>A <see cref="Agatha.Common.Response"/></returns>
        public override Response Handle(LogPatientEventAccessRequest request)
        {
            var logEntryDto = request.LogEntryDto;

            var patient = _patientRepository.GetByKey(logEntryDto.PatientKey);

            if (patient == null)
            {
                throw new ArgumentException("Could not find a patient  with Key =" + logEntryDto.PatientKey);
            }

            var eventType = _lookupValueRepository.GetLookupByWellKnownName(
                typeof(PatientAccessEventType), WellKnownNames.PatientModule.PatientAccessEventType.ReadEvent) as PatientAccessEventType;

            var formattedNote    = string.Format(logEntryDto.Note, patient.Name.Complete);
            var eventAccessEntry = _patientAccessEventFactory.CreatePatientAccessEvent(patient, eventType, logEntryDto.AuditedContextDescription, formattedNote);

            _auditPatientReadAccessService.AuditPatientReadAccess(eventAccessEntry);

            var response = CreateTypedResponse();

            return(response);
        }
Пример #25
0
        /// <summary>
        /// If the visit does not have a AuditC, then it returns a newly created AuditC,
        /// else, it returns an existing one from the visit.
        /// </summary>
        /// <param name="visit">A visit.</param>
        /// <returns>An AuditC.</returns>
        public AuditC CreateAuditC(Visit visit)
        {
            AuditC auditC;
            var    existingNidaDrugQuestionnaire = _auditCRepository.GetAuditCByVisitKey(visit.Key);

            if (existingNidaDrugQuestionnaire != null)
            {
                auditC = existingNidaDrugQuestionnaire;
            }
            else
            {
                var activityType = _lookupValueRepository.GetLookupByWellKnownName <ActivityType> (WellKnownNames.VisitModule.ActivityType.AuditC);
                auditC = new AuditC(visit, activityType);

                _auditCRepository.MakePersistent(auditC);

                DomainEvent.Raise(new AuditCCreatedEvent {
                    AuditC = auditC
                });
            }

            return(auditC);
        }