# Method

Produced by `tools/report_np_ratio_facts.py` in the ProfessionLens repository. One
streaming pass over the full file. No sampling anywhere.

## 1. The file

CMS publishes NPPES as a monthly full replacement zip. The September 2026 release,
`NPPES_Data_Dissemination_September_2026_V2.zip`, was fetched on 2026-09-15 through
the Webshare rotating gateway and inflated in flight; the 11.7 GB member
`npidata_pfile_20050523-20260913.csv` was never written to disk. Thirty of its 330
columns were kept as `data/raw/npi_slim_202609.csv`, 9,798,758 rows,
799,860,439 bytes. The file date, and therefore the cut-off for the partial 2026
row, is **2026-09-13**.

Columns used:

- `Entity Type Code` (1 individual, 2 organisation)
- `Healthcare Provider Taxonomy Code_1` to `_15`
- `Healthcare Provider Primary Taxonomy Switch_1` to `_15`
- `Provider Business Practice Location Address State Name` (a two-letter code
  despite the name)
- `Provider Enumeration Date` (MM/DD/YYYY)
- `NPI Deactivation Date`, `NPI Reactivation Date`
- `Provider Sex Code` (M or F)

Taxonomy names come from the NUCC Health Care Provider Taxonomy code set 26.1,
`data/raw/nucc_taxonomy_261.csv`.

Population denominators are Census `NST-EST2024-ALLDATA.csv`, column
`POPESTIMATE2024`, fetched through the same gateway on 2026-09-15 from
https://www2.census.gov/programs-surveys/popest/datasets/2020-2024/state/totals/NST-EST2024-ALLDATA.csv.
Census publishes that file for the 50 states, the District of Columbia and Puerto
Rico only. United States total 2024: 340,110,988, which the 50 states plus DC sum
to exactly.

## 2. Deactivation rule

A record is dropped when it carries an `NPI Deactivation Date` and no
`NPI Reactivation Date`. 355,329 rows are dropped this way.

**Deactivation is tested before entity type.** CMS blanks a record's content when
it deactivates the NPI: 355,329 of the 374,443 rows carrying a deactivation date
have no entity type code and every taxonomy slot empty. A pipeline that filtered
on entity type first would file all 355,329 as organisations and report 1,972,058
organisations as 2,327,387.

The consequence is that exits cannot be attributed. A deactivated record has no
profession and no state left on it, so "physicians who left, by year and state" is
not computable from this file by anyone. It becomes computable only by diffing
monthly snapshots forward from here.

## 3. Primary taxonomy rule

An NPI carries up to 15 taxonomy codes, each with a primary switch. The primary
taxonomy is **the code in the first slot whose switch is `Y`; where no switch is
`Y`, slot 1**. Everything except the any-slot column is computed on the primary
taxonomy alone.

## 4. Profession rules

Applied to the primary taxonomy code:

| Profession | Rule | NUCC 26.1 codes matched | Grouping and classification |
|---|---|---|---|
| Physician | starts `207` or `208` | 229 | Allopathic & Osteopathic Physicians, 28 classifications |
| Nurse practitioner | starts `363L` | 18 | Physician Assistants & Advanced Practice Nursing Providers / Nurse Practitioner |
| Physician assistant | starts `363A` | 3 | Physician Assistants & Advanced Practice Nursing Providers / Physician Assistant |
| Dentist | starts `1223` | 13 | Dental Providers / Dentist |
| Pharmacist | starts `1835`, excluding `183700000X` | 18 | Pharmacy Service Providers / Pharmacist |

`183700000X` is the pharmacy technician code and is excluded. The five sets are
disjoint, because the rule is applied to a single code.

## 5. Wording rule

Everyone counted is an individual **enumerated and not deactivated** in NPPES. An
NPI is issued once, never expires, and is not surrendered when someone retires,
changes career or dies unless a deactivation is filed. These counts therefore
include people who no longer work in the profession. No published sentence built
on this dataset may describe these people as working in the profession today.

## 6. The funnel

