/// <summary>
        ///     Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="response">The response.</param>
        protected override void Handle(GetDtoByKeyRequest <AssessmentSectionSummaryDto> request, DtoResponse <AssessmentSectionSummaryDto> response)
        {
            var assessmentInstance   = _assessmentInstanceRepository.GetByKey(request.Key);
            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(assessmentInstance.AssessmentDefinitionKey);

            var assessmentSectionSummaryDto = new AssessmentSectionSummaryDto()
            {
                Key        = assessmentInstance.Key,
                PatientKey = assessmentInstance.PatientKey,
                AssessmentDefinitionKey  = assessmentDefinition.Key,
                AssessmentDefinitionCode = assessmentDefinition.CodedConcept.Code,
                AssessmentName           = assessmentDefinition.CodedConcept.Name,
                IsSubmitted     = assessmentInstance.IsSubmitted,
                IsComplete      = Math.Abs(assessmentInstance.CalculateCompleteness().PercentComplete - 1.0d) <= double.Epsilon,
                Score           = assessmentInstance.Score == null ? null : Mapper.Map <Score, ScoreDto> (assessmentInstance.Score),
                Sections        = new List <SectionSummaryDto> (),
                PercentComplete = assessmentInstance.CalculateCompleteness().PercentComplete * 100,
            };

            MapItems(assessmentSectionSummaryDto, assessmentDefinition, assessmentInstance);

            response.DataTransferObject = assessmentSectionSummaryDto;
            var messages = new List <IMessage> (_messageCollector.Messages);

            if (assessmentInstance.WorkflowKey.HasValue)
            {
                var message = _workflowMessageRepository.GetByKey(assessmentInstance.WorkflowKey.Value);
                if (message.Status == WorkflowMessageStatus.WaitingForResponse)
                {
                    messages.Add(message);
                }
            }
            response.DataTransferObject.Messages =
                Mapper.Map <IEnumerable <IMessage>, IEnumerable <IMessageDto> > (messages);
        }
예제 #2
0
        /// <summary>
        ///     Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="response">The response.</param>
        protected override void Handle(GetSectionDtoByKeyRequest request, GetSectionDtoByKeyResponse response)
        {
            var assessmentInstance   = _assessmentInstanceRepository.GetByKey(request.Key);
            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(assessmentInstance.AssessmentDefinitionKey);

            var sectionDto = new SectionDto
            {
                Key            = assessmentInstance.Key,
                AssessmentName = assessmentDefinition.CodedConcept.Name,
                Items          = new List <ItemDto> (),
            };
            IContainItemDefinitions itemContainer;

            if (request.SectionItemDefinitionCode == null)
            {
                itemContainer = (IContainItemDefinitions)assessmentDefinition.ItemDefinitions.FirstOrDefault(i => i.ItemType == ItemType.Section) ?? assessmentDefinition;
            }
            else
            {
                itemContainer = assessmentDefinition.GetItemDefinitionByCode(request.SectionItemDefinitionCode);
            }

            if (itemContainer == null)
            {
                throw new InvalidOperationException("Section does not exist.");
            }
            sectionDto.ItemDefinitionCode = itemContainer.CodedConcept.Code;
            MapItems(sectionDto, itemContainer, assessmentInstance);

            response.DataTransferObject = sectionDto;
        }
