Search in sources :

Example 31 with OperationDefinition

use of org.hl7.fhir.r4.model.OperationDefinition in project pathling by aehrc.

the class ConformanceProvider method buildResources.

@Nonnull
private List<CapabilityStatementRestResourceComponent> buildResources() {
    final List<CapabilityStatementRestResourceComponent> resources = new ArrayList<>();
    final Set<ResourceType> supported = FhirServer.supportedResourceTypes();
    final Set<ResourceType> supportedResourceTypes = supported.isEmpty() ? EnumSet.noneOf(ResourceType.class) : EnumSet.copyOf(supported);
    for (final ResourceType resourceType : supportedResourceTypes) {
        final CapabilityStatementRestResourceComponent resource = new CapabilityStatementRestResourceComponent(new CodeType(resourceType.toCode()));
        resource.setProfile(FHIR_RESOURCE_BASE + resourceType.toCode());
        // Add the search operation to all resources.
        final ResourceInteractionComponent search = new ResourceInteractionComponent();
        search.setCode(TypeRestfulInteraction.SEARCHTYPE);
        resource.getInteraction().add(search);
        // Add the create and update operations to all resources.
        final ResourceInteractionComponent create = new ResourceInteractionComponent();
        final ResourceInteractionComponent update = new ResourceInteractionComponent();
        create.setCode(TypeRestfulInteraction.CREATE);
        update.setCode(TypeRestfulInteraction.UPDATE);
        resource.getInteraction().add(create);
        resource.getInteraction().add(update);
        // Add the `aggregate` operation to all resources.
        final CanonicalType aggregateOperationUri = new CanonicalType(getOperationUri("aggregate"));
        final CapabilityStatementRestResourceOperationComponent aggregateOperation = new CapabilityStatementRestResourceOperationComponent(new StringType("aggregate"), aggregateOperationUri);
        resource.addOperation(aggregateOperation);
        // Add the `fhirPath` search parameter to all resources.
        final CapabilityStatementRestResourceOperationComponent searchOperation = new CapabilityStatementRestResourceOperationComponent();
        searchOperation.setName("fhirPath");
        searchOperation.setDefinition(getOperationUri("search"));
        resource.addOperation(searchOperation);
        resources.add(resource);
    }
    // Add the read operation to the OperationDefinition resource.
    final String opDefCode = ResourceType.OPERATIONDEFINITION.toCode();
    final CapabilityStatementRestResourceComponent opDefResource = new CapabilityStatementRestResourceComponent(new CodeType(opDefCode));
    opDefResource.setProfile(FHIR_RESOURCE_BASE + opDefCode);
    final ResourceInteractionComponent readInteraction = new ResourceInteractionComponent();
    readInteraction.setCode(TypeRestfulInteraction.READ);
    opDefResource.addInteraction(readInteraction);
    resources.add(opDefResource);
    return resources;
}
Also used : ResourceInteractionComponent(org.hl7.fhir.r4.model.CapabilityStatement.ResourceInteractionComponent) StringType(org.hl7.fhir.r4.model.StringType) ArrayList(java.util.ArrayList) CodeType(org.hl7.fhir.r4.model.CodeType) ResourceType(org.hl7.fhir.r4.model.Enumerations.ResourceType) CapabilityStatementRestResourceComponent(org.hl7.fhir.r4.model.CapabilityStatement.CapabilityStatementRestResourceComponent) CanonicalType(org.hl7.fhir.r4.model.CanonicalType) CapabilityStatementRestResourceOperationComponent(org.hl7.fhir.r4.model.CapabilityStatement.CapabilityStatementRestResourceOperationComponent) Nonnull(javax.annotation.Nonnull)

Example 32 with OperationDefinition

use of org.hl7.fhir.r4.model.OperationDefinition in project pathling by aehrc.

the class OperationDefinitionProvider method getOperationDefinitionById.

/**
 * Handles all read requests to the OperationDefinition resource.
 *
 * @param id the ID of the desired OperationDefinition
 * @return an {@link OperationDefinition} resource
 */
@Read
@SuppressWarnings("unused")
public OperationDefinition getOperationDefinitionById(@Nullable @IdParam final IIdType id) {
    checkUserInput(id != null, "Missing ID parameter");
    final String idString = id.getValue();
    final OperationDefinition resource = resources.get(idString);
    if (resource == null) {
        throw new ResourceNotFoundError("OperationDefinition not found: " + idString);
    }
    return resource;
}
Also used : ResourceNotFoundError(au.csiro.pathling.errors.ResourceNotFoundError) OperationDefinition(org.hl7.fhir.r4.model.OperationDefinition) Read(ca.uhn.fhir.rest.annotation.Read)

Example 33 with OperationDefinition

use of org.hl7.fhir.r4.model.OperationDefinition in project pathling by aehrc.

the class OperationDefinitionProvider method load.

@Nonnull
private OperationDefinition load(@Nonnull final String resourcePath) {
    @Nullable final InputStream resourceStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourcePath);
    checkNotNull(resourceStream);
    final OperationDefinition operationDefinition = (OperationDefinition) jsonParser.parseResource(resourceStream);
    final String id = String.format("%1$s%2$s", operationDefinition.getName(), version.getMajorVersion().map(v -> String.format("-%1$s", v)).orElse(""));
    operationDefinition.setId(id);
    final String url = String.format("%1$s/OperationDefinition/%2$s", ConformanceProvider.URI_BASE, id);
    operationDefinition.setUrl(url);
    operationDefinition.setVersion(version.getBuildVersion().orElse(UNKNOWN_VERSION));
    return operationDefinition;
}
Also used : InputStream(java.io.InputStream) OperationDefinition(org.hl7.fhir.r4.model.OperationDefinition) Nullable(javax.annotation.Nullable) Nonnull(javax.annotation.Nonnull)

Example 34 with OperationDefinition

use of org.hl7.fhir.r4.model.OperationDefinition in project pathling by aehrc.

the class AggregateResponse method toParameters.

/**
 * Converts this to a {@link Parameters} resource, based on the definition of the result of the
 * "aggregate" operation within the OperationDefinition.
 *
 * @return a new {@link Parameters} object
 */
public Parameters toParameters() {
    final Parameters parameters = new Parameters();
    groupings.forEach(grouping -> {
        final ParametersParameterComponent groupingParameter = new ParametersParameterComponent();
        groupingParameter.setName("grouping");
        grouping.getLabels().forEach(label -> {
            final ParametersParameterComponent labelPart = new ParametersParameterComponent();
            labelPart.setName("label");
            // A "null" value is represented by the absence of a value within FHIR.
            label.ifPresent(labelPart::setValue);
            groupingParameter.getPart().add(labelPart);
        });
        grouping.getResults().forEach(result -> {
            final ParametersParameterComponent resultPart = new ParametersParameterComponent();
            resultPart.setName("result");
            // A "null" value is represented by the absence of a value within FHIR.
            result.ifPresent(resultPart::setValue);
            groupingParameter.getPart().add(resultPart);
        });
        if (grouping.getDrillDown().isPresent()) {
            final String drillDown = grouping.getDrillDown().get();
            final ParametersParameterComponent drillDownPart = new ParametersParameterComponent();
            drillDownPart.setName("drillDown");
            drillDownPart.setValue(new StringType(drillDown));
            groupingParameter.getPart().add(drillDownPart);
        }
        parameters.getParameter().add(groupingParameter);
    });
    return parameters;
}
Also used : Parameters(org.hl7.fhir.r4.model.Parameters) StringType(org.hl7.fhir.r4.model.StringType) ParametersParameterComponent(org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent)

Example 35 with OperationDefinition

use of org.hl7.fhir.r4.model.OperationDefinition in project cqf-ruler by DBCG.

the class CareGapsProvider method careGapsReport.

/**
 * Implements the <a href=
 * "http://build.fhir.org/ig/HL7/davinci-deqm/OperationDefinition-care-gaps.html">$care-gaps</a>
 * operation found in the
 * <a href="http://build.fhir.org/ig/HL7/davinci-deqm/index.html">Da Vinci DEQM
 * FHIR Implementation Guide</a> that overrides the <a href=
 * "http://build.fhir.org/operation-measure-care-gaps.html">$care-gaps</a>
 * operation found in the
 * <a href="http://hl7.org/fhir/R4/clinicalreasoning-module.html">FHIR Clinical
 * Reasoning Module</a>.
 *
 * The operation calculates measures describing gaps in care. For more details,
 * reference the <a href=
 * "http://build.fhir.org/ig/HL7/davinci-deqm/gaps-in-care-reporting.html">Gaps
 * in Care Reporting</a> section of the
 * <a href="http://build.fhir.org/ig/HL7/davinci-deqm/index.html">Da Vinci DEQM
 * FHIR Implementation Guide</a>.
 *
 * A Parameters resource that includes zero to many document bundles that
 * include Care Gap Measure Reports will be returned.
 *
 * Usage:
 * URL: [base]/Measure/$care-gaps
 *
 * @param theRequestDetails generally auto-populated by the HAPI server
 *                          framework.
 * @param periodStart       the start of the gaps through period
 * @param periodEnd         the end of the gaps through period
 * @param topic             the category of the measures that is of interest for
 *                          the care gaps report
 * @param subject           a reference to either a Patient or Group for which
 *                          the gaps in care report(s) will be generated
 * @param practitioner      a reference to a Practitioner for which the gaps in
 *                          care report(s) will be generated
 * @param organization      a reference to an Organization for which the gaps in
 *                          care report(s) will be generated
 * @param status            the status code of gaps in care reports that will be
 *                          included in the result
 * @param measureId         the id of Measure(s) for which the gaps in care
 *                          report(s) will be calculated
 * @param measureIdentifier the identifier of Measure(s) for which the gaps in
 *                          care report(s) will be calculated
 * @param measureUrl        the canonical URL of Measure(s) for which the gaps
 *                          in care report(s) will be calculated
 * @param program           the program that a provider (either clinician or
 *                          clinical organization) participates in
 * @return Parameters of bundles of Care Gap Measure Reports
 */