| Step | Rows |
|---|---|
| Rows parsed | 9,798,758 |
| Deactivated and not reactivated, dropped | 355,329 |
| Entity type 2, organisations, dropped | 1,972,058 |
| Individuals enumerated and not deactivated | 7,471,371 |
| Primary taxonomy out of scope, dropped | 4,875,638 |
| **Counted individuals** | **2,595,733** |

By profession, with the two geography exceptions:

| Profession | Counted | No usable practice state | Territory or armed forces address |
|---|---|---|---|
| Physicians | 1,247,484 | 1,000 | 14,082 |
| Nurse practitioners | 523,482 | 89 | 536 |
| Physician assistants | 222,307 | 55 | 810 |
| Dentists | 274,523 | 482 | 2,636 |
| Pharmacists | 327,937 | 83 | 3,770 |

Rows with an unparseable enumeration date: 0. Counted individuals with no taxonomy
code at all: 0.

## 7. The student-taxonomy artefact

Medical students now take an NPI while still students, under NUCC code
`390200000X`, grouping "Student, Health Care", classification "Student in an
Organized Health Care Education/Training Program". They switch to a physician
taxonomy years later. A recent enumeration year therefore shows fewer physicians
than it will once those cohorts convert.

| Enumeration year | Primary taxonomy today is the student code | Enumerated that year, physician taxonomy in any slot today |
|---|---|---|
| 2015 | 3,606 | 33,121 |
| 2016 | 4,204 | 32,937 |
| 2017 | 4,685 | 34,707 |
| 2018 | 5,505 | 35,946 |
| 2019 | 7,341 | 36,348 |
| 2020 | 9,885 | 35,142 |
| 2021 | 15,195 | 31,674 |
| 2022 | 21,190 | 27,190 |
| 2023 | 32,568 | 20,427 |
| 2024 | 45,136 | 12,589 |
| 2025 | 52,723 | 10,572 |
| 2026 (partial) | 55,187 | 8,234 |

The bucket grows 14.6-fold from 2015 to 2025 while that year's physician-holders
fall from 33,121 to 10,572.

**Rule:** the nurse practitioner to physician ratio is not published for 2022 or
later. `enumeration_by_year.csv` leaves `nps_per_physician` blank from 2022 on and
flags those rows in `ratio_confounded_by_the_student_taxonomy`;
`enumeration_by_year_state.csv` leaves `nps_per_100_physicians` blank from 2022 on.
The 2020-and-later state cut in `facts.json` spans those cohorts, so it carries the
two counts and their difference and no ratio. Cohorts through about 2019 have
largely converted. The 2021 crossing, 33,493 new NP NPIs against 29,967 new
physician NPIs, is publishable with the student series printed beside it, and with
the statement that the crossing year may move to 2022 or 2023 as recent cohorts
convert.

The same caveat applies to the physician row of `sex_by_year.csv` after 2021,
where it bites far less: the female share is a ratio within a cohort, and there is
no strong reason converted and unconverted students differ on sex.

## 8. The stock gap against FSMB, AANP, NCCPA, ADA and BLS

An NPI is never surrendered when someone stops working, so NPPES counts everyone
enumerated and not deactivated, while the professional bodies count people
currently licensed, certified, active or employed.

| Profession | Ours | Published reference, as it stood on 2026-09-15 | Gap |
|---|---|---|---|
| Physicians | 1,247,484 | 1,082,187 licensed, FSMB Census 2024 | +15.3% |
| Nurse practitioners | 523,482 | more than 461,000, AANP | +13.6% |
| Physician assistants | 222,307 | 201,038 board certified, NCCPA, 2025-12-31 | +10.6% |
| Dentists | 274,523 | 205,088 professionally active, ADA HPI 2025 | +33.9% |
| Pharmacists | 327,937 | 325,200 jobs in 2025, BLS OOH | +0.8% |

Pharmacists match within 0.8%, which is the check that the pipeline is sound.
Dentists diverge most because the ADA's "professionally active" excludes retirees
who keep an NPI.

