@@ -196,6 +196,8 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a
196196 // no error cards on empty when order-select request
197197
198198 boolean foundApplicableRule = false ;
199+ int availableCardsLeft = hookConfiguration .getMaxCards ();
200+
199201 for (CoverageRequirementRuleResult lookupResult : lookupResults ) {
200202 requestLog .addTopic (requestService , lookupResult .getTopic ());
201203 CqlResultsForCard results = executeCqlAndGetRelevantResults (lookupResult .getContext (), lookupResult .getTopic ());
@@ -205,11 +207,16 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a
205207 if (!results .ruleApplies ())
206208 continue ;
207209
210+ logger .info (String .valueOf (availableCardsLeft ));
211+
212+ if (availableCardsLeft <= 0 )
213+ break ;
214+
208215 foundApplicableRule = true ;
209216
210217 if (results .getCoverageRequirements ().getApplies ()) {
211218 // if prior auth already approved
212- if (coverageRequirements .isPriorAuthApproved () && hookConfiguration . canAddCard ( response . getCards (). size ()) ) {
219+ if (coverageRequirements .isPriorAuthApproved ()) {
213220 response .addCard (cardBuilder .priorAuthCard (results , results .getRequest (), fhirComponents , coverageRequirements .getPriorAuthId (),
214221 request .getContext ().getPatientId (), lookupResult .getCriteria ().getPayorId (), request .getContext ().getUserId (),
215222 applicationBaseUrl .toString () + "/fhir/" + fhirComponents .getFhirVersion ().toString (),
@@ -220,35 +227,32 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a
220227 if (coverageRequirements .isDocumentationRequired () || coverageRequirements .isPriorAuthRequired ()) {
221228 if (!coverageRequirements .hasQuestionnaireUri ()) {
222229 logger .warn ("Unspecified Questionnaire URI; summary card sent to client" );
223- if (hookConfiguration .getCoverage ())
230+ if (hookConfiguration .getCoverage ()) {
224231 response .addCard (cardBuilder .transform (CardTypes .COVERAGE , results ));
232+ }
225233 break ;
226234 }
227235
228236 List <Link > smartAppLinks = createQuestionnaireLinks (request , applicationBaseUrl , lookupResult , results );
229237
230- if (hookConfiguration .canAddCard (response .getCards ().size ())
231- && coverageRequirements .isPriorAuthRequired ()
232- && hookConfiguration .getPriorAuth ()) {
238+ if (coverageRequirements .isPriorAuthRequired () && hookConfiguration .getPriorAuth ()) {
233239 Card card = cardBuilder .transform (CardTypes .PRIOR_AUTH , results , smartAppLinks );
234240 card .addSuggestionsItem (cardBuilder .createSuggestionWithNote (card , results .getRequest (), fhirComponents ,
235241 "Save Update To EHR" , "Update original " + results .getRequest ().fhirType () + " to add note" ,
236242 true , CoverageGuidance .ADMIN ));
237243 response .addCard (card );
238- } else if (hookConfiguration .canAddCard (response .getCards ().size ())
239- && coverageRequirements .isDocumentationRequired ()
240- && hookConfiguration .getDTRClin ()) {
244+ availableCardsLeft --;
245+ } else if (coverageRequirements .isDocumentationRequired () && hookConfiguration .getDTRClin ()) {
241246 Card card = cardBuilder .transform (CardTypes .DTR_CLIN , results , smartAppLinks );
242247 card .addSuggestionsItem (cardBuilder .createSuggestionWithNote (card , results .getRequest (), fhirComponents ,
243248 "Save Update To EHR" , "Update original " + results .getRequest ().fhirType () + " to add note" ,
244249 true , CoverageGuidance .CLINICAL ));
245250 response .addCard (card );
251+ availableCardsLeft --;
246252 }
247253
248254 // 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 ()) {
255+ if (availableCardsLeft != 0 && results .getAlternativeTherapy ().getApplies () && hookConfiguration .getAlternativeTherapy ()) {
252256 try {
253257 response .addCard (cardBuilder .alternativeTherapyCard (results .getAlternativeTherapy (),
254258 results .getRequest (), fhirComponents ));
@@ -261,19 +265,22 @@ public CdsResponse handleRequest(@Valid @RequestBody requestTypeT request, URL a
261265
262266 // no prior auth or documentation required
263267 logger .info ("Add the no doc or prior auth required card" );
264- if (hookConfiguration . canAddCard ( response . getCards (). size ()) && hookConfiguration .getCoverage ()) {
268+ if (availableCardsLeft != 0 && hookConfiguration .getCoverage ()) {
265269 Card card = cardBuilder .transform (CardTypes .COVERAGE , results );
266270 card .addSuggestionsItem (cardBuilder .createSuggestionWithNote (card , results .getRequest (), fhirComponents ,
267271 "Save Update To EHR" , "Update original " + results .getRequest ().fhirType () + " to add note" ,
268272 true , CoverageGuidance .COVERED ));
269273 card .setSelectionBehavior (Card .SelectionBehaviorEnum .ANY );
270274 response .addCard (card );
271275 }
276+
277+ logger .info (String .valueOf (availableCardsLeft ));
272278 }
273279
274280 // apply the DrugInteractions
275- if (hookConfiguration . canAddCard ( response . getCards (). size ()) && results .getDrugInteraction ().getApplies ()) {
281+ if (availableCardsLeft != 0 && results .getDrugInteraction ().getApplies ()) {
276282 response .addCard (cardBuilder .drugInteractionCard (results .getDrugInteraction (), results .getRequest ()));
283+ availableCardsLeft --;
277284 }
278285 }
279286
0 commit comments