/// <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);
        }
Exemple #2
0
        /// <summary>Generates the specified key.</summary>
        /// <param name="key">The key.</param>
        /// <param name="reportName">Name of the report.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns>A <see cref="IReport" />.</returns>
        /// <exception cref="System.ArgumentException">Invalid parameters.</exception>
        public IReport Generate(Guid key, string reportName, object parameters = null)
        {
            var assessment           = _assessmentInstanceRepository.GetByKey(key);
            var patient              = _patientRepository.GetByKey(assessment.PatientKey);
            var staff                = _staffRepository.GetByKey(assessment.CreatedByStaffKey.GetValueOrDefault());
            var nihAssessment        = new NihHealthBehaviorsAssessment(assessment);
            var reportDataCollection = new NihHealthBehaviorsAssessmentReportDataCollection
            {
                new NihHealthBehaviorsAssessmentReportData(nihAssessment)
                {
                    SummaryReportInfo = new SummaryReportInfo
                    {
                        PatientId     = patient.UniqueIdentifier,
                        PatientName   = patient.Name.FullName,
                        StaffName     = staff.Name.FullName,
                        ScreeningDate = assessment.CreatedDate.ToShortDateString()
                    }
                }
            };
            var report = new NihHealthBehaviorsAssessmentPatientSummaryReport
            {
                DataSource = reportDataCollection,
            };

            return(report);
        }
        /// <summary>Generates the specified key.</summary>
        /// <param name="key">The key.</param>
        /// <param name="reportName">Name of the report.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns>A <see cref="IReport" />.</returns>
        /// <exception cref="System.ArgumentException">Invalid parameters.</exception>
        public IReport Generate(Guid key, string reportName, object parameters = null)
        {
            var assessment             = _assessmentInstanceRepository.GetByKey(key);
            var patient                = _patientRepository.GetByKey(assessment.PatientKey);
            var staff                  = _staffRepository.GetByKey(assessment.CreatedByStaffKey.GetValueOrDefault());
            var gainShortScreenerScore = assessment.Score.Value as GainShortScreenerScore;
            var reportDataCollection   = new GainShortScreenerReportDataCollection
            {
                new GainShortScreenerReportData(
                    gainShortScreenerScore,
                    new SummaryReportInfo
                {
                    PatientId     = patient.UniqueIdentifier,
                    PatientName   = patient.Name.FullName,
                    StaffName     = staff.Name.FullName,
                    ScreeningDate = assessment.CreatedDate.ToShortDateString(),
                    Summary       = GetSummary(gainShortScreenerScore, patient)
                })
            };
            var report = new GainShortScreenerSummaryReport
            {
                DataSource = reportDataCollection,
            };

            return(report);
        }
Exemple #4
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;
        }
Exemple #5
0
        public void Handle(AssessmentScoredEvent args)
        {
            var assessmentInstance = _assessmentInstanceRepository.GetByKey(args.Key);

            var workflowEngine = IoC.CurrentContainer.Resolve <IWorkflowEngine>(assessmentInstance.AssessmentName);

            workflowEngine.Run(assessmentInstance);
        }
Exemple #6
0
 public void Handle(AssessmentSubmittedEvent args)
 {
     if (args.Submit)
     {
         var assessmentInstance = _assessmentInstanceRepository.GetByKey(args.Key);
         var scoringEngine      = IoC.CurrentContainer.Resolve <IScoringEngine>(assessmentInstance.AssessmentName);
         scoringEngine.CalculateScore(assessmentInstance);
     }
 }
Exemple #7
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;
            }
        }
Exemple #8
0
        protected override void Handle(SubmitAssessmentRequest request, SubmitAssessmentResponse response)
        {
            var assessmentInstance = _assessmentInstanceRepository.GetByKey(request.AssessmentKey);

            if (request.Submit)
            {
                assessmentInstance.Submit();
            }
            else
            {
                assessmentInstance.Unsubmit();
            }
            response.ScoreDto = Mapper.Map <Score, ScoreDto> (assessmentInstance.Score);
            response.Messages = Mapper.Map <IEnumerable <IMessage>, IEnumerable <IMessageDto> >(_messageCollector.Messages);
        }
