Provider identity

OIG List of Excluded Individuals/Entities (LEIE)

drug_silver.dim_oig_leie·live·dim·other·OIG Exclusions & Integrity Agreements
Rows
249,886
Columns
35
History
2026-05-16 (observed_period of the first snapshot; the only true snapshot dimension). Note exclusion_date / effective_period_start range back to 1977-07-01 but that is the OIG action event date, not a load cadence. to 2026-05-18 (observed_period of the current snapshot, is_current=true). Only 2 snapshots exist and they are content-identical.
Card
yesgrain, traps, filters
Typed tools
1

What it is

  1. 1The OIG LEIE (List of Excluded Individuals/Entities) — the federal HHS Office of Inspector General roster of every individual and business currently barred from participating in Medicare, Medicaid, and all federal healthcare programs.
  2. 2In a cost-data substrate it is the compliance/screening dimension: given an NPI or a provider/pharmacy/DME name, it answers "is this party sanctioned/excluded, since when, and under what statute."

Grain

KeyGrain
row_uidvintage_tag
  1. 1One row per excluded party record per source snapshot.
  2. 2The minimal verified unique key across the full 166,452-row table is (row_uid, vintage_tag): row_uid alone yields only 83,226 distinct values because it is a STABLE per-record content hash that repeats once in each of the 2 snapshots.
  3. 3Within a single snapshot (or filtered to is_current=true) the grain is just row_uid = 83,226 distinct = the current LEIE size.
  4. 4Note an excluded PERSON can occupy multiple rows (945 name+dob pairs appear 2x, some 3-4x) — row_uid is per exclusion-action record, not per human.

How to read it

  1. 1Compliance screen against the cost substrate: 'is this provider/pharmacy sanctioned?' Example — SELECT lastname, firstname, busname, npi, state, exclusion_type, exclusion_date FROM drug_silver.dim_oig_leie WHERE is_current = true AND npi = '1972902351'; returns the matching exclusion record (statute + date) if the NPI is on the current LEIE, or empty if clean.
  2. 2To screen a list of NPIs that appear in rate/claims tables, inner-join them to this table on npi WHERE is_current = true to flag excluded billers; supplement with name+state+dob matching because ~90% of LEIE rows have no NPI.

Traps

  1. 1row_uid is NOT a global primary key. It is a stable per-record content hash that repeats once per snapshot, so the full table has 166,452 rows but only 83,226 distinct row_uid. Use (row_uid, vintage_tag) globally, or filter is_current=true and then row_uid is unique.
  2. 2ALWAYS filter is_current=true (or pick one vintage_tag). The table holds 2 snapshots that are CONTENT-IDENTICAL (0 row_uids added/removed between 05-16 and 05-18, same sha256_content_hash). Querying without the filter silently double-counts every excluded party.
  3. 3Periodicity is NOT weekly — the profiler was fooled. It measured effective_period_start, which equals exclusion_date (the OIG action date, 1977→2026, an event spread). The real load cadence lives in observed_period and is only 2 snapshots 2 days apart; today this is effectively a single static full-file load.
  4. 4reinstatement_date is always NULL and effective_period_end is always the sentinel 2099-12-31. This is by LEIE design: reinstated parties are DELETED from the file, not flagged, so the file = currently-excluded only. Never infer 'still excluded' from these columns; presence in the current snapshot IS the exclusion signal.
  5. 5npi is the join key to the cost substrate but is ~90% NULL (only 8,607 of 83,226 rows). Joining exclusions to NPI-keyed rate/claims data will miss most excluded parties; name+state+dob matching is needed for the rest. Also a person can hold multiple rows (same name+dob 2-4x) and a few NPIs map to >1 record, so neither npi nor name+dob is a unique key.
  6. 6exclusion_type is a categorical SSA statute code, not numeric. It mixes 1128a*/1128b* sub-paragraphs with quality codes (1156/1160) and settlement-breach flags ('BRCH SA','BRCH CIA') and a '1128Aa' value — handle as strings and map to OIG's published authority legend (e.g. 1128a1 = program-related conviction, 1128b4 = license revocation).

Columns (35)

