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.

RiskAssessment — Risk evaluation

Framingham, FRAX, CHA2DS2-VASc: every clinical risk calculator materializes in FHIR as a RiskAssessment, with its probabilistic predictions.

Purpose

RiskAssessment carries the result of a risk calculator: probability of a future clinical event, context, time window, recommended mitigation measures. Typical scores: Framingham (10-year infarction), FRAX (osteoporotic fracture), CHA2DS2-VASc (stroke in atrial fibrillation), MELD (liver transplant), APACHE-II (ICU).

Key fields

FieldTypeCardinalityRole
statuscode1..1Mandatory. Uses the observation-status ValueSet: registered, preliminary, final, amended, etc.
methodCodeableConcept0..1Method used (Framingham, FRAX…).
codeCodeableConcept0..1Assessment type.
subjectReference(Patient | Group)1..1Mandatory. Beneficiary.
encounterReference(Encounter)0..1Context.
occurrence[x]dateTime | Period0..1When the assessment was performed.
conditionReference(Condition)0..1Target condition if applicable.
performerReference(Practitioner | PractitionerRole | Device)0..1Calculator (human or algorithm).
reasonCodeableReference[]0..*Reason for the calculation.
basisReference(Any)[]0..*Supporting data: Observations, FamilyMemberHistory, Conditions.
predictionBackboneElement[]0..*Predictions: outcome, probability[x], qualitativeRisk, relativeRisk, when, rationale.
mitigationstring0..1Mitigation measures.

JSON example

10-year Framingham score = 18%, statin recommendation:

json riskassessment-framingham.json
{
  "resourceType": "RiskAssessment",
  "id": "ra-framingham-001",
  "status": "final",
  "method": {
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "439401001",
      "display": "Framingham Risk Score"
    }]
  },
  "subject": { "reference": "Patient/doe-john" },
  "encounter": { "reference": "Encounter/enc-cardio-2026-05-15" },
  "occurrenceDateTime": "2026-05-15T11:00:00+02:00",
  "performer": { "reference": "Practitioner/dr-smith" },
  "basis": [
    { "reference": "Observation/obs-total-cholesterol" },
    { "reference": "Observation/obs-hdl" },
    { "reference": "Observation/obs-systolic-bp" },
    { "reference": "FamilyMemberHistory/father-diabetes" }
  ],
  "prediction": [{
    "outcome": {
      "coding": [{
        "system": "http://snomed.info/sct",
        "code": "22298006",
        "display": "Myocardial infarction"
      }]
    },
    "probabilityDecimal": 0.18,
    "qualitativeRisk": {
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/risk-probability",
        "code": "moderate"
      }]
    },
    "whenPeriod": {
      "start": "2026-05-15",
      "end": "2036-05-15"
    },
    "rationale": "10-year Framingham score: 18%, moderate risk class."
  }],
  "mitigation": "Moderate statin, annual HbA1c follow-up."
}

Common pitfalls

  • probabilityDecimal > 1 — spec requires 0..1, not a percentage. 0.18, not 18.
  • Uncoded method — without a coded method, you can't compare two RiskAssessments or recompute.
  • Empty basis — a score without input data is non-auditable. Critical for medico-legal purposes.
  • No whenPeriod — a risk without a window (10 years, 30 days, lifetime) is ambiguous.
  • Confusing with Observation — Observation = point measure, RiskAssessment = probabilistic prediction.