Cumuluz Translate Implementation Guide
0.1.0 - ci-build

Cumuluz Translate Implementation Guide - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Getting Started

Getting Started

Run The Service

Local JVM:

./gradlew run

Docker image:

docker run --rm -p 8080:8080 dev.cumuluz.org:5000/cumuluz-public/cumuluz-translate:latest

Local compose:

docker compose up --build

Health check:

curl http://localhost:8080/health

Expected response:

ok

The public prototype deployment uses the same paths at:

  • https://translate-alpha.cumuluz.dev

Pick The Right Operation

Your input Operation
Supported BgZ 2017 STU3 resource POST /fhir/stu3-r4/$transform
Supported PZP 2017 ACP resource POST /fhir/stu3-r4/$transform
Supported STU3 Bundle POST /fhir/stu3-r4/$transform
Supported PZP 2017 ACP resource to Dutch STU3 POST /fhir/stu3/$transform
Supported R4 resource to Dutch STU3 POST /fhir/r4-stu3/$transform
Supported R4 resource to another R4 profile POST /fhir/r4/$transform
Completed supported PZP ACP QuestionnaireResponse POST /fhir/$extract-questionnaire-response
Already translated R4 resource POST /fhir/r4/$validate

The service uses FHIR JSON. application/fhir+json is the preferred content type. Resource translations always use a registered sourceProfile -> logical model -> targetProfile route. Choose the endpoint by source and target FHIR version, then use the translation indexes to confirm the exact profile pair.

First Transform

Submit the included BgZ Patient request:

curl -sS \
  -H 'Content-Type: application/fhir+json' \
  --data @ig/input/examples/patient-transform-request.json \
  'http://localhost:8080/fhir/stu3-r4/$transform'

The response is a FHIR Parameters resource with:

Parameter Meaning
result translated R4 resource or Bundle
targetProfile target profile route that was applied
translationReport mapped, changed, added, and deleted value report
logical intermediate logical model when returnLogical=true
outcome R4 validation diagnostics for enforce or report mode

Minimal Transform Envelope

This shows the envelope only. Real payloads must carry enough data to satisfy the requested source and target profiles.

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "source",
      "resource": {
        "resourceType": "Patient",
        "meta": {
          "profile": [
            "http://nictiz.nl/fhir/StructureDefinition/BgZ-Patient"
          ]
        }
      }
    },
    {
      "name": "sourceProfile",
      "valueCanonical": "http://nictiz.nl/fhir/StructureDefinition/BgZ-Patient"
    },
    {
      "name": "targetProfile",
      "valueCanonical": "http://nictiz.nl/fhir/StructureDefinition/nl-core-Patient"
    },
    {
      "name": "validationMode",
      "valueCode": "none"
    }
  ]
}

First QuestionnaireResponse Extraction

Use extraction when the input is a completed form and one form can produce multiple target resources.

curl -sS \
  -H 'Content-Type: application/fhir+json' \
  -d @questionnaire-response.json \
  'http://localhost:8080/fhir/$extract-questionnaire-response'

Minimal request shape:

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "questionnaireResponse",
      "resource": {
        "resourceType": "QuestionnaireResponse",
        "questionnaire": "https://api.iknl.nl/docs/pzp/r4/Questionnaire/ACP-zib2020",
        "status": "completed"
      }
    },
    {
      "name": "validate",
      "valueBoolean": true
    }
  ]
}

The response is a FHIR Parameters resource with an R4 Bundle result and an OperationOutcome.

First Validation

Use standalone validation when you already have an R4 resource.

curl -sS \
  -H 'Content-Type: application/fhir+json' \
  --data @ig/input/examples/patient-validate-request.json \
  'http://localhost:8080/fhir/r4/$validate'

Validation returns an OperationOutcome. HTTP 200 means the validation operation ran; clients still need to inspect error and fatal issues.

Discovery Checklist

Question Endpoint
Which transform parameters exist? GET /fhir/stu3-r4/OperationDefinition/bgz-transform
Which route pairs are supported? GET /fhir/stu3-r4/translation-index
Which STU3 transform parameters exist? GET /fhir/stu3/OperationDefinition/stu3-transform
Which STU3-to-STU3 route pairs are supported? GET /fhir/stu3/translation-index
Which reverse transform parameters exist? GET /fhir/r4-stu3/OperationDefinition/r4-stu3-transform
Which reverse route pairs are supported? GET /fhir/r4-stu3/translation-index
Which R4 transform parameters exist? GET /fhir/r4/OperationDefinition/r4-transform
Which R4-to-R4 route pairs are supported? GET /fhir/r4/translation-index
Which extraction parameters exist? GET /fhir/OperationDefinition/extract-questionnaire-response
Which R4 profiles can be translated or validated? GET /fhir/r4/metadata

Example Files

File Purpose
ig/input/examples/patient-transform-request.json BgZ Patient transform request
ig/input/examples/patient-transform-response.json matching transform response shape
ig/input/examples/bundle-transform-request.json Bundle transform request with entry target overrides
ig/input/examples/patient-validate-request.json standalone validation request
ig/input/examples/patient-validate-response.json validation success response
ig/input/examples/patient-validate-response-fail.json validation failure response