Exemplo n.º 1
0
        public async Task <DosViewModel> FillServiceDetailsBuilder(DosViewModel model)
        {
            var jObj = (JObject)JsonConvert.DeserializeObject(model.CheckCapacitySummaryResultListJson);

            model.CheckCapacitySummaryResultList = jObj["CheckCapacitySummaryResult"].ToObject <CheckCapacitySummaryResult[]>();
            var selectedService = model.CheckCapacitySummaryResultList.FirstOrDefault(x => x.IdField == Convert.ToInt32(model.SelectedService));

            var itkMessage = await _cacheManager.Read(model.UserId.ToString());

            var document = XDocument.Parse(itkMessage);

            var serviceDetials = document.Root.Descendants("ServiceDetails").FirstOrDefault();

            serviceDetials.Element("id").SetValue(selectedService.IdField.ToString());
            serviceDetials.Element("name").SetValue(selectedService.NameField.ToString());
            serviceDetials.Element("odsCode").SetValue(selectedService.OdsCodeField.ToString());
            serviceDetials.Element("contactDetails").SetValue(selectedService.ContactDetailsField ?? "");
            serviceDetials.Element("address").SetValue(selectedService.AddressField.ToString());
            serviceDetials.Element("postcode").SetValue(selectedService.PostcodeField.ToString());

            _cacheManager.Set(model.UserId.ToString(), document.ToString());
            _notifier.Notify(_configuration.IntegrationApiItkDispatcher, model.UserId.ToString());

            model.CheckCapacitySummaryResultList = new CheckCapacitySummaryResult[] { selectedService };
            model.CareAdvices = await _careAdviceBuilder.FillCareAdviceBuilder(Int32.Parse(model.Age), model.Gender, model.CareAdviceMarkers.ToList());

            return(model);
        }
        public async Task <OutcomeViewModel> DispositionBuilder(OutcomeViewModel model, DosEndpoint?endpoint)
        {
            model.DispositionTime = DateTime.Now;

            if (OutcomeGroup.Call999.Equals(model.OutcomeGroup))
            {
                model.CareAdviceMarkers = model.State.Keys.Where(key => key.StartsWith("Cx"));
            }

            if (!String.IsNullOrEmpty(model.SymptomDiscriminatorCode))
            {
                model.SymptomDiscriminator = await GetSymptomDiscriminator(model.SymptomDiscriminatorCode);
            }

            var pathways = _journeyHistoryWrangler.GetPathwayNumbers(model.Journey.Steps);

            if (pathways.Length > 0)
            {
                model.SymptomGroup = await GetSymptomGroup(pathways);
            }

            if (OutcomeGroup.ClinicianCallBack.Equals(model.OutcomeGroup))
            {
                //hard code SD and SG codes to fix DOS for Yorkshire region
                //TODO: Fix this in DOS and remove this hack

                model.SymptomDiscriminatorCode = "4193";
                model.SymptomGroup             = "1206";
            }

            if (OutcomeGroup.PrePopulatedDosResultsOutcomeGroups.Contains(model.OutcomeGroup) && !String.IsNullOrEmpty(model.CurrentPostcode))
            {
                model = await PopulateGroupedDosResults(model, null, null, endpoint);
            }

            model.WorseningCareAdvice = await _careAdviceBuilder.FillWorseningCareAdvice(model.UserInfo.Demography.Age,
                                                                                         model.UserInfo.Demography.Gender);

            model.CareAdvices = await
                                _careAdviceBuilder.FillCareAdviceBuilder(model.Id, new AgeCategory(model.UserInfo.Demography.Age).Value, model.UserInfo.Demography.Gender,
                                                                         _keywordCollector.ConsolidateKeywords(model.CollectedKeywords).ToList());

            model.SurveyLink = await _surveyLinkViewModelBuilder.SurveyLinkBuilder(model);

            return(model);
        }
        public async Task <OutcomeViewModel> DispositionBuilder(OutcomeViewModel model)
        {
            //TODO -- DUMMY DATA, REMOVE
            var user  = Users.GetRandomUser();
            var years = (DateTime.Now - user.DoB).Days / 365;

            model.UserInfo.Age    = years;
            model.UserInfo.Gender = user.Gender;
            //-----------------------------

            model.UserId = Guid.NewGuid();
            var journey    = JsonConvert.DeserializeObject <Journey>(model.JourneyJson);
            var itkMessage = new ItkMessageBuilder(_cacheManager).WithExample().SetSummaryItems(
                journey.Steps.Select(a => new ItkMessageBuilder.SummaryItem(a.QuestionNo, a.QuestionTitle, a.Answer.Title))
                )
                             .SetGender(model.UserInfo.Gender)
                             .SetDateOfBirth(DateTime.Now.AddYears(-model.UserInfo.Age).ToShortDateString())
                             .SetDispositionCode(model.Id.Replace("Dx", string.Empty))
                             .SetProvider("111Digital")
                             .SetInformantType("NotSpecified")
                             .SetSendToRepeatCaller(false)
                             .SetForename(user.GivenName)
                             .SetSurname(user.FamilyName)
                             .SetDateOfBirth(user.DoB.ToString("yyyy-MM-dd"))
                             .SetGender(user.Gender)
                             .SetHomeAddress(new ItkMessageBuilder.Address(string.Format("{0} {1} {2}", user.AddressLine1, user.AddressLine2, user.AddressLine3),
                                                                           string.Format("{0} {1}", user.AddressLine4, user.AddressLine5),
                                                                           user.Postcode))
                             .Build(model.UserId.ToString());

            model.CareAdvices = await _careAdviceBuilder.FillCareAdviceBuilder(model.UserInfo.Age, model.UserInfo.Gender, model.CareAdviceMarkers.ToList());

            model.SymptomGroup = await _restfulHelper.GetAsync(string.Format(_configuration.BusinessApiPathwaySymptomGroupUrl,
                                                                             string.Join(",", journey.Steps.Select(s => s.QuestionId.Split('.').First()).Distinct())));

            return(model);
        }
