Skip to content
dev

Validation ​

Validates FHIR resources against a FHIR validation service before further processing.

What it does ​

  • Reads FHIR NDJSON files from the previous step's output
  • Chunks resources into Bundles and sends them to a validation service concurrently
  • Writes per-file OperationOutcome reports (all results) to validation/ directory
  • Stops the pipeline by default when validation errors are found (fail_on_error)

Configuration ​

yaml
services:
  validation:
    url: "http://your-validator:8080/fhir"
    max_concurrent_requests: 4
    bundle_chunk_size_mb: 10
    fail_on_error: true

pipeline:
  enabled_steps:
    - local_import
    - validation
    - dimp

Configuration Options ​

OptionTypeDefaultDescription
urlstring-Validation service URL (required)
max_concurrent_requestsint4Concurrent validation requests
bundle_chunk_size_mbint10Bundle chunk size for batching resources (MB)
fail_on_errorbooltrueStop pipeline when validation finds data quality errors

Error Behavior ​

Aether distinguishes between two types of errors during validation:

Infrastructure errors (connection refused, HTTP 5xx) always fail the step immediately and are retryable.

Data quality errors (invalid FHIR resources) are controlled by fail_on_error:

fail_on_errorBehavior
true (default)Reports are written, pipeline stops after validation completes
falseReports are written, pipeline continues to next step

When fail_on_error stops the pipeline, the validation step itself is still marked as completed — it finished its work. The pipeline stops because the data has quality issues, not because the step failed.

Bundle Chunking ​

Resources are chunked into FHIR collection Bundles before sending to the validator:

  • Resources exceeding the chunk threshold are isolated into their own single-entry chunks
  • Chunks are validated concurrently (up to max_concurrent_requests)
  • Each chunk includes fullUrl on all entries as required by FHIR R4

Output ​

Validation reports are saved to jobs/<job-id>/validation/:

jobs/<job-id>/validation/
├── Patient.validation.ndjson        # OperationOutcome for Patient validation
├── Condition.validation.ndjson      # OperationOutcome for Condition validation
└── Observation.validation.ndjson    # OperationOutcome for Observation validation

Each report file contains one OperationOutcome per line (NDJSON format) for all validated chunks, including successful validations with informational results.

Resumption ​

Validation supports resumption — files with existing reports are skipped on re-run. To re-validate a file, delete its report from the validation/ directory.

Healthcare data integration made simple