Skip to content

Commit 311d6e5

Browse files
CFS-314
Worked on removing some of the nested 'if' statements in CDSService
1 parent 56261a5 commit 311d6e5

File tree

3 files changed

+83
-65
lines changed

3 files changed

+83
-65
lines changed

resources/src/main/java/org/cdshooks/Configuration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,8 @@ public class Configuration {
2828
public Boolean getPriorAuth() { return priorAuth; }
2929
public Boolean getCoverage() { return coverage; }
3030
public int getMaxCards() { return maxCards; }
31+
32+
public boolean canAddCard(int currentCardCount) {
33+
return currentCardCount <= maxCards;
34+
}
3135
}

resources/src/main/java/org/cdshooks/CoverageRequirements.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.cdshooks;
22

3+
import org.apache.commons.lang3.StringUtils;
4+
35
import java.util.UUID;
46

57
public class CoverageRequirements {
@@ -171,4 +173,15 @@ public String getQuestionnaireAdditionalUri() {
171173
public void setQuestionnaireAdditionalUri(String questionnaireAdditionalUri) {
172174
this.questionnaireAdditionalUri = questionnaireAdditionalUri;
173175
}
176+
177+
public boolean hasQuestionnaireUri() {
178+
return StringUtils.isNotEmpty(this.questionnaireOrderUri)
179+
|| StringUtils.isNotEmpty(this.questionnaireFaceToFaceUri)
180+
|| StringUtils.isNotEmpty(this.questionnaireLabUri)
181+
|| StringUtils.isNotEmpty(this.questionnaireProgressNoteUri)
182+
|| StringUtils.isNotEmpty(this.questionnairePARequestUri)
183+
|| StringUtils.isNotEmpty(this.questionnairePlanOfCareUri)
184+
|| StringUtils.isNotEmpty(this.questionnaireDispenseUri)
185+
|| StringUtils.isNotEmpty(this.questionnaireAdditionalUri);
186+
}
174187
}

server/src/main/java/org/hl7/davinci/endpoint/cdshooks/services/crd/CdsService.java

Lines changed: 66 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -202,78 +202,79 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a
202202
CoverageRequirements coverageRequirements = results.getCoverageRequirements();
203203
cardBuilder.setDeidentifiedResourcesContainsPhi(lookupResult.getDeidentifiedResourceContainsPhi());
204204

205-
if (results.ruleApplies()) {
206-
foundApplicableRule = true;
207-
208-
if (results.getCoverageRequirements().getApplies()) {
209-
210-
// if prior auth already approved
211-
if (coverageRequirements.isPriorAuthApproved() && response.getCards().size() <= hookConfiguration.getMaxCards()) {
212-
response.addCard(cardBuilder.priorAuthCard(results, results.getRequest(), fhirComponents, coverageRequirements.getPriorAuthId(),
213-
request.getContext().getPatientId(), lookupResult.getCriteria().getPayorId(), request.getContext().getUserId(),
214-
applicationBaseUrl.toString() + "/fhir/" + fhirComponents.getFhirVersion().toString(),
215-
fhirResourceRepository));
216-
217-
} else if (coverageRequirements.isDocumentationRequired() || coverageRequirements.isPriorAuthRequired()) {
218-
if (StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireOrderUri())
219-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireFaceToFaceUri())
220-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireLabUri())
221-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireProgressNoteUri())
222-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePARequestUri())
223-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnairePlanOfCareUri())
224-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireDispenseUri())
225-
|| StringUtils.isNotEmpty(coverageRequirements.getQuestionnaireAdditionalUri())) {
226-
List<Link> smartAppLinks = createQuestionnaireLinks(request, applicationBaseUrl, lookupResult, results);
227-
228-
System.out.println(hookConfiguration.getMaxCards());
229-
230-
if (response.getCards().size() <= hookConfiguration.getMaxCards() && coverageRequirements.isPriorAuthRequired() && hookConfiguration.getPriorAuth()) {
231-
Card card = cardBuilder.transform(CardTypes.PRIOR_AUTH, results, smartAppLinks);
232-
card.addSuggestionsItem(cardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents,
205+
if (!results.ruleApplies())
206+
continue;
207+
208+
foundApplicableRule = true;
209+
210+
if (results.getCoverageRequirements().getApplies()) {
211+
// if prior auth already approved
212+
if (coverageRequirements.isPriorAuthApproved() && hookConfiguration.canAddCard(response.getCards().size())) {
213+
response.addCard(cardBuilder.priorAuthCard(results, results.getRequest(), fhirComponents, coverageRequirements.getPriorAuthId(),
214+
request.getContext().getPatientId(), lookupResult.getCriteria().getPayorId(), request.getContext().getUserId(),
215+
applicationBaseUrl.toString() + "/fhir/" + fhirComponents.getFhirVersion().toString(),
216+
fhirResourceRepository));
217+
break;
218+
}
219+
220+
if (coverageRequirements.isDocumentationRequired() || coverageRequirements.isPriorAuthRequired()) {
221+
if (!coverageRequirements.hasQuestionnaireUri()) {
222+
logger.warn("Unspecified Questionnaire URI; summary card sent to client");
223+
if (hookConfiguration.getCoverage())
224+
response.addCard(cardBuilder.transform(CardTypes.COVERAGE, results));
225+
break;
226+
}
227+
228+
List<Link> smartAppLinks = createQuestionnaireLinks(request, applicationBaseUrl, lookupResult, results);
229+
230+
if (hookConfiguration.canAddCard(response.getCards().size())
231+
&& coverageRequirements.isPriorAuthRequired()
232+
&& hookConfiguration.getPriorAuth()) {
233+
Card card = cardBuilder.transform(CardTypes.PRIOR_AUTH, results, smartAppLinks);
234+
card.addSuggestionsItem(cardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents,
235+
"Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note",
236+
true, CoverageGuidance.ADMIN));
237+
response.addCard(card);
238+
} else if (hookConfiguration.canAddCard(response.getCards().size())
239+
&& coverageRequirements.isDocumentationRequired()
240+
&& hookConfiguration.getDTRClin()) {
241+
Card card = cardBuilder.transform(CardTypes.DTR_CLIN, results, smartAppLinks);
242+
card.addSuggestionsItem(cardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents,
233243
"Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note",
234-
true, CoverageGuidance.ADMIN));
235-
response.addCard(card);
236-
} else if (response.getCards().size() <= hookConfiguration.getMaxCards() && coverageRequirements.isDocumentationRequired() && hookConfiguration.getDTRClin()) {
237-
Card card = cardBuilder.transform(CardTypes.DTR_CLIN, results, smartAppLinks);
238-
card.addSuggestionsItem(cardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents,
239-
"Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note",
240-
true, CoverageGuidance.CLINICAL));
241-
response.addCard(card);
242-
}
243-
244-
// add a card for an alternative therapy if there is one
245-
if (response.getCards().size() <= hookConfiguration.getMaxCards() && results.getAlternativeTherapy().getApplies() && hookConfiguration.getAlternativeTherapy()) {
246-
try {
247-
response.addCard(cardBuilder.alternativeTherapyCard(results.getAlternativeTherapy(),
248-
results.getRequest(), fhirComponents));
249-
} catch (RuntimeException e) {
250-
logger.warn("Failed to process alternative therapy: " + e.getMessage());
251-
}
252-
}
253-
} else {
254-
logger.warn("Unspecified Questionnaire URI; summary card sent to client");
255-
if (hookConfiguration.getCoverage())
256-
response.addCard(cardBuilder.transform(CardTypes.COVERAGE, results));
257-
}
258-
} else {
259-
// no prior auth or documentation required
260-
logger.info("Add the no doc or prior auth required card");
261-
if (response.getCards().size() <= hookConfiguration.getMaxCards() && hookConfiguration.getCoverage()) {
262-
Card card = cardBuilder.transform(CardTypes.COVERAGE, results);
263-
card.addSuggestionsItem(cardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents,
264-
"Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note",
265-
true, CoverageGuidance.COVERED));
266-
card.setSelectionBehavior(Card.SelectionBehaviorEnum.ANY);
267-
response.addCard(card);
244+
true, CoverageGuidance.CLINICAL));
245+
response.addCard(card);
246+
}
247+
248+
// add a card for an alternative therapy if there is one
249+
if (hookConfiguration.canAddCard(response.getCards().size())
250+
&& results.getAlternativeTherapy().getApplies()
251+
&& hookConfiguration.getAlternativeTherapy()) {
252+
try {
253+
response.addCard(cardBuilder.alternativeTherapyCard(results.getAlternativeTherapy(),
254+
results.getRequest(), fhirComponents));
255+
} catch (RuntimeException e) {
256+
logger.warn("Failed to process alternative therapy: " + e.getMessage());
268257
}
269258
}
259+
break;
270260
}
271261

