|
14 | 14 | import java.util.Map.Entry; |
15 | 15 | import java.util.Set; |
16 | 16 | import java.util.function.Supplier; |
| 17 | +import org.apache.commons.lang3.StringUtils; |
17 | 18 | import org.hl7.fhir.r4.model.*; |
18 | 19 | import org.hl7.fhir.r4.model.DataRequirement.DataRequirementCodeFilterComponent; |
19 | 20 | import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent; |
@@ -409,8 +410,7 @@ public void filterByCode( |
409 | 410 | || drcf.getPath().equals("medication")) |
410 | 411 | && drcf.getValueSet() != null) { |
411 | 412 |
|
412 | | - Resource vsr = |
413 | | - kd.getKar().getDependentResource(ResourceType.ValueSet, drcf.getValueSet()); |
| 413 | + Resource vsr = getValueSet(kd, drcf.getValueSet()); |
414 | 414 |
|
415 | 415 | if (vsr != null) { |
416 | 416 | logger.debug(" Found Value Set {} to compare codes.", vsr.getId()); |
@@ -600,4 +600,32 @@ R4CqlExecutionService newEvaluator() { |
600 | 600 | logger.info("Evaluator instance: " + System.identityHashCode(ev)); |
601 | 601 | return ev; |
602 | 602 | } |
| 603 | + |
| 604 | + public Resource getValueSet(KarProcessingData kd, String url) { |
| 605 | + if (StringUtils.isBlank(url)) { |
| 606 | + return null; |
| 607 | + } |
| 608 | + Resource res = kd.getKar().getDependentResource(ResourceType.ValueSet, url); |
| 609 | + |
| 610 | + if (res == null) { |
| 611 | + res = kd.getKar().getDependentResource(ResourceType.ValueSet, normalizeCanonicalUrl(url)); |
| 612 | + } |
| 613 | + return res; |
| 614 | + } |
| 615 | + |
| 616 | + public String normalizeCanonicalUrl(String url) { |
| 617 | + try { |
| 618 | + if (StringUtils.isBlank(url)) { |
| 619 | + return null; |
| 620 | + } |
| 621 | + |
| 622 | + int pipeIndex = url.indexOf('|'); |
| 623 | + return (pipeIndex >= 0) ? url.substring(0, pipeIndex) : url; |
| 624 | + |
| 625 | + } catch (Exception e) { |
| 626 | + logger.warn("Failed to normalize canonical URL: {}", url, e); |
| 627 | + |
| 628 | + return url; |
| 629 | + } |
| 630 | + } |
603 | 631 | } |
0 commit comments