예제 #3
0
        /// <summary>
        /// Lookups the search active.
        /// </summary>
        /// <param name="page">The page.</param>
        /// <param name="pageSize">Size of the page.</param>
        /// <param name="assessmentDefinitionKey">The assessment definition key.</param>
        /// <param name="search">The search.</param>
        /// <returns>
        /// Returns FinderResults as type IItem.
        /// </returns>
        public FinderResults <IItem> GetLookupSearchActive(int page, int pageSize, string assessmentDefinitionKey, string search = null)
        {
            var questionsGroups         = new List <IItem> ();
            var totalCount              = 0;
            var assessmentDefinitionDto = GetAssessmentDefinitionForResponse(assessmentDefinitionKey);

            if (assessmentDefinitionDto != null)
            {
                var assessmentResourceManager = _resourcesManager.GetResourceManagerByName(assessmentDefinitionDto.AssessmentName);
                var assessmentName            = assessmentResourceManager.GetString(SharedStringNames.ResourceKeyPrefix + assessmentDefinitionDto.AssessmentCode);
                var instance = _assessmentDefinitionRepository.GetByKey(_assessmentDefinitionRepository.GetKeyByCode(assessmentDefinitionDto.AssessmentCode));
                foreach (var itemDef in instance.ItemDefinitions)
                {
                    var str = assessmentResourceManager
                              .GetString(SharedStringNames.ResourceKeyPrefix + itemDef.CodedConcept.Code);
                    if (str == null)
                    {
                        str = assessmentResourceManager
                              .GetString(SharedStringNames.ResourceKeyPrefix + itemDef.CodedConcept.Code + SharedStringNames.ResourceKeyPrefix + SharedStringNames.Instructions);
                        if (str == null)
                        {
                            continue;
                        }
                    }
                    if (itemDef.ItemType == ItemType.Question && IsMatch(search, str))
                    {
                        var q = new Question
                        {
                            ItemType       = ItemType.Question.DisplayName,
                            Code           = itemDef.CodedConcept.Code,
                            Name           = str,
                            TemplateName   = GetTemplateName(itemDef),
                            AssessmentName = assessmentName,
                            AssessmentCode = assessmentDefinitionDto.AssessmentCode
                        };
                        questionsGroups.Add(q);
                        totalCount += 1;
                    }
                    var groups   = GetGroups(assessmentDefinitionDto, itemDef, search, assessmentName);
                    var sections = GetSections(assessmentDefinitionDto, itemDef, search, assessmentName);

                    totalCount += sections.Select(a => a.ItemType == ItemType.Question.DisplayName).Count()
                                  + groups.Select(a => a.ItemType == ItemType.Question.DisplayName).Count();
                    questionsGroups.AddRange(sections);
                    questionsGroups.AddRange(groups);
                }

                questionsGroups = AssignLevels(questionsGroups);
            }
            var findResults = new FinderResults <IItem>
            {
                Data       = questionsGroups,
                TotalCount = totalCount
            };

            return(findResults);
        }
예제 #4
0
        protected override void Handle(SaveAssessmentItemRequest request, SaveAssessmentItemResponse response)
        {
            var assessmentInstance   = _assessmentInstanceRepository.GetByKey(request.Key);
            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(assessmentInstance.AssessmentDefinitionKey);

            var item           = assessmentInstance.ItemInstances.FirstOrDefault(i => i.ItemDefinitionCode == request.Item.ItemDefinitionCode);
            var itemDefinition = assessmentDefinition.GetItemDefinitionByCode(request.Item.ItemDefinitionCode);
            var value          = request.Item.Value;

            if (value is LookupDto)
            {
                var lookupDto = value as LookupDto;
                if (string.IsNullOrWhiteSpace(lookupDto.Code))
                {
                    value = null;
                }
                else
                {
                    value = itemDefinition.Options.Single(l => l.CodedConcept.Code == lookupDto.Code);
                }
            }
            else if (value is IEnumerable <LookupDto> )
            {
                var lookupType = itemDefinition.Options.ElementAt(0).GetType();
                var lookupList = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(lookupType));
                foreach (var lookupDto in (value as IEnumerable <LookupDto>).Where(l => !string.IsNullOrWhiteSpace(l.Code)))
                {
                    lookupList.Add(itemDefinition.Options.Single(l => l.CodedConcept.Code == lookupDto.Code));
                }
                value = lookupList.Count == 0 ? null : lookupList;
            }
            var hasItemUpdated = HasItemUpdated(item, value);

            if (hasItemUpdated)
            {
                if (value != null)
                {
                    value = string.IsNullOrEmpty(value.ToString()) ? null : value;
                }
                assessmentInstance.UpdateItem(itemDefinition, value);
            }
            var assessmentCompleteness = assessmentInstance.CalculateCompleteness();

            response.CanSubmit = !assessmentInstance.IsSubmitted && assessmentCompleteness.IsComplete;
            var containingSection = assessmentDefinition.GetContainingSection(itemDefinition);

            if (containingSection is AssessmentDefinition)
            {
                response.PercentComplete = assessmentCompleteness.PercentComplete;
            }
            else if (containingSection is ItemDefinition)
            {
                response.PercentComplete = _assessmentCompletenessManager.CalculateCompleteness(assessmentInstance, containingSection as ItemDefinition).PercentComplete;
            }
        }
        /// <summary>
        /// Gets the item definition.
        /// </summary>
        /// <param name="itemDefinitionCode">The item definition code.</param>
        /// <returns>Returns and ItemDefinition for the itemDefinitionCode if found by key.</returns>
        private ItemDefinition GetItemDefinition(string itemDefinitionCode)
        {
            if (!_pediatricSymptomCheckListAssessmentDefinitionKey.HasValue)
            {
                _pediatricSymptomCheckListAssessmentDefinitionKey = _assessmentDefinitionRepository.GetKeyByCode(PediatricSymptonChecklist.AssessmentCodedConcept.Code);
            }

            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(_pediatricSymptomCheckListAssessmentDefinitionKey.Value);

            return(assessmentDefinition.GetItemDefinitionByCode(itemDefinitionCode));
        }
        /// <summary>
        /// Gets the item definition.
        /// </summary>
        /// <param name="itemDefinitionCode">The item definition code.</param>
        /// <returns>Returns and ItemDefinition for the itemDefinitionCode if found by key.</returns>
        private ItemDefinition GetItemDefinition(string itemDefinitionCode)
        {
            if (!_gainShortScreenerAssessmentDefinitionKey.HasValue)
            {
                _gainShortScreenerAssessmentDefinitionKey = _assessmentDefinitionRepository.GetKeyByCode(GainShortScreener.AssessmentCodedConcept.Code);
            }

            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(_gainShortScreenerAssessmentDefinitionKey.Value);

            return(assessmentDefinition.GetItemDefinitionByCode(itemDefinitionCode));
        }