272-
// apply the DrugInteractions
273-
if (response.getCards().size() <= hookConfiguration.getMaxCards() && results.getDrugInteraction().getApplies()) {
274-
response.addCard(cardBuilder.drugInteractionCard(results.getDrugInteraction(), results.getRequest()));
262+
// no prior auth or documentation required
263+
logger.info("Add the no doc or prior auth required card");
264+
if (hookConfiguration.canAddCard(response.getCards().size()) && hookConfiguration.getCoverage()) {
265+
Card card = cardBuilder.transform(CardTypes.COVERAGE, results);
266+
card.addSuggestionsItem(cardBuilder.createSuggestionWithNote(card, results.getRequest(), fhirComponents,
267+
"Save Update To EHR", "Update original " + results.getRequest().fhirType() + " to add note",
268+
true, CoverageGuidance.COVERED));
269+
card.setSelectionBehavior(Card.SelectionBehaviorEnum.ANY);
270+
response.addCard(card);
275271
}
276272
}
273+
274+
// apply the DrugInteractions
275+
if (hookConfiguration.canAddCard(response.getCards().size()) && results.getDrugInteraction().getApplies()) {
276+
response.addCard(cardBuilder.drugInteractionCard(results.getDrugInteraction(), results.getRequest()));
277+
}
277278
}
278279

279280
// CQL Executed

0 commit comments

Comments
 (0)