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.

MedicationStatement — Patient declaration

"I take metformin 1000 mg morning and evening for the past 2 years." Patient self-report, or the clinician's record during pre-admission reconciliation.

Purpose

MedicationStatement represents a declaration about a medication the patient takes, has taken, or is supposed to take. Unlike MedicationAdministration (proof of administration), Statement is an assertion, the typical source for pre-admission reconciliation: the list of current treatments according to the patient, the GP, or the community pharmacy.

Key fields

FieldTypeCardinalityRole
statuscode1..1Mandatory. R5 simplified: recorded, entered-in-error, draft. Clinical status (active/completed) flows via effective[x].
categoryCodeableConcept[]0..*inpatient, outpatient, community, patientspecified.
medicationCodeableReference(Medication)1..1Mandatory. Medication.
subjectReference(Patient | Group)1..1Mandatory. Patient.
encounterReference(Encounter)0..1Context.
effective[x]dateTime | Period | Timing0..1Intake period.
dateAsserteddateTime0..1Entry date.
informationSourceReference(...)0..*Source (Patient, RelatedPerson, Practitioner…).
derivedFromReference(Any)[]0..*Data sources.
reasonCodeableReference[]0..*Indication.
noteAnnotation[]0..*Notes.
relatedClinicalInformationReference(...)[]0..*Linked Conditions or Observations.
renderedDosageInstructionmarkdown0..1Free-text posology.
dosageDosage[]0..*Structured posology.
adherenceBackboneElement0..1Adherence: code + reason.

JSON example

Patient reports taking metformin 1000 mg ×2/day since March 2024:

json medicationstatement-metformin.json
{
  "resourceType": "MedicationStatement",
  "id": "ms-metformin-001",
  "status": "recorded",
  "category": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/medication-statement-category",
      "code": "outpatient"
    }]
  }],
  "medication": {
    "concept": {
      "coding": [{
        "system": "http://www.whocc.no/atc",
        "code": "A10BA02",
        "display": "Metformin"
      }]
    }
  },
  "subject": { "reference": "Patient/doe-john" },
  "effectivePeriod": {
    "start": "2024-03-01"
  },
  "dateAsserted": "2026-05-15",
  "informationSource": [
    { "reference": "Patient/doe-john" }
  ],
  "reason": [{
    "concept": {
      "coding": [{
        "system": "http://snomed.info/sct",
        "code": "44054006",
        "display": "Diabetes mellitus type 2"
      }]
    }
  }],
  "dosage": [{
    "text": "Metformin 1000 mg, twice daily, morning and evening, with meals",
    "timing": {
      "repeat": { "frequency": 2, "period": 24, "periodUnit": "h" }
    },
    "route": {
      "coding": [{
        "system": "http://snomed.info/sct",
        "code": "26643006",
        "display": "Oral route"
      }]
    },
    "doseAndRate": [{
      "doseQuantity": {
        "value": 1000,
        "unit": "mg",
        "system": "http://unitsofmeasure.org",
        "code": "mg"
      }
    }]
  }],
  "adherence": {
    "code": {
      "coding": [{
        "system": "http://hl7.org/fhir/CodeSystem/medication-statement-adherence",
        "code": "taking-as-directed"
      }]
    }
  }
}

Common pitfalls

  • Migration from R4 — R5 simplified status and added typed adherence. Non-trivial refactor.
  • Confusing with MedicationAdministration — Statement is declarative, Administration is executory.
  • No informationSource — where does the info come from? Patient, spouse, transmitted record? Reliability varies.
  • Missing effective[x] — without a period, impossible to know whether treatment is active today.
  • Duplicates with MedicationRequest — Statement is NOT a prescription. Don't create a MedicationStatement from an active MedicationRequest without informational value.