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.

Condition — Clinical problem or diagnosis

The problem, diagnosis or clinical concern that motivates or contextualises care. A cornerstone of the FHIR patient record.

Purpose

Condition represents a clinical concern relating to health with a level of granularity such that it can be asserted by a clinician and recorded in the chart. It covers:

  • formal diagnoses (ICD-10, SNOMED CT);
  • symptoms (chest pain, fatigue);
  • chronic health problems (hypertension, diabetes);
  • risk factors (current smoker);
  • provisional or differential diagnoses under investigation.

Granularity distinguishes encounter-bound diagnoses (category=encounter-diagnosis) from the longitudinal patient problem list (category=problem-list-item). The distinction structures the record: an encounter can close its admission diagnosis (status becomes resolved) without removing the underlying chronic problem from the problem list.

Key fields

FieldTypeCardinalityRole
identifierIdentifier[]0..*External identifiers.
clinicalStatusCodeableConcept0..1Clinical state (active, recurrence, relapse, inactive, remission, resolved). Conditional on invariant.
verificationStatusCodeableConcept0..1Verification (unconfirmed, provisional, differential, confirmed, refuted, entered-in-error).
categoryCodeableConcept[]0..*problem-list-item, encounter-diagnosis, health-concern.
severityCodeableConcept0..1SNOMED severity (24484000=Severe, 6736007=Moderate, 255604002=Mild).
codeCodeableConcept0..1Problem code — SNOMED CT and/or ICD-10.
bodySiteCodeableConcept[]0..*Anatomical site (SNOMED).
subjectReference(Patient | Group)1..1Patient — mandatory.
encounterReference(Encounter)0..1Encounter where the condition was noted or recorded.
onset[x]dateTime | Age | Period | Range | string0..1Onset date / age / period.
abatement[x]dateTime | Age | Period | Range | string0..1Resolution date / age. Required when clinicalStatus=resolved.
recordedDatedateTime0..1Chart entry date.
recorderReference(Practitioner | PractitionerRole | Patient | RelatedPerson)0..1Who entered it.
asserterReference(Practitioner | PractitionerRole | Patient | RelatedPerson)0..1Who asserted it.
participantBackboneElement[]0..*Other actors (R5 — partially replaces asserter/recorder).
stageBackboneElement[]0..*Clinical staging (T/N/M in oncology, NYHA in cardio…).
evidenceCodeableReference[]0..*Evidence (Observation, DiagnosticReport).
noteAnnotation[]0..*Free-text comments.

clinicalStatus vs verificationStatus

Classic confusion. clinicalStatus describes where the condition stands in time:

  • active — currently present.
  • recurrence — reappearance after resolution.
  • relapse — relapse after remission.
  • inactive — not currently active, no further qualification.
  • remission — symptoms controlled without definitive cure (oncology).
  • resolved — cured, no more symptoms.

verificationStatus describes diagnostic certainty:

  • unconfirmed — not confirmed.
  • provisional — provisional, awaiting confirmation.
  • differential — differential among others.
  • confirmed — confirmed.
  • refuted — refuted.
  • entered-in-error — data entry error.

JSON example

Angina pectoris I20.9 (ICD-10) / 194828000 (SNOMED CT) — confirmed admission diagnosis, severe, active.

json condition-example.json
{
  "resourceType": "Condition",
  "id": "example",
  "clinicalStatus": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/condition-clinical",
      "code": "active",
      "display": "Active"
    }]
  },
  "verificationStatus": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/condition-ver-status",
      "code": "confirmed",
      "display": "Confirmed"
    }]
  },
  "category": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/condition-category",
      "code": "encounter-diagnosis",
      "display": "Encounter Diagnosis"
    }]
  }],
  "severity": {
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "24484000",
      "display": "Severe"
    }]
  },
  "code": {
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "194828000",
      "display": "Angina (disorder)"
    }, {
      "system": "http://hl7.org/fhir/sid/icd-10",
      "code": "I20.9",
      "display": "Angina pectoris, unspecified"
    }],
    "text": "Angina pectoris"
  },
  "bodySite": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "80891009",
      "display": "Heart structure"
    }]
  }],
  "subject": { "reference": "Patient/example" },
  "encounter": { "reference": "Encounter/example" },
  "onsetDateTime": "2026-05-14T08:00:00+01:00",
  "recordedDate": "2026-05-14T10:30:00+01:00",
  "recorder": { "reference": "Practitioner/example" },
  "asserter": { "reference": "Practitioner/example" }
}
  • code with two codings — SNOMED CT and ICD-10 — to ease interoperability.
  • category = encounter-diagnosis.
  • severity = Severe (SNOMED 24484000).
  • bodySite = Heart structure (SNOMED 80891009).

REST API

  • GET /Condition/example — direct fetch.
  • GET /Condition?patient=example — all conditions for a patient.
  • GET /Condition?patient=example&clinical-status=active&category=problem-list-item — active problem list.
  • GET /Condition?patient=example&code=http://snomed.info/sct|73211009 — diabetes (SNOMED).
  • GET /Condition?encounter=example — conditions tied to an encounter.

Profiles

ProfileRegulatorRestrictions
US Core Condition Problems Health ConcernsHL7 US RealmMust carry category (problem-list-item or health-concern), code ICD-10-CM or SNOMED, subject.
US Core Condition Encounter DiagnosisHL7 US Realmcategory=encounter-diagnosis, encounter mandatory, code ICD-10-CM or SNOMED.
IPS ConditionHL7 + CEN/TC 251Cross-border profile. code must use SNOMED CT International or ICD.
FR Core ConditionANSFrench profile — favours ICD-10 BR + SNOMED CT.

Common pitfalls

  • Invariant con-3: if clinicalStatus=resolved, remission or inactive, abatement[x] must be present. Otherwise validation fails.
  • Invariant con-4: abatement[x] cannot coexist with clinicalStatus=active.
  • verificationStatus=entered-in-error without clinicalStatus: in R5, clinicalStatus MUST NOT be present if the condition is entered-in-error. For other statuses, the opposite (invariant con-5).
  • Inconsistent dual coding: SNOMED 73211009 = Diabetes mellitus, but ICD-10 E10 = Type 1 specifically. Align concepts or flag the mismatch in text.
  • Problem list vs encounter diagnosis confused: missing category makes it impossible to distinguish longitudinal record from point-in-time diagnosis. Always categorise.
  • Onset string vs dateTime: using a string ("child", "teenage years") instead of onsetAge breaks onset-date=ge2020-01-01 queries.
  • Patient — subject.
  • Encounter — context if encounter-diagnosis.
  • Observation — referenced by evidence.
  • DiagnosticReport — referenced by evidence.
  • Procedure, MedicationRequest, CarePlan — can point to Condition via reasonReference.
  • AllergyIntolerance — distinct from Condition: allergies have their own resource.
  • HL7 v2 equivalent — segment DG1 and sometimes IAM (Patient Adverse Reaction) for allergies.