@@ -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