Exemplo n.º 4
0
        public async Task <OutcomeViewModel> DispositionBuilder(OutcomeViewModel model, DosEndpoint?endpoint)
        {
            model.DispositionTime = DateTime.Now;

            Task <SymptomDiscriminator> discriminatorTask = null;
            Task <string> symptomGroupTask = null;

            if (model.OutcomeGroup.IsCoronaVirusCallback)
            {
                //hard code SD and SG codes for covidpathway
                //TODO: Fix this in Pathways and remove this hack

                model.SymptomDiscriminatorCode = "8001";
                model.SymptomGroup             = "8000";
            }
            else if (OutcomeGroup.ClinicianCallBack.Equals(model.OutcomeGroup))
            {
                //hard code SD and SG codes to fix DOS for Yorkshire region
                //TODO: Fix this in DOS and remove this hack

                model.SymptomDiscriminatorCode = "4193";
                model.SymptomGroup             = "1206";
            }
            else
            {
                if (!string.IsNullOrEmpty(model.SymptomDiscriminatorCode))
                {
                    discriminatorTask = GetSymptomDiscriminator(model.SymptomDiscriminatorCode);
                }

                var pathways = _journeyHistoryWrangler.GetPathwayNumbers(model.Journey.Steps);

                if (pathways.Any())
                {
                    symptomGroupTask = GetSymptomGroup(pathways);
                }

                if (discriminatorTask != null)
                {
                    model.SymptomDiscriminator = await discriminatorTask;
                }
                if (symptomGroupTask != null)
                {
                    model.SymptomGroup = await symptomGroupTask;
                }
            }

            var dosTask = Task.FromResult(model);

            if (OutcomeGroup.PrePopulatedDosResultsOutcomeGroups.Contains(model.OutcomeGroup) && !string.IsNullOrEmpty(model.CurrentPostcode))
            {
                dosTask = PopulateGroupedDosResults(model, null, null, endpoint);
            }

            var worseningTask = Task.FromResult(model.WorseningCareAdvice);

            if (!model.WorseningCareAdvice.Items.Any())
            {
                worseningTask = _careAdviceBuilder.FillWorseningCareAdvice(model.UserInfo.Demography.Age, model.UserInfo.Demography.Gender);
            }
            var careAdvicesTask = Task.FromResult(model.CareAdvices);

            if (!model.CareAdvices.Any())
            {
                var ageGroup           = new AgeCategory(model.UserInfo.Demography.Age).Value;
                var careAdviceKeywords = _keywordCollector.ConsolidateKeywords(model.CollectedKeywords).ToList();
                careAdvicesTask = _careAdviceBuilder.FillCareAdviceBuilder(model.Id, ageGroup, model.UserInfo.Demography.Gender, careAdviceKeywords);
            }

            model = await dosTask;

            if (OutcomeGroup.Call999Cat1.Equals(model.OutcomeGroup) || OutcomeGroup.Call999Cat2.Equals(model.OutcomeGroup) || OutcomeGroup.Call999Cat3.Equals(model.OutcomeGroup))
            {
                model.CareAdviceMarkers = model.State.Keys.Where(key => key.StartsWith("Cx"));
            }

            if (model.Is999Callback)
            {
                model.HasAcceptedCallbackOffer = true;
            }

            var surveyTask = _surveyLinkViewModelBuilder.SurveyLinkBuilder(model);

            model.WorseningCareAdvice = await worseningTask;
            model.CareAdvices         = await careAdvicesTask;
            model.SurveyLink          = await surveyTask;

            return(model);
        }