diff --git a/site/public/order/fcc-carrier-registration/index.html b/site/public/order/fcc-carrier-registration/index.html
index 67fad25..2a0fc7f 100644
--- a/site/public/order/fcc-carrier-registration/index.html
+++ b/site/public/order/fcc-carrier-registration/index.html
@@ -87,9 +87,22 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px
@@ -327,7 +340,8 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px
// ── Wizard state ──
var wizard = {
- serviceTypes: [], voiceDelivery: '', infraNeeds: [],
+ serviceTypes: [], voiceMode: 'retail', broadbandMode: 'retail',
+ voiceDelivery: '', infraNeeds: [],
broadbandType: '', operatingStates: '',
// Derived
needsRmd: false, needsCpni: false, needsCalea: false, needsBdc: false,
@@ -356,11 +370,22 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px
document.querySelectorAll('[data-svc]').forEach(function(cb) {
cb.addEventListener('change', function() {
wizard.serviceTypes = Array.from(document.querySelectorAll('[data-svc]:checked')).map(function(c) { return c.dataset.svc; });
- document.getElementById('q2').classList.toggle('hidden', wizard.serviceTypes.indexOf('voice') < 0);
- document.getElementById('q4').classList.toggle('hidden', wizard.serviceTypes.indexOf('broadband') < 0);
- document.getElementById('q5').classList.remove('hidden');
+ var hasVoice = wizard.serviceTypes.indexOf('voice') >= 0;
+ var hasBroadband = wizard.serviceTypes.indexOf('broadband') >= 0;
+ document.getElementById('q1-voice-mode').classList.toggle('hidden', !hasVoice);
+ document.getElementById('q1-broadband-mode').classList.toggle('hidden', !hasBroadband);
+ document.getElementById('q2').classList.toggle('hidden', !hasVoice);
+ document.getElementById('q4').classList.toggle('hidden', !hasBroadband);
+ if (hasVoice || hasBroadband) document.getElementById('q5').classList.remove('hidden');
});
});
+ // Voice/broadband mode radios
+ document.querySelectorAll('input[name=voice_mode]').forEach(function(r) {
+ r.addEventListener('change', function() { wizard.voiceMode = this.value; });
+ });
+ document.querySelectorAll('input[name=broadband_mode]').forEach(function(r) {
+ r.addEventListener('change', function() { wizard.broadbandMode = this.value; });
+ });
// ── Q2: Voice delivery ──
document.querySelectorAll('[data-voice]').forEach(function(btn) {
@@ -408,12 +433,15 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px
var hasVoice = wizard.serviceTypes.indexOf('voice') >= 0;
var hasBroadband = wizard.serviceTypes.indexOf('broadband') >= 0;
- var isWholesale = wizard.serviceTypes.indexOf('wholesale') >= 0;
+ var bbRetail = hasBroadband && (wizard.broadbandMode === 'retail' || wizard.broadbandMode === 'both');
+ // Voice carriers always need RMD + CPNI regardless of retail/wholesale
wizard.needsRmd = hasVoice;
wizard.needsCpni = hasVoice;
+ // CALEA: all voice carriers + facilities-based broadband
wizard.needsCalea = hasVoice || (hasBroadband && wizard.broadbandType === 'facilities');
- wizard.needsBdc = hasBroadband && !isWholesale;
+ // BDC only for broadband with retail end users (not wholesale-only broadband)
+ wizard.needsBdc = bbRetail;
wizard.needsOcn = wizard.infraNeeds.indexOf('lcr') >= 0 || wizard.infraNeeds.indexOf('own_dids') >= 0 ||
wizard.infraNeeds.indexOf('interconnect') >= 0 || wizard.infraNeeds.indexOf('stir_sign') >= 0;
wizard.needsStirShaken = wizard.infraNeeds.indexOf('stir_sign') >= 0 || wizard.needsOcn;
@@ -675,6 +703,8 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px
address_zip: wizard.addrZip,
service_wizard: {
service_types: wizard.serviceTypes,
+ voice_mode: wizard.voiceMode,
+ broadband_mode: wizard.broadbandMode,
voice_delivery: wizard.voiceDelivery,
infra_needs: wizard.infraNeeds,
broadband_type: wizard.broadbandType,