// warning for greater than 7 parameters
@SuppressWarnings("squid:S00107")
@Description(shortDefinition = "$care-gaps", value = "Implements the <a href=\"http://build.fhir.org/ig/HL7/davinci-deqm/OperationDefinition-care-gaps.html\">$care-gaps</a> operation found in the <a href=\"http://build.fhir.org/ig/HL7/davinci-deqm/index.html\">Da Vinci DEQM FHIR Implementation Guide</a> which is an extension of the <a href=\"http://build.fhir.org/operation-measure-care-gaps.html\">$care-gaps</a> operation found in the <a href=\"http://hl7.org/fhir/R4/clinicalreasoning-module.html\">FHIR Clinical Reasoning Module</a>.")
@Operation(name = "$care-gaps", idempotent = true, type = Measure.class)
public Parameters careGapsReport(RequestDetails theRequestDetails, @OperationParam(name = "periodStart") String periodStart, @OperationParam(name = "periodEnd") String periodEnd, @OperationParam(name = "topic") List<String> topic, @OperationParam(name = "subject") String subject, @OperationParam(name = "practitioner") String practitioner, @OperationParam(name = "organization") String organization, @OperationParam(name = "status") List<String> status, @OperationParam(name = "measureId") List<String> measureId, @OperationParam(name = "measureIdentifier") List<String> measureIdentifier, @OperationParam(name = "measureUrl") List<CanonicalType> measureUrl, @OperationParam(name = "program") List<String> program) {
    validateConfiguration(theRequestDetails);
    validateParameters(theRequestDetails);
    // TODO: filter by topic.
    // TODO: filter by program.
    List<Measure> measures = ensureMeasures(getMeasures(measureId, measureIdentifier, measureUrl, theRequestDetails));
    List<Patient> patients;
    if (!Strings.isNullOrEmpty(subject)) {
        patients = getPatientListFromSubject(subject);
    } else {
        // TODO: implement non subject parameters (practitioner and organization)
        throw new NotImplementedException("Non subject parameters have not been implemented.");
    }
    Parameters result = initializeResult();
    (patients).forEach(patient -> {
        Parameters.ParametersParameterComponent patientParameter = patientReports(theRequestDetails, periodStart, periodEnd, patient, status, measures, organization);
        if (patientParameter != null) {
            result.addParameter(patientParameter);
        }
    });
    return result;
}
Also used : Parameters(org.hl7.fhir.r4.model.Parameters) NotImplementedException(org.apache.commons.lang3.NotImplementedException) Measure(org.hl7.fhir.r4.model.Measure) Patient(org.hl7.fhir.r4.model.Patient) Description(ca.uhn.fhir.model.api.annotation.Description) Operation(ca.uhn.fhir.rest.annotation.Operation)

Aggregations

OperationDefinition (org.hl7.fhir.r5.model.OperationDefinition)10 FHIRException (org.hl7.fhir.exceptions.FHIRException)9 DefinitionException (org.hl7.fhir.exceptions.DefinitionException)8 OperationDefinitionParameterComponent (org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent)7 XhtmlNode (org.hl7.fhir.utilities.xhtml.XhtmlNode)6 File (java.io.File)5 ArrayList (java.util.ArrayList)5 Complex (org.hl7.fhir.dstu3.utils.formats.Turtle.Complex)5 XmlParser (org.hl7.fhir.r5.formats.XmlParser)5 StructureDefinition (org.hl7.fhir.r5.model.StructureDefinition)5 Description (ca.uhn.fhir.model.api.annotation.Description)4 Operation (ca.uhn.fhir.rest.annotation.Operation)4 FileOutputStream (java.io.FileOutputStream)4 Complex (org.hl7.fhir.dstu2016may.formats.RdfGenerator.Complex)4 Parameters (org.hl7.fhir.r4.model.Parameters)4 Complex (org.hl7.fhir.r4.utils.formats.Turtle.Complex)4 StructureDefinition (org.hl7.fhir.r4b.model.StructureDefinition)4 CanonicalResource (org.hl7.fhir.r5.model.CanonicalResource)4 Extension (org.hl7.fhir.r5.model.Extension)4 ListResource (org.hl7.fhir.r5.model.ListResource)4