/// <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); }
/// <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; }
/// <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); }
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)); }
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)); }
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)); }
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; } }
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; }
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; }
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); } }
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); } } }
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 }); } }