From 0f9b4730307cddd2363215ca38a640b03f7c342d Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 2 May 2026 07:28:09 -0500 Subject: [PATCH] Fix BDC check: ask voice first, rename card, support voice-only carriers BDC Voice Subscription filing is required for all retail voice providers (VoIP, CLEC, wireline) even without broadband service. The compliance checker was asking about broadband first, which caused voice-only carriers to overlook their BDC Voice obligation. - Renamed card: "BDC Filing (Broadband + Voice Subscription Data)" - Reversed question order: ask retail voice first, then broadband - "No" for voice now says "No, or wholesale only" (wholesale exempt) - Voice-only retail carriers correctly flagged for BDC Voice filing Co-Authored-By: Claude Opus 4.6 (1M context) --- api/src/routes/fcc-lookup.ts | 2 +- .../tools/fcc-compliance-check/index.html | 34 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/api/src/routes/fcc-lookup.ts b/api/src/routes/fcc-lookup.ts index d0791d3..f4ec8f2 100644 --- a/api/src/routes/fcc-lookup.ts +++ b/api/src/routes/fcc-lookup.ts @@ -691,7 +691,7 @@ router.get("/api/v1/fcc/lookup", async (req, res) => { checks.push({ id: "bdc_filing", - label: "Broadband Data Collection (BDC)", + label: "BDC Filing (Broadband + Voice Subscription Data)", status: bdcStatus, detail: bdcDetail, action_url: null, diff --git a/site/public/tools/fcc-compliance-check/index.html b/site/public/tools/fcc-compliance-check/index.html index 91e317e..80bad32 100644 --- a/site/public/tools/fcc-compliance-check/index.html +++ b/site/public/tools/fcc-compliance-check/index.html @@ -174,48 +174,48 @@ Send reset link var checks = document.getElementById("checks-container"); if (!checks) return; - // BDC toggle — two-step: broadband? then voice? (always both questions) + // BDC toggle — two-step: voice? then broadband? (always both questions) + // Voice-only retail providers also need BDC Voice Subscription filing // Stores result on card as data-bdc-slug for the CTA to pick up if (!checks.querySelector(".pw-bdc-toggle")) { var cards = checks.querySelectorAll(":scope > div"); cards.forEach(function(card) { - if (card.textContent.indexOf("Broadband Data Collection") < 0) return; + if (card.textContent.indexOf("BDC") < 0) return; var detail = card.querySelectorAll("p")[1]; if (!detail) return; var icon = card.querySelector("span"); var flexDiv = card.querySelector(".flex-1"); - function askBroadband() { + function askVoiceFirst() { var q1 = document.createElement("div"); q1.className = "pw-bdc-toggle mt-3 flex items-center gap-2"; q1.innerHTML = - 'During ' + (new Date().getFullYear() - 1) + ', did you provide broadband internet access in the United States through resale or facilities-based service (not as an outside sales agent)?' + - '' + - ''; + 'During ' + (new Date().getFullYear() - 1) + ', did you offer retail voice service (VoIP, CLEC, or wireline) to end users in the United States?' + + '' + + ''; flexDiv.appendChild(q1); q1.addEventListener("click", function(ev) { - var b = ev.target.closest("[data-bb]"); + var b = ev.target.closest("[data-vc]"); if (!b) return; q1.remove(); - askVoice(b.dataset.bb === "yes"); + askBroadband(b.dataset.vc === "yes"); }); } - function askVoice(hasBroadband) { + function askBroadband(hasVoice) { var q2 = document.createElement("div"); q2.className = "pw-bdc-toggle mt-3 flex items-center gap-2"; q2.innerHTML = - (hasBroadband ? '\u2713 Broadband' : '') + - 'During the filing period of ' + (new Date().getFullYear() - 1) + ', did you offer retail voice service to end users in the United States?' + - '' + - ''; + (hasVoice ? '\u2713 Retail voice' : '') + + 'During ' + (new Date().getFullYear() - 1) + ', did you provide broadband internet access in the United States through resale or facilities-based service (not as an outside sales agent)?' + + '' + + ''; flexDiv.appendChild(q2); q2.addEventListener("click", function(ev) { - var b = ev.target.closest("[data-vc]"); + var b = ev.target.closest("[data-bb]"); if (!b) return; q2.remove(); - var hasVoice = b.dataset.vc === "yes"; - finalize(hasBroadband, hasVoice); + finalize(b.dataset.bb === "yes", hasVoice); }); } @@ -251,7 +251,7 @@ Send reset link } } - askBroadband(); + askVoiceFirst(); }); }