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:
parent
790e980ef8
commit
c6863f7eae
1 changed files with 36 additions and 4 deletions
|
|
@ -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 →</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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue