Practitioner phone-number reachability
Can you associate a practitioner in the NDH bulk export with a phone number? A phone can live on the Practitioner record (`Practitioner.telecom`), the role (`PractitionerRole.telecom`), or the referenced location (`Location.telecom`). H43 resolves all three. Result on the 2026-05-08 release: 7,195,270 of 7,196,385 active practitioners (99.98%) carry a phone directly on the Practitioner record; the role/location traversal adds nothing; 1,115 (0.015%) have no phone on any path. A "call this provider" feature can read `Practitioner.telecom` directly.
Headline
Of 7,373,232 active Practitioner resources in the 2026-08-20 NDH release, 7,371,320 (99.974%) can be associated with at least one phone number through FHIR. Where does that phone live? 7,371,292 (99.974%) carry a phone directly on the Practitioner record; 2,103,410 (28.5%) have one on PractitionerRole; 2,015,393 (27.3%) reach one via a traversed Location. 28 of the 7,371,320 are reachable ONLY by traversing role or location (i.e. the Practitioner record itself does not carry a phone). 1,912 (0.026%) have no phone on any of the three resources.
7.4M / 7.4M = 99.97%
unit: count
What this means
Startups + integrators
Read `Practitioner.telecom` directly: 99.98% of active practitioners carry a phone there. Keep the role → location traversal only as a fallback for the ~1,115 records with nothing on file.
FHIR implementers
On-record telecom is phone + fax only in this release. email and url came back empty. Don't assume those channels exist without checking the source.
CMS publishing the data
Practitioner phone coverage is effectively complete. Release-to-release watch items: the Location layer (May deduped −61%) and the empty email/url channels if those are intended to be populated.
Methodology readers
The pre-registered prior (sparse `Practitioner.telecom`, NPPES-style) was wrong; the measurement corrected it. On-record share and any-path share coincide in this release.
Null hypothesis
`Practitioner.telecom` is sparse: fewer than half of active practitioners carry an on-record phone, and reachability requires the PractitionerRole → Location traversal (the NPPES pattern, where practice phone lives on the location). Rejected: 99.98% carry an on-record phone and the traversal adds nothing.
Denominator
All active Practitioner resources in the pinned NDH bulk export (7,196,385 at 2026-05-08, `_active = TRUE`). The numerator (7,195,270) counts those with a `system='phone'` telecom entry on the Practitioner record, on any active PractitionerRole resolving to that practitioner, or on any Location referenced by such a role, unioned, then intersected back to the active set so dangling references drop out.
Data source
BigQuery scan of `cms_npd.practitioner`, `cms_npd.practitioner_role`, and `cms_npd.location`: JSON-extracting the `telecom[]` array on each resource and joining roles to locations via the pipe-joined `_location_ids` reference list. Compute script: `analysis/h43_practitioner_phone.py` (capped at the project default `maximum_bytes_billed` via `bq_job_config()`).
Notes
Three resolution paths, evaluated independently then unioned: (1) Practitioner.telecom (system='phone'); (2) PractitionerRole.telecom on any active role whose practitioner reference resolves to this NPI; (3) Location.telecom on any Location referenced by such a role (PractitionerRole.location -> Location). The union is intersected with the active Practitioner set, so the numerator never exceeds the denominator and dangling references drop out. Per-path reachability at the practitioner level: 7,371,292 via Practitioner, 2,103,410 via PractitionerRole, 2,015,393 via traversed Location. Seven-region overlap across {P, R, L}: P-only 5,250,254, R-only 0, L-only 28, P∩R 105,673, P∩L 17,628, R∩L 0, P∩R∩L 1,997,737, none 1,912. On-record contact points break down as: phone 7,371,292, fax 2,960,152, email 0, url 0; 7,371,452 active practitioners carry any telecom entry at all on the Practitioner resource. Before de-duplication against the active set, 2,103,410 practitioner references are reachable via a role-level phone and 2,015,393 via a location-level phone. Caveat — the May 2026-05-08 release deduped Location resources sharply (-61% vs April), which mechanically lowers path-3 reachability relative to the April release; compare across releases with that in mind. Upstream context: NPPES (the source of ~90% of these fields) keeps practice phone on the practice location, not the individual, so a sparse Practitioner.telecom is expected and is not itself a data quality defect — the operational takeaway is that a 'call this provider' feature must read PractitionerRole/Location, not Practitioner.telecom alone. Full Venn breakdown with raw counts at /api/v1/findings/practitioner-phone-reachability-detail.json.
Get the next finding in your inbox. One email per release, no filler.