Exemple #9
0
        /// <summary>
        ///     Handles the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="response">The response.</param>
        protected override void Handle(SendEmailRequest request, SendEmailResponse response)
        {
            var      assessmentInstance = _assessmentInstanceRepository.GetByKey(request.AssessmentInstanceKey);
            var      patient            = _patientRepository.GetByKey(assessmentInstance.PatientKey);
            var      url = string.Format(request.AssessmentInstanceUrl + "/{0}?patientKey={1}", assessmentInstance.Key, assessmentInstance.PatientKey);
            DateTime?emailSentDate, emailFailedDate;
            string   patientAccountEmail;

            using (var connection = _dbConnectionFactory.CreateConnection())
            {
                patientAccountEmail =
                    connection.Query <string> ("SELECT Email FROM SecurityModule.SystemAccount WHERE PatientKey=@PatientKey", new { assessmentInstance.PatientKey })
                    .FirstOrDefault();
            }

            if (patientAccountEmail != null)
            {
                var emailMessage = new EmailMessage();
                emailMessage.ToAddresses.Add(patientAccountEmail);
                emailMessage.Body    = string.Format(AssessmentResources.SelfAdministrableAssessmentCreatedEmailBody, patient.Name.FirstName, url);
                emailMessage.Subject = AssessmentResources.SelfAdministrableAssessmentCreatedEmailSubject;
                emailMessage.IsHtml  = true;

                var emailNotifier = IoC.CurrentContainer.Resolve <IEmailNotifier> ();
                var isEmailNotificationSuccessful = emailNotifier.Send(emailMessage);

                if (isEmailNotificationSuccessful)
                {
                    emailSentDate   = DateTime.Now;
                    emailFailedDate = null;
                }
                else
                {
                    emailSentDate   = assessmentInstance.EmailSentDate;
                    emailFailedDate = DateTime.Now;
                }
            }
            else
            {
                emailSentDate   = assessmentInstance.EmailSentDate;
                emailFailedDate = DateTime.Now;
            }

            assessmentInstance.UpdateEmailSentDate(emailSentDate, emailFailedDate);
            response.EmailSentDate   = emailSentDate;
            response.EmailFailedDate = emailFailedDate;
        }
        /// <summary>Generates the specified key.</summary>
        /// <param name="key">The key.</param>
        /// <param name="reportName">Name of the report.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns>A <see cref="IReport" />.</returns>
        /// <exception cref="System.ArgumentException">Invalid parameters.</exception>
        public IReport Generate(Guid key, string reportName, object parameters = null)
        {
            var assessment = _assessmentInstanceRepository.GetByKey(key);
            var patient    = _patientRepository.GetByKey(assessment.PatientKey);
            var staff      = _staffRepository.GetByKey(assessment.CreatedByStaffKey.GetValueOrDefault());

            _youthPediatricSymptonChecklist = new YouthPediatricSymptonChecklist(assessment);

            _youthPediatricSymptonChecklistReportData = new YouthPediatricSymptonChecklistReportData(_youthPediatricSymptonChecklist);
            PopulateReportData(patient, staff);
            var reportDataCollection = new PediatricSymptonChecklistReportDataCollection
            {
                _youthPediatricSymptonChecklistReportData
            };
            var report = new YouthPediatricSymptonChecklistReport
            {
                DataSource = reportDataCollection,
            };

            return(report);
        }
Exemple #11
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;
        }