예제 #7
0
        private ItemDefinition GetItemDefinition(string itemDefinitionCode)
        {
            if (!_gpraAssessmentDefinitionKey.HasValue)
            {
                _gpraAssessmentDefinitionKey = _assessmentDefinitionRepository.GetKeyByCode(GpraInterview.AssessmentCodedConcept.Code);
            }

            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(_gpraAssessmentDefinitionKey.Value);

            return(assessmentDefinition.GetItemDefinitionByCode(itemDefinitionCode));
        }
        /// <summary>
        /// Gets the item definition.
        /// </summary>
        /// <param name="itemDefinitionCode">The item definition code.</param>
        /// <returns>Returns and ItemDefinition for the itemDefinitionCode if found by key.</returns>
        private ItemDefinition GetItemDefinition(string itemDefinitionCode)
        {
            if (!_nihAssessmentDefinitionKey.HasValue)
            {
                _nihAssessmentDefinitionKey = _assessmentDefinitionRepository.GetKeyByCode(NihHealthBehaviorsAssessment.AssessmentCodedConcept.Code);
            }

            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(_nihAssessmentDefinitionKey.Value);

            return(assessmentDefinition.GetItemDefinitionByCode(itemDefinitionCode));
        }
예제 #9
0
        public async Task <PartialViewResult> Parameters(Guid?key, string reportName, Guid?patientKey = null)
        {
            var requestDispatcher = CreateAsyncRequestDispatcher();

            requestDispatcher.Add(new GetReportParametersRequest {
                ReportName = reportName, TemplateKey = key, PatientKey = patientKey
            });
            var response = await requestDispatcher.GetAsync <ReportParametersResponse> ();

            var dto = response.Parameters;

            requestDispatcher.Clear();
            //// todo: the lookups should be populated when the parameters is built
            AddLookupRequests(requestDispatcher, response.Parameters.GetType());
            AddLookupResponsesToViewData(requestDispatcher);
            ViewData["ResourceManager"]           = _resourcesManager.GetResourceManagerByName(reportName);
            ViewData["ReportTemplateKey"]         = key;
            ViewData["PatientKey"]                = patientKey;
            ViewData["ReportName"]                = reportName;
            ViewData["ReportDisplayName"]         = _resourcesManager.GetResourceManagerByName(reportName).GetString("ReportName");
            ViewData.TemplateInfo.HtmlFieldPrefix = "Parameters";

            if (reportName.Equals(ReportNames.PatientsWithSpecificResponse) || reportName.Equals(ReportNames.PatientsWithSpecificResponseAcrossAssessments))
            {
                var parameters = dto as PatientsWithSpecificResponseParametersDto;
                if (parameters != null && parameters.Responses.Any())
                {
                    var assessmentDefKeyNamePairs = new Dictionary <Guid, string> ();
                    foreach (var question in parameters.Responses)
                    {
                        var questionItemDto = GetQuestionItemDto(question);
                        if (questionItemDto != null)
                        {
                            if (!assessmentDefKeyNamePairs.ContainsKey(question.AssessmentDefinitionKey))
                            {
                                var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(question.AssessmentDefinitionKey);
                                assessmentDefKeyNamePairs[question.AssessmentDefinitionKey] = assessmentDefinition.CodedConcept.Name;
                            }
                            questionItemDto.AssessmentName = assessmentDefKeyNamePairs[question.AssessmentDefinitionKey];
                            parameters.Items.Add(questionItemDto);
                            ViewData["AssessmentDefinitionKey"] = question.AssessmentDefinitionKey;
                        }
                    }
                    parameters.JsonResponse      = JsonConvert.SerializeObject(parameters.Responses);
                    ViewData["ResourcesManager"] = _resourcesManager;
                    parameters.ReportName        = reportName;
                }
            }

            return(PartialView(reportName + "Parameters", dto));
        }
