Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.opencds.cqf.fhir.cr.hapi.dstu3.measure;

import static org.opencds.cqf.fhir.cr.hapi.common.ParameterHelper.getStringValue;
import static org.opencds.cqf.fhir.utility.EndpointHelper.getEndpoint;

import ca.uhn.fhir.context.FhirVersionEnum;
Expand All @@ -10,12 +11,16 @@
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
import ca.uhn.fhir.rest.server.provider.ProviderConstants;
import org.hl7.fhir.dstu3.model.Bundle;
import org.hl7.fhir.dstu3.model.CodeType;
import org.hl7.fhir.dstu3.model.DateTimeType;
import org.hl7.fhir.dstu3.model.DateType;
import org.hl7.fhir.dstu3.model.Endpoint;
import org.hl7.fhir.dstu3.model.IdType;
import org.hl7.fhir.dstu3.model.Measure;
import org.hl7.fhir.dstu3.model.MeasureReport;
import org.hl7.fhir.dstu3.model.Parameters;
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
import org.hl7.fhir.dstu3.model.StringType;
import org.hl7.fhir.exceptions.FHIRException;
import org.opencds.cqf.fhir.cr.hapi.dstu3.IMeasureServiceFactory;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -59,32 +64,31 @@ public MeasureOperationsProvider(IMeasureServiceFactory dstu3MeasureProcessorFac
@Operation(name = ProviderConstants.CR_OPERATION_EVALUATE_MEASURE, idempotent = true, type = Measure.class)
public MeasureReport evaluateMeasure(
@IdParam IdType id,
@OperationParam(name = "periodStart") String periodStart,
@OperationParam(name = "periodEnd") String periodEnd,
@OperationParam(name = "reportType") String reportType,
@OperationParam(name = "patient") String patient,
@OperationParam(name = "practitioner") String practitioner,
@OperationParam(name = "lastReceivedOn") String lastReceivedOn,
@OperationParam(name = "productLine") String productLine,
@OperationParam(name = "periodStart") DateType periodStart,
@OperationParam(name = "periodEnd") DateType periodEnd,
@OperationParam(name = "reportType") CodeType reportType,
@OperationParam(name = "patient") StringType patient,
@OperationParam(name = "practitioner") StringType practitioner,
@OperationParam(name = "lastReceivedOn") DateTimeType lastReceivedOn,
@OperationParam(name = "productLine") StringType productLine,
@OperationParam(name = "additionalData") Bundle additionalData,
@OperationParam(name = "terminologyEndpoint") ParametersParameterComponent terminologyEndpoint,
@OperationParam(name = "parameters") Parameters parameters,
RequestDetails requestDetails)
throws InternalErrorException, FHIRException {
var terminologyEndpointParam = (Endpoint) getEndpoint(fhirVersion, terminologyEndpoint);
return dstu3MeasureProcessorFactory
.create(requestDetails)
.evaluateMeasure(
id,
periodStart,
periodEnd,
reportType,
patient,
practitioner,
lastReceivedOn,
productLine,
getStringValue(periodStart),
getStringValue(periodEnd),
getStringValue(reportType),
getStringValue(patient),
getStringValue(practitioner),
getStringValue(lastReceivedOn),
getStringValue(productLine),
additionalData,
parameters,
terminologyEndpointParam);
(Endpoint) getEndpoint(fhirVersion, terminologyEndpoint));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.opencds.cqf.fhir.cr.hapi.r4.measure;

import static org.opencds.cqf.fhir.cr.hapi.common.ParameterHelper.getStringValue;

import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.model.api.annotation.Description;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
Expand All @@ -9,21 +12,26 @@
import java.util.Optional;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CanonicalType;
import org.hl7.fhir.r4.model.DateType;
import org.hl7.fhir.r4.model.IdType;
import org.hl7.fhir.r4.model.Measure;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
import org.opencds.cqf.fhir.cr.hapi.common.ParameterHelper;
import org.opencds.cqf.fhir.cr.hapi.common.StringTimePeriodHandler;
import org.opencds.cqf.fhir.cr.hapi.r4.ICareGapsServiceFactory;

@SuppressWarnings("java:S107")
public class CareGapsOperationProvider {
private final ICareGapsServiceFactory r4CareGapsProcessorFactory;
private final StringTimePeriodHandler stringTimePeriodHandler;
private final FhirVersionEnum fhirVersion;

public CareGapsOperationProvider(
ICareGapsServiceFactory r4CareGapsProcessorFactory, StringTimePeriodHandler stringTimePeriodHandler) {
this.r4CareGapsProcessorFactory = r4CareGapsProcessorFactory;
this.stringTimePeriodHandler = stringTimePeriodHandler;
fhirVersion = FhirVersionEnum.R4;
}

/**
Expand Down Expand Up @@ -52,8 +60,8 @@ public CareGapsOperationProvider(
*
* @param requestDetails generally auto-populated by the HAPI server
* framework.
* @param reriodStart the start of the gaps through period
* @param reriodEnd the end of the gaps through period
* @param periodStart the start of the gaps through period
* @param periodEnd the end of the gaps through period
* @param subject a reference to either a Patient or Group for which
* the gaps in care report(s) will be generated
* @param status the status code of gaps in care reports that will be
Expand All @@ -75,26 +83,37 @@ public CareGapsOperationProvider(
@Operation(name = ProviderConstants.CR_OPERATION_CARE_GAPS, idempotent = true, type = Measure.class)
public Parameters careGapsReport(
RequestDetails requestDetails,
@OperationParam(name = "periodStart") String reriodStart,
@OperationParam(name = "periodEnd") String reriodEnd,
@OperationParam(name = "subject") String subject,
@OperationParam(name = "status") List<String> status,
@OperationParam(name = "measureId") List<String> measureId,
@OperationParam(name = "measureIdentifier") List<String> measureIdentifier,
@OperationParam(name = "periodStart") DateType periodStart,
@OperationParam(name = "periodEnd") DateType periodEnd,
@OperationParam(name = "subject") StringType subject,
@OperationParam(name = "status") List<StringType> status,
@OperationParam(name = "measureId") List<StringType> measureId,
@OperationParam(name = "measureIdentifier") List<StringType> measureIdentifier,
@OperationParam(name = "measureUrl") List<CanonicalType> measureUrl,
@OperationParam(name = "nonDocument") BooleanType nonDocument) {

return r4CareGapsProcessorFactory
.create(requestDetails)
.getCareGapsReport(
stringTimePeriodHandler.getStartZonedDateTime(reriodStart, requestDetails),
stringTimePeriodHandler.getEndZonedDateTime(reriodEnd, requestDetails),
subject,
status,
stringTimePeriodHandler.getStartZonedDateTime(getStringValue(periodStart), requestDetails),
stringTimePeriodHandler.getEndZonedDateTime(getStringValue(periodEnd), requestDetails),
getStringValue(subject),
status == null
? null
: status.stream()
.map(ParameterHelper::getStringValue)
.toList(),
measureId == null
? null
: measureId.stream().map(IdType::new).toList(),
measureIdentifier,
: measureId.stream()
.map(ParameterHelper::getStringValue)
.map(IdType::new)
.toList(),
measureIdentifier == null
? null
: measureIdentifier.stream()
.map(ParameterHelper::getStringValue)
.toList(),
measureUrl,
Optional.ofNullable(nonDocument)
.map(BooleanType::getValue)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,32 @@
package org.opencds.cqf.fhir.cr.hapi.r4.measure;

import static org.opencds.cqf.fhir.cr.hapi.common.ParameterHelper.getStringValue;

import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.model.api.annotation.Description;
import ca.uhn.fhir.rest.annotation.IdParam;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.provider.ProviderConstants;
import org.hl7.fhir.r4.model.DateType;
import org.hl7.fhir.r4.model.IdType;
import org.hl7.fhir.r4.model.Measure;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
import org.opencds.cqf.fhir.cr.hapi.common.StringTimePeriodHandler;
import org.opencds.cqf.fhir.cr.hapi.r4.ICollectDataServiceFactory;

public class CollectDataOperationProvider {
private final ICollectDataServiceFactory r4CollectDataServiceFactory;
private final StringTimePeriodHandler stringTimePeriodHandler;
private final FhirVersionEnum fhirVersion;

public CollectDataOperationProvider(
ICollectDataServiceFactory r4CollectDataServiceFactory, StringTimePeriodHandler stringTimePeriodHandler) {
this.r4CollectDataServiceFactory = r4CollectDataServiceFactory;
this.stringTimePeriodHandler = stringTimePeriodHandler;
fhirVersion = FhirVersionEnum.R4;
}

/**
Expand Down Expand Up @@ -51,18 +58,18 @@ public CollectDataOperationProvider(
@Operation(name = ProviderConstants.CR_OPERATION_COLLECTDATA, idempotent = true, type = Measure.class)
public Parameters collectData(
@IdParam IdType id,
@OperationParam(name = "periodStart") String periodStart,
@OperationParam(name = "periodEnd") String periodEnd,
@OperationParam(name = "subject") String subject,
@OperationParam(name = "practitioner") String practitioner,
@OperationParam(name = "periodStart") DateType periodStart,
@OperationParam(name = "periodEnd") DateType periodEnd,
@OperationParam(name = "subject") StringType subject,
@OperationParam(name = "practitioner") StringType practitioner,
RequestDetails requestDetails) {
return r4CollectDataServiceFactory
.create(requestDetails)
.collectData(
id,
stringTimePeriodHandler.getStartZonedDateTime(periodStart, requestDetails),
stringTimePeriodHandler.getEndZonedDateTime(periodEnd, requestDetails),
subject,
practitioner);
stringTimePeriodHandler.getStartZonedDateTime(getStringValue(periodStart), requestDetails),
stringTimePeriodHandler.getEndZonedDateTime(getStringValue(periodEnd), requestDetails),
getStringValue(subject),
getStringValue(practitioner));
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
package org.opencds.cqf.fhir.cr.hapi.r4.measure;

import static org.opencds.cqf.fhir.cr.hapi.common.ParameterHelper.getStringValue;

import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.rest.annotation.IdParam;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.server.provider.ProviderConstants;
import org.hl7.fhir.r4.model.DateType;
import org.hl7.fhir.r4.model.IdType;
import org.hl7.fhir.r4.model.Library;
import org.hl7.fhir.r4.model.Measure;
import org.opencds.cqf.fhir.cr.hapi.r4.IDataRequirementsServiceFactory;

public class DataRequirementsOperationProvider {
private final IDataRequirementsServiceFactory r4DataRequirementsServiceFactory;
private final FhirVersionEnum fhirVersion;

public DataRequirementsOperationProvider(IDataRequirementsServiceFactory r4DataRequirementsServiceFactory) {
this.r4DataRequirementsServiceFactory = r4DataRequirementsServiceFactory;
fhirVersion = FhirVersionEnum.R4;
}

/**
Expand All @@ -35,9 +41,11 @@ public DataRequirementsOperationProvider(IDataRequirementsServiceFactory r4DataR
@Operation(name = ProviderConstants.CR_OPERATION_DATAREQUIREMENTS, idempotent = true, type = Measure.class)
public Library dataRequirements(
@IdParam IdType id,
@OperationParam(name = "periodStart") String periodStart,
@OperationParam(name = "periodEnd") String periodEnd,
@OperationParam(name = "periodStart") DateType periodStart,
@OperationParam(name = "periodEnd") DateType periodEnd,
RequestDetails requestDetails) {
return r4DataRequirementsServiceFactory.create(requestDetails).dataRequirements(id, periodStart, periodEnd);
return r4DataRequirementsServiceFactory
.create(requestDetails)
.dataRequirements(id, getStringValue(periodStart), getStringValue(periodEnd));
}
}
Loading
Loading