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.

ChargeItem — The billing entry

Every technical act, consultation, dispensed medication potentially creates a ChargeItem. The finest granularity of FHIR billing, upstream of Invoice and Claim.

Purpose

ChargeItem represents a unitary financial entry for an act, product or service: a consultation coded CPT, a dispensed medication priced, a device implanted, a billed lab test. Each ChargeItem carries a pricing code (CPT, HCPCS, NDC in the US; CCAM, NABM, NGAP in France) and a price.

ChargeItems are posted on an Account, then aggregated in an Invoice or a Claim to the payer.

Key fields

FieldTypeCardinalityRole
identifierIdentifier[]0..*External identifiers (entry number).
definitionUriuri[]0..*Canonical URL of the fee schedule or pricing definition.
definitionCanonicalcanonical(ChargeItemDefinition)[]0..*Reference to a ChargeItemDefinition.
statuscode1..1Mandatory. planned | billable | not-billable | aborted | billed | entered-in-error | unknown.
partOfReference(ChargeItem)[]0..*Parent entry (grouping).
codeCodeableConcept1..1Mandatory. Pricing code.
subjectReference(Patient | Group)1..1Mandatory. Patient concerned.
encounterReference(Encounter)0..1Source encounter.
occurrence[x]dateTime | Period | Timing0..1When the act occurred.
performerBackboneElement[]0..*Performer(s).
performingOrganizationReference(Organization)0..1Performing organization.
quantityQuantity0..1Quantity (# of acts, doses, volumes).
bodysiteCodeableConcept[]0..*Anatomical site.
unitPriceComponentMonetaryComponent0..1Unit price (R5).
totalPriceComponentMonetaryComponent0..1Total price (R5).
overrideReasonCodeableConcept0..1Reason for overriding the default price.
entererReference(Practitioner | PractitionerRole | Organization | Patient | Device | RelatedPerson)0..1Who entered.
enteredDatedateTime0..1Entry date.
reasonCodeableConcept[]0..*Clinical reason (ICD-10, SNOMED).
serviceCodeableReference(DiagnosticReport | ImagingStudy | Immunization | MedicationAdministration | MedicationDispense | Observation | Procedure | SupplyDelivery)[]0..*Justifying clinical resource.
productCodeableReference(Device | Medication | Substance)[]0..*Consumed product.
accountReference(Account)[]0..*Posting account(s).

JSON example

Entry for a 12-lead ECG (CPT 93000) on Peter Chalmers, price $50, posted on Account/example:

json chargeitem-ecg.json
{
  "resourceType": "ChargeItem",
  "id": "example",
  "identifier": [{
    "system": "http://myHospital.com/ChargeItems",
    "value": "654321"
  }],
  "definitionUri": ["http://www.kbv.de/tools/ebm/html/01520_2904360860826220813632.html"],
  "status": "billable",
  "subject": { "reference": "Patient/example" },
  "encounter": { "reference": "Encounter/example" },
  "occurrencePeriod": {
    "start": "2026-05-14T10:00:00+02:00",
    "end": "2026-05-14T10:25:00+02:00"
  },
  "performer": [{
    "function": {
      "coding": [{
        "system": "http://snomed.info/sct",
        "code": "17561000",
        "display": "Cardiologist"
      }]
    },
    "actor": { "reference": "Practitioner/example" }
  }],
  "performingOrganization": { "reference": "Organization/hospital-1" },
  "quantity": { "value": 1 },
  "bodysite": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "80891009",
      "display": "Heart structure"
    }]
  }],
  "code": {
    "coding": [{
      "system": "http://www.ama-assn.org/go/cpt",
      "code": "93000",
      "display": "Electrocardiogram, routine ECG with at least 12 leads"
    }]
  },
  "unitPriceComponent": {
    "type": "base",
    "amount": { "value": 50.00, "currency": "USD" }
  },
  "totalPriceComponent": {
    "type": "base",
    "amount": { "value": 50.00, "currency": "USD" }
  },
  "account": [{ "reference": "Account/example" }]
}

Common pitfalls

  • No pricing code — without a code (CPT, HCPCS, CCAM...), no downstream billing chain can process the entry.
  • No account — an orphan ChargeItem (no account) will never be billed.
  • Price diverging from schedule — always set overrideReason when the unit price differs from the ChargeItemDefinition schedule.
  • Confusion with MedicationDispense — medication consumption is a MedicationDispense; the ChargeItem is the billed entry that references it via product.
  • Quantity 0 or negative — use status=aborted or not-billable instead of absurd quantities.
  • Account — posting account.
  • Invoice — ChargeItem aggregation into a bill.
  • Claim — insurance claim.
  • ChargeItemDefinition — reference fee schedule.
  • Coverage — applicable coverage.