ColumnTypeMeaning
row_uidstringDeterministic content hash identifying one exclusion record. UNIQUE within a snapshot (83,226) but NOT globally — the SAME row_uid reappears in every snapshot for an unchanged record. Join to vintage_tag for a global key.
entity_kindstring'individual' (79,825) or 'business' (3,401). Drives which name fields are populated.
lastnamestringExcluded person surname. Populated for ALL individuals, NULL for ALL businesses.
firstnamestringExcluded person first name. Populated for all individuals, NULL for businesses.
midnamestringPerson middle name. Often NULL even for individuals (sparse).
busnamestringExcluded business/organization name (e.g. a pharmacy, DME company, home health agency). Populated for ALL businesses, NULL for ALL individuals. Mutually exclusive with lastname/firstname.
general_categorystringOIG provider-category label, TRUNCATED free text (e.g. 'IND- LIC HC SERV PRO', 'NURSING PROFESSION', 'PHARMACY', 'DME COMPANY', 'HOSPITAL', 'BUS OWNER/EXEC'). Descriptive, not a code system.
specialtystringOIG specialty label, also truncated free text ('NURSE/NURSES AIDE' dominates at 34,537, 'PHARMACIST', 'CHIROPRACTIC', etc.). ~4,079 NULL = unspecified.
upinstringLegacy Unique Physician Identification Number (pre-NPI). Very sparse — ~5,945 individuals, 13 businesses. Deprecated identifier.
npistringNational Provider Identifier of the excluded party — the JOIN key to the rest of the cost substrate. MOSTLY NULL: only 8,607 of 83,226 rows (~10%) carry an NPI; 8,429 distinct (a few NPIs map to >1 record). All populated values are 10 digits; no zero-sentinel. Older exclusions predate NPI, hence the sparsity.
dobdatePerson date of birth, used with name to disambiguate identity. Range 1901-01-01 to 2005-09-11; ~4,263 NULL (all businesses + some individuals).
addressstringLast known street address of the excluded party (free text, sometimes 'C/O ...').
citystringCity of the excluded party.
statestring2-letter US state of the party's address.
zip_codestringZIP code (string, preserves leading zeros).
exclusion_typestringSocial Security Act authority code for the exclusion. Dominant values: 1128b4 (33,136 — license revocation/surrender), 1128a1 (25,732 — program-related conviction), 1128a2/a3/a4, 1128b14 (default on health-ed loan), 1128b8, 1128b1. Plus rare 1156/1160 (quality), 1128Aa, and settlement-breach flags 'BRCH SA'/'BRCH CIA'. NOT a simple numeric — treat as a categorical statute code.
exclusion_datedateDate OIG imposed the exclusion (the event date). Equals effective_period_start for 100% of rows. Range 1977-07-01 to 2026-05-20.
reinstatement_datedateDate the party was reinstated. ALWAYS NULL in this data — by LEIE design, reinstated parties are DELETED from the file rather than flagged, so the file only holds currently-excluded parties. Column carries no signal here.
waiver_datedateDate of an OIG-granted exclusion waiver. Extremely rare (3 rows). Almost always NULL.
waiver_statestringState that requested the waiver. Extremely rare (4 rows). Almost always NULL.
observed_perioddateSnapshot date — when Vlada pulled the LEIE file. THE true time dimension: only 2 values, 2026-05-16 and 2026-05-18. Use this (not exclusion_date) to reason about data vintage.
asserted_atdateDate the record was asserted into the silver table; equals observed_period in this data.
effective_period_startdateBitemporal start of the exclusion's validity = exclusion_date exactly (100% match). Spans 1977→2026; this is an EVENT-date spread, which the profiler misread as 'weekly' periodicity.
effective_period_enddateBitemporal end of validity. ALWAYS the sentinel 2099-12-31 (100%), meaning every exclusion is treated as open-ended/active (it ends only by being removed from the file). It is NOT a real reinstatement date.
cms_vintage_sequenceintVintage sequence counter. Constant = 1 across the whole table.
parse_revisionintParser revision number. Constant = 1.
parser_artifact_hashstringHash of the parser build/artifact. 2 distinct values — the ONLY content column distinguishing the two otherwise-identical snapshots (a parser re-run).
source_urlstringOrigin URL — single value https://oig.hhs.gov/exclusions/downloadables/UPDATED.csv. This 'UPDATED.csv' is the full LEIE database file (complete current roster), not an incremental update.
sha256_content_hashstringSHA-256 of the source CSV bytes. CONSTANT (1 distinct) across the entire table — both snapshots ingested byte-identical source content.
source_idstringLogical source identifier. Constant = 'oig_leie'.
is_currentbooleanBoolean snapshot flag. true = the latest snapshot (2026-05-18, 83,226 rows); false = the prior snapshot (2026-05-16, 83,226 rows). ALWAYS filter is_current=true to get the live LEIE; otherwise every record is doubled.
bronze_object_keystringS3 key of the bronze CSV this row was parsed from. Constant = 1 (single bronze object).
s3_version_idstringS3 object version id of the bronze file. Constant = 1.
vintage_tagstringHuman-readable snapshot label ('oig_leie_2026-05-16' / 'oig_leie_2026-05-18'). The second half of the global grain key; 1:1 with observed_period/is_current here.
drug_source_version_idstringCross-source drug version linkage. 100% NULL in this table — not populated for the LEIE source.

Query it

describe_data_source(source_fqn="drug_silver.dim_oig_leie")     # the card, live
query_substrate(sql="SELECT * FROM drug_silver.dim_oig_leie WHERE row_uid = '<value>' AND vintage_tag = '<value>' LIMIT 100")
ItemValue
Typed tools that read itexcluded_prescriber_payment_screen
Identity keyrow_uid
Joinhow_to_join(source_fqn="drug_silver.dim_oig_leie")
Raw doorAthena (read-only via query_substrate): drug_silver.dim_oig_leie
NoteSource Truth 2026-07-02 prepared historical replay; production historical backfill remains acceptance-gated because full snapshots and monthly supplement events have different semantics.

This page as markdown: /docs-md/data/drug_silver_dim_oig_leie.md · every page in one file: /llms-full.txt