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
| Field | Type | Cardinality | Role |
|---|---|---|---|
status | code | 1..1 | Mandatory. Uses the observation-status ValueSet: registered, preliminary, final, amended, etc. |
method | CodeableConcept | 0..1 | Method used (Framingham, FRAX…). |
code | CodeableConcept | 0..1 | Assessment type. |
subject | Reference(Patient | Group) | 1..1 | Mandatory. Beneficiary. |
encounter | Reference(Encounter) | 0..1 | Context. |
occurrence[x] | dateTime | Period | 0..1 | When the assessment was performed. |
condition | Reference(Condition) | 0..1 | Target condition if applicable. |
performer | Reference(Practitioner | PractitionerRole | Device) | 0..1 | Calculator (human or algorithm). |
reason | CodeableReference[] | 0..* | Reason for the calculation. |
basis | Reference(Any)[] | 0..* | Supporting data: Observations, FamilyMemberHistory, Conditions. |
prediction | BackboneElement[] | 0..* | Predictions: outcome, probability[x], qualitativeRisk, relativeRisk, when, rationale. |
mitigation | string | 0..1 | Mitigation measures. |
JSON example
10-year Framingham score = 18%, statin recommendation:
{
"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.
Related resources
- Observation — input data.
- FamilyMemberHistory — genetic factors.
- Condition — risk factors.
- ClinicalImpression — associated reasoning.
- CarePlan — mitigation plan.