Exemple #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NidaWorkflowRuleCollection"/> class.
        /// </summary>
        /// <param name="assessmentDefinitionRepository">The assessment definition repository.</param>
        /// <param name="repository">The repository.</param>
        /// <param name="assessmentInstanceRepository">The assessment instance repository.</param>
        /// <param name="resourcesManager">The resources manager.</param>
        public NidaWorkflowRuleCollection(
            IAssessmentDefinitionRepository assessmentDefinitionRepository,
            IWorkflowMessageRepository repository,
            IAssessmentInstanceRepository assessmentInstanceRepository,
            IResourcesManager resourcesManager = null)
        {
            _resourcesManager = resourcesManager;
            NewRule(() => ShouldRecommendDastRule).When(assessment => (int)assessment.Score.Value > 0)
            .Then(
                (assessment, ctx) =>
            {
                var messageReporter =
                    ctx.WorkingMemory.GetContextObject <IMessageCollector> ("MessageCollector");
                var assessmentDefinitionKey =
                    assessmentDefinitionRepository.GetKeyByCode(DrugAbuseScreeningTest.AssessmentCodedConcept.Code);
                WorkflowMessage message = null;
                if (assessment.WorkflowKey.HasValue)
                {
                    message = repository.GetByKey(assessment.WorkflowKey.Value);
                }
                message = message ?? new WorkflowMessage(
                    assessment.PatientKey,
                    assessment.Key,
                    NidaSingleQuestionScreener.AssessmentCodedConcept.Code,
                    assessmentDefinitionKey,
                    DrugAbuseScreeningTest.AssessmentCodedConcept.Code,
                    assessment.Score);
                if (assessment.CanSelfAdminister)
                {
                    message.AllowSelfAdministration();
                }
                assessment.AddToWorkflow(message.Key);
                messageReporter.AddMessage(message);
            })
            .ElseThen(
                (assessment, ctx) =>
            {
                WorkflowMessage message = null;
                if (assessment.WorkflowKey.HasValue)
                {
                    message = repository.GetByKey(assessment.WorkflowKey.Value);
                }
                message = message ?? new WorkflowMessage(
                    assessment.PatientKey,
                    assessment.Key,
                    NidaSingleQuestionScreener.AssessmentCodedConcept.Code,
                    Guid.Empty,
                    null,
                    assessment.Score);

                if (assessment.CanSelfAdminister)
                {
                    message.AllowSelfAdministration();
                }

                message.Complete(NidaPatientSummaryReportModelBuilder.GetGreenReportModel());
            });

            NewRuleSet(() => NidaSingleQuestionScreenerRuleSet, ShouldRecommendDastRule);

            NewRule(() => ShouldRecommendNidaAssessFurtherRule).When(assessment => assessment.WorkflowKey.HasValue)
            .Then(
                (assessment, ctx) =>
            {
                var messageReporter =
                    ctx.WorkingMemory
                    .GetContextObject <IMessageCollector> ("MessageCollector");
                var assessmentDefinitionKey =
                    assessmentDefinitionRepository.GetKeyByCode(NidaAssessFurther.AssessmentCodedConcept.Code);
                var message = repository.GetByKey(assessment.WorkflowKey.Value);
                message.Advance(
                    assessment.Key,
                    DrugAbuseScreeningTest.AssessmentCodedConcept.Code,
                    assessmentDefinitionKey,
                    NidaAssessFurther.AssessmentCodedConcept.Code,
                    assessment.Score);
                messageReporter.AddMessage(message);
            });

            NewRuleSet(() => DrugAbuseScreeningTestRuleSet, ShouldRecommendNidaAssessFurtherRule);

            NewRule(() => ShouldCompleteWorkflowStatusRule).When(assessment => assessment.WorkflowKey.HasValue)
            .Then(
                (assessment, ctx) =>
            {
                var message      = repository.GetByKey(assessment.WorkflowKey.Value);
                var dastKey      = message.GetAssessmentKeyforCodeInWorkflow(DrugAbuseScreeningTest.AssessmentCodedConcept.Code);
                var dastInstance = assessmentInstanceRepository.GetByKey(dastKey.Value);
                ReportModel reportModel;
                if (((long)dastInstance.Score.Value) <= 2 && !(((NidaAssessFurtherScoring)assessment.Score.Value).TotalScore))
                {
                    reportModel = NidaPatientSummaryReportModelBuilder.GetAmberReportModel(
                        _resourcesManager,
                        dastInstance,
                        assessment);
                }
                else
                {
                    reportModel = NidaPatientSummaryReportModelBuilder.GetRedReportModel(
                        _resourcesManager,
                        dastInstance,
                        assessment);
                }
                message.Complete(reportModel);
            });
            NewRuleSet(() => NidaAssessFurtherRuleSet, ShouldCompleteWorkflowStatusRule);
        }
Exemple #13
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);
                }
            }
        }
Exemple #14
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
                });
            }
        }