Per capita, AAMC's 2025 key findings page says the United States had 1,032,365
active physicians in 2024, 304 per 100,000. Ours is 362.4 per 100,000, +19.2%, the
same gap. AAMC's ordering agrees with ours at both ends: it names Massachusetts and
the District of Columbia highest and Idaho lowest; ours are DC 960.1 and
Massachusetts 563.8 at the top, and Mississippi 255.4 with Idaho 255.9 immediately
above it at the bottom. AAMC no longer prints per-state figures on that page; the
state table now lives only in its physician workforce dashboard.

Reference URLs, all verified 200 through the Webshare gateway on 2026-09-15:

- https://www.fsmb.org/advocacy/news-releases/fsmb-physician-census-identifies-1082187-licensed-physicians-in-u.s/
- https://www.aanp.org/about/about-the-american-association-of-nurse-practitioners-aanp/historical-timeline
- https://www.nccpa.net/wp-content/uploads/documents/2025-Statistical-Profile-of-Board-Certified-PAs.pdf
- https://www.ada.org/resources/research/health-policy-institute/dentist-workforce
- https://www.bls.gov/ooh/healthcare/pharmacists.htm
- https://www.aamc.org/data-reports/data/2025-key-findings

## 9. DC and the territories

The District of Columbia is a city. Its 960.1 physicians per 100,000 is 1.7 times
the highest state and reflects a regional hospital and federal workforce counted
against a city's residents. It is present in `providers_by_state.csv` with
`row_type = dc`, it is ranked, and it must be excluded from any sentence that says
"state".

Territory and armed forces rows are in a separate block, `row_type = territory`,
and carry no rank. Census publishes a 2024 population for Puerto Rico only, so the
rest have no per-100,000 figure. `AA`, `AE` and `AP` are military postal codes, not
places. Puerto Rico's 151 nurse practitioners against 12,253 physicians is a real
feature of the territory's licensing, not a parsing error.

A further 1,709 counted individuals carry a practice-location value that is not a
US state code and appear in
the national totals and in no state row.

## 10. Small cells

Any count under 5 is printed as `<5` in every CSV, and any per-100,000 rate whose
numerator is masked is left blank. A true zero prints as `0`.
`enumeration_by_year_state.csv` also blanks `nps_per_100_physicians` wherever the
physician cell is under 5, and on every row for enumeration year 2022 or later.
The rank in `providers_by_state.csv` is computed on the unrounded ratio, so two
states whose printed value is equal are still ordered by the exact one.

## 11. Limitations

1. An NPI is not a licence and never expires. Every count is larger than a count of
   people at work.
2. Cohorts from 2022 on are not settled because of the student taxonomy. Ratios for
   those years are not measurements.
3. Practice-location state is self-reported and is not refreshed when someone
   moves, so a state count is where people last said their practice location was.
4. Primary taxonomy is whatever the person last set. Someone who changed specialty
   and never updated is counted under the old one.
5. Everything except the any-slot column uses the primary taxonomy only. The
   any-slot column runs 1 to 8 per cent above the primary-only count, which bounds
   the effect.
6. Profession is a taxonomy prefix, not a credential. MD against DO, for instance,
   is not in this dataset; it exists only as free text in
   `Provider Credential Text`, which is not used here.
7. 355,329 deactivated records carry no profession and no state and are dropped.
   Exits cannot be attributed from this file.
8. `Provider Sex Code` is binary M or F, with no third value. Rows with no value
   are outside the denominator of `sex_by_year.csv`.
9. Population denominators are the whole resident population, not an adult or an
   insured population.
10. 2026 is partial, to the file date 2026-09-13.
11. 2005 and 2006 are the registry's enrolment years, when the existing workforce
    signed up at once. They are not a flow of new entrants and no time series
    should start there.
12. The pharmacist enumeration series has unexplained jumps in 2010, 2011 and 2020.
    The state counts are unaffected; do not build a time-series sentence on the
    pharmacist row.
13. NPPES has no count of people who never enumerate. Professionals who bill no
    federal health programme may hold no NPI at all, which is why the dentist gap
    runs in both directions rather than only upward.

## Licence

CC BY 4.0. Cite ProfessionLens.
