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.

PractitionerRole — Practitioner's role in an organisation

The central join of health directories. A Practitioner (the personal identity) can hold several roles in several organisations at several addresses with several specialties. PractitionerRole captures every combination.

Purpose of the resource

A single practitioner — for instance a Parisian cardiologist — can be employed by APHP for consultations at Cochin Hospital three days a week, work in private practice on Tuesdays in Saint-Cloud and supervise a telemedicine platform on Saturday mornings. Three roles, one Practitioner identity. Each role is modelled by a distinct PractitionerRole.

PractitionerRole carries the practice context: employing organisation, physical location(s), specialty(ies), availabilities, role-specific identifiers (employer-side badge number, service code), technical endpoint for communication.

Key fields

FieldTypeCardinalityRole
identifierIdentifier[]0..*Role-specific identifiers.
activeboolean0..1Active role.
periodPeriod0..1Practice period.
practitionerReference(Practitioner)0..1Practitioner.
organizationReference(Organization)0..1Employer organisation.
codeCodeableConcept[]0..*Role (doctor, nurse, midwife, dentist…).
specialtyCodeableConcept[]0..*Specialties.
locationReference(Location)[]0..*Practice locations.
healthcareServiceReference(HealthcareService)[]0..*Attached services.
telecomContactPoint[]0..*Role-specific work contact info.
availableTimeBackboneElement[]0..*Opening hours.
notAvailableBackboneElement[]0..*Absences (leave, training…).
availabilityExceptionsstring0..1Narrative exceptions.
endpointReference(Endpoint)[]0..*Technical endpoints.

JSON example

Dr Jones, cardiologist at Cochin Hospital, consultation Mon-Wed-Fri 9-13:

json practitionerrole-example.json
{
  "resourceType": "PractitionerRole",
  "id": "dr-jones-cardio-cochin",
  "identifier": [{
    "system": "http://annuaire.sante.fr/role",
    "value": "PR-RPPS10003629305-CARDIO-COCHIN"
  }],
  "active": true,
  "period": { "start": "2020-09-01" },
  "practitioner": { "reference": "Practitioner/dr-jones" },
  "organization": { "reference": "Organization/hop-cochin" },
  "code": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/practitioner-role",
      "code": "doctor",
      "display": "Doctor"
    }]
  }],
  "specialty": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "394579002",
      "display": "Cardiology"
    }]
  }],
  "location": [{ "reference": "Location/cochin-cardio-floor" }],
  "healthcareService": [{ "reference": "HealthcareService/cardio-consult" }],
  "telecom": [{
    "system": "phone",
    "value": "+33 1 58 41 22 35",
    "use": "work"
  }, {
    "system": "email",
    "value": "dr.jones@aphp.fr",
    "use": "work"
  }],
  "availableTime": [{
    "daysOfWeek": ["mon", "wed", "fri"],
    "availableStartTime": "09:00:00",
    "availableEndTime": "13:00:00"
  }],
  "notAvailable": [{
    "description": "Annual leave",
    "during": { "start": "2026-07-15", "end": "2026-08-15" }
  }],
  "endpoint": [{ "reference": "Endpoint/aphp-fhir-prod" }]
}

Typical use cases

  • Health directories: ANS Annuaire Santé (RPPS+, ADELI), NPPES (US), NHS Spine, NL.
  • Appointment booking: filter practitioners by specialty + location + time slot.
  • Multi-employer referencing: a practitioner working in academic + private + telemedicine settings.
  • Inter-system communication: message routing via endpoint.
  • Strong prescriber identity: every prescription references the precise PractitionerRole (not just the Practitioner).

Common pitfalls

  • No practitioner: practitioner is 0..1 but in practice always required for business use.
  • Practitioner / PractitionerRole confusion: Practitioner = identity, PractitionerRole = practice. Any contextual data (organisation, location, specialty, availability) goes into PractitionerRole.
  • Duplicate specialty: listing the same specialty in code AND specialty blurs semantics. code = role type, specialty = medical specialty.
  • No period: an expired role left open pollutes directory search. Always close period.end when employment ends.
  • Role phone mixed with personal phone: personal telecoms belong on Practitioner, professional telecoms belong on PractitionerRole.
  • Practitioner — practitioner identity.
  • Organization — employer.
  • Location — practice location.
  • HealthcareService — attached service.
  • Schedule — technical calendar.
  • Endpoint — technical endpoint.

See also: Practitioner — identity and HealthcareService — the service.