new-site/site/src/lib/line_105_catalog.ts
justin f8cd37ac8c Initial commit — Performance West telecom compliance platform
Includes: API (Express/TypeScript), Astro site, Python workers,
document generators, FCC compliance tools, Canada CRTC formation,
Ansible infrastructure, and deployment scripts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 06:54:22 -05:00

302 lines
9.9 KiB
TypeScript

// Line 105 Category Catalog — FCC Form 499-A Appendix B (2026 edition)
//
// The 2026 instructions enumerate 22 Line 105 categories, grouped in this
// file by how much intake flow each gets:
// * first_class — dedicated intake step, CPNI/CALEA variant, special
// revenue-line logic
// * subtype_of — not a standalone category; marks a CLEC/IXC/Wireless
// with infra_type=reseller/mvno, or Satellite with a
// subservice flag. form_499a.py still ticks the box on
// the form; handler behavior mirrors the parent.
// * flag_only — we tick the Line 105 box correctly, nothing else
// special (revenue flows through standard lines)
// * deprecated — admin ToDo only; we don't support new flows for
// these categories, too rare to prioritize
//
// The catalog drives CategoryStep.astro (ranked multi-select UI) and the
// handler's form-filling logic.
export type Line105Status =
| "first_class"
| "subtype_of"
| "flag_only"
| "deprecated";
export type Line105Grouping =
| "common" // shown expanded by default
| "carrier_grade" // collapsed; "expand to see more carrier types"
| "specialized" // collapsed; satellite / audio-bridging / MSS
| "rare"; // collapsed; "handled manually" warning
export interface Line105Entry {
id: string; // matches form_499a.py handler enum
label: string; // UI label
fcc_box_number: number; // the numbered box on the paper form
status: Line105Status;
grouping: Line105Grouping;
parent?: string; // when status=subtype_of, the parent category id
tooltip: string; // short plain-English help
reseller_offered?: boolean; // show "Do you own facilities or resell?" sub-question
tdm_offered?: boolean; // show "TDM or packet?" under reseller
mvno_offered?: boolean; // show "Do you own spectrum or are you an MVNO?"
}
export const LINE_105_CATALOG: Line105Entry[] = [
// ── COMMON (expanded by default) ───────────────────────────────────────
{
id: "voip_interconnected",
label: "Interconnected VoIP provider",
fcc_box_number: 1,
status: "first_class",
grouping: "common",
tooltip:
"VoIP service that interconnects with the PSTN and allows customers "
+ "to make and receive calls to/from ordinary phone numbers. Safe "
+ "harbor of 64.9% interstate available.",
},
{
id: "voip_non_interconnected",
label: "Non-interconnected (one-way) VoIP",
fcc_box_number: 2,
status: "first_class",
grouping: "common",
tooltip:
"VoIP that only makes OR only receives calls (not both). No safe "
+ "harbor — requires traffic study or actual billing data.",
},
{
id: "clec",
label: "Competitive Local Exchange Carrier (CLEC)",
fcc_box_number: 3,
status: "first_class",
grouping: "common",
tooltip:
"Competitive local carrier offering wireline telephone service in "
+ "direct competition with the incumbent (ILEC).",
reseller_offered: true,
tdm_offered: true,
},
{
id: "ixc",
label: "Interexchange Carrier (IXC)",
fcc_box_number: 7,
status: "first_class",
grouping: "common",
tooltip:
"Long-distance (toll) carrier. Access-charge collection matters here "
+ "— originating access and 8YY revenue belong on Line 404.x.",
reseller_offered: true,
tdm_offered: true,
},
{
id: "wireless",
label: "Wireless / Cellular / PCS (CMRS)",
fcc_box_number: 8,
status: "first_class",
grouping: "common",
tooltip:
"Commercial Mobile Radio Service — cellular, PCS. Safe harbor of "
+ "37.1% interstate. MVNOs are a subtype below.",
mvno_offered: true,
},
// ── CARRIER_GRADE (collapsed) ──────────────────────────────────────────
{
id: "ilec",
label: "Incumbent LEC (ILEC)",
fcc_box_number: 4,
status: "flag_only",
grouping: "carrier_grade",
tooltip:
"Historical local exchange carrier. We don't onboard ILECs — select "
+ "this and our team will reach out.",
},
{
id: "local_reseller",
label: "Local Reseller (TDM era)",
fcc_box_number: 5,
status: "subtype_of",
parent: "clec",
grouping: "carrier_grade",
tooltip:
"Historical category for carriers that buy wholesale from an ILEC "
+ "and rebrand. If this describes you, check CLEC above and set "
+ "infrastructure = reseller.",
},
{
id: "toll_reseller",
label: "Toll Reseller",
fcc_box_number: 6,
status: "subtype_of",
parent: "ixc",
grouping: "carrier_grade",
tooltip:
"Long-distance reseller buying wholesale minutes. Check IXC above "
+ "and set infrastructure = reseller.",
},
{
id: "private_line",
label: "Private Line / Business Data Service",
fcc_box_number: 11,
status: "first_class",
grouping: "carrier_grade",
tooltip:
"Dedicated point-to-point circuits (DS-1/DS-3/Ethernet). Includes "
+ "special-access and BDS services.",
},
{
id: "toll_free",
label: "Toll-Free (8YY) Service",
fcc_box_number: 17,
status: "flag_only",
grouping: "carrier_grade",
tooltip:
"Customer-paid-calling (8YY) service provider. 8YY originating "
+ "access revenue flows through ICC imports.",
},
// ── SPECIALIZED (collapsed) ─────────────────────────────────────────────
{
id: "mvno",
label: "Mobile Virtual Network Operator (MVNO)",
fcc_box_number: 9,
status: "subtype_of",
parent: "wireless",
grouping: "specialized",
tooltip:
"Wireless service that uses another carrier's network (e.g., buying "
+ "from T-Mobile / Verizon / AT&T). Check Wireless above and set "
+ "infrastructure = MVNO.",
},
{
id: "satellite",
label: "Satellite Service",
fcc_box_number: 12,
status: "first_class",
grouping: "specialized",
tooltip:
"Earth-station based satellite service (FSS / BSS). Requires FCC "
+ "Form 312 earth station license.",
},
{
id: "mobile_satellite",
label: "Mobile Satellite Service (MSS)",
fcc_box_number: 21,
status: "subtype_of",
parent: "satellite",
grouping: "specialized",
tooltip:
"Mobile satellite (Iridium, Globalstar, Starlink Commercial mobile). "
+ "Check Satellite above and set service_type=MSS.",
},
{
id: "audio_bridging",
label: "Audio Bridging / Conferencing Service",
fcc_box_number: 16,
status: "first_class",
grouping: "specialized",
tooltip:
"Multi-party audio conferencing provider. FCC clarified in 2021 "
+ "that bridging in interstate commerce is telecom service.",
},
{
id: "fixed_wireless",
label: "Fixed Wireless (non-mobile)",
fcc_box_number: 20,
status: "subtype_of",
parent: "clec",
grouping: "specialized",
tooltip:
"Fixed wireless last-mile local service. Check CLEC above and set "
+ "infrastructure = facilities + wireless_metadata.",
},
{
id: "prepaid_calling_card",
label: "Prepaid Calling Card",
fcc_box_number: 10,
status: "flag_only",
grouping: "specialized",
tooltip:
"Prepaid long-distance cards. Revenue goes on Line 411 with special "
+ "safe-harbor rules.",
},
// ── RARE / DEPRECATED (collapsed with warning) ─────────────────────────
{
id: "payphone",
label: "Payphone Service Provider (PSP)",
fcc_box_number: 13,
status: "deprecated",
grouping: "rare",
tooltip:
"Rare in 2026 — if this describes you, our team will handle manually.",
},
{
id: "osp",
label: "Operator Service Provider (OSP)",
fcc_box_number: 14,
status: "flag_only",
grouping: "rare",
tooltip: "Operator-assisted call service provider.",
},
{
id: "shared_tenant",
label: "Shared Tenant Services",
fcc_box_number: 15,
status: "flag_only",
grouping: "rare",
tooltip: "Shared tenant telecommunications (e.g., building-wide PBX resale).",
},
{
id: "paging",
label: "Paging / Messaging",
fcc_box_number: 18,
status: "deprecated",
grouping: "rare",
tooltip: "Standalone paging — rare in 2026. Our team will handle manually.",
},
{
id: "smr",
label: "Specialized Mobile Radio (SMR)",
fcc_box_number: 19,
status: "deprecated",
grouping: "rare",
tooltip: "Specialized mobile radio dispatch. Rare — our team will handle manually.",
},
{
id: "other",
label: "Other (describe separately)",
fcc_box_number: 22,
status: "flag_only",
grouping: "rare",
tooltip:
"Any category not listed above. Our team will follow up for a "
+ "free-text description required on the form.",
},
];
// Convenience lookups
export const LINE_105_BY_ID: Record<string, Line105Entry> = Object.fromEntries(
LINE_105_CATALOG.map((c) => [c.id, c]),
);
export const LINE_105_GROUPS: Record<Line105Grouping, Line105Entry[]> =
LINE_105_CATALOG.reduce((acc, entry) => {
(acc[entry.grouping] ||= []).push(entry);
return acc;
}, {} as Record<Line105Grouping, Line105Entry[]>);
// Map a category id → the extra Line 105 box that gets auto-ticked because
// of the infra_type/mvno flag. form_499a.py mirrors this logic.
export function derivedLine105Boxes(
categoryId: string,
infra_type?: string,
): number[] {
const boxes: number[] = [];
if (infra_type === "reseller") {
if (categoryId === "clec") boxes.push(5); // local_reseller
if (categoryId === "ixc") boxes.push(6); // toll_reseller
}
if (infra_type === "mvno" && categoryId === "wireless") boxes.push(9);
return boxes;
}