ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

ImmunizationRecommendation — Immunization forecast

The immunization forecaster: next Tdap booster expected August 2026 based on doses received so far and the active immunization schedule.

Purpose

ImmunizationRecommendation carries vaccination recommendations computed by an engine (forecaster) based on past Immunizations and the active immunization schedule. Each recommendation lists the expected vaccine, target disease, status (due, overdue, contraindicated…), threshold dates, dose number, and supporting Immunizations that justify the calculation.

Key fields

FieldTypeCardinalityRole
identifierIdentifier[]0..*External identifiers.
patientReference(Patient)1..1Mandatory. Patient.
datedateTime1..1Mandatory. Computation date.
authorityReference(Organization)0..1Issuing authority (Santé Publique, CDC, JCVI).
recommendationBackboneElement[]1..*Mandatory. One recommendation per vaccine: vaccineCode, targetDisease, doseNumber, forecastStatus, dateCriterion, description, series, seriesDoses, supportingImmunization, supportingPatientInformation.

JSON example

Tdap booster expected August 2026 (overdue in November):

json immunizationrecommendation-tdap.json
{
  "resourceType": "ImmunizationRecommendation",
  "id": "ir-tdap-booster-001",
  "patient": { "reference": "Patient/doe-john" },
  "date": "2026-05-15",
  "authority": { "reference": "Organization/cdc" },
  "recommendation": [{
    "vaccineCode": [{
      "coding": [{
        "system": "http://hl7.org/fhir/sid/cvx",
        "code": "115",
        "display": "Tdap"
      }]
    }],
    "targetDisease": [{
      "coding": [{
        "system": "http://snomed.info/sct",
        "code": "76902006",
        "display": "Tetanus"
      }]
    }],
    "forecastStatus": {
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/immunization-recommendation-status",
        "code": "due"
      }]
    },
    "dateCriterion": [{
      "code": {
        "coding": [{
          "system": "http://terminology.hl7.org/CodeSystem/immunization-recommendation-date-criterion",
          "code": "due"
        }]
      },
      "value": "2026-08-15"
    }, {
      "code": {
        "coding": [{
          "system": "http://terminology.hl7.org/CodeSystem/immunization-recommendation-date-criterion",
          "code": "overdue"
        }]
      },
      "value": "2026-11-15"
    }],
    "description": "Decennial Tdap booster recommended. Last dose 2016-08-15.",
    "series": "Adult boosters",
    "doseNumber": 4,
    "seriesDoses": 0,
    "supportingImmunization": [
      { "reference": "Immunization/imm-tdap-2016" }
    ]
  }]
}

Common pitfalls

  • No authority — the computation depends on the schedule: France vs US vs Germany. Without an authority, unmanageable.
  • Non-standard statuses — use the official ValueSet: due, overdue, immune, contraindicated, complete.
  • No supportingImmunization — a recommendation without links to past doses is non-auditable.
  • Confusing with Immunization — Immunization = administered dose (past), Recommendation = expected dose (future).
  • No automatic recompute — each new Immunization should trigger recomputation of Recommendations.