diff --git a/cqf-fhir-cr-cli/src/main/java/org/opencds/cqf/fhir/cr/cli/command/CqlCommand.java b/cqf-fhir-cr-cli/src/main/java/org/opencds/cqf/fhir/cr/cli/command/CqlCommand.java index dd92ea29a0..03fdf6522f 100644 --- a/cqf-fhir-cr-cli/src/main/java/org/opencds/cqf/fhir/cr/cli/command/CqlCommand.java +++ b/cqf-fhir-cr-cli/src/main/java/org/opencds/cqf/fhir/cr/cli/command/CqlCommand.java @@ -96,7 +96,7 @@ static class LibraryParameter { @Option(names = {"-e", "--expression"}) public String[] expression; - @ArgGroup(multiplicity = "0..1", exclusive = false) + @ArgGroup(exclusive = false) public ContextParameter context; static class ContextParameter { @@ -104,7 +104,7 @@ static class ContextParameter { public String contextName; @Option(names = {"-cv", "--context-value"}) - public String contextValue; + public List contextValues; } static class ModelParameter { @@ -196,8 +196,7 @@ public Integer call() throws Exception { evaluationSettings.setNpmProcessor(new NpmProcessor(igContext)); for (LibraryParameter library : libraries) { - var repository = createRepository( - fhirContext, library.terminologyUrl, library.model.modelUrl, library.context.contextValue); + var repository = createRepository(fhirContext, library.terminologyUrl, library.model.modelUrl, null); var engine = Engines.forRepository(repository, evaluationSettings); if (library.libraryUrl != null) { @@ -213,12 +212,18 @@ public Integer call() throws Exception { Pair contextParameter = null; if (library.context != null) { - contextParameter = Pair.of(library.context.contextName, library.context.contextValue); - } + for (String contextValue : library.context.contextValues) { + contextParameter = Pair.of(library.context.contextName, contextValue); + EvaluationResult result = engine.evaluate(identifier, contextParameter); + writeResult(result); + } - EvaluationResult result = engine.evaluate(identifier, contextParameter); + } else { - writeResult(result); + EvaluationResult result = engine.evaluate(identifier, contextParameter); + + writeResult(result); + } } return 0; diff --git a/cqf-fhir-cr-cli/src/test/java/org/opencds/cqf/fhir/cr/cli/CliTest.java b/cqf-fhir-cr-cli/src/test/java/org/opencds/cqf/fhir/cr/cli/CliTest.java index 7274448684..b94a04603a 100644 --- a/cqf-fhir-cr-cli/src/test/java/org/opencds/cqf/fhir/cr/cli/CliTest.java +++ b/cqf-fhir-cr-cli/src/test/java/org/opencds/cqf/fhir/cr/cli/CliTest.java @@ -410,8 +410,8 @@ void qICoreSupplementalDataElements() { output.contains( "SDE Race=[Code { code: 1586-7, system: urn:oid:2.16.840.1.113883.6.238, version: null, display: Shoshone }, Code { code: 2036-2, system: urn:oid:2.16.840.1.113883.6.238, version: null, display: Filipino }, Code { code: 1735-0, system: urn:oid:2.16.840.1.113883.6.238, version: null, display: Alaska Native }]")); assertTrue(output.contains("SDE Payer=[Tuple {\n" + " code: Concept {\n" - + "\tCode { code: 59, system: urn:oid:2.16.840.1.113883.3.221.5, version: null, display: Other Private Insurance }\n" - + "}\n" + " period: Interval[2011-05-23, 2012-05-23]\n" + "}]")); + + "\tCode { code: 59, system: urn:oid:2.16.840.1.113883.3.221.5, version: null, display: Other Private Insurance }\n" + + "}\n" + " period: Interval[2011-05-23, 2012-05-23]\n" + "}]")); assertTrue( output.contains( "SDE Sex=Code { code: M, system: http://hl7.org/fhir/v3/AdministrativeGender, version: null, display: Male }")); @@ -463,7 +463,7 @@ void qICoreEXM124Denom() { "-ln=EXM124_QICore4", "-lv=8.2.000", "-m=FHIR", - "-mu=" + testResourcePath + "/qicore/denom-EXM124", + "-mu=" + testResourcePath + "/qicore/tests/denom-EXM124", "-t=" + testResourcePath + "/qicore/vocabulary/valueset", "-c=Patient", "-cv=denom-EXM124" @@ -491,7 +491,7 @@ void qICoreEXM124Numer() { "-ln=EXM124_QICore4", "-lv=8.2.000", "-m=FHIR", - "-mu=" + testResourcePath + "/qicore/numer-EXM124", + "-mu=" + testResourcePath + "/qicore/tests/numer-EXM124", "-t=" + testResourcePath + "/qicore/vocabulary/valueset", "-c=Patient", "-cv=numer-EXM124" @@ -510,6 +510,29 @@ void qICoreEXM124Numer() { assertTrue(output.contains("Numerator=true")); } + @Test + void qICoreMultiContext() { + String[] args = new String[] { + "cql", + "-fv=R4", + "-lu=" + testResourcePath + "/qicore", + "-ln=EXM124_QICore4", + "-lv=8.2.000", + "-m=FHIR", + "-mu=" + testResourcePath + "/qicore/tests", + "-t=" + testResourcePath + "/qicore/vocabulary/valueset", + "-c=Patient", + "-cv=numer-EXM124", + "-cv=denom-EXM124" + }; + + Main.run(args); + + String output = outContent.toString(); + assertTrue(output.contains("Patient=Patient(id=numer-EXM124)")); + assertTrue(output.contains("Patient=Patient(id=denom-EXM124)")); + } + @Test @Disabled("This test is failing on the CI Server for reasons unknown. Need to debug that.") void sampleContentIG() { diff --git a/cqf-fhir-cr-cli/src/test/resources/qicore/denom-EXM124/encounter/denom-EXM124-1.json b/cqf-fhir-cr-cli/src/test/resources/qicore/tests/denom-EXM124/encounter/denom-EXM124-1.json similarity index 100% rename from cqf-fhir-cr-cli/src/test/resources/qicore/denom-EXM124/encounter/denom-EXM124-1.json rename to cqf-fhir-cr-cli/src/test/resources/qicore/tests/denom-EXM124/encounter/denom-EXM124-1.json diff --git a/cqf-fhir-cr-cli/src/test/resources/qicore/denom-EXM124/observation/denom-EXM124-2.json b/cqf-fhir-cr-cli/src/test/resources/qicore/tests/denom-EXM124/observation/denom-EXM124-2.json similarity index 100% rename from cqf-fhir-cr-cli/src/test/resources/qicore/denom-EXM124/observation/denom-EXM124-2.json rename to cqf-fhir-cr-cli/src/test/resources/qicore/tests/denom-EXM124/observation/denom-EXM124-2.json diff --git a/cqf-fhir-cr-cli/src/test/resources/qicore/denom-EXM124/patient/denom-EXM124.json b/cqf-fhir-cr-cli/src/test/resources/qicore/tests/denom-EXM124/patient/denom-EXM124.json similarity index 100% rename from cqf-fhir-cr-cli/src/test/resources/qicore/denom-EXM124/patient/denom-EXM124.json rename to cqf-fhir-cr-cli/src/test/resources/qicore/tests/denom-EXM124/patient/denom-EXM124.json diff --git a/cqf-fhir-cr-cli/src/test/resources/qicore/numer-EXM124/encounter/numer-EXM124-1.json b/cqf-fhir-cr-cli/src/test/resources/qicore/tests/numer-EXM124/encounter/numer-EXM124-1.json similarity index 100% rename from cqf-fhir-cr-cli/src/test/resources/qicore/numer-EXM124/encounter/numer-EXM124-1.json rename to cqf-fhir-cr-cli/src/test/resources/qicore/tests/numer-EXM124/encounter/numer-EXM124-1.json diff --git a/cqf-fhir-cr-cli/src/test/resources/qicore/numer-EXM124/observation/numer-EXM124-2.json b/cqf-fhir-cr-cli/src/test/resources/qicore/tests/numer-EXM124/observation/numer-EXM124-2.json similarity index 100% rename from cqf-fhir-cr-cli/src/test/resources/qicore/numer-EXM124/observation/numer-EXM124-2.json rename to cqf-fhir-cr-cli/src/test/resources/qicore/tests/numer-EXM124/observation/numer-EXM124-2.json diff --git a/cqf-fhir-cr-cli/src/test/resources/qicore/numer-EXM124/patient/numer-EXM124.json b/cqf-fhir-cr-cli/src/test/resources/qicore/tests/numer-EXM124/patient/numer-EXM124.json similarity index 100% rename from cqf-fhir-cr-cli/src/test/resources/qicore/numer-EXM124/patient/numer-EXM124.json rename to cqf-fhir-cr-cli/src/test/resources/qicore/tests/numer-EXM124/patient/numer-EXM124.json