use of org.hl7.fhir.r4b.model.Attachment in project Gravity-SDOH-Exchange-RI by FHIR.
the class CreateConsentFactory method createConsent.
public Consent createConsent() {
Consent consent = new Consent();
consent.getSourceAttachment().setTitle(name);
try {
consent.getSourceAttachment().setData(attachment.getBytes());
} catch (IOException e) {
throw new ConsentCreateException("Consent attachment cannot be read.");
}
consent.getSourceAttachment().setContentType(MediaType.APPLICATION_PDF_VALUE);
consent.setId(IdType.newRandomUuid());
consent.setStatus(Consent.ConsentState.ACTIVE);
consent.setDateTimeElement(DateTimeType.now());
consent.getMeta().addProfile(SDOHProfiles.CONSENT);
ConsentScope consentScope = ConsentScope.PATIENTPRIVACY;
consent.getScope().addCoding(new Coding(consentScope.getSystem(), consentScope.toCode(), consentScope.getDisplay()));
V3ActCode actCode = V3ActCode.IDSCL;
consent.addCategory(new CodeableConcept().addCoding(new Coding(actCode.getSystem(), actCode.toCode(), actCode.getDisplay())));
consent.setPatient(patient);
ConsentPolicy consentPolicy = ConsentPolicy.HIPAAAUTH;
consent.getPolicyRule().addCoding(new Coding(consentPolicy.getSystem(), consentPolicy.toCode(), consentPolicy.getDisplay()));
V3RoleClass roleClass = V3RoleClass.PAT;
consent.getProvision().addActor().setReference(patient).getRole().addCoding(new Coding(roleClass.getSystem(), roleClass.toCode(), roleClass.getDisplay()));
ConsentAction consentAction = ConsentAction.DISCLOSE;
consent.getProvision().addAction().getCoding().add(new Coding(consentAction.getSystem(), consentAction.toCode(), consentAction.getDisplay()));
consent.getOrganization().add(organization);
return consent;
}
use of org.hl7.fhir.r4b.model.Attachment in project geoprism-registry by terraframe.
the class AbstractFhirResourceProcessor method getGeometry.
protected Geometry getGeometry(Location location, ServerGeoObjectType type) {
Extension extension = location.getExtensionByUrl("http://hl7.org/fhir/StructureDefinition/location-boundary-geojson");
if (extension != null) {
Attachment value = (Attachment) extension.getValue();
if (value.hasData()) {
Decoder decoder = Base64.getDecoder();
byte[] binary = decoder.decode(value.getDataElement().getValueAsString());
String geojson = new String(binary);
GeoJsonReader reader = new GeoJsonReader();
try {
return reader.read(geojson);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return null;
}
use of org.hl7.fhir.r4b.model.Attachment in project geoprism-registry by terraframe.
the class ListTypeFhirExporter method createFacility.
private Facility createFacility(Business row, Identifier identifier) {
String code = row.getValue(DefaultAttribute.CODE.getName());
Organization org = new Organization();
org.setId(new IdType(org.getResourceType().name(), code));
org.setName(row.getValue(DefaultAttribute.DISPLAY_LABEL.getName() + ListTypeVersion.DEFAULT_LOCALE));
org.addIdentifier(identifier);
Location location = new Location();
location.setId(new IdType(location.getResourceType().name(), code));
location.setName(row.getValue(DefaultAttribute.DISPLAY_LABEL.getName() + ListTypeVersion.DEFAULT_LOCALE));
location.setManagingOrganization(new Reference(org.getIdElement()));
location.addIdentifier(identifier);
Geometry geometry = row.getObjectValue(RegistryConstants.GEOMETRY_ATTRIBUTE_NAME);
if (geometry != null) {
Point centroid = geometry.getCentroid();
GeoJsonWriter writer = new GeoJsonWriter();
String geojson = writer.write(geometry);
Encoder encoder = Base64.getEncoder();
// Create a location
Attachment attachment = new Attachment();
attachment.setContentType("application/json");
attachment.setDataElement(new Base64BinaryType(encoder.encodeToString(geojson.getBytes())));
attachment.setTitle("Geojson");
Extension extension = new Extension("http://hl7.org/fhir/StructureDefinition/location-boundary-geojson");
extension.setValue(attachment);
location.setPosition(new LocationPositionComponent(new DecimalType(centroid.getX()), new DecimalType(centroid.getY())));
location.addExtension(extension);
}
return new Facility(org, location);
}
use of org.hl7.fhir.r4b.model.Attachment in project quality-measure-and-cohort-service by Alvearie.
the class CohortCLI method toCqlLibraryMap.
private Map<CqlLibraryDescriptor, CqlLibrary> toCqlLibraryMap(List<Library> libraries) {
Map<CqlLibraryDescriptor, CqlLibrary> retVal = new HashMap<>();
for (Library library : libraries) {
String libraryId = library.getName();
String version = library.getVersion();
for (Attachment attachment : library.getContent()) {
Format libraryFormat = Format.lookupByName(attachment.getContentType());
if (libraryFormat != null) {
CqlLibraryDescriptor key = new CqlLibraryDescriptor().setLibraryId(libraryId).setVersion(version).setFormat(libraryFormat);
CqlLibrary value = new CqlLibrary().setContent(new String(attachment.getData())).setDescriptor(key);
retVal.put(key, value);
}
}
}
return retVal;
}
use of org.hl7.fhir.r4b.model.Attachment in project quality-measure-and-cohort-service by Alvearie.
the class CohortEngineRestHandler method evaluatePatientListMeasure.
@POST
@Path("/evaluation-patient-list")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({ MediaType.APPLICATION_JSON })
@ApiOperation(value = "Evaluates a measure bundle for a list of patients", notes = EVALUATION_API_NOTES, response = String.class, tags = { "Measure Evaluation" }, extensions = { @Extension(properties = { @ExtensionProperty(name = DarkFeatureSwaggerFilter.DARK_FEATURE_NAME, value = CohortEngineRestConstants.DARK_LAUNCHED_PATIENT_LIST_MEASURE_EVALUATION) }) })
@ApiImplicitParams({ // This is necessary for the dark launch feature
@ApiImplicitParam(access = DarkFeatureSwaggerFilter.DARK_FEATURE_CONTROLLED, paramType = "header", dataType = "string"), // These are necessary to create a proper view of the request body that is all wrapped up in the Liberty IMultipartBody parameter
@ApiImplicitParam(name = REQUEST_DATA_PART, value = EXAMPLE_PATIENT_LIST_MEASURE_REQUEST_DATA_JSON, dataTypeClass = PatientListMeasureEvaluation.class, required = true, paramType = "form", type = "file"), @ApiImplicitParam(name = MEASURE_PART, value = EXAMPLE_MEASURE_ZIP, dataTypeClass = File.class, required = true, paramType = "form", type = "file") })
@ApiResponses(value = { @ApiResponse(code = 200, message = "Successful Operation: This API returns the JSON representation of a FHIR MeasureReport. A full example can be found at https://www.hl7.org/fhir/measurereport-cms146-cat2-example.html"), @ApiResponse(code = 400, message = "Bad Request", response = ServiceErrorList.class), @ApiResponse(code = 500, message = "Server Error", response = ServiceErrorList.class) })
public Response evaluatePatientListMeasure(@Context HttpServletRequest request, @ApiParam(value = ServiceBaseConstants.MINOR_VERSION_DESCRIPTION, required = true, defaultValue = ServiceBuildConstants.DATE) @QueryParam(CohortEngineRestHandler.VERSION) String version, @ApiParam(hidden = true, type = "file", required = true) IMultipartBody multipartBody) {
final String methodName = MethodNames.EVALUATE_PATIENT_LIST_MEASURE.getName();
Response response = null;
// Error out if feature is not enabled
ServiceBaseUtility.isDarkFeatureEnabled(CohortEngineRestConstants.DARK_LAUNCHED_PATIENT_LIST_MEASURE_EVALUATION);
try {
// Perform api setup
Response errorResponse = ServiceBaseUtility.apiSetup(version, logger, methodName);
if (errorResponse != null) {
return errorResponse;
}
if (multipartBody == null) {
throw new IllegalArgumentException("A multipart/form-data body is required");
}
IAttachment metadataAttachment = multipartBody.getAttachment(REQUEST_DATA_PART);
if (metadataAttachment == null) {
throw new IllegalArgumentException(String.format("Missing '%s' MIME attachment", REQUEST_DATA_PART));
}
IAttachment measureAttachment = multipartBody.getAttachment(MEASURE_PART);
if (measureAttachment == null) {
throw new IllegalArgumentException(String.format("Missing '%s' MIME attachment", MEASURE_PART));
}
// deserialize the PatientListMeasureEvaluation request
ObjectMapper om = new ObjectMapper();
PatientListMeasureEvaluation evaluationRequest = om.readValue(metadataAttachment.getDataHandler().getInputStream(), PatientListMeasureEvaluation.class);
// validate the contents of the evaluationRequest
validateBean(evaluationRequest);
FhirContext fhirContext = FhirContext.forR4();
try (InputStream is = measureAttachment.getDataHandler().getInputStream();
RetrieveCacheContext retrieveCacheContext = new DefaultRetrieveCacheContext()) {
MeasureEvaluator evaluator = createMeasureEvaluator(is, evaluationRequest.getDataServerConfig(), evaluationRequest.getTerminologyServerConfig(), evaluationRequest.isExpandValueSets(), evaluationRequest.getSearchPageSize(), retrieveCacheContext, fhirContext);
MeasureReport report = evaluator.evaluatePatientListMeasure(evaluationRequest.getPatientIds(), evaluationRequest.getMeasureContext(), evaluationRequest.getEvidenceOptions());
// The default serializer gets into an infinite loop when trying to serialize MeasureReport, so we use the
// HAPI encoder instead.
IParser parser = fhirContext.newJsonParser();
ResponseBuilder responseBuilder = Response.status(Response.Status.OK).header("Content-Type", "application/json").entity(parser.encodeResourceToString(report));
response = responseBuilder.build();
}
} catch (Throwable e) {
// map any exceptions caught into the proper REST error response objects
response = new CohortServiceExceptionMapper().toResponse(e);
} finally {
// Perform api cleanup
Response errorResponse = ServiceBaseUtility.apiCleanup(logger, methodName);
if (errorResponse != null) {
response = errorResponse;
}
}
return response;
}
Aggregations