Skip to content

Commit f5b6a4a

Browse files
committed
Set direct reference code code-system versions
Set via pinned version in expansionParams if available, otherwise use txServer
1 parent e0987a9 commit f5b6a4a

3 files changed

Lines changed: 66 additions & 6 deletions

File tree

cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/ReleaseVisitor.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ private void gatherDependencies(
391391
}
392392
}
393393

394-
extractMeasureDirectReferenceCodes(rootAdapter, artifactAdapter);
394+
extractMeasureDirectReferenceCodes(rootAdapter, artifactAdapter, endpoint);
395395
}
396396
}
397397

@@ -410,13 +410,15 @@ private void ensureResourceTypeExtension(String resourceType, ICompositeType new
410410
}
411411

412412
private void extractMeasureDirectReferenceCodes(
413-
IKnowledgeArtifactAdapter rootAdapter, IKnowledgeArtifactAdapter artifactAdapter) {
413+
IKnowledgeArtifactAdapter rootAdapter,
414+
IKnowledgeArtifactAdapter artifactAdapter,
415+
IEndpointAdapter endpoint) {
414416
if (artifactAdapter instanceof org.opencds.cqf.fhir.utility.adapter.r4.MeasureAdapter measureAdapter) {
415417
org.opencds.cqf.fhir.cr.visitor.r4.ReleaseVisitor.extractDirectReferenceCodes(
416-
rootAdapter, measureAdapter.get());
418+
rootAdapter, measureAdapter.get(), endpoint);
417419
} else if (artifactAdapter instanceof org.opencds.cqf.fhir.utility.adapter.r5.MeasureAdapter measureAdapter) {
418420
org.opencds.cqf.fhir.cr.visitor.r5.ReleaseVisitor.extractDirectReferenceCodes(
419-
rootAdapter, measureAdapter.get());
421+
rootAdapter, measureAdapter.get(), endpoint);
420422
}
421423
}
422424

cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r4/ReleaseVisitor.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,19 @@
2222
import org.hl7.fhir.r4.model.Library;
2323
import org.hl7.fhir.r4.model.Measure;
2424
import org.hl7.fhir.r4.model.MetadataResource;
25+
import org.hl7.fhir.r4.model.Parameters;
2526
import org.hl7.fhir.r4.model.Period;
2627
import org.hl7.fhir.r4.model.Reference;
2728
import org.hl7.fhir.r4.model.ResourceType;
2829
import org.hl7.fhir.r4.model.StringType;
30+
import org.hl7.fhir.r4.model.UriType;
2931
import org.hl7.fhir.r4.model.ValueSet;
3032
import org.opencds.cqf.fhir.cr.visitor.r4.CRMIReleaseExperimentalBehavior.CRMIReleaseExperimentalBehaviorCodes;
3133
import org.opencds.cqf.fhir.cr.visitor.r4.CRMIReleaseVersionBehavior.CRMIReleaseVersionBehaviorCodes;
3234
import org.opencds.cqf.fhir.utility.Constants;
3335
import org.opencds.cqf.fhir.utility.PackageHelper;
3436
import org.opencds.cqf.fhir.utility.SearchHelper;
37+
import org.opencds.cqf.fhir.utility.adapter.IEndpointAdapter;
3538
import org.opencds.cqf.fhir.utility.adapter.IKnowledgeArtifactAdapter;
3639
import org.opencds.cqf.fhir.utility.r4.ArtifactAssessment;
3740
import org.slf4j.Logger;
@@ -163,7 +166,8 @@ public static List<BundleEntryComponent> findArtifactCommentsToUpdate(
163166
return returnEntries;
164167
}
165168

166-
public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAdapter, Measure measure) {
169+
public static void extractDirectReferenceCodes(
170+
IKnowledgeArtifactAdapter rootAdapter, Measure measure, IEndpointAdapter endpointAdapter) {
167171
Optional<Extension> effectiveDataRequirementsExt = measure.getExtension().stream()
168172
.filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS)
169173
|| ext.getUrl().equals(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS))
@@ -187,9 +191,34 @@ public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAda
187191
|| ext.getUrl().equals(Constants.CQF_DIRECT_REFERENCE_EXTENSION))
188192
.toList();
189193

194+
var expansionParams = rootAdapter.getExpansionParameters().map(p -> ((Parameters) p));
195+
List<UriType> systemVersions = new ArrayList<>();
196+
if (expansionParams.isPresent()) {
197+
systemVersions = expansionParams.get().getParameter().stream()
198+
.filter(param -> param.getName().equals(Constants.SYSTEM_VERSION))
199+
.map(sysVerParam -> (UriType) sysVerParam.getValue())
200+
.toList();
201+
}
202+
190203
for (var proposedExt : proposedExtensions) {
191204
boolean shouldAddExtension = true;
192205
Coding proposedCoding = (Coding) proposedExt.getValue();
206+
207+
if (proposedCoding.getVersion() == null && !systemVersions.isEmpty()) {
208+
for (var sysVer : systemVersions) {
209+
var idParts = sysVer.getValue().split("\\|");
210+
if (idParts[0].equals(proposedCoding.getSystem())) {
211+
proposedCoding.setVersion(idParts[1]);
212+
break;
213+
}
214+
}
215+
}
216+
217+
// version can still be null after trying to set via expansionParams
218+
if (proposedCoding.getVersion() == null && endpointAdapter != null) {
219+
// use TxServer to set version
220+
}
221+
193222
for (var existingExt : existingRootAdapterExtensions) {
194223
Coding existingCoding = (Coding) existingExt.getValue();
195224
boolean systemMatches = proposedCoding.getSystem().equals(existingCoding.getSystem());

cqf-fhir-cr/src/main/java/org/opencds/cqf/fhir/cr/visitor/r5/ReleaseVisitor.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,20 @@
2222
import org.hl7.fhir.r5.model.Library;
2323
import org.hl7.fhir.r5.model.Measure;
2424
import org.hl7.fhir.r5.model.MetadataResource;
25+
import org.hl7.fhir.r5.model.Parameters;
2526
import org.hl7.fhir.r5.model.Period;
2627
import org.hl7.fhir.r5.model.Reference;
2728
import org.hl7.fhir.r5.model.RelatedArtifact.RelatedArtifactType;
2829
import org.hl7.fhir.r5.model.ResourceType;
2930
import org.hl7.fhir.r5.model.StringType;
31+
import org.hl7.fhir.r5.model.UriType;
3032
import org.hl7.fhir.r5.model.ValueSet;
3133
import org.opencds.cqf.fhir.cr.visitor.r5.CRMIReleaseExperimentalBehavior.CRMIReleaseExperimentalBehaviorCodes;
3234
import org.opencds.cqf.fhir.cr.visitor.r5.CRMIReleaseVersionBehavior.CRMIReleaseVersionBehaviorCodes;
3335
import org.opencds.cqf.fhir.utility.Constants;
3436
import org.opencds.cqf.fhir.utility.PackageHelper;
3537
import org.opencds.cqf.fhir.utility.SearchHelper;
38+
import org.opencds.cqf.fhir.utility.adapter.IEndpointAdapter;
3639
import org.opencds.cqf.fhir.utility.adapter.IKnowledgeArtifactAdapter;
3740
import org.slf4j.Logger;
3841

@@ -150,7 +153,8 @@ public static List<BundleEntryComponent> findArtifactCommentsToUpdate(
150153
return returnEntries;
151154
}
152155

153-
public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAdapter, Measure measure) {
156+
public static void extractDirectReferenceCodes(
157+
IKnowledgeArtifactAdapter rootAdapter, Measure measure, IEndpointAdapter endpointAdapter) {
154158
Optional<Extension> effectiveDataRequirementsExt = measure.getExtension().stream()
155159
.filter(ext -> ext.getUrl().equals(Constants.CQFM_EFFECTIVE_DATA_REQUIREMENTS)
156160
|| ext.getUrl().equals(Constants.CRMI_EFFECTIVE_DATA_REQUIREMENTS))
@@ -173,9 +177,34 @@ public static void extractDirectReferenceCodes(IKnowledgeArtifactAdapter rootAda
173177
|| ext.getUrl().equals(Constants.CQF_DIRECT_REFERENCE_EXTENSION))
174178
.toList();
175179

180+
var expansionParams = rootAdapter.getExpansionParameters().map(p -> ((Parameters) p));
181+
List<UriType> systemVersions = new ArrayList<>();
182+
if (expansionParams.isPresent()) {
183+
systemVersions = expansionParams.get().getParameter().stream()
184+
.filter(param -> param.getName().equals(Constants.SYSTEM_VERSION))
185+
.map(sysVerParam -> (UriType) sysVerParam.getValue())
186+
.toList();
187+
}
188+
176189
for (var proposedExt : proposedExtensions) {
177190
boolean shouldAddExtension = true;
178191
Coding proposedCoding = (Coding) proposedExt.getValue();
192+
193+
if (proposedCoding.getVersion() == null && !systemVersions.isEmpty()) {
194+
for (var sysVer : systemVersions) {
195+
var idParts = ((UriType) sysVer).getValue().split("\\|");
196+
if (idParts[0].equals(proposedCoding.getSystem())) {
197+
proposedCoding.setVersion(idParts[1]);
198+
break;
199+
}
200+
}
201+
}
202+
203+
// version can still be null after trying to set via expansionParams
204+
if (proposedCoding.getVersion() == null && endpointAdapter != null) {
205+
// use TxServer to set version
206+
}
207+
179208
for (var existingExt : existingRootAdapterExtensions) {
180209
Coding existingCoding = (Coding) existingExt.getValue();
181210
boolean systemMatches = proposedCoding.getSystem().equals(existingCoding.getSystem());

0 commit comments

Comments
 (0)