Skip to main content

Coverage reconciliation — eligibility ↔ enrollment (#621)

Generated by scripts/record-matcher/coverage-reconciliation.ts. TX-scoped, ≤2000 rows per source, resolved BLIND across sources. Eligibility = NPPES org NPIs + TX HHSC nursing facilities; funding/enrollment = FCC Rural Health Care filings. Each resolved entity is classified by which kinds of source its records spanspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree..

Scored with the Fellegi-SunterFellegi-SunterA probabilistic record linkage model that computes match probability from agreement-level log-likelihood ratios: log₂(m/u) where m is the probability of agreement given a true match and u is the probability of agreement by chance. Mailwoman learns m and u label-free via expectation-maximization. baseline (learnedScorer: false): this is a cross-dataset eligibility ↔ funding join (recallrecallOf the spans whose gold label is a given tag, the fraction the model found. High recall means few misses. Paired with precision to compute F1.-oriented), so the dedup-calibrated GBTGBT (Gradient Boosted Trees). A non-linear machine learning model that combines many weak decision trees into a strong predictor. Mailwoman uses a GBT as an optional learned scorer for single-dataset dedup, improving F1 by 5–7 percentage points over the Fellegi-Sunter baseline. default (#603) — trained to reject the "same place, different operational name" pattern that IS the cross-source signal — is pinned off. See #655.

The reconciliation

bucketentitiesmeaning
enrolled22resolves to an eligibility record AND a funding record
eligible, not enrolled2749eligibility record, no funding record resolved (the anti-join)
funded, not in eligibility set572funding record, no eligibility record resolved

Of the 2771 entities with an eligibility record, 0.8% also resolve to a funding record — a floor, not a coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present. rate (imperfect resolution + any sampling only ever miss links, never invent them). The deliverable is the anti-join SET, not this percentage.

Anti-join spot-check — first 15 "eligible, not enrolled"

entitysourcesnamecoordinate
entity-0txhhsc-nursingavir at elkhart31.6200, -95.5753
entity-1txhhsc-nursingavir at town creek31.4472, -99.3171
entity-2txhhsc-nursinglegacy at town creek31.7456, -95.6477
entity-3txhhsc-nursingtrucare living centers31.7303, -95.6272
entity-5txhhsc-nursingdiboll nursing and rehab31.1707, -94.7889
entity-6txhhsc-nursinghuntington health care and rehabilitation center31.2782, -94.5742
entity-7txhhsc-nursingkennedy health and rehab31.3367, -94.7614
entity-8txhhsc-nursinglarkspur31.3307, -94.7577
entity-9txhhsc-nursingparkwood in the pines31.3206, -94.7290
entity-10txhhsc-nursingpinecrest retirement community31.3158, -94.7317
entity-11txhhsc-nursingsouthland rehabilitation and healthcare center31.3406, -94.6913
entity-12txhhsc-nursinggulf pointe plaza28.0414, -97.0511
entity-13txhhsc-nursingrockport nursing and rehabilitation center28.0462, -97.0510
entity-14txhhsc-nursingpalo duro nursing home35.1075, -101.3628
entity-15txhhsc-nursingjourdanton nursing and rehabilitation28.9137, -98.5411

The caveat that matters

This is a capped sample (≤2000/source), so "eligible, not enrolled" includes entities that ARE enrolled in reality but whose funding record fell outside the sample — a sampling artifact, not a finding. At full scale the anti-join tightens, but it is STILL only a set of candidates. This is a set-membership reconciliation, not a determination. A missing funding record can mean the entity didn't apply, applied under a name we didn't resolve, is ineligible, or any number of things. We produce the reconciled join and surface the candidate set; what a gap means, and whether to act on it, is entirely the data consumer's call. Nothing here is an allegation.