new-site/docs/plans/Plan.md
justin e6a630ada1 healthcare: verify CMS-10114 update path, correct NPI Enumerator address, build CMS-10114 filler
Verified firsthand against the live CMS-10114 (Rev. 02/25, OMB 0938-0931):
- Section 1A confirms paper is valid for Change of Information (#2) AND
  Reactivation (#4), not just initial enumeration. Resolves the UNCERTAIN flag.
- Current mailing address is CMS NPI Enumerator Services, Mail Stop DO-01-51,
  7500 Security Blvd, Baltimore MD 21244. The old Fargo PO Box 6059 is retired;
  corrected in mac_routing.NPI_ENUMERATOR + all docs.
- No electronic no-login equivalent exists for CMS (NPI Registry API is
  read-only; PECOS/NPPES-IA require login), unlike FMCSA's ask.fmcsa ticket form.
  So tiers stay: Standard=paper CMS-10114 (no login), Expedited=NPPES surrogate.

New: cms10114_pdf_filler.py fills the flat official form via text overlay
(reason checkbox + NPI + Section 2A identity + Section 4A cert name + signature
anchor); wired into npi_provider._generate_10114_for_signing for nppes-update.
Signed forms route to the NPI Enumerator via the existing daily batch.

Tests: test_cms10114.py 27/27, test_paper_batch.py 15/15, Astro build 58 pages.
2026-06-07 02:04:41 -05:00

11 KiB
Raw Blame History

Plan

Offer healthcare regulatory filings as a two-tier model (internal mechanics; the "paper" alternative is NEVER surfaced to the client):

  • Standard service (default): we handle the filing end-to-end. Client signs ONE certification and we submit + track to confirmation. (Internally this is the paper path — 855 to the MAC, CMS-10114 to the NPI Enumerator (Baltimore MD) — but we never say "paper" to the client; it's just "we file it for you.")
  • Expedited (faster, framed positively at intake): we ask if they can electronically grant us CMS I&A Surrogate access. We position this as reducing the number of steps on our end so we can bulk-file faster — never as "the alternative is paper." If yes, we file online same-day. If no, we silently fall back to Standard. Same price either way; surrogacy is a delegation, not password sharing.

This pass verifies the no-login paper path per service, reconciles the doc/code contradiction, and makes "standard = paper / expedited = surrogate" consistent everywhere it's surfaced.

Goal

Every healthcare service (federal sold + state/adjacent to add) has a verified Standard (paper, no-login) path and, where a CMS/portal exists, an Expedited (surrogate/delegated) upsell. No surface should ever present surrogate as required when a paper path exists; paper is always the default.

Scope / affected areas

  • api/src/routes/checkout.ts (~L2155-2207) — already has the two-tier copy, BUT treats NPPES update/reactivation as "online-only, surrogate required" with NO standard fallback (NPPES_ONLY_SLUGS, hasNppesOnly). The directive says: give those a Standard paper path too (CMS-10114 to NPI Enumerator (Baltimore MD)) and make surrogate the expedited option, not the only option.
  • scripts/workers/services/npi_provider.pyaccess strings call NPPES update/reactivation "NPPES via CMS I&A surrogate access (online-only)". Must become "Standard: CMS-10114 paper to NPI Enumerator (Baltimore MD), client signs; Expedited: NPPES via I&A surrogate." Also _STANDARD_FILING_SLUGS currently excludes nppes-update (it has no 855) — needs a CMS-10114 paper path instead.
  • scripts/document_gen/templates/cms855_pdf_filler.py — working 855 paper path (fills 855I/B/O/A + cert-page signature anchor). Gap: no CMS-10114 filler for the NPPES standard path → likely a small new cms10114_pdf_filler.py.
  • docs/healthcare-no-login-value-add.md — already documents the CMS-10114 paper path; promote it to the canonical "Standard vs Expedited" matrix.
  • site/src/pages/services/healthcare/{npi-revalidation,medicare-enrollment}.astro — already describe expedited/surrogate; npi-reactivation/nppes-update order pages need the same two-tier framing.
  • site/src/components/intake/steps/NpiIntakeStep.astro + intake manifest — add the surrogate-access question framed positively: "Can you electronically grant us CMS I&A Surrogate access? It lets us bulk-file faster and cuts steps on our end." Optional; declining is fine and never mentions paper. The captured answer routes fulfillment internally (surrogate vs our Standard path).
  • docs/state-healthcare-compliance-opportunities.md + new-sector-compliance- targets.md — extend the two-tier classification to state/adjacent services.

Out of scope this pass: building the actual surrogate Playwright automation (expedited fulfillment can stay human-in-PECOS for now), email-stream machinery, pricing changes.

Approach (concrete ordered steps)

  1. Confirm the CMS-10114 paper path for NPPES data updates AND NPI reactivation (not just initial enumeration): paper CMS-10114 mailed to NPI Enumerator (Baltimore MD), client signature only, no I&A login. Cite the official source. This is what makes NPPES services "Standard, no login" instead of surrogate-required. (We currently have no CMS-10114 PDF.)
  2. Lock the two-tier matrix for the 6 federal services. For each slug record: Standard path (form, mail destination, client's only action = sign / nothing), Expedited path (surrogate scope: PECOS and/or NPPES; what client grants), and whether expedited is even applicable (screening = public, no portal, so no expedited tier). Confirm the 855 wet-signature-cannot-be-delegated caveat applies to Standard; surrogate covers Expedited.
  3. Reconcile checkout.ts. Plan the edit so:
    • NPPES update/reactivation no longer present surrogate as required — remove the "online-only / required for those" language.
    • The surrogate ask is framed as the faster, fewer-steps option, never against a "paper" alternative. Audit/strip the existing copy that leaks mechanics to the client (e.g. "we'll send your CMS-855 to sign", "submit it to your MAC") — replace with neutral "we file it and track it for you."
    • Declining surrogate silently routes to our Standard path; no client-facing mention of paper/MAC/Fargo/form numbers.
  4. Reconcile npi_provider.py. Update access strings + _STANDARD_FILING_SLUGS so nppes-update/reactivation generate the CMS-10114 (or 855 reactivation) paper + e-sign, and the admin todo reflects Standard-default / Expedited-if- surrogate-granted. Mirror the existing 855 generate→upload→esign flow.
  5. MAC + Fargo routing rule. Document which Standard filings go where (855 → provider's MAC by state/jurisdiction; CMS-10114 → NPI Enumerator (Baltimore MD)). Confirm practice_state intake field drives MAC envelope addressing.
  6. Daily batched-mail fulfillment (Standard path). Design the operational flow for paper filings that are signed + pending submission:
    • On each postal working day morning (skip weekends + federal/USPS holidays), gather ALL signed-and-pending paper filings, group by destination agency/address (each MAC, the NPI Enumerator (Baltimore MD), each state Medicaid/CLIA agency).
    • For each destination, merge all that day's documents into one print job plus a cover sheet (Performance West sender, destination agency, date, enclosed-count, per-item list of order# / provider / NPI / form). One Priority Mail envelope per agency → saves postage + handling.
    • Mark each included order as "mailed" with the batch date + tracking #.
    • Build this as a worker (a daily_paper_batch job + a cover-sheet generator in document_gen), mirroring existing worker/cron patterns (infra/cron/*, business_days.py for the working-day calendar). Decide: fully-automated print-to-PDF batch that a human prints + drops, vs. print-API (Lob/Click2Mail) auto-mail. Recommend phase 1 = generate the per-agency batched PDF + cover sheet + manifest for a human to print & mail; phase 2 = wire a print-mail API.
  7. Extend two-tier to state/adjacent services. For each (State Medicaid enroll/reval, CAQH re-attest, payer credentialing, DEA renewal, state CSR, PDMP, CLIA, license renewal+CME) classify:
    • Standard (no-login): paper/mail-in form + one client signature? (e.g. CLIA = CMS-116 paper to state; Medicaid varies — some paper.) These feed the same daily batched-mail flow, grouped by their state agency.
    • Expedited (delegated): the lightest legitimate delegation that avoids a client login — e.g. CAQH "authorized administrator/org" grant, Medicaid "delegated official" on the app, payer EDI/CAQH attestation rights, an LOA. Distinguish "client signs one authorization once" (acceptable, still no-login) from "client must log in / share credentials" (never).
    • Flag services that are genuinely portal-only with NO paper standard so marketing never claims "no logins" for them.
  8. Sequence the rollout by (Standard-feasibility first) × revenue, and write the two doc updates + the small code edits (checkout.ts, npi_provider.py, optional cms10114_pdf_filler.py, and the daily batch worker + cover sheet). All gated on approval.

Validation (how each part is verified)

  • Source-grounded: every Standard (paper) and Expedited (delegation) claim cites the official instruction (CMS-855 instr, CMS-10114 instr, CMS-116 for CLIA, state Medicaid enrollment page, CAQH/payer docs). No unsourced claim.
  • Consistency sweep: after edits, grep for "online-only" / "required" / "surrogate" / "no login" across checkout.ts, npi_provider.py, and the service pages — confirm none present surrogate as required where a paper path exists, and Standard is the default on every surface.
  • Standard path mechanism check: cms855_pdf_filler.fill_cms855("855i",...) still yields filled PDF + cert anchor (read-only smoke render). If CMS-10114 filler is built, same smoke render proves a signable Baltimore-bound PDF.
  • Expedited path check: confirm the surrogate-grant CTA + ia_surrogacy success action + admin todo together let a human file in PECOS/NPPES same-day; surrogate scope wording matches what CMS I&A actually grants (PECOS vs NPPES).
  • Matrix completeness: every service (federal + state) has Standard + (where applicable) Expedited rows with a definite client-action column and source; no "unknown" and no service that's portal-only-but-marketed-as-no-login.

Open questions / decisions

  1. NPPES update/reactivation Standard path: RESOLVED — CMS-10114 paper IS accepted for changes AND reactivation (verified against CMS-10114 Rev. 02/25, Section 1A boxes #2 Change / #4 Reactivation). Mailing address is the NPI Enumerator in Baltimore MD (the old Fargo PO Box 6059 is retired). Both nppes-update and npi-reactivation are Standard-default + surrogate-expedited.
  2. Build cms10114_pdf_filler.py this pass? Needed for a real NPPES Standard path. Recommend: yes if step 1 confirms paper, mirroring the 855 filler; otherwise defer.
  3. State Medicaid scope: classify the mechanism generically + verify top ~5 states by our lead density now; template the rest. (50-state research is a separate effort.)
  4. CAQH / payer credentialing tier: almost certainly Expedited = "client signs one authorization, no login" (category C). Confirm we market that as "no logins for you" with precise wording.
  5. Expedited pricing/positioning: RESOLVED — expedited is not a paid tier and we never expose "paper" as the alternative. It's an intake question framed positively ("electronically granting surrogate access lets us bulk-file faster / fewer steps on our end"). If yes → online; if no → silent Standard fallback. Same price. No price delta, no separate product, no mention of paper.
  6. Client-facing messaging rule: never surface mechanics to the client — no "paper", "CMS-855", "CMS-10114", "MAC", or "Fargo" in any client copy (cold email, order page, checkout, intake). The only client-visible choice is the positive surrogate question; everything else is "we file it for you." This applies to the checkout copy audit in step 3.