forked from google/android-fhir
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Expose overloaded API for evaluateMeasure
- Implement evaluateMeasure API method in the FHIR Operator with Measure as parameter
- Loading branch information
1 parent
e6439e3
commit 7097dfb
Showing
2 changed files
with
115 additions
and
2 deletions.
There are no files selected for viewing
62 changes: 62 additions & 0 deletions
62
workflow/src/main/java/com/google/android/fhir/workflow/FhirEngineR4MeasureProcessor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package com.google.android.fhir.workflow; | ||
|
||
import org.hl7.fhir.instance.model.api.IBaseBundle; | ||
import org.hl7.fhir.r4.model.Measure; | ||
import org.hl7.fhir.r4.model.MeasureReport; | ||
import org.opencds.cqf.fhir.api.Repository; | ||
import org.opencds.cqf.fhir.cr.measure.MeasureEvaluationOptions; | ||
import org.opencds.cqf.fhir.cr.measure.common.MeasureEvalType; | ||
import org.opencds.cqf.fhir.cr.measure.common.SubjectProvider; | ||
import org.opencds.cqf.fhir.cr.measure.r4.R4MeasureProcessor; | ||
import org.opencds.cqf.fhir.cr.measure.r4.R4RepositorySubjectProvider; | ||
import org.opencds.cqf.fhir.utility.repository.FederatedRepository; | ||
import org.opencds.cqf.fhir.utility.repository.InMemoryFhirRepository; | ||
|
||
import java.lang.reflect.Field; | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
public class FhirEngineR4MeasureProcessor extends R4MeasureProcessor { | ||
private static String FIELD_SUBJECT_PROVIDER="subjectProvider"; | ||
private Repository repository; | ||
|
||
public FhirEngineR4MeasureProcessor(Repository repository, MeasureEvaluationOptions measureEvaluationOptions) { | ||
super(repository, measureEvaluationOptions); | ||
this.repository = repository; | ||
} | ||
|
||
public FhirEngineR4MeasureProcessor(Repository repository, MeasureEvaluationOptions measureEvaluationOptions, SubjectProvider subjectProvider) { | ||
super(repository, measureEvaluationOptions, subjectProvider); | ||
this.repository = repository; | ||
} | ||
|
||
@Override | ||
public MeasureReport evaluateMeasure(Measure measure, String periodStart, String periodEnd, String reportType, List<String> subjectIds, IBaseBundle additionalData, MeasureEvalType evalType) { | ||
var actualRepo = this.repository; | ||
if (additionalData != null) { | ||
actualRepo = new FederatedRepository( | ||
this.repository, new InMemoryFhirRepository(this.repository.fhirContext(), additionalData)); | ||
} | ||
|
||
SubjectProvider subjectProvider = getSubjectProvider(); | ||
var subjects = subjectProvider.getSubjects(actualRepo, evalType, subjectIds).collect(Collectors.toList()); | ||
return super.evaluateMeasure( measure, periodStart, periodEnd, reportType, subjects, additionalData, evalType) ; | ||
} | ||
|
||
|
||
/*** | ||
* We have two constructors that could result in different subject providers. So for this field we will use reflection | ||
* @return [SubjectProvider] the SubjectProvider | ||
*/ | ||
public SubjectProvider getSubjectProvider(){ | ||
SubjectProvider subjectProvider; | ||
try { | ||
Field field = this.getClass().getSuperclass().getDeclaredField(FIELD_SUBJECT_PROVIDER); | ||
field.setAccessible(true); | ||
subjectProvider = (SubjectProvider) field.get(this); | ||
}catch (Exception e){ | ||
subjectProvider = null; | ||
} | ||
return subjectProvider; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters