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
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | External identifiers (entry number). |
definitionUri | uri[] | 0..* | Canonical URL of the fee schedule or pricing definition. |
definitionCanonical | canonical(ChargeItemDefinition)[] | 0..* | Reference to a ChargeItemDefinition. |
status | code | 1..1 | Mandatory. planned | billable | not-billable | aborted | billed | entered-in-error | unknown. |
partOf | Reference(ChargeItem)[] | 0..* | Parent entry (grouping). |
code | CodeableConcept | 1..1 | Mandatory. Pricing code. |
subject | Reference(Patient | Group) | 1..1 | Mandatory. Patient concerned. |
encounter | Reference(Encounter) | 0..1 | Source encounter. |
occurrence[x] | dateTime | Period | Timing | 0..1 | When the act occurred. |
performer | BackboneElement[] | 0..* | Performer(s). |
performingOrganization | Reference(Organization) | 0..1 | Performing organization. |
quantity | Quantity | 0..1 | Quantity (# of acts, doses, volumes). |
bodysite | CodeableConcept[] | 0..* | Anatomical site. |
unitPriceComponent | MonetaryComponent | 0..1 | Unit price (R5). |
totalPriceComponent | MonetaryComponent | 0..1 | Total price (R5). |
overrideReason | CodeableConcept | 0..1 | Reason for overriding the default price. |
enterer | Reference(Practitioner | PractitionerRole | Organization | Patient | Device | RelatedPerson) | 0..1 | Who entered. |
enteredDate | dateTime | 0..1 | Entry date. |
reason | CodeableConcept[] | 0..* | Clinical reason (ICD-10, SNOMED). |
service | CodeableReference(DiagnosticReport | ImagingStudy | Immunization | MedicationAdministration | MedicationDispense | Observation | Procedure | SupplyDelivery)[] | 0..* | Justifying clinical resource. |
product | CodeableReference(Device | Medication | Substance)[] | 0..* | Consumed product. |
account | Reference(Account)[] | 0..* | Posting account(s). |
JSON example
Entry for a 12-lead ECG (CPT 93000) on Peter Chalmers, price $50, posted on Account/example:
{
"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
overrideReasonwhen 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=abortedornot-billableinstead of absurd quantities.