Skip to content

PractitionerRole Profile

Canonical../StructureDefinition/nexus-emr-core-practitionerrole
Statusdraft · 1.26.0
BasePractitionerRole (constraint)
SourceFSH · JSON

Represents a practitioner's role at an organization/location -- the tenant-scoped access/role binding (the "actor"). Links a Practitioner to an Organization and Location(s) and carries the clinical role code(s). A practitioner may have one or more PractitionerRoles, including more than one active at the same organization. This is NOT the EMR user: the user's stable identity is the Practitioner (which carries the user-account identifier). Use PractitionerRole to differentiate providers by role (e.g. list only doctors, route a task to a nurse), not to represent the login.

TypedFhir API / Pydantic schema

The typed accessor surface PractitionerRole exposes for PractitionerRole — generated from this IG's compiled profile; each typed accessor has a validating raw-FHIR twin (xRaw) where marked. The three ports are parity-enforced.

The AI-facing shape: from typed_fhir.facade.generated.schemas import PractitionerRoleSchemamodel_json_schema() is a structured-output / tool definition; instantiating validates an extraction. Generated source.

class PractitionerRoleSchema(BaseModel):
    """AI-facing shape of the PractitionerRole profile: the facade's typed accessor
    surface (curated + salient fields) as a pydantic model. `model_json_schema()` is a
    structured-output / tool schema; instantiating validates an extraction."""

    model_config = ConfigDict(extra="forbid")

    active: bool | None = Field(
        None,
        description=(
            "Whether this role assignment is currently in active use. Whether this "
            "PractitionerRole (role/assignment binding) is currently in active use. When absent, "
            "assume active. Note: If this value is false, you may refer to the period to see when "
            "the role was in active use. If there is no period specified, no inference can be "
            "made about when it was active. PractitionerRole.active — 0..1"
        ),
    )
    period: dict | None = Field(
        None,
        description=(
            "Period during which the practitioner is authorized to act in this role. The period "
            "during which the person is authorized to act in this role at this "
            "organization/location. PractitionerRole.period — 0..1"
        ),
    )
    practitioner: Reference | None = Field(
        None,
        description=(
            "Reference to the practitioner. Reference to the Practitioner resource representing "
            "the person in this role. Note: Must reference a valid NexusEmrCorePractitioner "
            "resource. PractitionerRole.practitioner — 1..1"
        ),
    )
    organization: Reference | None = Field(
        None,
        description=(
            "Organization where the role is performed. The organization where the practitioner "
            "performs this role. Note: Should reference a valid NexusEmrCoreOrganization resource "
            "when known. PractitionerRole.organization — 0..1"
        ),
    )
    code: Concept | None = Field(
        None,
        description=(
            "Clinical role(s) (doctor, nurse, MOA, ...) -- binds the Clinical Roles dropdown. The "
            "clinical role(s) this practitioner performs in this binding (e.g., doctor, nurse, "
            "MOA, receptionist, echo tech). Used throughout the EMR to differentiate providers "
            "(list only doctors, route a task to a nurse, workflow routing echo-tech -> doctor -> "
            "nuclear-doctor). Distinct from access permissions, which are managed in the auth "
            "layer (Auth0), not here. RECOMMENDED: the Nexus clinical-roles ValueSet (extensible "
            "-- add local roles as needed) OPTIONAL: additional standard terminology (SNOMED CT) "
            "or raw EMR codes for source preservation Where this code was mapped from a source "
            "system's own vocabulary, carry the raw coding alongside the mapped one, flagged "
            "`userSelected = true`. See [Carrying the raw "
            "code](../guide/patterns/raw-codes.md). Note: A person may "
            "have more than one role. PractitionerRole.code — 0..*. codes (extensible): admin | "
            "allied-health | biller | doctor | documentator | echo-tech | moa | nuclear-doctor | "
            "…"
        ),
    )
    specialty: Concept | None = Field(
        None,
        description=(
            "Practitioner specialty with raw code support. Specific specialty of the practitioner "
            "(e.g., cardiology, orthopedics, family medicine). RECOMMENDED: SNOMED CT or other "
            "standard terminology when available OPTIONAL: Raw EMR codes for source system "
            "preservation. Note: Where this code was mapped from a source system's own "
            "vocabulary, carry the raw coding alongside the mapped one, flagged `userSelected = "
            "true`. See [Carrying the raw "
            "code](../guide/patterns/raw-codes.md). "
            "PractitionerRole.specialty — 0..*. codes (preferred): 394539006 | 394576009 | "
            "394577000 | 394578005 | 394579002 | 394580004 | 394581000 | 394582007 | …"
        ),
    )
    location: Reference | None = Field(
        None,
        description=(
            "Location(s) where the practitioner provides care. The location(s) at which this "
            "practitioner provides care in this role. Note: Can reference multiple "
            "NexusEmrCoreLocation resources for practitioners working at multiple sites. "
            "PractitionerRole.location — 0..*"
        ),
    )