diff --git a/server/src/main/java/org/hl7/davinci/endpoint/cdshooks/services/crd/CdsService.java b/server/src/main/java/org/hl7/davinci/endpoint/cdshooks/services/crd/CdsService.java index 50532c838..373850c77 100755 --- a/server/src/main/java/org/hl7/davinci/endpoint/cdshooks/services/crd/CdsService.java +++ b/server/src/main/java/org/hl7/davinci/endpoint/cdshooks/services/crd/CdsService.java @@ -144,8 +144,6 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a } else if (coverageRequirements.isDocumentationRequired() || coverageRequirements.isPriorAuthRequired()) { if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireOrderUri()) - || StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberEnrollmentUri()) - || StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberKnowledgeAssessmentUri()) || StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireFaceToFaceUri()) || StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireLabUri()) || StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireProgressNoteUri()) @@ -154,7 +152,6 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a || StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireDispenseUri()) || StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireAdditionalUri())) { List smartAppLinks = createQuestionnaireLinks(request, applicationBaseUrl, lookupResult, results); - if (coverageRequirements.isPriorAuthRequired()) { Card card = CardBuilder.transform(CardTypes.PRIOR_AUTH, results, smartAppLinks); card.addSuggestionsItem(CardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents, @@ -178,6 +175,12 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a logger.warn("Failed to process alternative therapy: " + e.getMessage()); } } + if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberEnrollmentUri()) + || StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberKnowledgeAssessmentUri())) { + Card prescriberCard = createPrescriberCard(request, applicationBaseUrl, lookupResult, results); + prescriberCard.setSummary("Prescriber forms"); + response.addCard(prescriberCard); + } } else { logger.warn("Unspecified Questionnaire URI; summary card sent to client"); response.addCard(CardBuilder.transform(CardTypes.COVERAGE, results)); @@ -220,6 +223,35 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a return response; } + private Card createPrescriberCard(requestTypeT request, URL applicationBaseUrl, + CoverageRequirementRuleResult lookupResult, CqlResultsForCard results) { + List listOfLinks = new ArrayList<>(); + CoverageRequirements coverageRequirements = results.getCoverageRequirements(); + if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberEnrollmentUri())) { + listOfLinks.add(smartLinkBuilder(request.getContext().getPatientId(), request.getFhirServer(), applicationBaseUrl, + coverageRequirements.getQuestionnairePrescriberEnrollmentUri(), coverageRequirements.getRequestId(), + lookupResult.getCriteria(), coverageRequirements.isPriorAuthRequired(), "Prescriber Enrollment Form")); + } + if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberKnowledgeAssessmentUri())) { + listOfLinks.add(smartLinkBuilder(request.getContext().getPatientId(), request.getFhirServer(), applicationBaseUrl, + coverageRequirements.getQuestionnairePrescriberKnowledgeAssessmentUri(), coverageRequirements.getRequestId(), + lookupResult.getCriteria(), coverageRequirements.isPriorAuthRequired(), "Prescriber Knowledge Assessment Form")); + } + + Card card; + if (coverageRequirements.isPriorAuthRequired()) { + card = CardBuilder.transform(CardTypes.PRIOR_AUTH, results, listOfLinks); + card.addSuggestionsItem(CardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents, + "Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note", + true, CoverageGuidance.ADMIN)); + } else { + card = CardBuilder.transform(CardTypes.DTR_CLIN, results, listOfLinks); + card.addSuggestionsItem(CardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents, + "Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note", + true, CoverageGuidance.CLINICAL)); + } + return card; + } private List createQuestionnaireLinks(requestTypeT request, URL applicationBaseUrl, CoverageRequirementRuleResult lookupResult, CqlResultsForCard results) { List listOfLinks = new ArrayList<>(); @@ -229,16 +261,6 @@ private List createQuestionnaireLinks(requestTypeT request, URL applicatio coverageRequirements.getQuestionnaireOrderUri(), coverageRequirements.getRequestId(), lookupResult.getCriteria(), coverageRequirements.isPriorAuthRequired(), "Patient Enrollment Form")); } - if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberEnrollmentUri())) { - listOfLinks.add(smartLinkBuilder(request.getContext().getPatientId(), request.getFhirServer(), applicationBaseUrl, - coverageRequirements.getQuestionnairePrescriberEnrollmentUri(), coverageRequirements.getRequestId(), - lookupResult.getCriteria(), coverageRequirements.isPriorAuthRequired(), "Prescriber Enrollment Form")); - } - if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePrescriberKnowledgeAssessmentUri())) { - listOfLinks.add(smartLinkBuilder(request.getContext().getPatientId(), request.getFhirServer(), applicationBaseUrl, - coverageRequirements.getQuestionnairePrescriberKnowledgeAssessmentUri(), coverageRequirements.getRequestId(), - lookupResult.getCriteria(), coverageRequirements.isPriorAuthRequired(), "Prescriber Knowledge Assessment Form")); - } if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireFaceToFaceUri())) { listOfLinks.add(smartLinkBuilder(request.getContext().getPatientId(), request.getFhirServer(), applicationBaseUrl, coverageRequirements.getQuestionnaireFaceToFaceUri(), coverageRequirements.getRequestId(),