Practitioner Profile¶
| Canonical | ../StructureDefinition/nexus-emr-core-practitioner |
|---|---|
| Status | draft · 1.26.0 |
| Base | Practitioner (constraint) |
| Source | FSH · JSON |
Represents a human that practices medicine -- the stable clinical identity that an EMR user login resolves to. Practitioner holds identity, demographics, and qualifications, and carries the EMR user-account identifier. The person's role(s) at organizations/locations are represented by PractitionerRole (0..*), which is the tenant-scoped role binding -- NOT the EMR user. A person may work at multiple organizations, each represented by a PractitionerRole.
TypedFhir API / Pydantic schema
The typed accessor surface Practitioner exposes for Practitioner — 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 PractitionerSchema — model_json_schema() is a structured-output / tool definition; instantiating validates an extraction. Generated source.
class PractitionerSchema(BaseModel):
"""AI-facing shape of the Practitioner 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 practitioner's record is in active use: defaults to true. If the "
"practitioner is not in active use, the active element should be false. Default is "
"true if not specified. Note: Set to false for retired, deceased, or otherwise "
"inactive practitioners. Practitioner.active — 0..1"
),
)
name: dict | None = Field(
None,
description=(
"Practitioner name(s). The name(s) associated with the practitioner. At least one "
"official name is required. Note: Practitioners may have multiple names (official, "
"maiden, nickname). The official name should be used for display. Practitioner.name — "
"1..1"
),
)
gender: Literal["female", "male", "other", "unknown"] | None = Field(
None,
description=(
"male | female | other | unknown. Administrative Gender - the gender that the person "
"is considered to have for administration and record keeping purposes. "
"Practitioner.gender — 0..1"
),
)
qualification: dict | None = Field(
None,
description=(
"Regulatory-college registrations held by this practitioner. A registration the "
"practitioner holds with a regulatory college: the licence number, what it is a "
"registration for, and when it lapses. This is the structured home for licensure that "
"`name.suffix` is not. Absence is ordinary and not an error. Administrative users, "
"medical office assistants and external referral targets held as directory entries "
"hold no registration, and a Practitioner with none is complete and conformant. **The "
"list is not guaranteed to be complete.** The EMR manages the registrations it "
"provisions and leaves any others untouched, so a qualification written by another "
"system survives alongside them. Treat what you find as the registrations this record "
"knows about, not as an exhaustive statement of what the practitioner holds. "
"Practitioner.qualification — 0..*"
),
)
communication: Concept | None = Field(
None,
description=(
"A language the practitioner can use in patient communication. A language the "
"practitioner can use in patient communication. Note: The structure aa-BB with this "
"exact casing is one the most widely used notations for locale. However not all "
"systems code this but instead have it as free text. Hence CodeableConcept instead of "
"code as the data type. Practitioner.communication — 0..*. codes (preferred): ar | bn "
"| cs | da | de | de-AT | de-CH | de-DE | …"
),
)