diff --git a/site/public/order/fcc-carrier-registration/index.html b/site/public/order/fcc-carrier-registration/index.html index c002c1b..78598fb 100644 --- a/site/public/order/fcc-carrier-registration/index.html +++ b/site/public/order/fcc-carrier-registration/index.html @@ -142,6 +142,18 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px + + +
@@ -335,12 +347,12 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px // ── Wizard state ── var wizard = { - serviceTypes: [], customerType: 'retail', + serviceTypes: [], customerType: 'retail', international: false, voiceDelivery: '', infraNeeds: [], broadbandType: '', operatingStates: '', // Derived needsRmd: false, needsCpni: false, needsCalea: false, needsBdc: false, - needsOcn: false, needsStirShaken: false, + needsOcn: false, needsStirShaken: false, needs214: false, // Entity entitySource: 'existing', formationState: '', entityType: 'llc', entityName: '', ein: '', frn: '', legalName: '', @@ -419,6 +431,17 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px document.querySelectorAll('[data-states]').forEach(function(b) { b.classList.remove('selected'); }); btn.classList.add('selected'); wizard.operatingStates = btn.dataset.states; + document.getElementById('q6').classList.remove('hidden'); + }); + }); + + // ── Q6: International services ── + document.querySelectorAll('[data-intl]').forEach(function(btn) { + btn.addEventListener('click', function() { + document.querySelectorAll('[data-intl]').forEach(function(b) { b.classList.remove('selected'); }); + btn.classList.add('selected'); + wizard.international = btn.dataset.intl === 'yes'; + document.getElementById('intl-explain').classList.toggle('hidden', !wizard.international); }); }); @@ -429,14 +452,19 @@ 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 hasRetail = wizard.customerType === 'retail' || wizard.customerType === 'both'; + var wholesaleOnly = wizard.customerType === 'wholesale'; // 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'); + // CALEA: carriers serving end users (retail/both). Wholesale-only "carrier's carrier" + // providers are exempt as "interconnecting carriers" under CALEA. + // Also required for facilities-based broadband serving end users. + wizard.needsCalea = !wholesaleOnly && (hasVoice || (hasBroadband && wizard.broadbandType === 'facilities')); // BDC only for broadband providers with retail end users wizard.needsBdc = hasBroadband && hasRetail; + // International Section 214 authorization + wizard.needs214 = wizard.international; 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; @@ -482,6 +510,7 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px // Add-ons (extra cost) addonRow('STIR/SHAKEN Implementation', 49900, 'stir_shaken', wizard.needsStirShaken); addonRow('NECA OCN Registration', 265000, 'ocn', wizard.needsOcn); + addonRow('International Section 214 Authorization', 149900, 'intl_214', wizard.needs214); addonRow('State PUC Registration (per state)', 39900, 'state_puc', false); updatePrice(); @@ -497,6 +526,7 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px var key = cb.dataset.reg; if (key === 'stir_shaken') { total += 49900; details.push('STIR/SHAKEN: +$499'); } if (key === 'ocn') { total += 265000; details.push('OCN: +$2,650'); } + if (key === 'intl_214') { total += 149900; details.push('Intl 214: +$1,499'); } if (key === 'state_puc') { total += 39900; details.push('State PUC: +$399/state'); } }); @@ -640,6 +670,7 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px ]; if (services.indexOf('stir_shaken') >= 0) items.push({ name: 'STIR/SHAKEN Implementation', price: 49900 }); if (services.indexOf('ocn') >= 0) items.push({ name: 'NECA OCN Registration', price: 265000 }); + if (services.indexOf('intl_214') >= 0) items.push({ name: 'International Section 214 Authorization', price: 149900 }); if (services.indexOf('state_puc') >= 0) items.push({ name: 'State PUC Registration', price: 39900 }); if (wizard.entitySource === 'new_formation') { items.push({ name: 'Business Formation (' + (document.getElementById('new-formation-state').value || '?') + ' ' + document.getElementById('new-entity-type').value.toUpperCase() + ')', price: wizard.formationFee + wizard.stateFee }); @@ -699,6 +730,7 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px service_wizard: { service_types: wizard.serviceTypes, customer_type: wizard.customerType, + international: wizard.international, voice_delivery: wizard.voiceDelivery, infra_needs: wizard.infraNeeds, broadband_type: wizard.broadbandType,