예제 #10
0
        protected override void Handle(GetAssessmentReminderByKeyRequest request, DtoResponse <AssessmentReminderDto> response)
        {
            var assessmentReminder = _assessmentReminderRepository.GetByKey(request.AssessmentReminderKey);

            if (assessmentReminder != null)
            {
                var patient = _patientRepository.GetByKey(assessmentReminder.PatientKey);
                var assessmentDefinition  = _assessmentDefinitionRepository.GetByKey(assessmentReminder.AssessmentDefinitionKey);
                var assessmentReminderDto = Mapper.Map <AssessmentReminder, AssessmentReminderDto> (assessmentReminder);
                assessmentReminderDto.AssessmentName   = _resourcesManager.GetResourceManagerByName(assessmentDefinition.CodedConcept.Name).GetString("_" + assessmentDefinition.CodedConcept.Code);
                assessmentReminderDto.PatientFirstName = patient.Name.FirstName;
                assessmentReminderDto.PatientLastName  = patient.Name.LastName;
                response.DataTransferObject            = assessmentReminderDto;
            }
        }
예제 #11
0
        protected override void Handle(CreateAssessmentRequest request, CreateAssessmentResponse response)
        {
            var assessmentDefinition      = _assessmentDefinitionRepository.GetByKey(request.AssessmentDefinitionKey);
            var assessmentInstanceFactory = new AssessmentInstanceFactory();
            var assessmentInstance        = assessmentInstanceFactory.Create(request.AssessmentDefinitionKey, request.PatientKey, assessmentDefinition.CodedConcept.Name);

            if (assessmentInstance != null)
            {
                if (request.ForSelfAdministration)
                {
                    assessmentInstance.AllowSelfAdministration();
                }
                if (request.WorkflowKey.HasValue)
                {
                    assessmentInstance.AddToWorkflow(request.WorkflowKey.Value);
                }
                response.AssessmentInstanceKey = assessmentInstance.Key;
            }
        }
        /// <summary>
        ///     Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="response">The response.</param>
        protected override void Handle(GetItemDtoByKeyRequest request, GetItemDtoByKeyResponse response)
        {
            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(request.AssessmentDefinitionKey);

            ItemDefinition itemDefinition;

            if (request.ItemDefinitionCode == null)
            {
                itemDefinition = assessmentDefinition.ItemDefinitions.FirstOrDefault(i => i.ItemType == ItemType.Question);
            }
            else
            {
                itemDefinition = assessmentDefinition.GetItemDefinitionByCode(request.ItemDefinitionCode);
            }

            if (itemDefinition == null)
            {
                throw new InvalidOperationException("Item does not exist.");
            }
            var itemDto = CreateQuestion(itemDefinition);

            response.DataTransferObject = itemDto;
        }
