feat(healthcare): prove revalidation is real via official CMS data + self-verify
Skepticism ("is this even real?") is the top objection. The data IS accurate
(verified our subscribers' NPIs match the official CMS Revalidation Due Date List
exactly), so this is a credibility-presentation fix:
1. Email: replace the plain detail row with an "Official record - CMS Medicare
Revalidation Due Date List" card (NPI, legal name, due date, days overdue)
plus a "Verify on CMS.gov" button. Clearly labeled as our presentation of
public CMS data, not a CMS screenshot (no impersonation).
2. API: npi/lookup now pulls the revalidation due date LIVE from the public CMS
dataset (data.cms.gov) instead of the empty local table, and returns a
revalidation{ due_date, source, cms_legal_name, verify_url } proof object.
3. Tool: /tools/npi-compliance-check shows a live "official record" card with a
self-verify link when CMS returns a due date.
Builder now stores reval_due_date/days_overdue as separate attribs for the card
(existing 194 subscribers backfilled from their detail string).
This commit is contained in:
parent
a732423f04
commit
483f185861
4 changed files with 143 additions and 8 deletions
|
|
@ -88,6 +88,9 @@ import Base from "../../layouts/Base.astro";
|
|||
|
||||
<div id="checks-container" class="space-y-4"></div>
|
||||
|
||||
<!-- CMS verification proof (shown when a revalidation due date is found) -->
|
||||
<div id="cms-proof" class="hidden"></div>
|
||||
|
||||
<!-- CTA -->
|
||||
<div id="cta-section" class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm">
|
||||
<div id="cta-content"></div>
|
||||
|
|
@ -267,6 +270,37 @@ import Base from "../../layouts/Base.astro";
|
|||
}
|
||||
|
||||
renderCta(data);
|
||||
|
||||
// CMS verification proof: when the revalidation due date came from the
|
||||
// live public CMS dataset, show it as an "official record" the provider
|
||||
// can independently verify on CMS.gov. This is what converts skeptics.
|
||||
const proof = document.getElementById("cms-proof");
|
||||
const rv = data.revalidation;
|
||||
if (rv && rv.due_date && rv.source === "cms_live") {
|
||||
proof.innerHTML = `
|
||||
<div class="border border-slate-300 rounded-xl overflow-hidden shadow-sm">
|
||||
<div class="bg-slate-800 px-4 py-2">
|
||||
<p class="text-[11px] font-bold tracking-wide uppercase text-slate-300">Official record · CMS Medicare Revalidation Due Date List</p>
|
||||
</div>
|
||||
<div class="bg-slate-50 px-4 py-4">
|
||||
<dl class="text-sm divide-y divide-gray-200">
|
||||
<div class="flex justify-between py-2"><dt class="text-gray-500">Provider / NPI</dt><dd class="font-semibold text-gray-900">${data.npi}</dd></div>
|
||||
${rv.cms_legal_name ? `<div class="flex justify-between py-2"><dt class="text-gray-500">Enrolled as</dt><dd class="font-medium text-gray-900 text-right">${rv.cms_legal_name}</dd></div>` : ""}
|
||||
<div class="flex justify-between py-2"><dt class="text-gray-500">Revalidation due date</dt><dd class="font-bold text-red-700">${rv.due_date}</dd></div>
|
||||
</dl>
|
||||
<p class="mt-3 text-xs text-gray-400 leading-relaxed">Pulled live from the U.S. government’s public CMS dataset just now — this is not our data. Performance West is an independent compliance firm, not affiliated with CMS or Medicare.</p>
|
||||
<a href="${rv.verify_url}" target="_blank" rel="noopener" class="inline-flex items-center gap-1 mt-3 px-4 py-2 bg-white border border-blue-600 text-blue-700 text-sm font-semibold rounded-lg hover:bg-blue-50 transition">
|
||||
Verify this yourself on CMS.gov
|
||||
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>`;
|
||||
proof.classList.remove("hidden");
|
||||
} else {
|
||||
proof.classList.add("hidden");
|
||||
proof.innerHTML = "";
|
||||
}
|
||||
|
||||
document.getElementById("checked-at").textContent = "Checked at " + new Date().toLocaleString();
|
||||
resultsEl.classList.remove("hidden");
|
||||
document.getElementById("results").scrollIntoView({ behavior: "smooth", block: "start" });
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue