Add CALEA wholesale exemption, international Q6, Section 214 add-on

- CALEA: wholesale-only carriers exempt as "interconnecting carriers" per
  FCC rules. Only retail/both customer types trigger CALEA SSI requirement.
- New Q6 "Will you offer international services?" appears after Q5.
  Triggers International Section 214 Authorization add-on ($1,499).
- Section 214 info box explains when it's required.
- Customer type question (Q1b) is now visually separate from service
  type checkboxes to avoid confusion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
justin 2026-04-29 09:35:27 -05:00
parent 790e980ef8
commit c6863f7eae

View file

@ -142,6 +142,18 @@ select:focus,input:focus{outline:none;border-color:#1e3a5f;box-shadow:0 0 0 2px
<button type="button" class="q-card" data-states="nationwide">Nationwide</button>
</div>
<!-- Q6: International services -->
<div id="q6" class="hidden" style="margin-top:1rem">
<p class="q-label">Will you offer international services?</p>
<p class="q-hint">Calls to/from other countries, international data transit, or serving customers outside the US.</p>
<button type="button" class="q-card" data-intl="yes">Yes — international calling, transit, or foreign customers</button>
<button type="button" class="q-card" data-intl="no">No — domestic US only</button>
<div id="intl-explain" class="info-box hidden">
<strong>International Section 214 Authorization</strong><br>
The FCC requires a separate International Section 214 license to provide telecommunications services between the US and foreign points. This applies to international voice termination, international toll-free, global SIP trunking, and international data transit. Domestic-only carriers do not need this.
</div>
</div>
<div style="margin-top:1rem;text-align:right">
<button class="btn btn-primary" id="btn-next-1">See What You Need &rarr;</button>
</div>
@ -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,