예제 #13
0
        protected override void Handle(SaveAssessmentItemRequest request, SaveAssessmentItemResponse response)
        {
            var assessmentInstance   = _assessmentInstanceRepository.GetByKey(request.Key);
            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(assessmentInstance.AssessmentDefinitionKey);

            var item  = assessmentInstance.ItemInstances.FirstOrDefault(i => i.ItemDefinitionCode == request.Item.ItemDefinitionCode);
            var value = request.Item.Value;

            if (value is LookupDto)
            {
                var lookupDto = value as LookupDto;
                if (string.IsNullOrWhiteSpace(lookupDto.Code))
                {
                    value = null;
                }
                else
                {
                    var itemDefinition = assessmentDefinition.GetItemDefinitionByCode(request.Item.ItemDefinitionCode);
                    value = itemDefinition.Options.Single(l => l.CodedConcept.Code == lookupDto.Code);
                }
            }
            var hasItemUpdated = HasItemUpdated(item, value);

            if (hasItemUpdated)
            {
                if (value != null)
                {
                    value = string.IsNullOrEmpty(value.ToString()) ? null : value;
                }
                assessmentInstance.UpdateItem(request.Item.ItemDefinitionCode, value);
            }

            var completenessResults = _assessmentCompletenessManager.CalculateCompleteness(CompletenessCategory.Report, assessmentInstance, assessmentDefinition);

            assessmentInstance.UpdatePercentComplete(completenessResults.PercentComplete);
            response.CanSubmit = !assessmentInstance.IsSubmitted && completenessResults.NumberIncomplete == 0;
        }
예제 #14
0
        private void CreateAssessmentReminders(Guid key)
        {
            using (var connection = _connectionFactory.CreateConnection())
            {
                var assessmentReminder   = _assessmentReminderRepository.GetByKey(key);
                var patient              = _patientRepository.GetByKey(assessmentReminder.PatientKey);
                var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(assessmentReminder.AssessmentDefinitionKey);
                Func <DateTime, DateTime> getStartDate = (date) =>
                {
                    switch (assessmentReminder.ReminderRecurrence)
                    {
                    case AssessmentReminderRecurrence.Weekly:
                        return(date.AddDays(7));

                    case AssessmentReminderRecurrence.Monthly:
                        return(date.AddMonths(1));

                    default:
                        return(date.AddDays(1));
                    }
                };

                var parameterList = new List <object>();
                if (assessmentReminder.End == null)
                {
                    assessmentReminder.End = assessmentReminder.Start;
                }
                if (assessmentReminder.Start > assessmentReminder.End)
                {
                    // add 1 minute to the end date to make it go at least once
                    assessmentReminder.End = assessmentReminder.Start.AddMinutes(1);
                }
                for (DateTime startDate = assessmentReminder.Start; startDate <= assessmentReminder.End; startDate = getStartDate(startDate))
                {
                    parameterList.Add(
                        new
                    {
                        AssessmentReminderKey = Guid.NewGuid(),
                        assessmentReminder.OrganizationKey,
                        assessmentReminder.PatientKey,
                        assessmentReminder.CreatedByStaffKey,
                        assessmentReminder.AssessmentDefinitionKey,
                        assessmentReminder.Title,
                        Start            = startDate,
                        End              = startDate.AddDays(1),
                        Status           = assessmentReminder.Status.ToString(),
                        ReminderDays     = 0.0,
                        Recurrence       = assessmentReminder.ReminderRecurrence.ToString(),
                        PatientFirstName = patient.Name.FirstName,
                        PatientLastName  = patient.Name.LastName,
                        AssessmentCode   = assessmentDefinition.CodedConcept.Code,
                        AssessmentName   = assessmentDefinition.CodedConcept.Name,
                        RecurrenceKey    = assessmentReminder.Key,
                        SystemAccountKey = UserContext.Current.SystemAccountKey ?? assessmentReminder.CreatedByStaffKey
                    });
                }

                // todo: add assessmentinstancekey to the query
                connection.Execute("DELETE FROM [MessageModule].[AssessmentReminder] WHERE [RecurrenceKey] = @RecurrenceKey;", new { RecurrenceKey = key });
                connection.Execute(
                    @"INSERT INTO [MessageModule].[AssessmentReminder] ([AssessmentReminderKey], 
                                        [OrganizationKey], 
                                        [PatientKey] , 
                                        [PatientFirstname], 
                                        [PatientLastname], 
                                        [CreatedByStaffKey], 
                                        [AssessmentDefinitionKey], 
                                        [AssessmentName], 
                                        [AssessmentCode], 
                                        [Title], 
                                        [Start],
                                        [End],
                                        [Status],
                                        [ReminderDays],
                                        [Recurrence],
                                        [RecurrenceKey],
                                        [SystemAccountKey]
                                        ) 
                                    VALUES ( @AssessmentReminderKey,
                                        @OrganizationKey, 
                                        @PatientKey, 
                                        @PatientFirstName, 
                                        @PatientLastName, 
                                        @CreatedByStaffKey, 
                                        @AssessmentDefinitionKey, 
                                        @AssessmentName,
                                        @AssessmentCode, 
                                        @Title, 
                                        @Start,
                                        @End,
                                        @Status,
                                        @ReminderDays,
                                        @Recurrence,
                                        @RecurrenceKey,
                                        @SystemAccountKey)",
                    parameterList);
            }
        }
예제 #15
0
        private void InsertResponses(AssessmentSubmittedEvent message)
        {
            var          instance = _assessmentInstanceRepository.GetByKey(message.Key);
            const string Cmd      =
                @"INSERT [AssessmentModule].[AssessmentInstanceResponse]
                    ([AssessmentInstanceKey]
                    ,[AssessmentName]
                    ,[AssessmentCode]
                    ,[AssessmentDefinitionKey]
                    ,[OrganizationKey]
                    ,[PatientKey]
                    ,[ItemDefinitionCode]
                    ,[ResponseType]
                    ,[ResponseValue]
                    ,[IsCode]
                    ,[CodeValue]) VALUES ( ";

            using (var connection = _connectionFactory.CreateConnection())
            {
                var assessmentCode          = string.Empty;
                var assessmentDefinitionKey = string.Empty;
                var sql = "SELECT AssessmentDefinitionKey AS [Key], AssessmentCode FROM [AssessmentModule].[AssessmentDefinition] WHERE [AssessmentDefinitionKey]='"
                          + message.AssessmentDefinitionKey + "'";
                var rows = connection.Query <AssessmentDefinitionDto>(sql).ToList();
                if (rows.Any())
                {
                    assessmentCode          = rows.ElementAt(0).AssessmentCode;
                    assessmentDefinitionKey = rows.ElementAt(0).Key.ToString();
                }
                var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(_assessmentDefinitionRepository.GetKeyByCode(assessmentCode));
                var items = assessmentDefinition.GetAllItemDefinitionsOfType(ItemType.Question).ToList();
                foreach (var item in instance.ItemInstances)
                {
                    var isCode       = false;
                    var val          = item.Value;
                    int intVal       = 0;
                    var responseType = GetTemplateName(items, item);
                    switch (responseType)
                    {
                    case "LookupDto":
                        int.TryParse(((Lookup)item.Value).Value.ToString(), out intVal);
                        val          = ((Lookup)item.Value).CodedConcept.Code;
                        responseType = item.Value.GetType().Name;
                        isCode       = true;
                        break;

                    case "MultipleSelect":
                        foreach (var option in (IEnumerable <Lookup>)item.Value)
                        {
                            if (((IEnumerable <Lookup>)item.Value).Any())
                            {
                                responseType = ((IEnumerable <Lookup>)item.Value).ElementAt(0).GetType().Name;
                                int.TryParse(option.Value.ToString(), out intVal);
                            }
                            var fullQueryOption = Cmd
                                                  + "'" + message.Key + "',"
                                                  + "'" + instance.AssessmentName + "',"
                                                  + "'" + assessmentCode + "',"
                                                  + "'" + assessmentDefinitionKey + "',"
                                                  + "'" + message.OrganizationKey + "',"
                                                  + "'" + instance.PatientKey + "',"
                                                  + "'" + item.ItemDefinitionCode + "'," +
                                                  "'" + responseType + "',"
                                                  + "'" + option.CodedConcept.Code + "',"
                                                  + "'" + true + "',"
                                                  + intVal + ")";
                            _logger.Info("InsertResponses Query: {0}", fullQueryOption);
                            connection.Execute(fullQueryOption);
                        }
                        continue;
                    }
                    var fullQuery = Cmd
                                    + "'" + message.Key + "',"
                                    + "'" + instance.AssessmentName + "',"
                                    + "'" + assessmentCode + "',"
                                    + "'" + assessmentDefinitionKey + "',"
                                    + "'" + message.OrganizationKey + "',"
                                    + "'" + instance.PatientKey + "',"
                                    + "'" + item.ItemDefinitionCode + "'," +
                                    "'" + responseType + "',"
                                    + "'" + val + "',"
                                    + "'" + isCode + "',"
                                    + intVal + ")";
                    _logger.Info("InsertResponses Query: {0}", fullQuery);
                    connection.Execute(fullQuery);
                }
            }
        }
예제 #16
0
        private void UpdateReportData(AssessmentScoredEvent message)
        {
            var assessment = _assessmentInstanceRepository.GetByKey(message.Key);

            if (!assessment.IsSubmitted)
            {
                return;
            }
            var assessmentDefinition = _assessmentDefinitionRepository.GetByKey(assessment.AssessmentDefinitionKey);

            if (assessmentDefinition.ScoreType == ScoreTypeEnum.NoScore)
            {
                return;
            }
            var patient       = _patientRepository.GetByKey(assessment.PatientKey);
            var previousScore = GetPreviousPatientScore(assessmentDefinition, patient.Key);
            var scoreChanged  = ReadSideService.FirstTime;

            if (previousScore != null && assessmentDefinition.ScoreType == ScoreTypeEnum.ScoreTypeInt)
            {
                if (int.Parse(assessment.Score.Value.ToString()) > int.Parse(previousScore))
                {
                    scoreChanged = ReadSideService.Higher;
                }
                else if (int.Parse(assessment.Score.Value.ToString()) < int.Parse(previousScore))
                {
                    scoreChanged = ReadSideService.Lower;
                }
                else if (int.Parse(assessment.Score.Value.ToString()) == int.Parse(previousScore))
                {
                    scoreChanged = ReadSideService.NoChange;
                }
            }
            else if (previousScore != null && assessmentDefinition.ScoreType == ScoreTypeEnum.ScoreTypeBoolean)
            {
                if (!bool.Parse(assessment.Score.Value.ToString()).Equals(bool.Parse(previousScore)))
                {
                    scoreChanged = ReadSideService.Higher;
                }
                else if (bool.Parse(assessment.Score.Value.ToString()).Equals(bool.Parse(previousScore)))
                {
                    scoreChanged = ReadSideService.NoChange;
                }
            }
            using (var connection = _connectionFactory.CreateConnection())
            {
                connection.Execute(
                    @"INSERT INTO ReportModule.PatientScoreRangeReport (
                    AssessmentInstanceKey, PatientKey, AssessmentName, AssessmentScore, ScoreDate, 
                    PatientBirthDate, PatientFirstName, PatientLastName, PatientGender,ScoreChange, AssessmentCode) 
                    VALUES( @AssessmentInstanceKey, @PatientKey, @AssessmentName, @AssessmentScore, 
                    @ScoreDate, @PatientBirthDate, @PatientFirstName, @PatientLastName, @PatientGender, @ScoreChange, @AssessmentCode)",
                    new
                {
                    AssessmentInstanceKey = assessment.Key,
                    assessment.PatientKey,
                    assessment.AssessmentName,
                    AssessmentScore  = message.Value.ToString(),
                    ScoreDate        = assessment.SubmittedDate,
                    PatientBirthDate = patient.DateOfBirth.GetValueOrDefault(),
                    PatientFirstName = patient.Name.FirstName,
                    PatientLastName  = patient.Name.LastName,
                    PatientGender    = patient.Gender.CodedConcept.Name,
                    ScoreChange      = scoreChanged,
                    AssessmentCode   = assessmentDefinition.CodedConcept.Code
                });
            }
        }