Modeling a CPR procedure


Hi all, I have a project where we need to share information about a CPR procedure, and we want to provide a FHIR resource for this.

I’m creating a model where an Encounter is the container of the procedure, and we record participants there. Then the CPR is a Procedure resource. Inside the CPR we need to record information about chest compressions and shocks given. I think compressions and shocks are actions/activities, and looking through the FHIR specs, it seems the more fit resource for this is also Procedure.

So I have an structure like this:

|_ Procedure (CPR) 1…1
| |_ Procedure (compressions) 0…*
| |_ Procedure (shocks) 0…*
|_ Participation (CPR team) 0…*

What do you think about this model?

Also, I looked for examples related to CPR and couldn’t find any. Any pointers are welcome.


I’m not sure what you mean by “Encounter is the container of the procedure”. Usually in FHIR, one resource doesn’t contain another. While DomainResource.contained does allow nesting resources inside each other, this only happens when a resource can’t stand by itself. For example, you would never create a Practitioner instance that just said “name=‘Dr. Smith’” because that’s not descriptive enough to ever know what instance it’s really talking about. So if all you know is that CPR was done by Dr. Smith, it’d be reasonable to ‘contain’ the Practitioenr resource. However, given that the procedures are the primary thing you’re interested in, presumably you have enough information about them to stand alone.

The actual structure in FHIR would be the Encounter, each of the Procedures and the CareTeam (as well as the Patient, presumably) as stand-alone resources. The procedures would all point to the encounter, the care team and the patient. The child procedures would also point to the parent procedure using “part-of”.

If you have a need to send them all together, you can do so using a RESTful batch or transaction or as part of a FHIR document or message (though those two impose additional overhead and make interoperability harder).


Hi @lloyd,

The context of this is conceptual modeling, trying to match the concepts I have on a system to the FHIR resources. On this context, “Encounter is the container of the procedure”, means that from a hierarchical point of view, the CPR procedure should exist on the context of an encounter. From your message, in the FHIR world this would be CPR.partOf => Encounter. No physical nesting suggested.

“The procedures would all point to the encounter…”, how is that relationship modeled in FHIR?

I can see Procedure.partOf can be a reference to Procedure, MedicationAdministration or Observation, but not to Encounter. BTW I’m using

I agree each is a standalone resource, just need to figure out how everything is linked together.

I will look at Transaction since we might need to send everything together, but that decision will come later, after having a good FHIR model and mapping every data point we have.

BTW, do you have the link to the Batch and Transaction specs? Can’t find it on FHIR 3.0.1, and the search functionality doesn’t seem to work.



Actually, there’s a special link from Procedure to Encounter (called ‘context’ in STU3 and ‘encounter’ in R4).

Thanks for noting that search is broken. I’ve poked someone and hopefully it’ll be running again soon.

The batch and transaction information can be found on the REST page -


Wonderful, Procedure.context is exactly what I was looking for.

About the spec search, it says “Still under development.”

The transaction bundle seems really useful for my use case, thanks for the reference! (I was wrongly trying to find a transaction resource).