clia: new CLIA certificate renewal service, order page, email template + harvest

Set up the CLIA recurring-renewal vein (every clinical lab renews its CLIA cert
on a 2-year cycle; CMS publishes the full lab file with expiration dates):
- service-catalog: clia-renewal ($449, discountable) + order page (npi-intake
  steps) + intake manifest entry.
- harvest_clia_renewals.py: parse the CMS Provider-of-Services CLIA file, filter
  to labs expiring within a window (default 120d), emit name/address/phone/expiry.
  676k labs -> ~70k expiring in the next ~4 months.
- match_clia_to_nppes.py: CLIA has no NPI/email, so bridge to emailable NPPES
  orgs by normalized name+zip to recover NPI+email (yield TBD; labs that do not
  match still have clean phone+postal for a phone/mail channel).
- hc_clia_renewal.html: warm turnover-safety-net email with the striped official-
  record card (CLIA #, expiry, status), verify-on-CMS-QCOR, founder guarantee
  card, full CAN-SPAM address.
This commit is contained in:
justin 2026-06-13 22:10:51 -05:00
parent d1a9260854
commit 9c7a08f5c9
7 changed files with 398 additions and 0 deletions

View file

@ -150,6 +150,7 @@ export const INTAKE_MANIFEST: Record<string, IntakeStep[]> = {
"npi-revalidation": ["npi-intake", "review", "payment"],
"npi-reactivation": ["npi-intake", "review", "payment"],
"nppes-update": ["npi-intake", "review", "payment"],
"clia-renewal": ["npi-intake", "review", "payment"],
"medicare-enrollment": ["npi-intake", "review", "payment"],
"oig-sam-screening": ["npi-intake", "review", "payment"],
"provider-compliance-bundle": ["npi-intake", "review", "payment"],

View file

@ -27,6 +27,7 @@ export const SERVICE_META: Record<string, ServiceMeta> = {
"cdr-storage-tier1": { name: "CDR Storage Tier 1 (50 GB / 50M calls)", price_cents: 9900 },
"cdr-storage-tier2": { name: "CDR Storage Tier 2 (250 GB / 250M calls)", price_cents: 29900 },
"cdr-storage-tier3": { name: "CDR Storage Tier 3 (1 TB / 1B calls)", price_cents: 79900 },
"clia-renewal": { name: "CLIA Certificate Renewal", price_cents: 44900 },
"cores-frn-registration": { name: "CORES / FRN Registration", price_cents: 14900 },
"corp-formation": { name: "Corporation Formation", price_cents: 24900 },
"cpni-certification": { name: "CPNI Annual Certification", price_cents: 19900 },

View file

@ -0,0 +1,35 @@
---
import Base from "../../layouts/Base.astro";
import VerticalOrderHeader from "../../components/VerticalOrderHeader.astro";
import Wizard from "../../components/intake/Wizard.astro";
import OrderPriceBanner from "../../components/OrderPriceBanner.astro";
import { INTAKE_MANIFEST, SERVICE_META } from "../../lib/intake_manifest";
const slug = "clia-renewal";
const steps = INTAKE_MANIFEST[slug];
const meta = SERVICE_META[slug];
const title = meta ? `Order ${meta.name}` : "Order";
const description = "Renew your CLIA laboratory certificate with CMS before it expires. CLIA certificates run on a 2-year cycle; an expired certificate stops you from legally performing or billing for lab testing.";
---
<Base title={title} description={description}>
<main>
<section class="pw-order-intro">
<h1>{meta?.name}</h1>
<p class="pw-desc">{description}</p>
</section>
<VerticalOrderHeader vertical="healthcare" />
<OrderPriceBanner priceCents={meta?.price_cents} govFeeLabel={meta?.gov_fee_label} serviceSlug={slug} note="Choose card, ACH, or PayPal at payment." />
<Wizard service_slug={slug} steps={steps ?? ["npi-intake", "review", "payment"]} title={meta?.name ?? slug} />
</main>
</Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>