public static PregnancyDetails GetPregnancy(IDashboardRepository repo, string patientDfn, string pregIen)
        {
            PregnancyDetails returnVal = null;

            // *** Get pregnancy ***
            PregnancyListResult pregResult = repo.Pregnancy.GetPregnancies(patientDfn, pregIen);

            // *** Check result ***
            if (pregResult.Success)
            {
                if (pregResult.Pregnancies != null)
                {
                    if (pregResult.Pregnancies.Count == 1)
                    {
                        returnVal = pregResult.Pregnancies[0];
                    }
                }
            }

            // *** Also, get lmp, fetus count ***
            if (returnVal != null)
            {
                PregnancyDetails tempPreg = GetPregnancyObservationData(repo, patientDfn, pregIen);

                returnVal.Lmp            = tempPreg.Lmp;
                returnVal.LmpDateType    = tempPreg.LmpDateType;
                returnVal.FetusBabyCount = tempPreg.FetusBabyCount;

                // *** Will return EDD Basis and Is Final ***
                returnVal.EddBasis   = tempPreg.EddBasis;
                returnVal.EddIsFinal = tempPreg.EddIsFinal;
            }

            return(returnVal);
        }
        //private IDashboardRepository DashboardRepository { get; set; }

        //public PregnancyUtilities(IDashboardRepository repo)
        //{
        //    this.DashboardRepository = repo;
        //}

        public static PregnancyDetails GetWorkingPregnancy(IDashboardRepository repo, string dfn, string pregIen)
        {
            PregnancyDetails returnVal = null;

            // *** First try the pregnancy ien passed in ***
            if (!string.IsNullOrWhiteSpace(pregIen))
            {
                PregnancyListResult pregResult = repo.Pregnancy.GetPregnancies(dfn, pregIen);

                if (pregResult.Success)
                {
                    if (pregResult.Pregnancies != null)
                    {
                        if (pregResult.Pregnancies.Count > 0)
                        {
                            returnVal = pregResult.Pregnancies[0];
                        }
                    }
                }
            }

            // *** Then try to get the current/most-recent ***
            if (returnVal == null)
            {
                PregnancyResult pregResult = repo.Pregnancy.GetCurrentOrMostRecentPregnancy(dfn);

                if (pregResult.Success)
                {
                    returnVal = pregResult.Pregnancy;
                }
            }

            return(returnVal);
        }
        public static BrokerOperationResult UpdateNextDates(IDashboardRepository repo, string patientDfn, string pregnancyIen)
        {
            BrokerOperationResult result = new BrokerOperationResult();

            // *** First get the pregnancy ***
            PregnancyListResult pregResult = repo.Pregnancy.GetPregnancies(patientDfn, pregnancyIen);

            result.SetResult(pregResult.Success, pregResult.Message);

            if (pregResult.Success)
            {
                if (pregResult.Pregnancies != null)
                {
                    if (pregResult.Pregnancies.Count > 0)
                    {
                        // *** Get the checklist items ***

                        PregnancyChecklistItemsResult getResult = GetSortedPregnancyChecklist(repo, patientDfn, pregResult.Pregnancies[0], DsioChecklistCompletionStatus.NotComplete);

                        result.SetResult(getResult.Success, getResult.Message);

                        if (result.Success)
                        {
                            if (getResult.Items != null)
                            {
                                if (getResult.Items.Count > 0)
                                {
                                    // *** Find the next due ***
                                    DateTime nextChecklistDue = getResult.Items[0].DueDate;

                                    // *** Save next checklist observation ***
                                    result = repo.Observations.UpdateNextChecklistDue(patientDfn, nextChecklistDue);

                                    if (result.Success)
                                    {
                                        // *** Find next contact due ***
                                        DateTime nextContactDue = DateTime.MinValue;

                                        foreach (PregnancyChecklistItem item in getResult.Items)
                                        {
                                            if (item.ItemType == DsioChecklistItemType.MccCall)
                                            {
                                                nextContactDue = item.DueDate;
                                                break;
                                            }
                                        }

                                        result = repo.Observations.UpdateNextContactDue(patientDfn, nextContactDue);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(result);
        }
        //public static List<BabyDetails> GetBabyDetails(IDashboardRepository repo, string patientDfn, string pregIen, string babyNum)
        //{
        //    List<BabyDetails> returnVal = new List<BabyDetails>();

        //    // *** Get the observation category ***
        //    string cat = new BabyDetails().ObservationCategory;

        //    // *** Get observations ***
        //    ObservationListResult obsResult = repo.Observations.GetObservationListByCategory(patientDfn, pregIen, cat);

        //    // *** Check for success ***
        //    if (obsResult.Success)
        //    {
        //        // *** Create a list of observations for this babyNum ***
        //        List<DsioObservation> babyObservations = new List<DsioObservation>();

        //        if (obsResult.Observations != null)
        //            foreach (DsioObservation obs in obsResult.Observations)
        //                if (obs.BabyNum == babyNum)
        //                    babyObservations.Add(obs);

        //        // *** Construct baby details ***
        //        returnVal = new BabyDetails(babyObservations);

        //        returnVal.BabyNum = babyNum;
        //    }

        //    return returnVal;
        //}

        public static List <PregnancyDetails> GetPregnancies(IDashboardRepository repo, string dfn)
        {
            List <PregnancyDetails> returnList = new List <PregnancyDetails>();

            // *** Get pregnancies ***
            PregnancyListResult result = repo.Pregnancy.GetPregnancies(dfn, "");

            if (result.Success)
            {
                if (result.Pregnancies != null)
                {
                    if (result.Pregnancies.Count > 0)
                    {
                        returnList.AddRange(result.Pregnancies);
                    }
                }
            }

            return(returnList);
        }
Пример #5
0
        public CdaSourceResult GetSource(CdaOptions options)
        {
            // *** Collect the source data in a source object ***

            CdaSourceResult returnVal = new CdaSourceResult();

            // *** Create new document id ***
            returnVal.Source.DocumentId = Guid.NewGuid().ToString("B");

            // *** Get CDA settings ***
            CdaSettingsResult result = this.dashboardRepository.Settings.GetCdaSettings();

            // *** Add results to return ***
            returnVal.Success = result.Success;
            returnVal.Message = result.Message;

            if (result.Success)
            {
                // *** Add CDA settings to return ***
                returnVal.Source.ManufacturerModelName     = result.ManufacturerModelName;
                returnVal.Source.SoftwareName              = result.SoftwareName;
                returnVal.Source.ProviderOrganizationPhone = result.ProviderOrganizationPhone;

                //// *** Get the VPR data ***
                //VprOperationResult vprResult = this.dashboardRepository.Vpr.GetVprData(options);

                //// *** Add results to return ***
                //returnVal.Success = vprResult.Success;
                //returnVal.Message = vprResult.Message;

                //// *** Add vpr data to return ***
                //if (result.Success)
                //    returnVal.Source.VprData = vprResult.VprData;

                // *** Add options to return ***
                returnVal.Source.Options = options;

                // *** Add pregnancies ***
                string pregIen = (options.DocumentType == CDA.IheDocumentType.PPVS) ? options.SelectedItemIen : "";

                PregnancyListResult pregResult = this.dashboardRepository.Pregnancy.GetPregnancies(options.Patient.Dfn, pregIen);

                if (pregResult.Success)
                {
                    returnVal.Source.Pregnancies = pregResult.Pregnancies;
                }
                else
                {
                    returnVal.SetResult(false, pregResult.Message);
                }

                // *** Add pregnancy status ***
                PatientDemographicsResult patResult = this.dashboardRepository.Patients.GetPatientDemographics(options.Patient.Dfn);

                if (patResult.Success)
                {
                    returnVal.Source.Patient = patResult.Patient;
                }
                else if (returnVal.Success)
                {
                    returnVal.SetResult(false, patResult.Message);
                }

                // *** Get Observations By Date Range ***

                string tiuIen   = "";
                string fromDate = "";
                string toDate   = "";

                if (options.DocumentType == CDA.IheDocumentType.PPVS)
                {
                    // TODO: Add date range when working...

                    // *** Translate a pregnancy into a date range ***
                    // *** The date range should include the postpartum period ***
                    //options.SelectedDateRange = CdaOptions.DateRange.Custom;
                    //options.FromDate = returnVal.Source.Pregnancies[0].EndDate.AddDays(-1);
                    //TimeSpan ts = DateTime.Now - options.FromDate;

                    //if (ts.TotalDays > 60)
                    //    options.ToDate = options.FromDate.AddDays(42);
                    //else
                    //    options.ToDate = DateTime.Now.AddDays(1);

                    //toDate = options.ToDate.ToString(VistaDates.VistADateOnlyFormat);
                    //fromDate = options.FromDate.ToString(VistaDates.VistADateOnlyFormat);

                    // TODO: Clear pregIen ?
                    //pregIen = "";
                }
                else if (options.SelectedItemIen == "-1")
                {
                    tiuIen = "";
                    if (options.FromDate != DateTime.MinValue)
                    {
                        fromDate = options.FromDate.ToString(VistaDates.VistADateOnlyFormat);
                    }

                    if (options.ToDate != DateTime.MinValue)
                    {
                        toDate = options.ToDate.ToString(VistaDates.VistADateOnlyFormat);
                    }
                }
                else
                {
                    tiuIen = options.SelectedItemIen;
                }

                ObservationListResult observationsResult = this.dashboardRepository.Observations.GetObservations(options.Patient.Dfn, pregIen, "", tiuIen, fromDate, toDate, "", -1, -1);

                if (observationsResult.Success)
                {
                    returnVal.Source.Observations = observationsResult.Observations;

                    // *** For PPVS remove observations which belong to pregnancies other than the one chosen by the user ***
                    if (options.DocumentType == CDA.IheDocumentType.PPVS)
                    {
                        returnVal.Source.Observations = returnVal.Source.Observations
                                                        .Where(o => o.PregnancyIen == "" || o.PregnancyIen == options.SelectedItemIen)
                                                        .ToList();
                    }
                }

                // *** Get the VPR data ***
                VprOperationResult vprResult = this.dashboardRepository.Vpr.GetVprData(options);

                // *** Add results to return ***
                returnVal.Success = vprResult.Success;
                returnVal.Message = vprResult.Message;

                // *** Add vpr data to return ***
                if (result.Success)
                {
                    returnVal.Source.VprData = vprResult.VprData;
                }

                ValueSetType[] valueSets = null;

                if (options.DocumentType == CDA.IheDocumentType.APHP)
                {
                    // *** Get Value Sets Needed for APHP ***
                    valueSets = new ValueSetType[]
                    {
                        ValueSetType.AntepartumEducation,
                        ValueSetType.HistoryOfInfection,
                        ValueSetType.HistoryOfPastIllness,
                        ValueSetType.AntepartumFamilyHistory,
                        ValueSetType.MenstrualHistory
                    };
                }
                else if (options.DocumentType == CDA.IheDocumentType.APE)
                {
                    valueSets = new ValueSetType[] { ValueSetType.AntepartumEducation };

                    returnVal.Source.EducationItems = this.GetEducationItems(options.Patient.Dfn, options.FromDate, options.ToDate);
                }

                if (valueSets != null)
                {
                    foreach (var valueSetType in valueSets)
                    {
                        CdaValueSetResult vsResult = this.dashboardRepository.CdaDocuments.GetValueSet(valueSetType);
                        if (vsResult.Success)
                        {
                            returnVal.Source.ValueSets.Add(valueSetType, vsResult.ValueSet);
                        }
                    }
                }

                if (options.DocumentType == CDA.IheDocumentType.XDR_I)
                {
                    // *** Get Radiology Reports ***
                    RadiologyReportsResult radResult = this.dashboardRepository.Radiology.GetReports(options.Patient.Dfn);

                    if (radResult.Success)
                    {
                        if (radResult.Items.Count > 0)
                        {
                            string   tempDate = Util.Piece(options.SelectedItemIen, "|", 1);
                            string   tempProc = Util.Piece(options.SelectedItemIen, "|", 2);
                            DateTime selected;
                            if (DateTime.TryParse(tempDate, out selected))
                            {
                                RadiologyReport rpt = radResult.Items.FirstOrDefault(r => r.ExamDateTime == selected && r.Procedure == tempProc);

                                returnVal.Source.ImageReportText = rpt.Detail;
                            }
                        }
                    }
                }
            }

            return(returnVal);
        }