refactor(pricing): single source of truth for the service catalog
Previously two hand-maintained price lists (API COMPLIANCE_SERVICES + site SERVICE_META) drifted apart -- that is how the healthcare +$200 raise charged $399 while displaying $599. Eliminate the drift class entirely: - Move the catalog to api/src/service-catalog.ts (the authority; checkout charges from it). compliance-orders.ts imports it. - scripts/gen-service-catalog.mjs generates site/src/lib/service-catalog.generated.ts from the API source. intake_manifest.ts re-exports SERVICE_META from it, so all ~60 site pages keep working unchanged. - deploy.sh regenerates + drift-checks before building (site build context is ./site only and cannot read ../api, so generation happens host-side). - scripts/check-service-catalog-drift.mjs fails the build if the generated file ever diverges from the API (verified: passes aligned, fails on mismatch). To change a price now, edit ONE file: api/src/service-catalog.ts.
This commit is contained in:
parent
2bba28ae6b
commit
09e21a6c97
7 changed files with 718 additions and 534 deletions
|
|
@ -12,6 +12,7 @@
|
|||
import { Router } from "express";
|
||||
import { pool } from "../db.js";
|
||||
import { randomBytes } from "crypto";
|
||||
import { COMPLIANCE_SERVICES } from "../service-catalog.js";
|
||||
|
||||
const router = Router();
|
||||
|
||||
|
|
@ -34,479 +35,6 @@ function emailError(raw: unknown): string | null {
|
|||
return null;
|
||||
}
|
||||
|
||||
// ── Service catalog (prices in cents) ──────────────────────────────────────
|
||||
const COMPLIANCE_SERVICES: Record<
|
||||
string,
|
||||
{ name: string; price_cents: number; gov_fee_cents?: number; gov_fee_label?: string; erpnext_item: string; discountable: boolean }
|
||||
> = {
|
||||
"fcc-compliance-checkup": {
|
||||
name: "FCC Carrier Compliance Checkup",
|
||||
price_cents: 79900,
|
||||
erpnext_item: "FCC-COMPLIANCE-CHECKUP",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a": {
|
||||
name: "FCC Form 499-A Filing",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "FCC-499A",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a-zero": {
|
||||
name: "FCC Form 499-A Filing (Zero Revenue)",
|
||||
price_cents: 17900,
|
||||
erpnext_item: "FCC-499A-ZERO",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a-499q": {
|
||||
name: "FCC Form 499-A + 499-Q Bundle",
|
||||
price_cents: 59900,
|
||||
erpnext_item: "FCC-499A-499Q",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-full-compliance": {
|
||||
name: "FCC Full Compliance Bundle",
|
||||
price_cents: 149900,
|
||||
erpnext_item: "FCC-FULL-COMPLIANCE",
|
||||
discountable: true,
|
||||
},
|
||||
"cpni-certification": {
|
||||
name: "CPNI Annual Certification",
|
||||
price_cents: 19900,
|
||||
erpnext_item: "CPNI-CERT",
|
||||
discountable: true,
|
||||
},
|
||||
"rmd-filing": {
|
||||
name: "RMD Registration / Recertification",
|
||||
price_cents: 24900,
|
||||
gov_fee_cents: 10000,
|
||||
gov_fee_label: "FCC RMD filing fee",
|
||||
erpnext_item: "RMD-FILING",
|
||||
discountable: true,
|
||||
},
|
||||
"stir-shaken": {
|
||||
name: "STIR/SHAKEN Implementation Assistance",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "STIR-SHAKEN",
|
||||
discountable: true,
|
||||
},
|
||||
"dc-agent": {
|
||||
name: "D.C. Registered Agent (Annual)",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "DC-AGENT",
|
||||
discountable: false,
|
||||
},
|
||||
// BDC filings — the FCC retired Form 477 in Dec 2022 and folded voice
|
||||
// subscription data into BDC. Broadband-only and voice-only SKUs let
|
||||
// carriers pay for just what they need; bdc-filing remains as a bundle.
|
||||
"bdc-broadband": {
|
||||
name: "BDC Broadband Deployment Filing",
|
||||
price_cents: 24900,
|
||||
erpnext_item: "BDC-BROADBAND",
|
||||
discountable: true,
|
||||
},
|
||||
"bdc-voice": {
|
||||
name: "BDC Voice Subscription Filing (formerly Form 477 Voice)",
|
||||
price_cents: 19900,
|
||||
erpnext_item: "BDC-VOICE",
|
||||
discountable: true,
|
||||
},
|
||||
"bdc-filing": {
|
||||
name: "BDC Filing (Broadband + Voice)",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "BDC-FILING",
|
||||
discountable: true,
|
||||
},
|
||||
// New-carrier entry point — register in CORES + obtain FRN
|
||||
"cores-frn-registration": {
|
||||
name: "CORES / FRN Registration",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "CORES-FRN",
|
||||
discountable: true,
|
||||
},
|
||||
// 499-A New Filer Registration (distinct from the annual revenue filing)
|
||||
"fcc-499-initial": {
|
||||
name: "Form 499 Initial Registration",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "FCC-499-INITIAL",
|
||||
discountable: true,
|
||||
},
|
||||
// CALEA System Security & Integrity plan (47 USC 229)
|
||||
"calea-ssi": {
|
||||
name: "CALEA SSI Plan",
|
||||
price_cents: 79900,
|
||||
erpnext_item: "CALEA-SSI",
|
||||
discountable: true,
|
||||
},
|
||||
// 47 CFR § 63.11 Foreign Carrier Affiliation Notification
|
||||
"fcc-63-11-notification": {
|
||||
name: "Foreign Carrier Affiliation Notification (47 CFR § 63.11)",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "FCC-63-11",
|
||||
discountable: true,
|
||||
},
|
||||
// One-click onboarding for a brand-new carrier (composes 5 filings)
|
||||
"new-carrier-bundle": {
|
||||
name: "New Carrier Onboarding Bundle (FRN + 499 Initial + RMD + CPNI + CALEA)",
|
||||
price_cents: 179900,
|
||||
erpnext_item: "NEW-CARRIER-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
// NECA OCN registration — required for VoIP/IPES carriers that need
|
||||
// their own Operating Company Number for STIR/SHAKEN signing, LRN
|
||||
// assignments, or direct numbering authority. NECA charges $550
|
||||
// standard / $675 expedited; we pass through + margin for prep work.
|
||||
"ocn-registration": {
|
||||
name: "NECA OCN + Sponsoring CLEC Agreement",
|
||||
price_cents: 265000,
|
||||
erpnext_item: "OCN-REGISTRATION",
|
||||
discountable: false,
|
||||
},
|
||||
"fcc-499q": {
|
||||
name: "FCC Form 499-Q Quarterly Filing",
|
||||
price_cents: 0, // included in 499-A+Q bundle — not sold standalone
|
||||
erpnext_item: "FCC-499Q",
|
||||
discountable: false,
|
||||
},
|
||||
"fcc-499a-discontinuance": {
|
||||
name: "Form 499-A Discontinuance Filing",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "499A-DISCONTINUANCE",
|
||||
discountable: false,
|
||||
},
|
||||
// Standalone CDR Traffic Study — customers who want the classified
|
||||
// study (unlocks the current reporting year) without buying the
|
||||
// full 499-A filing service. Either slug unlocks the study via the
|
||||
// cdr_study_access_grants paywall hook.
|
||||
"cdr-analysis": {
|
||||
name: "CDR Traffic Study (Annual)",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "CDR-ANALYSIS",
|
||||
discountable: true,
|
||||
},
|
||||
// CDR storage / processing tiers. Annual subscription; renew alongside
|
||||
// the filing. Each tier is additive — customer picks the smallest tier
|
||||
// that covers their worst of (storage bytes, classified rows).
|
||||
"cdr-storage-tier1": {
|
||||
name: "CDR Storage Tier 1 (50 GB / 50M calls)",
|
||||
price_cents: 9900,
|
||||
erpnext_item: "CDR-STORAGE-TIER1",
|
||||
discountable: false,
|
||||
},
|
||||
"cdr-storage-tier2": {
|
||||
name: "CDR Storage Tier 2 (250 GB / 250M calls)",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "CDR-STORAGE-TIER2",
|
||||
discountable: false,
|
||||
},
|
||||
"cdr-storage-tier3": {
|
||||
name: "CDR Storage Tier 3 (1 TB / 1B calls)",
|
||||
price_cents: 79900,
|
||||
erpnext_item: "CDR-STORAGE-TIER3",
|
||||
discountable: false,
|
||||
},
|
||||
// ── Foreign qualification (Certificate of Authority) ─────────────────
|
||||
// Per-state fees are added on top of these flat service fees at order
|
||||
// time (state fee + NWRA RA wholesale, looked up from jurisdictions +
|
||||
// state_filing_fees). Handler fans out one filing per selected state.
|
||||
//
|
||||
// Pricing model:
|
||||
// - `foreign-qualification-single`: flat service fee ($149) + state
|
||||
// fee + optional NWRA RA. One state per order.
|
||||
// - `foreign-qualification-multi`: discounted per-state service fee
|
||||
// ($99) + state fees + RAs. For FCC carriers filing across their
|
||||
// operating territory.
|
||||
"foreign-qualification-single": {
|
||||
name: "Foreign Qualification (One State)",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "FOREIGN-QUAL-SINGLE",
|
||||
discountable: true,
|
||||
},
|
||||
"foreign-qualification-multi": {
|
||||
name: "Foreign Qualification (Multi-State)",
|
||||
price_cents: 9900, // per-state service fee
|
||||
erpnext_item: "FOREIGN-QUAL-MULTI",
|
||||
discountable: true,
|
||||
},
|
||||
// State PUC/PSC Registration — $399 per-state service fee + state
|
||||
// filing fees. Bond procurement coordinated separately.
|
||||
"state-puc": {
|
||||
name: "State PUC/PSC Registration",
|
||||
price_cents: 39900, // per-state service fee
|
||||
erpnext_item: "STATE-PUC",
|
||||
discountable: true,
|
||||
},
|
||||
// ── DOT / FMCSA Motor Carrier Services ──────────────────────────────
|
||||
"mcs150-update": {
|
||||
name: "MCS-150 Biennial Update",
|
||||
price_cents: 3900,
|
||||
erpnext_item: "MCS150-UPDATE",
|
||||
discountable: true,
|
||||
},
|
||||
"boc3-filing": {
|
||||
name: "BOC-3 Process Agent Filing",
|
||||
price_cents: 8900,
|
||||
erpnext_item: "BOC3-FILING",
|
||||
discountable: false, // passthrough cost — $25 to Process Agent LLC
|
||||
},
|
||||
"ucr-registration": {
|
||||
name: "UCR Annual Registration",
|
||||
price_cents: 3900,
|
||||
gov_fee_cents: 4600, // minimum tier ($46 for 0-2 power units)
|
||||
gov_fee_label: "UCR registration fee (tier-based, minimum shown)",
|
||||
erpnext_item: "UCR-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"dot-registration": {
|
||||
name: "New USDOT Number Registration",
|
||||
price_cents: 8900,
|
||||
erpnext_item: "DOT-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"mc-authority": {
|
||||
name: "MC Operating Authority Application",
|
||||
price_cents: 19900, // $199 + $300 FMCSA gov fee
|
||||
gov_fee_cents: 30000, // $300 FMCSA application fee
|
||||
gov_fee_label: "FMCSA operating authority application fee",
|
||||
erpnext_item: "MC-AUTHORITY",
|
||||
discountable: false, // $300 FMCSA gov fee makes this non-discountable
|
||||
},
|
||||
"usdot-reactivation": {
|
||||
name: "USDOT Number Reactivation",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "USDOT-REACTIVATION",
|
||||
discountable: true,
|
||||
},
|
||||
"emergency-temporary-authority": {
|
||||
name: "Emergency Temporary Authority (ETA)",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "EMERGENCY-TEMP-AUTH",
|
||||
discountable: false, // urgent service, premium pricing
|
||||
},
|
||||
"dot-drug-alcohol": {
|
||||
name: "DOT Drug & Alcohol Compliance Program",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "DOT-DRUG-ALCOHOL",
|
||||
discountable: true, // instant PDF binder we generate — our own deliverable, no passthrough cost
|
||||
},
|
||||
"dot-audit-prep": {
|
||||
name: "New Entrant Safety Audit Preparation",
|
||||
price_cents: 39900,
|
||||
erpnext_item: "DOT-AUDIT-PREP",
|
||||
discountable: true,
|
||||
},
|
||||
"dot-full-compliance": {
|
||||
name: "DOT Full Compliance Bundle",
|
||||
price_cents: 39900, // $399 — includes MCS-150+BOC-3+UCR+D&A+Audit ($775 individual)
|
||||
erpnext_item: "DOT-FULL-COMPLIANCE",
|
||||
discountable: true,
|
||||
},
|
||||
"carrier-closeout": {
|
||||
name: "Trucking Wrap-Up (USDOT Shutdown)",
|
||||
price_cents: 19900, // $199 — final MCS-150 (out of business) + MC revoke + UCR cancel + state account closures
|
||||
erpnext_item: "CARRIER-CLOSEOUT",
|
||||
discountable: true,
|
||||
},
|
||||
"entity-dissolution": {
|
||||
name: "Business Entity Dissolution (LLC/Corp)",
|
||||
price_cents: 4900, // $49 add-on to the wrap-up — LLC/Corp dissolution + final report; state filing fees billed separately
|
||||
gov_fee_label: "State dissolution filing fee (varies by state, billed at cost)",
|
||||
erpnext_item: "ENTITY-DISSOLUTION",
|
||||
discountable: true,
|
||||
},
|
||||
// ── State-Level Trucking Compliance ──────────────────────────────────
|
||||
// For these services the price_cents is our flat SERVICE fee only. The
|
||||
// actual state government charges (apportioned IRP registration, IFTA decal
|
||||
// fees, weight-distance/HUT account setup, permit/decal costs) vary by the
|
||||
// carrier's fleet weight, mileage, and base state, so they are passed
|
||||
// through AT COST and billed separately once the state issues the invoice —
|
||||
// we never mark them up. The gov_fee_label is shown to the customer at
|
||||
// checkout so the pass-through is disclosed up front.
|
||||
"irp-registration": {
|
||||
name: "IRP Registration Assistance",
|
||||
price_cents: 10900, // + state fees (apportioned registration billed at cost)
|
||||
gov_fee_label: "Apportioned IRP registration & plate fees (state, by jurisdictions + weight, billed at cost)",
|
||||
erpnext_item: "IRP-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"ifta-application": {
|
||||
name: "IFTA Application + Decals",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "IFTA license & decal fees (state, billed at cost)",
|
||||
erpnext_item: "IFTA-APPLICATION",
|
||||
discountable: true,
|
||||
},
|
||||
"ifta-quarterly": {
|
||||
name: "IFTA Quarterly Filing",
|
||||
price_cents: 10900,
|
||||
gov_fee_label: "IFTA taxes due (remitted to the state at cost based on your mileage)",
|
||||
erpnext_item: "IFTA-QUARTERLY",
|
||||
discountable: true,
|
||||
},
|
||||
"or-weight-mile-tax": {
|
||||
name: "Oregon Weight-Mile Tax Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "Oregon weight-mile tax account & bond/deposit (state, billed at cost)",
|
||||
erpnext_item: "OR-WEIGHT-MILE-TAX",
|
||||
discountable: true,
|
||||
},
|
||||
"ny-hut-registration": {
|
||||
name: "NY Highway Use Tax Registration",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "NY HUT certificate & decal fees (state, billed at cost)",
|
||||
erpnext_item: "NY-HUT-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"ky-kyu-registration": {
|
||||
name: "KY Weight-Distance Tax Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "KYU weight-distance account fees (state, billed at cost)",
|
||||
erpnext_item: "KY-KYU-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"nm-weight-distance": {
|
||||
name: "NM Weight-Distance Tax Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "NM weight-distance permit & account fees (state, billed at cost)",
|
||||
erpnext_item: "NM-WEIGHT-DISTANCE",
|
||||
discountable: true,
|
||||
},
|
||||
"ct-highway-use-fee": {
|
||||
name: "CT Highway Use Fee Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "CT Highway Use Fee registration (state, billed at cost)",
|
||||
erpnext_item: "CT-HIGHWAY-USE-FEE",
|
||||
discountable: true,
|
||||
},
|
||||
"ca-mcp-carb": {
|
||||
name: "California MCP + CARB Compliance",
|
||||
price_cents: 22900, // $229 + state fees (CA is more complex: MCP + CARB)
|
||||
gov_fee_label: "CA MCP permit fee + CARB/Clean Truck Check fees (state, by fleet size, billed at cost)",
|
||||
erpnext_item: "CA-MCP-CARB",
|
||||
discountable: true,
|
||||
},
|
||||
"state-dot-registration": {
|
||||
name: "State DOT Registration",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "State DOT/intrastate registration fee (state, billed at cost)",
|
||||
erpnext_item: "STATE-DOT-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"intrastate-authority": {
|
||||
name: "Intrastate Operating Authority",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "State intrastate authority filing fee (state, billed at cost)",
|
||||
erpnext_item: "INTRASTATE-AUTHORITY",
|
||||
discountable: true,
|
||||
},
|
||||
"osow-permit": {
|
||||
name: "Oversize/Overweight Permit",
|
||||
price_cents: 10900, // + state permit fees
|
||||
gov_fee_label: "State oversize/overweight permit fees (per trip/route, billed at cost)",
|
||||
erpnext_item: "OSOW-PERMIT",
|
||||
discountable: true,
|
||||
},
|
||||
"state-trucking-bundle": {
|
||||
name: "State Compliance Bundle",
|
||||
price_cents: 49900, // $499 — IRP+IFTA+weight tax+intrastate ($796 individual)
|
||||
gov_fee_label: "State registration, decal & tax fees for each included filing (billed at cost)",
|
||||
erpnext_item: "STATE-TRUCKING-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
// ── Hazmat / Emissions ───────────────────────────────────────────────
|
||||
"hazmat-phmsa": {
|
||||
name: "PHMSA Hazmat Registration",
|
||||
price_cents: 14900, // $149 admin-assisted; PHMSA gov fee billed at cost
|
||||
gov_fee_label: "PHMSA registration fee ($25 + $250-$3,000 processing, by business size, billed at cost)",
|
||||
erpnext_item: "HAZMAT-PHMSA",
|
||||
discountable: true,
|
||||
},
|
||||
"state-emissions": {
|
||||
name: "State Clean-Truck / Emissions Compliance",
|
||||
price_cents: 10900, // $109 + state fees — NY/CO/MD/NJ/MA clean-truck / ACT advisory + registration assist
|
||||
erpnext_item: "STATE-EMISSIONS",
|
||||
discountable: true,
|
||||
},
|
||||
|
||||
// ── Corporate / Entity Services ──
|
||||
"annual-report-filing": {
|
||||
name: "Annual Report / Franchise Tax Filing",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "ANNUAL-REPORT",
|
||||
discountable: true,
|
||||
},
|
||||
"registered-agent": {
|
||||
name: "Registered Agent Service (1 Year)",
|
||||
price_cents: 9900,
|
||||
erpnext_item: "REGISTERED-AGENT",
|
||||
discountable: true,
|
||||
},
|
||||
"entity-reinstatement": {
|
||||
name: "Entity Reinstatement",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "ENTITY-REINSTATEMENT",
|
||||
discountable: true,
|
||||
},
|
||||
"virtual-mailbox": {
|
||||
name: "Virtual Mailbox (1 Year)",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "VIRTUAL-MAILBOX",
|
||||
discountable: true,
|
||||
},
|
||||
"ein-application": {
|
||||
name: "EIN Application (IRS SS-4)",
|
||||
price_cents: 7900,
|
||||
erpnext_item: "EIN-APPLICATION",
|
||||
discountable: true,
|
||||
},
|
||||
"entity-upgrade-bundle": {
|
||||
name: "Entity Upgrade Package (Sole Prop → LLC)",
|
||||
price_cents: 59900,
|
||||
erpnext_item: "ENTITY-UPGRADE-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
// ── Healthcare / NPI compliance ──────────────────────────────────────
|
||||
// CMS/NPPES provider compliance. Handlers are review-staged (a human
|
||||
// files in PECOS/NPPES) — same safety default as the FCC auto-filing
|
||||
// toggle. HIPAA is intentionally out of scope (separate specialty).
|
||||
// Flagship = npi-revalidation (CMS 5-yr Medicare revalidation, dateable
|
||||
// overdue signal from the free CMS revalidation list).
|
||||
"npi-revalidation": {
|
||||
name: "Medicare PECOS Revalidation Filing",
|
||||
price_cents: 59900,
|
||||
erpnext_item: "NPI-REVALIDATION",
|
||||
discountable: true,
|
||||
},
|
||||
"npi-reactivation": {
|
||||
name: "NPI Reactivation",
|
||||
price_cents: 44900,
|
||||
erpnext_item: "NPI-REACTIVATION",
|
||||
discountable: true,
|
||||
},
|
||||
"nppes-update": {
|
||||
name: "NPPES Data Update / Attestation",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "NPPES-UPDATE",
|
||||
discountable: true,
|
||||
},
|
||||
"medicare-enrollment": {
|
||||
name: "Medicare Enrollment (PECOS)",
|
||||
price_cents: 69900,
|
||||
erpnext_item: "MEDICARE-ENROLLMENT",
|
||||
discountable: true,
|
||||
},
|
||||
"oig-sam-screening": {
|
||||
name: "OIG/SAM Exclusion Screening (Annual)",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "OIG-SAM-SCREENING",
|
||||
discountable: false,
|
||||
},
|
||||
"provider-compliance-bundle": {
|
||||
name: "Provider Compliance Bundle (Annual)",
|
||||
price_cents: 89900,
|
||||
erpnext_item: "PROVIDER-COMPLIANCE-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
};
|
||||
|
||||
// ── Intake validation map ─────────────────────────────────────────────
|
||||
//
|
||||
|
|
|
|||
494
api/src/service-catalog.ts
Normal file
494
api/src/service-catalog.ts
Normal file
|
|
@ -0,0 +1,494 @@
|
|||
/**
|
||||
* Canonical compliance service catalog -- SINGLE SOURCE OF TRUTH for pricing.
|
||||
*
|
||||
* This is the authority: checkout charges order.service_fee_cents which is set
|
||||
* from this catalog at order-creation time. The public site does NOT keep its
|
||||
* own copy; site/src/lib/service-catalog.generated.ts is generated from this
|
||||
* file by scripts/gen-service-catalog.mjs (run automatically before site build),
|
||||
* and intake_manifest.ts re-exports it as SERVICE_META. To change a price, edit
|
||||
* ONLY this file.
|
||||
*
|
||||
* Keep slug set in sync with:
|
||||
* - api/src/routes/compliance-orders.ts REQUIRED_FIELDS (intake validation)
|
||||
* - scripts/workers/services/__init__.py SERVICE_HANDLERS (fulfillment)
|
||||
*/
|
||||
|
||||
export interface ComplianceService {
|
||||
name: string;
|
||||
price_cents: number;
|
||||
gov_fee_cents?: number;
|
||||
gov_fee_label?: string;
|
||||
erpnext_item: string;
|
||||
discountable: boolean;
|
||||
}
|
||||
|
||||
export const COMPLIANCE_SERVICES: Record<string, ComplianceService> = {
|
||||
"fcc-compliance-checkup": {
|
||||
name: "FCC Carrier Compliance Checkup",
|
||||
price_cents: 79900,
|
||||
erpnext_item: "FCC-COMPLIANCE-CHECKUP",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a": {
|
||||
name: "FCC Form 499-A Filing",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "FCC-499A",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a-zero": {
|
||||
name: "FCC Form 499-A Filing (Zero Revenue)",
|
||||
price_cents: 17900,
|
||||
erpnext_item: "FCC-499A-ZERO",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-499a-499q": {
|
||||
name: "FCC Form 499-A + 499-Q Bundle",
|
||||
price_cents: 59900,
|
||||
erpnext_item: "FCC-499A-499Q",
|
||||
discountable: true,
|
||||
},
|
||||
"fcc-full-compliance": {
|
||||
name: "FCC Full Compliance Bundle",
|
||||
price_cents: 149900,
|
||||
erpnext_item: "FCC-FULL-COMPLIANCE",
|
||||
discountable: true,
|
||||
},
|
||||
"cpni-certification": {
|
||||
name: "CPNI Annual Certification",
|
||||
price_cents: 19900,
|
||||
erpnext_item: "CPNI-CERT",
|
||||
discountable: true,
|
||||
},
|
||||
"rmd-filing": {
|
||||
name: "RMD Registration / Recertification",
|
||||
price_cents: 24900,
|
||||
gov_fee_cents: 10000,
|
||||
gov_fee_label: "FCC RMD filing fee",
|
||||
erpnext_item: "RMD-FILING",
|
||||
discountable: true,
|
||||
},
|
||||
"stir-shaken": {
|
||||
name: "STIR/SHAKEN Implementation Assistance",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "STIR-SHAKEN",
|
||||
discountable: true,
|
||||
},
|
||||
"dc-agent": {
|
||||
name: "D.C. Registered Agent (Annual)",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "DC-AGENT",
|
||||
discountable: false,
|
||||
},
|
||||
// BDC filings — the FCC retired Form 477 in Dec 2022 and folded voice
|
||||
// subscription data into BDC. Broadband-only and voice-only SKUs let
|
||||
// carriers pay for just what they need; bdc-filing remains as a bundle.
|
||||
"bdc-broadband": {
|
||||
name: "BDC Broadband Deployment Filing",
|
||||
price_cents: 24900,
|
||||
erpnext_item: "BDC-BROADBAND",
|
||||
discountable: true,
|
||||
},
|
||||
"bdc-voice": {
|
||||
name: "BDC Voice Subscription Filing (formerly Form 477 Voice)",
|
||||
price_cents: 19900,
|
||||
erpnext_item: "BDC-VOICE",
|
||||
discountable: true,
|
||||
},
|
||||
"bdc-filing": {
|
||||
name: "BDC Filing (Broadband + Voice)",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "BDC-FILING",
|
||||
discountable: true,
|
||||
},
|
||||
// New-carrier entry point — register in CORES + obtain FRN
|
||||
"cores-frn-registration": {
|
||||
name: "CORES / FRN Registration",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "CORES-FRN",
|
||||
discountable: true,
|
||||
},
|
||||
// 499-A New Filer Registration (distinct from the annual revenue filing)
|
||||
"fcc-499-initial": {
|
||||
name: "Form 499 Initial Registration",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "FCC-499-INITIAL",
|
||||
discountable: true,
|
||||
},
|
||||
// CALEA System Security & Integrity plan (47 USC 229)
|
||||
"calea-ssi": {
|
||||
name: "CALEA SSI Plan",
|
||||
price_cents: 79900,
|
||||
erpnext_item: "CALEA-SSI",
|
||||
discountable: true,
|
||||
},
|
||||
// 47 CFR § 63.11 Foreign Carrier Affiliation Notification
|
||||
"fcc-63-11-notification": {
|
||||
name: "Foreign Carrier Affiliation Notification (47 CFR § 63.11)",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "FCC-63-11",
|
||||
discountable: true,
|
||||
},
|
||||
// One-click onboarding for a brand-new carrier (composes 5 filings)
|
||||
"new-carrier-bundle": {
|
||||
name: "New Carrier Onboarding Bundle (FRN + 499 Initial + RMD + CPNI + CALEA)",
|
||||
price_cents: 179900,
|
||||
erpnext_item: "NEW-CARRIER-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
// NECA OCN registration — required for VoIP/IPES carriers that need
|
||||
// their own Operating Company Number for STIR/SHAKEN signing, LRN
|
||||
// assignments, or direct numbering authority. NECA charges $550
|
||||
// standard / $675 expedited; we pass through + margin for prep work.
|
||||
"ocn-registration": {
|
||||
name: "NECA OCN + Sponsoring CLEC Agreement",
|
||||
price_cents: 265000,
|
||||
erpnext_item: "OCN-REGISTRATION",
|
||||
discountable: false,
|
||||
},
|
||||
"fcc-499q": {
|
||||
name: "FCC Form 499-Q Quarterly Filing",
|
||||
price_cents: 0, // included in 499-A+Q bundle — not sold standalone
|
||||
erpnext_item: "FCC-499Q",
|
||||
discountable: false,
|
||||
},
|
||||
"fcc-499a-discontinuance": {
|
||||
name: "Form 499-A Discontinuance Filing",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "499A-DISCONTINUANCE",
|
||||
discountable: false,
|
||||
},
|
||||
// Standalone CDR Traffic Study — customers who want the classified
|
||||
// study (unlocks the current reporting year) without buying the
|
||||
// full 499-A filing service. Either slug unlocks the study via the
|
||||
// cdr_study_access_grants paywall hook.
|
||||
"cdr-analysis": {
|
||||
name: "CDR Traffic Study (Annual)",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "CDR-ANALYSIS",
|
||||
discountable: true,
|
||||
},
|
||||
// CDR storage / processing tiers. Annual subscription; renew alongside
|
||||
// the filing. Each tier is additive — customer picks the smallest tier
|
||||
// that covers their worst of (storage bytes, classified rows).
|
||||
"cdr-storage-tier1": {
|
||||
name: "CDR Storage Tier 1 (50 GB / 50M calls)",
|
||||
price_cents: 9900,
|
||||
erpnext_item: "CDR-STORAGE-TIER1",
|
||||
discountable: false,
|
||||
},
|
||||
"cdr-storage-tier2": {
|
||||
name: "CDR Storage Tier 2 (250 GB / 250M calls)",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "CDR-STORAGE-TIER2",
|
||||
discountable: false,
|
||||
},
|
||||
"cdr-storage-tier3": {
|
||||
name: "CDR Storage Tier 3 (1 TB / 1B calls)",
|
||||
price_cents: 79900,
|
||||
erpnext_item: "CDR-STORAGE-TIER3",
|
||||
discountable: false,
|
||||
},
|
||||
// ── Foreign qualification (Certificate of Authority) ─────────────────
|
||||
// Per-state fees are added on top of these flat service fees at order
|
||||
// time (state fee + NWRA RA wholesale, looked up from jurisdictions +
|
||||
// state_filing_fees). Handler fans out one filing per selected state.
|
||||
//
|
||||
// Pricing model:
|
||||
// - `foreign-qualification-single`: flat service fee ($149) + state
|
||||
// fee + optional NWRA RA. One state per order.
|
||||
// - `foreign-qualification-multi`: discounted per-state service fee
|
||||
// ($99) + state fees + RAs. For FCC carriers filing across their
|
||||
// operating territory.
|
||||
"foreign-qualification-single": {
|
||||
name: "Foreign Qualification (One State)",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "FOREIGN-QUAL-SINGLE",
|
||||
discountable: true,
|
||||
},
|
||||
"foreign-qualification-multi": {
|
||||
name: "Foreign Qualification (Multi-State)",
|
||||
price_cents: 9900, // per-state service fee
|
||||
erpnext_item: "FOREIGN-QUAL-MULTI",
|
||||
discountable: true,
|
||||
},
|
||||
// State PUC/PSC Registration — $399 per-state service fee + state
|
||||
// filing fees. Bond procurement coordinated separately.
|
||||
"state-puc": {
|
||||
name: "State PUC/PSC Registration",
|
||||
price_cents: 39900, // per-state service fee
|
||||
erpnext_item: "STATE-PUC",
|
||||
discountable: true,
|
||||
},
|
||||
// ── DOT / FMCSA Motor Carrier Services ──────────────────────────────
|
||||
"mcs150-update": {
|
||||
name: "MCS-150 Biennial Update",
|
||||
price_cents: 3900,
|
||||
erpnext_item: "MCS150-UPDATE",
|
||||
discountable: true,
|
||||
},
|
||||
"boc3-filing": {
|
||||
name: "BOC-3 Process Agent Filing",
|
||||
price_cents: 8900,
|
||||
erpnext_item: "BOC3-FILING",
|
||||
discountable: false, // passthrough cost — $25 to Process Agent LLC
|
||||
},
|
||||
"ucr-registration": {
|
||||
name: "UCR Annual Registration",
|
||||
price_cents: 3900,
|
||||
gov_fee_cents: 4600, // minimum tier ($46 for 0-2 power units)
|
||||
gov_fee_label: "UCR registration fee (tier-based, minimum shown)",
|
||||
erpnext_item: "UCR-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"dot-registration": {
|
||||
name: "New USDOT Number Registration",
|
||||
price_cents: 8900,
|
||||
erpnext_item: "DOT-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"mc-authority": {
|
||||
name: "MC Operating Authority Application",
|
||||
price_cents: 19900, // $199 + $300 FMCSA gov fee
|
||||
gov_fee_cents: 30000, // $300 FMCSA application fee
|
||||
gov_fee_label: "FMCSA operating authority application fee",
|
||||
erpnext_item: "MC-AUTHORITY",
|
||||
discountable: false, // $300 FMCSA gov fee makes this non-discountable
|
||||
},
|
||||
"usdot-reactivation": {
|
||||
name: "USDOT Number Reactivation",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "USDOT-REACTIVATION",
|
||||
discountable: true,
|
||||
},
|
||||
"emergency-temporary-authority": {
|
||||
name: "Emergency Temporary Authority (ETA)",
|
||||
price_cents: 49900,
|
||||
erpnext_item: "EMERGENCY-TEMP-AUTH",
|
||||
discountable: false, // urgent service, premium pricing
|
||||
},
|
||||
"dot-drug-alcohol": {
|
||||
name: "DOT Drug & Alcohol Compliance Program",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "DOT-DRUG-ALCOHOL",
|
||||
discountable: true, // instant PDF binder we generate — our own deliverable, no passthrough cost
|
||||
},
|
||||
"dot-audit-prep": {
|
||||
name: "New Entrant Safety Audit Preparation",
|
||||
price_cents: 39900,
|
||||
erpnext_item: "DOT-AUDIT-PREP",
|
||||
discountable: true,
|
||||
},
|
||||
"dot-full-compliance": {
|
||||
name: "DOT Full Compliance Bundle",
|
||||
price_cents: 39900, // $399 — includes MCS-150+BOC-3+UCR+D&A+Audit ($775 individual)
|
||||
erpnext_item: "DOT-FULL-COMPLIANCE",
|
||||
discountable: true,
|
||||
},
|
||||
"carrier-closeout": {
|
||||
name: "Trucking Wrap-Up (USDOT Shutdown)",
|
||||
price_cents: 19900, // $199 — final MCS-150 (out of business) + MC revoke + UCR cancel + state account closures
|
||||
erpnext_item: "CARRIER-CLOSEOUT",
|
||||
discountable: true,
|
||||
},
|
||||
"entity-dissolution": {
|
||||
name: "Business Entity Dissolution (LLC/Corp)",
|
||||
price_cents: 4900, // $49 add-on to the wrap-up — LLC/Corp dissolution + final report; state filing fees billed separately
|
||||
gov_fee_label: "State dissolution filing fee (varies by state, billed at cost)",
|
||||
erpnext_item: "ENTITY-DISSOLUTION",
|
||||
discountable: true,
|
||||
},
|
||||
// ── State-Level Trucking Compliance ──────────────────────────────────
|
||||
// For these services the price_cents is our flat SERVICE fee only. The
|
||||
// actual state government charges (apportioned IRP registration, IFTA decal
|
||||
// fees, weight-distance/HUT account setup, permit/decal costs) vary by the
|
||||
// carrier's fleet weight, mileage, and base state, so they are passed
|
||||
// through AT COST and billed separately once the state issues the invoice —
|
||||
// we never mark them up. The gov_fee_label is shown to the customer at
|
||||
// checkout so the pass-through is disclosed up front.
|
||||
"irp-registration": {
|
||||
name: "IRP Registration Assistance",
|
||||
price_cents: 10900, // + state fees (apportioned registration billed at cost)
|
||||
gov_fee_label: "Apportioned IRP registration & plate fees (state, by jurisdictions + weight, billed at cost)",
|
||||
erpnext_item: "IRP-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"ifta-application": {
|
||||
name: "IFTA Application + Decals",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "IFTA license & decal fees (state, billed at cost)",
|
||||
erpnext_item: "IFTA-APPLICATION",
|
||||
discountable: true,
|
||||
},
|
||||
"ifta-quarterly": {
|
||||
name: "IFTA Quarterly Filing",
|
||||
price_cents: 10900,
|
||||
gov_fee_label: "IFTA taxes due (remitted to the state at cost based on your mileage)",
|
||||
erpnext_item: "IFTA-QUARTERLY",
|
||||
discountable: true,
|
||||
},
|
||||
"or-weight-mile-tax": {
|
||||
name: "Oregon Weight-Mile Tax Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "Oregon weight-mile tax account & bond/deposit (state, billed at cost)",
|
||||
erpnext_item: "OR-WEIGHT-MILE-TAX",
|
||||
discountable: true,
|
||||
},
|
||||
"ny-hut-registration": {
|
||||
name: "NY Highway Use Tax Registration",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "NY HUT certificate & decal fees (state, billed at cost)",
|
||||
erpnext_item: "NY-HUT-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"ky-kyu-registration": {
|
||||
name: "KY Weight-Distance Tax Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "KYU weight-distance account fees (state, billed at cost)",
|
||||
erpnext_item: "KY-KYU-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"nm-weight-distance": {
|
||||
name: "NM Weight-Distance Tax Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "NM weight-distance permit & account fees (state, billed at cost)",
|
||||
erpnext_item: "NM-WEIGHT-DISTANCE",
|
||||
discountable: true,
|
||||
},
|
||||
"ct-highway-use-fee": {
|
||||
name: "CT Highway Use Fee Setup",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "CT Highway Use Fee registration (state, billed at cost)",
|
||||
erpnext_item: "CT-HIGHWAY-USE-FEE",
|
||||
discountable: true,
|
||||
},
|
||||
"ca-mcp-carb": {
|
||||
name: "California MCP + CARB Compliance",
|
||||
price_cents: 22900, // $229 + state fees (CA is more complex: MCP + CARB)
|
||||
gov_fee_label: "CA MCP permit fee + CARB/Clean Truck Check fees (state, by fleet size, billed at cost)",
|
||||
erpnext_item: "CA-MCP-CARB",
|
||||
discountable: true,
|
||||
},
|
||||
"state-dot-registration": {
|
||||
name: "State DOT Registration",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "State DOT/intrastate registration fee (state, billed at cost)",
|
||||
erpnext_item: "STATE-DOT-REGISTRATION",
|
||||
discountable: true,
|
||||
},
|
||||
"intrastate-authority": {
|
||||
name: "Intrastate Operating Authority",
|
||||
price_cents: 10900, // + state fees
|
||||
gov_fee_label: "State intrastate authority filing fee (state, billed at cost)",
|
||||
erpnext_item: "INTRASTATE-AUTHORITY",
|
||||
discountable: true,
|
||||
},
|
||||
"osow-permit": {
|
||||
name: "Oversize/Overweight Permit",
|
||||
price_cents: 10900, // + state permit fees
|
||||
gov_fee_label: "State oversize/overweight permit fees (per trip/route, billed at cost)",
|
||||
erpnext_item: "OSOW-PERMIT",
|
||||
discountable: true,
|
||||
},
|
||||
"state-trucking-bundle": {
|
||||
name: "State Compliance Bundle",
|
||||
price_cents: 49900, // $499 — IRP+IFTA+weight tax+intrastate ($796 individual)
|
||||
gov_fee_label: "State registration, decal & tax fees for each included filing (billed at cost)",
|
||||
erpnext_item: "STATE-TRUCKING-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
// ── Hazmat / Emissions ───────────────────────────────────────────────
|
||||
"hazmat-phmsa": {
|
||||
name: "PHMSA Hazmat Registration",
|
||||
price_cents: 14900, // $149 admin-assisted; PHMSA gov fee billed at cost
|
||||
gov_fee_label: "PHMSA registration fee ($25 + $250-$3,000 processing, by business size, billed at cost)",
|
||||
erpnext_item: "HAZMAT-PHMSA",
|
||||
discountable: true,
|
||||
},
|
||||
"state-emissions": {
|
||||
name: "State Clean-Truck / Emissions Compliance",
|
||||
price_cents: 10900, // $109 + state fees — NY/CO/MD/NJ/MA clean-truck / ACT advisory + registration assist
|
||||
erpnext_item: "STATE-EMISSIONS",
|
||||
discountable: true,
|
||||
},
|
||||
|
||||
// ── Corporate / Entity Services ──
|
||||
"annual-report-filing": {
|
||||
name: "Annual Report / Franchise Tax Filing",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "ANNUAL-REPORT",
|
||||
discountable: true,
|
||||
},
|
||||
"registered-agent": {
|
||||
name: "Registered Agent Service (1 Year)",
|
||||
price_cents: 9900,
|
||||
erpnext_item: "REGISTERED-AGENT",
|
||||
discountable: true,
|
||||
},
|
||||
"entity-reinstatement": {
|
||||
name: "Entity Reinstatement",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "ENTITY-REINSTATEMENT",
|
||||
discountable: true,
|
||||
},
|
||||
"virtual-mailbox": {
|
||||
name: "Virtual Mailbox (1 Year)",
|
||||
price_cents: 14900,
|
||||
erpnext_item: "VIRTUAL-MAILBOX",
|
||||
discountable: true,
|
||||
},
|
||||
"ein-application": {
|
||||
name: "EIN Application (IRS SS-4)",
|
||||
price_cents: 7900,
|
||||
erpnext_item: "EIN-APPLICATION",
|
||||
discountable: true,
|
||||
},
|
||||
"entity-upgrade-bundle": {
|
||||
name: "Entity Upgrade Package (Sole Prop → LLC)",
|
||||
price_cents: 59900,
|
||||
erpnext_item: "ENTITY-UPGRADE-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
// ── Healthcare / NPI compliance ──────────────────────────────────────
|
||||
// CMS/NPPES provider compliance. Handlers are review-staged (a human
|
||||
// files in PECOS/NPPES) — same safety default as the FCC auto-filing
|
||||
// toggle. HIPAA is intentionally out of scope (separate specialty).
|
||||
// Flagship = npi-revalidation (CMS 5-yr Medicare revalidation, dateable
|
||||
// overdue signal from the free CMS revalidation list).
|
||||
"npi-revalidation": {
|
||||
name: "Medicare PECOS Revalidation Filing",
|
||||
price_cents: 59900,
|
||||
erpnext_item: "NPI-REVALIDATION",
|
||||
discountable: true,
|
||||
},
|
||||
"npi-reactivation": {
|
||||
name: "NPI Reactivation",
|
||||
price_cents: 44900,
|
||||
erpnext_item: "NPI-REACTIVATION",
|
||||
discountable: true,
|
||||
},
|
||||
"nppes-update": {
|
||||
name: "NPPES Data Update / Attestation",
|
||||
price_cents: 34900,
|
||||
erpnext_item: "NPPES-UPDATE",
|
||||
discountable: true,
|
||||
},
|
||||
"medicare-enrollment": {
|
||||
name: "Medicare Enrollment (PECOS)",
|
||||
price_cents: 69900,
|
||||
erpnext_item: "MEDICARE-ENROLLMENT",
|
||||
discountable: true,
|
||||
},
|
||||
"oig-sam-screening": {
|
||||
name: "OIG/SAM Exclusion Screening (Annual)",
|
||||
price_cents: 29900,
|
||||
erpnext_item: "OIG-SAM-SCREENING",
|
||||
discountable: false,
|
||||
},
|
||||
"provider-compliance-bundle": {
|
||||
name: "Provider Compliance Bundle (Annual)",
|
||||
price_cents: 89900,
|
||||
erpnext_item: "PROVIDER-COMPLIANCE-BUNDLE",
|
||||
discountable: true,
|
||||
},
|
||||
};
|
||||
|
||||
10
deploy.sh
10
deploy.sh
|
|
@ -31,6 +31,16 @@ echo ""
|
|||
echo "=== Syncing canonical site header (Services dropdown) ==="
|
||||
python3 scripts/sync_nav.py
|
||||
|
||||
# Single source of truth for service pricing: the API catalog
|
||||
# (api/src/service-catalog.ts) is the authority (it is what checkout charges).
|
||||
# The site build context is ./site only and cannot read ../api, so we generate
|
||||
# site/src/lib/service-catalog.generated.ts here on the host before the docker
|
||||
# build. This guarantees displayed prices == charged prices.
|
||||
echo ""
|
||||
echo "=== Generating site service catalog from API source ==="
|
||||
node scripts/gen-service-catalog.mjs
|
||||
node scripts/check-service-catalog-drift.mjs
|
||||
|
||||
# Render the Alertmanager config from its template. Alertmanager does NOT expand
|
||||
# ${ENV} placeholders in its YAML, so the raw template (with ${TELEGRAM_BOT_TOKEN}
|
||||
# / ${TELEGRAM_CHAT_ID}) crash-loops it ("cannot unmarshal !!str `${TELEG...`").
|
||||
|
|
|
|||
52
scripts/check-service-catalog-drift.mjs
Normal file
52
scripts/check-service-catalog-drift.mjs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env node
|
||||
/**
|
||||
* Drift guard: the site's generated catalog MUST match the API source.
|
||||
*
|
||||
* Run in CI / pre-deploy. Regenerates the catalog into memory from
|
||||
* api/src/service-catalog.ts and compares it to the committed
|
||||
* site/src/lib/service-catalog.generated.ts. Fails (exit 1) on any difference,
|
||||
* so a price edited in the API but not regenerated, or the generated file
|
||||
* hand-edited, is caught before it reaches customers.
|
||||
*
|
||||
* Usage: node scripts/check-service-catalog-drift.mjs
|
||||
*/
|
||||
import { readFileSync } from "node:fs";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname, resolve } from "node:path";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = resolve(__dirname, "..");
|
||||
const GEN = resolve(ROOT, "site/src/lib/service-catalog.generated.ts");
|
||||
|
||||
// Regenerate to a temp string by invoking the generator's parse logic inline.
|
||||
const SRC = resolve(ROOT, "api/src/service-catalog.ts");
|
||||
const tsSource = readFileSync(SRC, "utf8");
|
||||
const m = tsSource.match(/export const COMPLIANCE_SERVICES[^=]*=\s*(\{[\s\S]*?\n\});/);
|
||||
if (!m) { console.error("drift-check: cannot parse API catalog"); process.exit(1); }
|
||||
const apiCatalog = Function(`"use strict"; return (${m[1]});`)();
|
||||
|
||||
// Parse the committed generated file's SERVICE_META.
|
||||
const genSource = readFileSync(GEN, "utf8");
|
||||
const gm = genSource.match(/export const SERVICE_META[^=]*=\s*(\{[\s\S]*?\n\});/);
|
||||
if (!gm) { console.error("drift-check: cannot parse generated SERVICE_META"); process.exit(1); }
|
||||
const gen = Function(`"use strict"; return (${gm[1]});`)();
|
||||
|
||||
let problems = [];
|
||||
for (const slug of Object.keys(apiCatalog)) {
|
||||
const a = apiCatalog[slug];
|
||||
const g = gen[slug];
|
||||
if (!g) { problems.push(`${slug}: missing from generated file`); continue; }
|
||||
if (a.price_cents !== g.price_cents) problems.push(`${slug}: price API=${a.price_cents} generated=${g.price_cents}`);
|
||||
if (a.name !== g.name) problems.push(`${slug}: name mismatch`);
|
||||
if ((a.gov_fee_label || undefined) !== (g.gov_fee_label || undefined)) problems.push(`${slug}: gov_fee_label mismatch`);
|
||||
}
|
||||
for (const slug of Object.keys(gen)) {
|
||||
if (!apiCatalog[slug]) problems.push(`${slug}: in generated file but not in API`);
|
||||
}
|
||||
|
||||
if (problems.length) {
|
||||
console.error("SERVICE CATALOG DRIFT DETECTED (run: node scripts/gen-service-catalog.mjs):");
|
||||
for (const p of problems) console.error(" - " + p);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log(`drift-check: OK -- ${Object.keys(apiCatalog).length} services, API and generated catalog match.`);
|
||||
72
scripts/gen-service-catalog.mjs
Normal file
72
scripts/gen-service-catalog.mjs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/env node
|
||||
/**
|
||||
* Generate the site's read-only service catalog from the API's single source.
|
||||
*
|
||||
* Source : api/src/service-catalog.ts (COMPLIANCE_SERVICES -- the authority)
|
||||
* Output : site/src/lib/service-catalog.generated.ts (SERVICE_META for display)
|
||||
*
|
||||
* Run automatically before the site build (site `prebuild` script). Never edit
|
||||
* the generated file by hand. To change a price or name, edit the API catalog.
|
||||
*
|
||||
* We import the API module directly (it is plain TS with a literal object), via
|
||||
* a tiny transpile-free parse: the catalog is a static object literal, so we
|
||||
* evaluate it in a sandboxed module context.
|
||||
*/
|
||||
import { readFileSync, writeFileSync } from "node:fs";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname, resolve } from "node:path";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = resolve(__dirname, "..");
|
||||
const SRC = resolve(ROOT, "api/src/service-catalog.ts");
|
||||
const OUT = resolve(ROOT, "site/src/lib/service-catalog.generated.ts");
|
||||
|
||||
const tsSource = readFileSync(SRC, "utf8");
|
||||
|
||||
// Extract the object literal assigned to COMPLIANCE_SERVICES.
|
||||
const m = tsSource.match(/export const COMPLIANCE_SERVICES[^=]*=\s*(\{[\s\S]*?\n\});/);
|
||||
if (!m) {
|
||||
console.error("[gen-service-catalog] could not locate COMPLIANCE_SERVICES object literal in", SRC);
|
||||
process.exit(1);
|
||||
}
|
||||
// The object literal is valid JS (string keys, number/bool/string values, trailing commas).
|
||||
// Evaluate it safely in an isolated function scope (no access to anything).
|
||||
let catalog;
|
||||
try {
|
||||
catalog = Function(`"use strict"; return (${m[1]});`)();
|
||||
} catch (e) {
|
||||
console.error("[gen-service-catalog] failed to evaluate catalog literal:", e);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const slugs = Object.keys(catalog).sort();
|
||||
const lines = slugs.map((slug) => {
|
||||
const s = catalog[slug];
|
||||
const parts = [`name: ${JSON.stringify(s.name)}`, `price_cents: ${s.price_cents}`];
|
||||
if (s.gov_fee_label) parts.push(`gov_fee_label: ${JSON.stringify(s.gov_fee_label)}`);
|
||||
return ` ${JSON.stringify(slug)}: { ${parts.join(", ")} },`;
|
||||
});
|
||||
|
||||
const out = `/**
|
||||
* AUTO-GENERATED -- DO NOT EDIT.
|
||||
*
|
||||
* Source of truth: api/src/service-catalog.ts (COMPLIANCE_SERVICES).
|
||||
* Regenerate with: node scripts/gen-service-catalog.mjs (runs on site prebuild).
|
||||
*
|
||||
* Display-only subset (name, price_cents, gov_fee_label) of the API catalog,
|
||||
* so the public site can never drift from what the API actually charges.
|
||||
*/
|
||||
|
||||
export interface ServiceMeta {
|
||||
name: string;
|
||||
price_cents: number;
|
||||
gov_fee_label?: string;
|
||||
}
|
||||
|
||||
export const SERVICE_META: Record<string, ServiceMeta> = {
|
||||
${lines.join("\n")}
|
||||
};
|
||||
`;
|
||||
|
||||
writeFileSync(OUT, out);
|
||||
console.log(`[gen-service-catalog] wrote ${slugs.length} services -> ${OUT}`);
|
||||
|
|
@ -165,67 +165,11 @@ export const CATEGORY_GATED_STEPS: Record<string, IntakeStep[]> = {
|
|||
audio_bridging: ["audio_bridging"],
|
||||
};
|
||||
|
||||
// ── Pricing + human name lookup (mirrors COMPLIANCE_SERVICES server-side)
|
||||
export const SERVICE_META: Record<string, { name: string; price_cents: number; gov_fee_label?: string }> = {
|
||||
"fcc-compliance-checkup": { name: "FCC Carrier Compliance Checkup", price_cents: 79900 },
|
||||
"fcc-499a": { name: "FCC Form 499-A Filing", price_cents: 49900 },
|
||||
"fcc-499a-499q": { name: "FCC Form 499-A + 499-Q Bundle", price_cents: 59900 },
|
||||
"fcc-full-compliance": { name: "FCC Full Compliance Bundle", price_cents: 149900 },
|
||||
"cpni-certification": { name: "CPNI Annual Certification", price_cents: 19900 },
|
||||
"rmd-filing": { name: "RMD Registration / Recertification", price_cents: 24900 }, // + $100 FCC filing fee passthrough
|
||||
"stir-shaken": { name: "STIR/SHAKEN Implementation Assistance", price_cents: 49900 },
|
||||
"dc-agent": { name: "D.C. Registered Agent (Annual)", price_cents: 14900 },
|
||||
"bdc-broadband": { name: "BDC Broadband Deployment Filing", price_cents: 24900 },
|
||||
"bdc-voice": { name: "BDC Voice Subscription (formerly Form 477)", price_cents: 19900 },
|
||||
"bdc-filing": { name: "BDC Filing (Broadband + Voice)", price_cents: 34900 },
|
||||
"ocn-registration": { name: "NECA OCN / Company Code Registration", price_cents: 265000 },
|
||||
"cdr-analysis": { name: "CDR Traffic Study (Annual)", price_cents: 49900 },
|
||||
"cores-frn-registration": { name: "CORES / FRN Registration", price_cents: 14900 },
|
||||
"fcc-499-initial": { name: "Form 499 Initial Registration", price_cents: 34900 },
|
||||
"calea-ssi": { name: "CALEA SSI Plan", price_cents: 79900 },
|
||||
"fcc-63-11-notification": { name: "Foreign Carrier Affiliation Notification", price_cents: 34900 },
|
||||
"new-carrier-bundle": { name: "New Carrier Onboarding Bundle", price_cents: 179900 },
|
||||
"foreign-qualification-single": { name: "Foreign Qualification (One State)", price_cents: 14900 },
|
||||
"foreign-qualification-multi": { name: "Foreign Qualification (Multi-State)", price_cents: 9900 },
|
||||
// DOT / FMCSA
|
||||
"mcs150-update": { name: "MCS-150 Biennial Update", price_cents: 3900 },
|
||||
"boc3-filing": { name: "BOC-3 Process Agent Filing", price_cents: 8900 },
|
||||
"ucr-registration": { name: "UCR Annual Registration", price_cents: 3900, gov_fee_label: "UCR registration fee (tier-based, minimum shown)" },
|
||||
"dot-registration": { name: "New USDOT Number Registration", price_cents: 8900 },
|
||||
"mc-authority": { name: "MC Operating Authority Application", price_cents: 19900, gov_fee_label: "FMCSA operating authority application fee" },
|
||||
"dot-drug-alcohol": { name: "DOT Drug & Alcohol Compliance Program", price_cents: 14900 },
|
||||
"dot-audit-prep": { name: "New Entrant Safety Audit Preparation", price_cents: 39900 },
|
||||
"dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 39900 },
|
||||
"usdot-reactivation": { name: "USDOT Reactivation", price_cents: 14900 },
|
||||
// State-level trucking
|
||||
"irp-registration": { name: "IRP Registration Assistance", price_cents: 10900, gov_fee_label: "Apportioned IRP registration and plate fees (state, by jurisdictions and weight)" },
|
||||
"ifta-application": { name: "IFTA Application + Decals", price_cents: 10900, gov_fee_label: "IFTA license and decal fees (state)" },
|
||||
"ifta-quarterly": { name: "IFTA Quarterly Filing", price_cents: 10900, gov_fee_label: "IFTA taxes due, based on your mileage" },
|
||||
"or-weight-mile-tax": { name: "Oregon Weight-Mile Tax Setup", price_cents: 10900, gov_fee_label: "Oregon weight-mile tax account and bond/deposit fees (state)" },
|
||||
"ny-hut-registration": { name: "NY Highway Use Tax Registration", price_cents: 10900, gov_fee_label: "NY HUT certificate and decal fees (state)" },
|
||||
"ky-kyu-registration": { name: "KY Weight-Distance Tax Setup", price_cents: 10900, gov_fee_label: "KYU weight-distance account fees (state)" },
|
||||
"nm-weight-distance": { name: "NM Weight-Distance Tax Setup", price_cents: 10900, gov_fee_label: "NM weight-distance permit and account fees (state)" },
|
||||
"ct-highway-use-fee": { name: "CT Highway Use Fee Setup", price_cents: 10900, gov_fee_label: "CT Highway Use Fee registration and usage fees (state)" },
|
||||
"ca-mcp-carb": { name: "California MCP + CARB Compliance", price_cents: 22900, gov_fee_label: "CA MCP permit fee and CARB/Clean Truck Check fees (state, by fleet size)" },
|
||||
"state-dot-registration": { name: "State DOT Registration", price_cents: 10900, gov_fee_label: "State DOT/intrastate registration fee (state)" },
|
||||
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 10900, gov_fee_label: "State intrastate authority filing fee" },
|
||||
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 10900, gov_fee_label: "State oversize/overweight permit fees, per trip/route" },
|
||||
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 49900, gov_fee_label: "State registration, decal and tax fees for each included filing" },
|
||||
// Hazmat / emissions
|
||||
"hazmat-phmsa": { name: "PHMSA Hazmat Registration", price_cents: 14900, gov_fee_label: "PHMSA registration fee, by business size" },
|
||||
"state-emissions": { name: "State Clean-Truck / Emissions Compliance", price_cents: 10900 },
|
||||
// DOT lifecycle
|
||||
"emergency-temporary-authority": { name: "Emergency Temporary Authority", price_cents: 49900, gov_fee_label: "FMCSA emergency/temporary authority fee" },
|
||||
"carrier-closeout": { name: "Carrier Closeout / Deactivation", price_cents: 19900 },
|
||||
"entity-dissolution": { name: "Entity Dissolution Filing", price_cents: 4900, gov_fee_label: "State dissolution filing fee" },
|
||||
// Healthcare / NPI
|
||||
"npi-revalidation": { name: "Medicare PECOS Revalidation Filing", price_cents: 59900 },
|
||||
"npi-reactivation": { name: "NPI Reactivation", price_cents: 44900 },
|
||||
"nppes-update": { name: "NPPES Data Update / Attestation", price_cents: 34900 },
|
||||
"medicare-enrollment": { name: "Medicare Enrollment (PECOS)", price_cents: 69900 },
|
||||
"oig-sam-screening": { name: "OIG/SAM Exclusion Screening (Annual)", price_cents: 29900 },
|
||||
"provider-compliance-bundle": { name: "Provider Compliance Bundle (Annual)", price_cents: 89900 },
|
||||
};
|
||||
// ── Pricing + human name lookup ──────────────────────────────────────────
|
||||
// Re-exported from the generated catalog so the site can never drift from the
|
||||
// API's prices. SINGLE SOURCE OF TRUTH: api/src/service-catalog.ts.
|
||||
// Regenerated by scripts/gen-service-catalog.mjs on site prebuild.
|
||||
export { SERVICE_META, type ServiceMeta } from "./service-catalog.generated.js";
|
||||
|
||||
export function formatUSD(cents: number): string {
|
||||
return `$${(cents / 100).toLocaleString("en-US", {
|
||||
|
|
|
|||
84
site/src/lib/service-catalog.generated.ts
Normal file
84
site/src/lib/service-catalog.generated.ts
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/**
|
||||
* AUTO-GENERATED -- DO NOT EDIT.
|
||||
*
|
||||
* Source of truth: api/src/service-catalog.ts (COMPLIANCE_SERVICES).
|
||||
* Regenerate with: node scripts/gen-service-catalog.mjs (runs on site prebuild).
|
||||
*
|
||||
* Display-only subset (name, price_cents, gov_fee_label) of the API catalog,
|
||||
* so the public site can never drift from what the API actually charges.
|
||||
*/
|
||||
|
||||
export interface ServiceMeta {
|
||||
name: string;
|
||||
price_cents: number;
|
||||
gov_fee_label?: string;
|
||||
}
|
||||
|
||||
export const SERVICE_META: Record<string, ServiceMeta> = {
|
||||
"annual-report-filing": { name: "Annual Report / Franchise Tax Filing", price_cents: 14900 },
|
||||
"bdc-broadband": { name: "BDC Broadband Deployment Filing", price_cents: 24900 },
|
||||
"bdc-filing": { name: "BDC Filing (Broadband + Voice)", price_cents: 34900 },
|
||||
"bdc-voice": { name: "BDC Voice Subscription Filing (formerly Form 477 Voice)", price_cents: 19900 },
|
||||
"boc3-filing": { name: "BOC-3 Process Agent Filing", price_cents: 8900 },
|
||||
"ca-mcp-carb": { name: "California MCP + CARB Compliance", price_cents: 22900, gov_fee_label: "CA MCP permit fee + CARB/Clean Truck Check fees (state, by fleet size, billed at cost)" },
|
||||
"calea-ssi": { name: "CALEA SSI Plan", price_cents: 79900 },
|
||||
"carrier-closeout": { name: "Trucking Wrap-Up (USDOT Shutdown)", price_cents: 19900 },
|
||||
"cdr-analysis": { name: "CDR Traffic Study (Annual)", price_cents: 49900 },
|
||||
"cdr-storage-tier1": { name: "CDR Storage Tier 1 (50 GB / 50M calls)", price_cents: 9900 },
|
||||
"cdr-storage-tier2": { name: "CDR Storage Tier 2 (250 GB / 250M calls)", price_cents: 29900 },
|
||||
"cdr-storage-tier3": { name: "CDR Storage Tier 3 (1 TB / 1B calls)", price_cents: 79900 },
|
||||
"cores-frn-registration": { name: "CORES / FRN Registration", price_cents: 14900 },
|
||||
"cpni-certification": { name: "CPNI Annual Certification", price_cents: 19900 },
|
||||
"ct-highway-use-fee": { name: "CT Highway Use Fee Setup", price_cents: 10900, gov_fee_label: "CT Highway Use Fee registration (state, billed at cost)" },
|
||||
"dc-agent": { name: "D.C. Registered Agent (Annual)", price_cents: 14900 },
|
||||
"dot-audit-prep": { name: "New Entrant Safety Audit Preparation", price_cents: 39900 },
|
||||
"dot-drug-alcohol": { name: "DOT Drug & Alcohol Compliance Program", price_cents: 14900 },
|
||||
"dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 39900 },
|
||||
"dot-registration": { name: "New USDOT Number Registration", price_cents: 8900 },
|
||||
"ein-application": { name: "EIN Application (IRS SS-4)", price_cents: 7900 },
|
||||
"emergency-temporary-authority": { name: "Emergency Temporary Authority (ETA)", price_cents: 49900 },
|
||||
"entity-dissolution": { name: "Business Entity Dissolution (LLC/Corp)", price_cents: 4900, gov_fee_label: "State dissolution filing fee (varies by state, billed at cost)" },
|
||||
"entity-reinstatement": { name: "Entity Reinstatement", price_cents: 29900 },
|
||||
"entity-upgrade-bundle": { name: "Entity Upgrade Package (Sole Prop → LLC)", price_cents: 59900 },
|
||||
"fcc-499-initial": { name: "Form 499 Initial Registration", price_cents: 34900 },
|
||||
"fcc-499a": { name: "FCC Form 499-A Filing", price_cents: 49900 },
|
||||
"fcc-499a-499q": { name: "FCC Form 499-A + 499-Q Bundle", price_cents: 59900 },
|
||||
"fcc-499a-discontinuance": { name: "Form 499-A Discontinuance Filing", price_cents: 29900 },
|
||||
"fcc-499a-zero": { name: "FCC Form 499-A Filing (Zero Revenue)", price_cents: 17900 },
|
||||
"fcc-499q": { name: "FCC Form 499-Q Quarterly Filing", price_cents: 0 },
|
||||
"fcc-63-11-notification": { name: "Foreign Carrier Affiliation Notification (47 CFR § 63.11)", price_cents: 34900 },
|
||||
"fcc-compliance-checkup": { name: "FCC Carrier Compliance Checkup", price_cents: 79900 },
|
||||
"fcc-full-compliance": { name: "FCC Full Compliance Bundle", price_cents: 149900 },
|
||||
"foreign-qualification-multi": { name: "Foreign Qualification (Multi-State)", price_cents: 9900 },
|
||||
"foreign-qualification-single": { name: "Foreign Qualification (One State)", price_cents: 14900 },
|
||||
"hazmat-phmsa": { name: "PHMSA Hazmat Registration", price_cents: 14900, gov_fee_label: "PHMSA registration fee ($25 + $250-$3,000 processing, by business size, billed at cost)" },
|
||||
"ifta-application": { name: "IFTA Application + Decals", price_cents: 10900, gov_fee_label: "IFTA license & decal fees (state, billed at cost)" },
|
||||
"ifta-quarterly": { name: "IFTA Quarterly Filing", price_cents: 10900, gov_fee_label: "IFTA taxes due (remitted to the state at cost based on your mileage)" },
|
||||
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 10900, gov_fee_label: "State intrastate authority filing fee (state, billed at cost)" },
|
||||
"irp-registration": { name: "IRP Registration Assistance", price_cents: 10900, gov_fee_label: "Apportioned IRP registration & plate fees (state, by jurisdictions + weight, billed at cost)" },
|
||||
"ky-kyu-registration": { name: "KY Weight-Distance Tax Setup", price_cents: 10900, gov_fee_label: "KYU weight-distance account fees (state, billed at cost)" },
|
||||
"mc-authority": { name: "MC Operating Authority Application", price_cents: 19900, gov_fee_label: "FMCSA operating authority application fee" },
|
||||
"mcs150-update": { name: "MCS-150 Biennial Update", price_cents: 3900 },
|
||||
"medicare-enrollment": { name: "Medicare Enrollment (PECOS)", price_cents: 69900 },
|
||||
"new-carrier-bundle": { name: "New Carrier Onboarding Bundle (FRN + 499 Initial + RMD + CPNI + CALEA)", price_cents: 179900 },
|
||||
"nm-weight-distance": { name: "NM Weight-Distance Tax Setup", price_cents: 10900, gov_fee_label: "NM weight-distance permit & account fees (state, billed at cost)" },
|
||||
"npi-reactivation": { name: "NPI Reactivation", price_cents: 44900 },
|
||||
"npi-revalidation": { name: "Medicare PECOS Revalidation Filing", price_cents: 59900 },
|
||||
"nppes-update": { name: "NPPES Data Update / Attestation", price_cents: 34900 },
|
||||
"ny-hut-registration": { name: "NY Highway Use Tax Registration", price_cents: 10900, gov_fee_label: "NY HUT certificate & decal fees (state, billed at cost)" },
|
||||
"ocn-registration": { name: "NECA OCN + Sponsoring CLEC Agreement", price_cents: 265000 },
|
||||
"oig-sam-screening": { name: "OIG/SAM Exclusion Screening (Annual)", price_cents: 29900 },
|
||||
"or-weight-mile-tax": { name: "Oregon Weight-Mile Tax Setup", price_cents: 10900, gov_fee_label: "Oregon weight-mile tax account & bond/deposit (state, billed at cost)" },
|
||||
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 10900, gov_fee_label: "State oversize/overweight permit fees (per trip/route, billed at cost)" },
|
||||
"provider-compliance-bundle": { name: "Provider Compliance Bundle (Annual)", price_cents: 89900 },
|
||||
"registered-agent": { name: "Registered Agent Service (1 Year)", price_cents: 9900 },
|
||||
"rmd-filing": { name: "RMD Registration / Recertification", price_cents: 24900, gov_fee_label: "FCC RMD filing fee" },
|
||||
"state-dot-registration": { name: "State DOT Registration", price_cents: 10900, gov_fee_label: "State DOT/intrastate registration fee (state, billed at cost)" },
|
||||
"state-emissions": { name: "State Clean-Truck / Emissions Compliance", price_cents: 10900 },
|
||||
"state-puc": { name: "State PUC/PSC Registration", price_cents: 39900 },
|
||||
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 49900, gov_fee_label: "State registration, decal & tax fees for each included filing (billed at cost)" },
|
||||
"stir-shaken": { name: "STIR/SHAKEN Implementation Assistance", price_cents: 49900 },
|
||||
"ucr-registration": { name: "UCR Annual Registration", price_cents: 3900, gov_fee_label: "UCR registration fee (tier-based, minimum shown)" },
|
||||
"usdot-reactivation": { name: "USDOT Number Reactivation", price_cents: 14900 },
|
||||
"virtual-mailbox": { name: "Virtual Mailbox (1 Year)", price_cents: 14900 },
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue