50-state trucking compliance: services, checker, order page, CA landing

- Migration 079: state_trucking_requirements table seeded for all 51 jurisdictions
  (IRP, IFTA, weight-distance taxes, MCP/CARB, intrastate authority, state DOT)
- Migration 080: carrier_operating_states tracking table
- 13 new state trucking services in catalog ($99-$599)
- StateTruckingHandler with state-specific admin todos
- DOT compliance checker: 7 new state-level checks (IRP, IFTA, weight tax,
  MCP/CARB, emissions, intrastate authority, state DOT number)
- New API endpoint: GET /api/v1/dot/state-requirements
- DOT order page: state compliance service cards with auto-preselect
- California trucking landing page (MCP + CARB + IRP + IFTA)
- Fix: DOT checker nav missing Trucking/DOT section
- Fix: All 8 DOT intake pages missing style block (dangling text)
- Fix: DOT confirmation email now says "Order Confirmed" not "Action Required"
- Fix: MCS150/BOC3/StateTrucking handlers missing async process() method
- Fix: StateTruckingHandler connection leak + slug resolution

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
justin 2026-05-29 12:46:33 -05:00
parent c80f3a408a
commit 33da00fd89
21 changed files with 2078 additions and 14 deletions

View file

@ -0,0 +1,851 @@
-- 079_state_trucking_requirements.sql
--
-- State-level trucking compliance requirements for all 50 US states + DC.
-- Covers IRP, IFTA, weight-distance taxes, state motor carrier permits,
-- emissions compliance, intrastate authority, state DOT registration,
-- and state insurance filing requirements.
--
-- Data sources: FMCSA, IRP Inc, IFTA Inc, state DOT/DMV/PUC websites,
-- J.J. Keller, Simplex Group, industry compliance databases.
-- Verified May 2026 — re-verify before filing.
BEGIN;
CREATE TABLE IF NOT EXISTS state_trucking_requirements (
id SERIAL PRIMARY KEY,
state_code CHAR(2) NOT NULL UNIQUE REFERENCES jurisdictions(code),
-- ── IRP (International Registration Plan) ──────────────────────────
irp_member BOOLEAN NOT NULL DEFAULT FALSE,
irp_agency TEXT,
irp_url TEXT,
-- ── IFTA (International Fuel Tax Agreement) ────────────────────────
ifta_member BOOLEAN NOT NULL DEFAULT FALSE,
ifta_agency TEXT,
ifta_url TEXT,
-- ── Weight/Distance Tax ────────────────────────────────────────────
weight_distance_tax BOOLEAN NOT NULL DEFAULT FALSE,
weight_distance_tax_name TEXT, -- 'Weight-Mile Tax', 'Highway Use Tax', etc.
weight_distance_agency TEXT,
weight_distance_url TEXT,
weight_distance_threshold_lbs INTEGER, -- min GVW that triggers tax
weight_distance_notes TEXT,
-- ── State Motor Carrier Permit ─────────────────────────────────────
state_carrier_permit BOOLEAN NOT NULL DEFAULT FALSE,
state_carrier_permit_name TEXT, -- 'Motor Carrier Permit (MCP)', 'TxDMV Number', etc.
state_carrier_permit_agency TEXT,
state_carrier_permit_url TEXT,
state_carrier_permit_notes TEXT,
-- ── Emissions Compliance ───────────────────────────────────────────
emissions_program BOOLEAN NOT NULL DEFAULT FALSE,
emissions_program_name TEXT, -- 'CARB Truck & Bus Rule', 'Advanced Clean Trucks', etc.
emissions_agency TEXT,
emissions_url TEXT,
emissions_notes TEXT,
-- ── Intrastate Operating Authority ─────────────────────────────────
intrastate_authority_required BOOLEAN NOT NULL DEFAULT FALSE,
intrastate_authority_name TEXT, -- 'Certificate of Authority', 'CPCN', etc.
intrastate_authority_agency TEXT,
intrastate_authority_url TEXT,
intrastate_authority_notes TEXT,
-- ── State DOT Registration ─────────────────────────────────────────
-- States that require their own DOT-like number beyond federal USDOT
state_dot_required BOOLEAN NOT NULL DEFAULT FALSE,
state_dot_number_name TEXT, -- 'CA Number', 'TxDMV Number', etc.
state_dot_agency TEXT,
state_dot_url TEXT,
state_dot_notes TEXT,
-- ── State Insurance Filing ─────────────────────────────────────────
-- States with insurance filing requirements beyond federal FMCSA BIPD
state_insurance_filing BOOLEAN NOT NULL DEFAULT FALSE,
state_insurance_min_cents INTEGER, -- state minimum liability in cents (0 = federal default)
state_insurance_agency TEXT,
state_insurance_url TEXT,
state_insurance_notes TEXT,
-- ── Unified Carrier Registration (UCR) ─────────────────────────────
-- All interstate carriers must register; some states are the base state
ucr_base_state BOOLEAN NOT NULL DEFAULT TRUE, -- can this state serve as UCR base?
-- ── Metadata ───────────────────────────────────────────────────────
last_verified_date DATE DEFAULT CURRENT_DATE,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_state_trucking_irp
ON state_trucking_requirements(irp_member) WHERE irp_member = TRUE;
CREATE INDEX IF NOT EXISTS idx_state_trucking_weight_dist
ON state_trucking_requirements(weight_distance_tax) WHERE weight_distance_tax = TRUE;
CREATE INDEX IF NOT EXISTS idx_state_trucking_emissions
ON state_trucking_requirements(emissions_program) WHERE emissions_program = TRUE;
CREATE INDEX IF NOT EXISTS idx_state_trucking_intrastate
ON state_trucking_requirements(intrastate_authority_required) WHERE intrastate_authority_required = TRUE;
-- Updated_at trigger
CREATE OR REPLACE FUNCTION set_updated_at_state_trucking_req() RETURNS trigger AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS trg_state_trucking_req_updated_at ON state_trucking_requirements;
CREATE TRIGGER trg_state_trucking_req_updated_at
BEFORE UPDATE ON state_trucking_requirements
FOR EACH ROW EXECUTE FUNCTION set_updated_at_state_trucking_req();
-- ──────────────────────────────────────────────────────────────────────
-- Seed all 51 jurisdictions (50 states + DC)
-- ──────────────────────────────────────────────────────────────────────
--
-- Column order in INSERT:
-- state_code,
-- irp_member, irp_agency, irp_url,
-- ifta_member, ifta_agency, ifta_url,
-- weight_distance_tax, weight_distance_tax_name, weight_distance_agency, weight_distance_url, weight_distance_threshold_lbs, weight_distance_notes,
-- state_carrier_permit, state_carrier_permit_name, state_carrier_permit_agency, state_carrier_permit_url, state_carrier_permit_notes,
-- emissions_program, emissions_program_name, emissions_agency, emissions_url, emissions_notes,
-- intrastate_authority_required, intrastate_authority_name, intrastate_authority_agency, intrastate_authority_url, intrastate_authority_notes,
-- state_dot_required, state_dot_number_name, state_dot_agency, state_dot_url, state_dot_notes,
-- state_insurance_filing, state_insurance_min_cents, state_insurance_agency, state_insurance_url, state_insurance_notes,
-- ucr_base_state, notes
INSERT INTO state_trucking_requirements (
state_code,
irp_member, irp_agency, irp_url,
ifta_member, ifta_agency, ifta_url,
weight_distance_tax, weight_distance_tax_name, weight_distance_agency, weight_distance_url, weight_distance_threshold_lbs, weight_distance_notes,
state_carrier_permit, state_carrier_permit_name, state_carrier_permit_agency, state_carrier_permit_url, state_carrier_permit_notes,
emissions_program, emissions_program_name, emissions_agency, emissions_url, emissions_notes,
intrastate_authority_required, intrastate_authority_name, intrastate_authority_agency, intrastate_authority_url, intrastate_authority_notes,
state_dot_required, state_dot_number_name, state_dot_agency, state_dot_url, state_dot_notes,
state_insurance_filing, state_insurance_min_cents, state_insurance_agency, state_insurance_url, state_insurance_notes,
ucr_base_state, notes
) VALUES
-- ═══════════════════════════════════════════════════════════════════════
-- ALABAMA
-- ═══════════════════════════════════════════════════════════════════════
('AL',
TRUE, 'Alabama Department of Revenue', 'https://www.revenue.alabama.gov/motor-vehicle/irp-ifta-information/',
TRUE, 'Alabama Department of Revenue', 'https://www.revenue.alabama.gov/motor-vehicle/irp-ifta-information/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Alabama Public Service Commission', 'https://psc.alabama.gov', 'For-hire intrastate carriers must obtain COA from PSC',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- ALASKA
-- ═══════════════════════════════════════════════════════════════════════
('AK',
FALSE, NULL, NULL,
TRUE, 'Alaska Department of Administration', 'https://doa.alaska.gov/dmv/commercial/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Not an IRP member. IFTA voluntary participant. Trip permits required for visiting carriers.'),
-- ═══════════════════════════════════════════════════════════════════════
-- ARIZONA
-- ═══════════════════════════════════════════════════════════════════════
('AZ',
TRUE, 'Arizona Department of Transportation', 'https://azdot.gov/motor-vehicles/commercial-vehicles',
TRUE, 'Arizona Department of Transportation', 'https://azdot.gov/motor-vehicles/commercial-vehicles',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- ARKANSAS
-- ═══════════════════════════════════════════════════════════════════════
('AR',
TRUE, 'Arkansas Department of Finance and Administration', 'https://www.dfa.arkansas.gov/motor-vehicle/motor-carrier-services/',
TRUE, 'Arkansas Department of Finance and Administration', 'https://www.dfa.arkansas.gov/motor-vehicle/motor-carrier-services/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Arkansas Highway Commission', 'https://www.ardot.gov/', 'For-hire intrastate carriers',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- CALIFORNIA
-- ═══════════════════════════════════════════════════════════════════════
('CA',
TRUE, 'California DMV', 'https://www.dmv.ca.gov/portal/vehicle-registration/new-registration/commercial-vehicle-registration/international-registration-program/',
TRUE, 'California Board of Equalization', 'https://www.boe.ca.gov/sptaxprog/ifta.htm',
FALSE, NULL, NULL, NULL, NULL, NULL,
TRUE, 'Motor Carrier Permit (MCP)', 'California DMV', 'https://www.dmv.ca.gov/portal/vehicle-industry-services/motor-carrier-services-mcs/motor-carrier-permits/', 'Required for all for-hire carriers and CMVs over 10,001 lbs GVWR. Annual renewal.',
TRUE, 'CARB Truck & Bus Rule / Advanced Clean Trucks', 'California Air Resources Board (CARB)', 'https://ww2.arb.ca.gov/our-work/programs/truck-and-bus-regulation', 'All diesel vehicles >14,000 lbs must have 2010+ engine. ACT requires zero-emission sales targets for manufacturers.',
TRUE, 'Motor Carrier Permit (MCP)', 'California DMV / Caltrans', 'https://www.dmv.ca.gov/portal/vehicle-industry-services/motor-carrier-services-mcs/', 'MCP serves as both state carrier permit and intrastate authority',
TRUE, 'CA Number', 'California Highway Patrol (CHP)', 'https://dot.ca.gov/programs/traffic-operations/legal-truck-access/ca-number', 'CA Number issued by CHP; required before MCP. Must also have USDOT number.',
TRUE, 100000000, 'California DMV', 'https://www.dmv.ca.gov/portal/vehicle-industry-services/motor-carrier-services-mcs/', 'Liability $300K-$5M depending on vehicle type and cargo. Most carriers need $750K+. Form E/H filing with CHP.',
TRUE, 'Most regulated state for trucking. MCP + CA Number + CARB compliance all required.'),
-- ═══════════════════════════════════════════════════════════════════════
-- COLORADO
-- ═══════════════════════════════════════════════════════════════════════
('CO',
TRUE, 'Colorado Department of Revenue', 'https://www.colorado.gov/pacific/dmv/motor-carrier-services',
TRUE, 'Colorado Department of Revenue', 'https://www.colorado.gov/pacific/dmv/motor-carrier-services',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Colorado Department of Public Health and Environment', 'https://cdphe.colorado.gov/advanced-clean-trucks', 'ACT rule adopted; effective 2027 model year. May be delayed due to federal CRA action.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- CONNECTICUT
-- ═══════════════════════════════════════════════════════════════════════
('CT',
TRUE, 'Connecticut DMV', 'https://portal.ct.gov/dmv/commercial/irp',
TRUE, 'Connecticut Department of Revenue Services', 'https://portal.ct.gov/drs',
TRUE, 'Highway Use Fee (HUF)', 'Connecticut Department of Revenue Services', 'https://portal.ct.gov/drs/businesses/highway-use-fee/huf', 26000, 'Effective Jan 2023. 2.5-17.5 cents/mile based on weight class. Quarterly filing via myconneCT.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Highway Use Fee is newest weight-distance tax in US (2023).'),
-- ═══════════════════════════════════════════════════════════════════════
-- DELAWARE
-- ═══════════════════════════════════════════════════════════════════════
('DE',
TRUE, 'Delaware Division of Motor Vehicles', 'https://www.dmv.de.gov/Vehicle-Services/Commercial-Motor-Vehicle',
TRUE, 'Delaware Division of Motor Vehicles', 'https://www.dmv.de.gov/Vehicle-Services/Commercial-Motor-Vehicle',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- DISTRICT OF COLUMBIA
-- ═══════════════════════════════════════════════════════════════════════
('DC',
TRUE, 'DC Department of Motor Vehicles', 'https://dmv.dc.gov/',
TRUE, 'DC Office of Tax and Revenue', 'https://otr.cfo.dc.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- FLORIDA
-- ═══════════════════════════════════════════════════════════════════════
('FL',
TRUE, 'Florida Department of Highway Safety and Motor Vehicles', 'https://www.flhsmv.gov/motor-vehicles-tags-titles/commercial-motor-vehicles/',
TRUE, 'Florida Department of Revenue', 'https://floridarevenue.com/taxes/taxesfees/Pages/motor_fuel.aspx',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'No separate state intrastate authority; federal authority sufficient for for-hire interstate. Intrastate for-hire may need FDOT registration.',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 75000000, 'Florida DHSMV', 'https://www.flhsmv.gov/', '$750K interstate; $300K intrastate <10,001 lbs. PIP coverage required.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- GEORGIA
-- ═══════════════════════════════════════════════════════════════════════
('GA',
TRUE, 'Georgia Department of Revenue', 'https://dor.georgia.gov/motor-vehicle-division',
TRUE, 'Georgia Department of Revenue', 'https://dor.georgia.gov/motor-vehicle-division',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Georgia Intrastate Motor Carrier (GIMC)', 'Georgia Public Service Commission', 'https://psc.ga.gov/', 'For-hire intrastate carriers must register with GA PSC',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- HAWAII
-- ═══════════════════════════════════════════════════════════════════════
('HI',
FALSE, NULL, NULL,
FALSE, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Not an IRP or IFTA member. Island state with limited interstate trucking applicability.'),
-- ═══════════════════════════════════════════════════════════════════════
-- IDAHO
-- ═══════════════════════════════════════════════════════════════════════
('ID',
TRUE, 'Idaho Transportation Department', 'https://itd.idaho.gov/motor-carrier/',
TRUE, 'Idaho Transportation Department', 'https://itd.idaho.gov/motor-carrier/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- ILLINOIS
-- ═══════════════════════════════════════════════════════════════════════
('IL',
TRUE, 'Illinois Secretary of State', 'https://www.ilsos.gov/departments/vehicles/cft/irpintro.html',
TRUE, 'Illinois Secretary of State', 'https://www.ilsos.gov/departments/vehicles/cft/iftaintro.html',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Illinois Commerce Commission', 'https://www.icc.illinois.gov/industry/transportation', 'For-hire intrastate carriers of property and passengers must obtain ICC authority',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 75000000, 'Illinois Commerce Commission', 'https://www.icc.illinois.gov/', '$750K minimum liability for intrastate for-hire carriers. Form E filing.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- INDIANA
-- ═══════════════════════════════════════════════════════════════════════
('IN',
TRUE, 'Indiana Department of Revenue', 'https://www.in.gov/dor/motor-carrier-services/',
TRUE, 'Indiana Department of Revenue', 'https://www.in.gov/dor/motor-carrier-services/fuel-tax/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Indiana Department of Revenue', 'https://www.in.gov/dor/motor-carrier-services/', 'Intrastate for-hire carriers must register. Intrastate fuel decals required.',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, 'Intrastate fuel permit/decals required for CMVs >26,000 lbs',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- IOWA
-- ═══════════════════════════════════════════════════════════════════════
('IA',
TRUE, 'Iowa Department of Transportation', 'https://iowadot.gov/motor-carriers/irp-international-registration-plan',
TRUE, 'Iowa Department of Transportation', 'https://iowadot.gov/motor-carriers/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Iowa Department of Transportation', 'https://iowadot.gov/motor-carriers/', 'For-hire intrastate carriers must obtain authority from Iowa DOT',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- KANSAS
-- ═══════════════════════════════════════════════════════════════════════
('KS',
TRUE, 'Kansas Department of Revenue', 'https://www.ksrevenue.gov/motorcarrier.html',
TRUE, 'Kansas Department of Revenue', 'https://www.ksrevenue.gov/motorcarrier.html',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Kansas Corporation Commission', 'https://kcc.ks.gov/transportation', 'For-hire intrastate carriers must obtain KCC authority',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- KENTUCKY
-- ═══════════════════════════════════════════════════════════════════════
('KY',
TRUE, 'Kentucky Transportation Cabinet', 'https://drive.ky.gov/Motor-Carriers/Pages/default.aspx',
TRUE, 'Kentucky Transportation Cabinet', 'https://drive.ky.gov/Motor-Carriers/Pages/default.aspx',
TRUE, 'Weight Distance Tax (KYU)', 'Kentucky Transportation Cabinet', 'https://drive.ky.gov/Motor-Carriers/Pages/KYU.aspx', 60000, '$0.0285/mile for vehicles >59,999 lbs combined license weight. Quarterly filing required. KYU number issued online.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Kentucky Transportation Cabinet', 'https://drive.ky.gov/Motor-Carriers/', 'For-hire intrastate carriers must register. Form E insurance filing required.',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 75000000, 'Kentucky Transportation Cabinet', 'https://drive.ky.gov/Motor-Carriers/', 'Form E filing required for intrastate for-hire carriers. Intrastate fuel decals required.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- LOUISIANA
-- ═══════════════════════════════════════════════════════════════════════
('LA',
TRUE, 'Louisiana Department of Public Safety', 'https://www.expresslane.org/Motor-Carrier-Services/',
TRUE, 'Louisiana Department of Revenue', 'https://revenue.louisiana.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'Louisiana does not require separate intrastate authority for property carriers',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MAINE
-- ═══════════════════════════════════════════════════════════════════════
('ME',
TRUE, 'Maine Bureau of Motor Vehicles', 'https://www.maine.gov/sos/bmv/',
TRUE, 'Maine Revenue Services', 'https://www.maine.gov/revenue/taxes/fuel-tax/narratives-ifta-irp',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 35000000, 'Maine Bureau of Insurance', 'https://www.maine.gov/pfr/insurance/', '$350K CSL for intrastate property carriers. Form K filing required. 30-day cancellation notice.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MARYLAND
-- ═══════════════════════════════════════════════════════════════════════
('MD',
TRUE, 'Maryland Motor Vehicle Administration', 'https://mva.maryland.gov/',
TRUE, 'Maryland Comptroller', 'https://www.marylandtaxes.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Maryland Department of the Environment', 'https://mde.maryland.gov/', 'ACT rule adopted; effective 2027 model year. May be delayed.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MASSACHUSETTS
-- ═══════════════════════════════════════════════════════════════════════
('MA',
TRUE, 'Massachusetts Registry of Motor Vehicles', 'https://www.mass.gov/orgs/massachusetts-registry-of-motor-vehicles',
TRUE, 'Massachusetts Department of Revenue', 'https://www.mass.gov/orgs/massachusetts-department-of-revenue',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Massachusetts Department of Environmental Protection', 'https://www.mass.gov/orgs/massdep', 'ACT rule effective 2025 model year. Enforcement may be paused.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MICHIGAN
-- ═══════════════════════════════════════════════════════════════════════
('MI',
TRUE, 'Michigan Secretary of State', 'https://www.michigan.gov/sos/industry-services/irp',
TRUE, 'Michigan Department of Treasury', 'https://www.michigan.gov/treasury',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Michigan Public Service Commission', 'https://www.michigan.gov/mpsc', 'For-hire intrastate carriers of property must register with MPSC',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MINNESOTA
-- ═══════════════════════════════════════════════════════════════════════
('MN',
TRUE, 'Minnesota Department of Public Safety', 'https://dps.mn.gov/divisions/dvs/Pages/dvs-content-detail.aspx?pageID=683',
TRUE, 'Minnesota Department of Revenue', 'https://www.revenue.state.mn.us/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Minnesota Department of Transportation', 'https://www.dot.state.mn.us/cvo/', 'For-hire intrastate carriers must register with MnDOT',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MISSISSIPPI
-- ═══════════════════════════════════════════════════════════════════════
('MS',
TRUE, 'Mississippi Department of Revenue', 'https://www.dor.ms.gov/',
TRUE, 'Mississippi Department of Revenue', 'https://www.dor.ms.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Mississippi Public Service Commission', 'https://www.psc.ms.gov/', 'For-hire intrastate carriers must obtain PSC authority',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MISSOURI
-- ═══════════════════════════════════════════════════════════════════════
('MO',
TRUE, 'Missouri Department of Revenue', 'https://dor.mo.gov/motor-vehicle/motor-carrier/',
TRUE, 'Missouri Department of Revenue', 'https://dor.mo.gov/motor-vehicle/motor-carrier/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Missouri Department of Transportation', 'https://www.modot.org/motor-carrier-services', 'For-hire intrastate carriers must register with MoDOT',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- MONTANA
-- ═══════════════════════════════════════════════════════════════════════
('MT',
TRUE, 'Montana Department of Justice', 'https://dojmt.gov/driving/motor-carrier-services/',
TRUE, 'Montana Department of Transportation', 'https://www.mdt.mt.gov/business/motor_carrier/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NEBRASKA
-- ═══════════════════════════════════════════════════════════════════════
('NE',
TRUE, 'Nebraska Department of Motor Vehicles', 'https://dmv.nebraska.gov/mc',
TRUE, 'Nebraska Department of Motor Vehicles', 'https://dmv.nebraska.gov/mc',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Nebraska Public Service Commission', 'https://psc.nebraska.gov/', 'For-hire intrastate carriers must register with NE PSC',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NEVADA
-- ═══════════════════════════════════════════════════════════════════════
('NV',
TRUE, 'Nevada DMV', 'https://dmv.nv.gov/mcnew.htm',
TRUE, 'Nevada Department of Motor Vehicles', 'https://dmv.nv.gov/mcnew.htm',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'Nevada requires USDOT for intrastate CMVs >26,001 lbs',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs >26,001 lbs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NEW HAMPSHIRE
-- ═══════════════════════════════════════════════════════════════════════
('NH',
TRUE, 'New Hampshire Department of Safety', 'https://www.nh.gov/safety/divisions/dmv/',
TRUE, 'New Hampshire Department of Safety', 'https://www.nh.gov/safety/divisions/dmv/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NEW JERSEY
-- ═══════════════════════════════════════════════════════════════════════
('NJ',
TRUE, 'New Jersey Motor Vehicle Commission', 'https://www.nj.gov/mvc/',
TRUE, 'New Jersey Division of Taxation', 'https://www.nj.gov/treasury/taxation/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'New Jersey Department of Environmental Protection', 'https://www.nj.gov/dep/', 'ACT rule effective 2025 model year.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 75000000, 'New Jersey Motor Vehicle Commission', 'https://www.nj.gov/mvc/', '$750K minimum for intrastate for-hire property carriers.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NEW MEXICO
-- ═══════════════════════════════════════════════════════════════════════
('NM',
TRUE, 'New Mexico Motor Vehicle Division', 'https://www.mvd.newmexico.gov/commercial/commercial-vehicles/',
TRUE, 'New Mexico Taxation and Revenue Department', 'https://www.tax.newmexico.gov/',
TRUE, 'Weight Distance Tax (WDT)', 'New Mexico Taxation and Revenue Department', 'https://tap.state.nm.us/tap/_/', 26001, 'All CMVs >26,001 lbs declared gross weight. Annual e-permit per vehicle via TAP portal. Quarterly reporting.',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'New Mexico Environment Department', 'https://www.env.nm.gov/', 'ACT rule adopted; effective 2027 model year.',
TRUE, 'Certificate of Authority', 'New Mexico Public Regulation Commission', 'https://www.nmprc.state.nm.us/', 'For-hire intrastate carriers must obtain NMPRC authority',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NEW YORK
-- ═══════════════════════════════════════════════════════════════════════
('NY',
TRUE, 'New York DMV', 'https://dmv.ny.gov/commercial-vehicles/irp-registration',
TRUE, 'New York Department of Taxation and Finance', 'https://www.tax.ny.gov/',
TRUE, 'Highway Use Tax (HUT)', 'New York Department of Taxation and Finance', 'https://www.tax.ny.gov/bus/hut/huidx.htm', 18000, 'All motor vehicles >18,000 lbs GVW on NY highways. Certificate of Registration + decals required. File via OSCAR or Web File.',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'New York State DEC', 'https://www.dec.ny.gov/', 'ACT rule effective 2025 model year.',
TRUE, 'Operating Authority', 'New York State DOT', 'https://www.dot.ny.gov/', 'For-hire intrastate carriers must obtain NYSDOT operating authority',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 75000000, 'New York State DOT', 'https://www.dot.ny.gov/', '$750K CSL for for-hire property carriers. NYC operations may require $1.5M. Form E filing with NYSDOT.',
TRUE, 'HUT + intrastate authority + higher insurance = complex compliance state.'),
-- ═══════════════════════════════════════════════════════════════════════
-- NORTH CAROLINA
-- ═══════════════════════════════════════════════════════════════════════
('NC',
TRUE, 'North Carolina DMV', 'https://www.ncdot.gov/dmv/title-registration/vehicle/Pages/irp.aspx',
TRUE, 'North Carolina Department of Revenue', 'https://www.ncdor.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'NC does not require separate intrastate authority for property carriers',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs. Intrastate fuel decals required.',
TRUE, 75000000, 'North Carolina Utilities Commission', 'https://www.ncuc.gov/', '$750K for intrastate for-hire carriers. Form E filing.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- NORTH DAKOTA
-- ═══════════════════════════════════════════════════════════════════════
('ND',
TRUE, 'North Dakota DOT', 'https://www.dot.nd.gov/motor-vehicle/international-registration-plans-ifta-irp-and-ucr',
TRUE, 'North Dakota DOT', 'https://www.dot.nd.gov/motor-vehicle/international-registration-plans-ifta-irp-and-ucr',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- OHIO
-- ═══════════════════════════════════════════════════════════════════════
('OH',
TRUE, 'Ohio Bureau of Motor Vehicles', 'https://www.bmv.ohio.gov/',
TRUE, 'Ohio Department of Taxation', 'https://tax.ohio.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'CPCN', 'Public Utilities Commission of Ohio', 'https://puco.ohio.gov/', 'For-hire intrastate carriers must obtain CPCN from PUCO. Household goods carriers have additional requirements.',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
TRUE, 75000000, 'Public Utilities Commission of Ohio', 'https://puco.ohio.gov/', '$750K minimum for intrastate for-hire property carriers. Form E filing with PUCO.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- OKLAHOMA
-- ═══════════════════════════════════════════════════════════════════════
('OK',
TRUE, 'Oklahoma Corporation Commission', 'https://oklahoma.gov/occ/divisions/transportation.html',
TRUE, 'Oklahoma Tax Commission', 'https://oklahoma.gov/tax.html',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Intrastate License', 'Oklahoma Corporation Commission', 'https://oklahoma.gov/occ/divisions/transportation/trucking.html', 'For-hire and private intrastate carriers must obtain OCC license',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- OREGON
-- ═══════════════════════════════════════════════════════════════════════
('OR',
TRUE, 'Oregon DMV / ODOT', 'https://www.oregon.gov/odot/mct/Pages/index.aspx',
TRUE, 'Oregon Department of Transportation', 'https://www.oregon.gov/odot/mct/Pages/index.aspx',
TRUE, 'Weight-Mile Tax', 'Oregon Department of Transportation', 'https://www.oregon.gov/odot/mct/pages/weight-mile-tax-program-enrollment.aspx', 26001, 'All carriers with vehicles >26,000 lbs combined weight. Tax rate varies by weight bracket. No fuel tax for trucks; weight-mile tax replaces it. File via Oregon Trucking Online.',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Oregon Department of Environmental Quality', 'https://www.oregon.gov/deq/', 'ACT rule effective 2025 model year. Enforcement paused/delayed.',
TRUE, 'Certificate of Authority', 'Oregon Department of Transportation', 'https://www.oregon.gov/odot/mct/', 'For-hire intrastate carriers must register with ODOT',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Weight-Mile Tax is unique — Oregon has NO diesel fuel tax for trucks. WMT replaces IFTA fuel tax for OR miles.'),
-- ═══════════════════════════════════════════════════════════════════════
-- PENNSYLVANIA
-- ═══════════════════════════════════════════════════════════════════════
('PA',
TRUE, 'Pennsylvania Department of Transportation', 'https://www.penndot.pa.gov/',
TRUE, 'Pennsylvania Department of Revenue', 'https://www.revenue.pa.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Public Convenience', 'Pennsylvania Public Utility Commission', 'https://www.puc.pa.gov/', 'For-hire intrastate carriers must obtain PUC authority. Household goods carriers have additional requirements.',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs. Intrastate fuel decals required.',
TRUE, 75000000, 'Pennsylvania Public Utility Commission', 'https://www.puc.pa.gov/', '$750K for intrastate for-hire property carriers. Form E filing. Intrastate fuel permits required.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- RHODE ISLAND
-- ═══════════════════════════════════════════════════════════════════════
('RI',
TRUE, 'Rhode Island Division of Motor Vehicles', 'https://dmv.ri.gov/',
TRUE, 'Rhode Island Division of Taxation', 'https://tax.ri.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Rhode Island DEM', 'https://dem.ri.gov/', 'ACT rule adopted; effective 2027 model year.',
TRUE, 'Certificate of Authority', 'Rhode Island Public Utilities Commission', 'https://ripuc.ri.gov/', 'For-hire intrastate carriers must register with RI PUC',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- SOUTH CAROLINA
-- ═══════════════════════════════════════════════════════════════════════
('SC',
TRUE, 'South Carolina Department of Motor Vehicles', 'https://www.scdmvonline.com/',
TRUE, 'South Carolina Department of Revenue', 'https://dor.sc.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'South Carolina Public Service Commission', 'https://www.psc.sc.gov/', 'For-hire intrastate carriers must obtain PSC authority',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- SOUTH DAKOTA
-- ═══════════════════════════════════════════════════════════════════════
('SD',
TRUE, 'South Dakota Department of Revenue', 'https://dor.sd.gov/businesses/motor-vehicle/motor-carrier-services/',
TRUE, 'South Dakota Department of Revenue', 'https://dor.sd.gov/businesses/motor-vehicle/motor-carrier-services/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- TENNESSEE
-- ═══════════════════════════════════════════════════════════════════════
('TN',
TRUE, 'Tennessee Department of Revenue', 'https://www.tn.gov/revenue.html',
TRUE, 'Tennessee Department of Revenue', 'https://www.tn.gov/revenue.html',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Tennessee Regulatory Authority', 'https://www.tn.gov/tra.html', 'For-hire intrastate carriers must register with TRA',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 75000000, 'Tennessee Regulatory Authority', 'https://www.tn.gov/tra.html', '$750K for intrastate for-hire property carriers.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- TEXAS
-- ═══════════════════════════════════════════════════════════════════════
('TX',
TRUE, 'Texas Department of Motor Vehicles', 'https://www.txdmv.gov/motor-carriers',
TRUE, 'Texas Comptroller of Public Accounts', 'https://comptroller.texas.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
TRUE, 'TxDMV Number / Intrastate Operating Authority', 'Texas Department of Motor Vehicles', 'https://www.txdmv.gov/motor-carriers', 'Required for all intrastate CMV operators. TxDMV number is state-specific.',
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Intrastate Operating Authority', 'Texas Department of Motor Vehicles', 'https://www.txdmv.gov/motor-carriers', 'Motor carriers operating intrastate CMVs must obtain TxDMV number and intrastate authority',
TRUE, 'TxDMV Number', 'Texas Department of Motor Vehicles', 'https://www.txdmv.gov/motor-carriers', 'State-specific number required for intrastate CMV operations. Applied via TxFLEET portal.',
TRUE, 50000000, 'Texas Department of Motor Vehicles', 'https://www.txdmv.gov/motor-carriers', '$500K for intrastate non-hazmat. $1M for hazmat. Form E filing with TxDMV. UM/UIM coverage mandatory.',
TRUE, 'TxDMV number + intrastate authority + UCR registration all handled by TxDMV.'),
-- ═══════════════════════════════════════════════════════════════════════
-- UTAH
-- ═══════════════════════════════════════════════════════════════════════
('UT',
TRUE, 'Utah Department of Transportation', 'https://www.udot.utah.gov/connect/business/motor-carriers/',
TRUE, 'Utah State Tax Commission', 'https://tax.utah.gov/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, 'Utah does not require separate intrastate authority for property carriers',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs. Intrastate fuel decals required.',
FALSE, NULL, NULL, NULL, 'Intrastate fuel permit/decals required.',
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- VERMONT
-- ═══════════════════════════════════════════════════════════════════════
('VT',
TRUE, 'Vermont Department of Motor Vehicles', 'https://dmv.vermont.gov/CVO/international-registration-plan-irp',
TRUE, 'Vermont Department of Motor Vehicles', 'https://dmv.vermont.gov/CVO/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Vermont Agency of Natural Resources', 'https://anr.vermont.gov/', 'ACT rule effective 2026 model year. Enforcement may be delayed.',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- VIRGINIA
-- ═══════════════════════════════════════════════════════════════════════
('VA',
TRUE, 'Virginia DMV', 'https://www.dmv.virginia.gov/vehicles/motor-carrier-services',
TRUE, 'Virginia DMV', 'https://www.dmv.virginia.gov/vehicles/motor-carrier-services',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Virginia Department of Motor Vehicles', 'https://www.dmv.virginia.gov/vehicles/motor-carrier-services', 'For-hire intrastate carriers must obtain DMV authority',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- WASHINGTON
-- ═══════════════════════════════════════════════════════════════════════
('WA',
TRUE, 'Washington Department of Licensing', 'https://dol.wa.gov/vehicles-and-boats/prorate-and-fuel-tax/international-registration-plan-prorate/',
TRUE, 'Washington Department of Licensing', 'https://dol.wa.gov/vehicles-and-boats/prorate-and-fuel-tax/',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Advanced Clean Trucks (adopted)', 'Washington Department of Ecology', 'https://ecology.wa.gov/', 'ACT rule effective 2025 model year.',
TRUE, 'Permit', 'Washington Utilities and Transportation Commission', 'https://www.utc.wa.gov/regulated-industries/transportation', 'For-hire intrastate carriers must obtain WUTC permit',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- WEST VIRGINIA
-- ═══════════════════════════════════════════════════════════════════════
('WV',
TRUE, 'West Virginia Division of Motor Vehicles', 'https://transportation.wv.gov/DMV/Motor-Carriers/Pages/IRP-IFTA.aspx',
TRUE, 'West Virginia Division of Motor Vehicles', 'https://transportation.wv.gov/DMV/Motor-Carriers/Pages/IRP-IFTA.aspx',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'West Virginia Public Service Commission', 'https://www.psc.state.wv.us/', 'For-hire intrastate carriers must obtain PSC authority. Intrastate fuel decals required.',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs. Intrastate fuel decals required.',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- WISCONSIN
-- ═══════════════════════════════════════════════════════════════════════
('WI',
TRUE, 'Wisconsin Department of Transportation', 'https://wisconsindot.gov/pages/dmv/com-drv-vehs/mtr-car-trkr/irp.aspx',
TRUE, 'Wisconsin Department of Transportation', 'https://wisconsindot.gov/pages/dmv/com-drv-vehs/mtr-car-trkr/ifta.aspx',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Wisconsin Department of Transportation', 'https://wisconsindot.gov/', 'For-hire intrastate carriers must register with WisDOT',
FALSE, NULL, NULL, NULL, 'USDOT number required for intrastate CMVs',
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL),
-- ═══════════════════════════════════════════════════════════════════════
-- WYOMING
-- ═══════════════════════════════════════════════════════════════════════
('WY',
TRUE, 'Wyoming Department of Transportation', 'https://www.dot.state.wy.us/home/trucking_commercial_vehicles.html',
TRUE, 'Wyoming Department of Transportation', 'https://www.dot.state.wy.us/home/trucking_commercial_vehicles.html',
FALSE, NULL, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, 'Certificate of Authority', 'Wyoming Department of Transportation', 'https://www.dot.state.wy.us/', 'For-hire intrastate carriers must register with WYDOT',
FALSE, NULL, NULL, NULL, NULL,
FALSE, NULL, NULL, NULL, NULL,
TRUE, NULL)
ON CONFLICT (state_code) DO NOTHING;
COMMIT;

View file

@ -0,0 +1,27 @@
-- 080_carrier_operating_states.sql
--
-- Track which states a carrier operates in. Populated from:
-- - Intake forms (customer self-reports operating states)
-- - FMCSA census (phy_state as base state)
-- - Inferred from order history
--
-- Used by the DOT compliance checker to show state-specific requirements
-- and by the deficiency flagger for state-targeted campaigns.
BEGIN;
CREATE TABLE IF NOT EXISTS carrier_operating_states (
id SERIAL PRIMARY KEY,
dot_number TEXT NOT NULL,
state_code CHAR(2) NOT NULL,
is_base_state BOOLEAN NOT NULL DEFAULT FALSE,
source TEXT NOT NULL DEFAULT 'intake', -- 'intake', 'census', 'inferred'
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (dot_number, state_code)
);
CREATE INDEX IF NOT EXISTS idx_carrier_ops_dot ON carrier_operating_states(dot_number);
CREATE INDEX IF NOT EXISTS idx_carrier_ops_state ON carrier_operating_states(state_code);
CREATE INDEX IF NOT EXISTS idx_carrier_ops_base ON carrier_operating_states(is_base_state) WHERE is_base_state = TRUE;
COMMIT;

View file

@ -2038,8 +2038,23 @@ async function sendComplianceIntakeEmail(
</p> </p>
</div>` : ""; </div>` : "";
// Build intake form links for each service // DOT services are admin-assisted — no intake form needed
const intakeLinks = orders.map(o => { const DOT_SLUGS = new Set([
"mcs150-update", "boc3-filing", "ucr-registration", "dot-registration",
"mc-authority", "dot-drug-alcohol", "dot-audit-prep", "dot-full-compliance",
// State-level trucking
"irp-registration", "ifta-application", "ifta-quarterly",
"or-weight-mile-tax", "ny-hut-registration", "ky-kyu-registration",
"nm-weight-distance", "ct-highway-use-fee", "ca-mcp-carb",
"state-dot-registration", "intrastate-authority", "osow-permit",
"state-trucking-bundle",
]);
const dotOrders = orders.filter(o => DOT_SLUGS.has(o.service_slug as string));
const fccOrders = orders.filter(o => !DOT_SLUGS.has(o.service_slug as string));
const isDotOnly = fccOrders.length === 0;
// Build intake form links for FCC services only
const intakeLinks = fccOrders.map(o => {
const slug = o.service_slug as string; const slug = o.service_slug as string;
const orderNum = o.order_number as string; const orderNum = o.order_number as string;
const name = o.service_name as string; const name = o.service_name as string;
@ -2047,7 +2062,7 @@ async function sendComplianceIntakeEmail(
return `<li style="margin:6px 0;"><a href="${intakeUrl}" style="color:#1e40af;font-weight:600;font-size:14px;text-decoration:underline;">${name}</a></li>`; return `<li style="margin:6px 0;"><a href="${intakeUrl}" style="color:#1e40af;font-weight:600;font-size:14px;text-decoration:underline;">${name}</a></li>`;
}).join("\n"); }).join("\n");
const intakeSection = ` const intakeSection = fccOrders.length > 0 ? `
<div style="background:#eff6ff;border:2px solid #3b82f6;border-radius:8px;padding:20px;margin:20px 0;"> <div style="background:#eff6ff;border:2px solid #3b82f6;border-radius:8px;padding:20px;margin:20px 0;">
<p style="margin:0 0 8px;font-size:16px;font-weight:700;color:#1e3a5f;">Action Required: Complete Your Intake Form</p> <p style="margin:0 0 8px;font-size:16px;font-weight:700;color:#1e3a5f;">Action Required: Complete Your Intake Form</p>
<p style="margin:0 0 12px;font-size:13px;color:#374151;line-height:1.5;"> <p style="margin:0 0 12px;font-size:13px;color:#374151;line-height:1.5;">
@ -2055,12 +2070,26 @@ async function sendComplianceIntakeEmail(
</p> </p>
<ul style="margin:0 0 12px;padding-left:18px;">${intakeLinks}</ul> <ul style="margin:0 0 12px;padding-left:18px;">${intakeLinks}</ul>
<p style="margin:0;font-size:12px;color:#6b7280;">This usually takes 2-5 minutes. We cannot begin your filing until the intake form is complete.</p> <p style="margin:0;font-size:12px;color:#6b7280;">This usually takes 2-5 minutes. We cannot begin your filing until the intake form is complete.</p>
</div>`; </div>` : "";
const dotSection = dotOrders.length > 0 ? `
<div style="background:#fff7ed;border:2px solid #fdba74;border-radius:8px;padding:20px;margin:20px 0;">
<p style="margin:0 0 8px;font-size:16px;font-weight:700;color:#9a3412;">We're Working On It</p>
<p style="margin:0 0 12px;font-size:13px;color:#374151;line-height:1.5;">
The following services are being processed by our team. No further action is needed from you.
</p>
<ul style="margin:0 0 12px;padding-left:18px;">${dotOrders.map(o =>
`<li style="margin:4px 0;font-size:14px;color:#374151;">${o.service_name}</li>`
).join("\n")}</ul>
<p style="margin:0;font-size:12px;color:#6b7280;">You'll receive a confirmation email when your filing is complete, typically within 1 business day.</p>
</div>` : "";
const { sendEmail } = await import("../email.js"); const { sendEmail } = await import("../email.js");
await sendEmail({ await sendEmail({
to: customerEmail, to: customerEmail,
subject: `Action Required — ${entityName || "Your"} FCC Compliance Order`, subject: isDotOnly
? `Order Confirmed — ${entityName || "Your"} DOT Compliance Order`
: `Action Required — ${entityName || "Your"} Compliance Order`,
html: `<!DOCTYPE html> html: `<!DOCTYPE html>
<html><head><meta charset="UTF-8"></head> <html><head><meta charset="UTF-8"></head>
<body style="margin:0;padding:0;background:#eef0f3;font-family:Arial,sans-serif;"> <body style="margin:0;padding:0;background:#eef0f3;font-family:Arial,sans-serif;">
@ -2093,14 +2122,22 @@ async function sendComplianceIntakeEmail(
${usacSection} ${usacSection}
${dotSection}
${intakeSection} ${intakeSection}
<h2 style="margin:24px 0 8px;font-size:16px;font-weight:700;color:#111827;">What to Expect</h2> <h2 style="margin:24px 0 8px;font-size:16px;font-weight:700;color:#111827;">What to Expect</h2>
${isDotOnly ? `
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">1.</span> Our team is already working on your filing.</p>
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">2.</span> Most DOT filings are completed within 1 business day.</p>
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">3.</span> You will receive a confirmation email when everything is filed.</p>
` : `
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">1.</span> Complete the intake form above so we have the details we need.</p> <p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">1.</span> Complete the intake form above so we have the details we need.</p>
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">2.</span> We will prepare your filing within 3-7 business days.</p> <p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">2.</span> We will prepare your filing within 3-7 business days.</p>
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">3.</span> You will receive the document for review and electronic signature.</p> <p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">3.</span> You will receive the document for review and electronic signature.</p>
<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">4.</span> Once signed, we file it with the FCC and send you confirmation.</p> <p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">4.</span> Once signed, we file it and send you confirmation.</p>
${has499 ? `<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">4.</span> For 499-A filings, complete the USAC delegation above and click the confirmation button.</p>` : ""} ${has499 ? `<p style="margin:0 0 4px;font-size:14px;color:#374151;"><span style="color:#1e3a5f;font-weight:600;">5.</span> For 499-A filings, complete the USAC delegation above and click the confirmation button.</p>` : ""}
`}
<p style="margin:20px 0 0;font-size:13px;color:#9ca3af;"> <p style="margin:20px 0 0;font-size:13px;color:#9ca3af;">
Questions? Contact us at Questions? Contact us at

View file

@ -269,6 +269,85 @@ const COMPLIANCE_SERVICES: Record<
erpnext_item: "DOT-FULL-COMPLIANCE", erpnext_item: "DOT-FULL-COMPLIANCE",
discountable: true, discountable: true,
}, },
// ── State-Level Trucking Compliance ──────────────────────────────────
"irp-registration": {
name: "IRP Registration Assistance",
price_cents: 19900,
erpnext_item: "IRP-REGISTRATION",
discountable: true,
},
"ifta-application": {
name: "IFTA Application + Decals",
price_cents: 14900,
erpnext_item: "IFTA-APPLICATION",
discountable: true,
},
"ifta-quarterly": {
name: "IFTA Quarterly Filing",
price_cents: 9900,
erpnext_item: "IFTA-QUARTERLY",
discountable: true,
},
"or-weight-mile-tax": {
name: "Oregon Weight-Mile Tax Setup",
price_cents: 19900,
erpnext_item: "OR-WEIGHT-MILE-TAX",
discountable: true,
},
"ny-hut-registration": {
name: "NY Highway Use Tax Registration",
price_cents: 19900,
erpnext_item: "NY-HUT-REGISTRATION",
discountable: true,
},
"ky-kyu-registration": {
name: "KY Weight-Distance Tax Setup",
price_cents: 19900,
erpnext_item: "KY-KYU-REGISTRATION",
discountable: true,
},
"nm-weight-distance": {
name: "NM Weight-Distance Tax Setup",
price_cents: 19900,
erpnext_item: "NM-WEIGHT-DISTANCE",
discountable: true,
},
"ct-highway-use-fee": {
name: "CT Highway Use Fee Setup",
price_cents: 19900,
erpnext_item: "CT-HIGHWAY-USE-FEE",
discountable: true,
},
"ca-mcp-carb": {
name: "California MCP + CARB Compliance",
price_cents: 34900,
erpnext_item: "CA-MCP-CARB",
discountable: true,
},
"state-dot-registration": {
name: "State DOT Registration",
price_cents: 14900,
erpnext_item: "STATE-DOT-REGISTRATION",
discountable: true,
},
"intrastate-authority": {
name: "Intrastate Operating Authority",
price_cents: 24900,
erpnext_item: "INTRASTATE-AUTHORITY",
discountable: true,
},
"osow-permit": {
name: "Oversize/Overweight Permit",
price_cents: 9900,
erpnext_item: "OSOW-PERMIT",
discountable: true,
},
"state-trucking-bundle": {
name: "State Compliance Bundle",
price_cents: 59900,
erpnext_item: "STATE-TRUCKING-BUNDLE",
discountable: true,
},
}; };
// ── Intake validation map ───────────────────────────────────────────── // ── Intake validation map ─────────────────────────────────────────────

View file

@ -304,6 +304,109 @@ router.get("/api/v1/dot/lookup", async (req, res) => {
} }
} }
// ── State-Level Compliance Checks ──────────────────────────────
const phyState = (carrier?.phyState || census?.phy_state || "").toUpperCase();
const isInterstate = carrier
? (carrier.censusTypeId?.censusTypeDesc || "").toLowerCase().includes("interstate")
: (census?.carrier_operation || "").toLowerCase().includes("interstate");
const isForHireCarrier = census?.authorized_for_hire || false;
if (phyState && phyState.length === 2) {
try {
const stReq = await pool.query(
"SELECT * FROM state_trucking_requirements WHERE state_code = $1",
[phyState],
);
const st = stReq.rows[0];
if (st) {
// Check 8: IRP
if (st.irp_member && isInterstate) {
checks.push({
id: "irp",
label: "IRP (Apportioned Registration)",
status: "yellow",
detail: `Interstate carriers based in ${phyState} must register under the International Registration Plan (IRP) through ${st.irp_agency || "their state DMV"}.`,
action_url: st.irp_url || null,
});
}
// Check 9: IFTA
if (st.ifta_member && isInterstate) {
checks.push({
id: "ifta",
label: "IFTA (Fuel Tax)",
status: "yellow",
detail: `Interstate carriers must file quarterly IFTA fuel tax returns through ${st.ifta_agency || "their base state"}.`,
action_url: st.ifta_url || null,
});
}
// Check 10: Weight/Distance Tax
if (st.weight_distance_tax) {
checks.push({
id: "weight_distance_tax",
label: st.weight_distance_tax_name || "Weight-Distance Tax",
status: "yellow",
detail: `${phyState} requires a ${st.weight_distance_tax_name || "weight-distance tax"} for commercial vehicles${st.weight_distance_threshold_lbs ? ` over ${st.weight_distance_threshold_lbs.toLocaleString()} lbs` : ""}.`
+ (st.weight_distance_notes ? ` ${st.weight_distance_notes}` : ""),
action_url: st.weight_distance_url || null,
});
}
// Check 11: State Motor Carrier Permit (CA MCP, etc.)
if (st.state_carrier_permit) {
checks.push({
id: "state_carrier_permit",
label: st.state_carrier_permit_name || "State Carrier Permit",
status: "yellow",
detail: `${phyState} requires a ${st.state_carrier_permit_name || "state motor carrier permit"}.`
+ (st.state_carrier_permit_notes ? ` ${st.state_carrier_permit_notes}` : ""),
action_url: st.state_carrier_permit_url || null,
});
}
// Check 12: Emissions (CARB, ACT)
if (st.emissions_program) {
checks.push({
id: "emissions",
label: st.emissions_program_name || "Emissions Compliance",
status: "yellow",
detail: `${phyState} has emissions requirements for commercial vehicles: ${st.emissions_program_name || "state emissions program"}.`
+ (st.emissions_notes ? ` ${st.emissions_notes}` : ""),
action_url: st.emissions_url || null,
});
}
// Check 13: Intrastate Authority
if (st.intrastate_authority_required && isForHireCarrier) {
checks.push({
id: "intrastate_authority",
label: "Intrastate Operating Authority",
status: "yellow",
detail: `For-hire intrastate carriers in ${phyState} need ${st.intrastate_authority_name || "state operating authority"} from ${st.intrastate_authority_agency || "the state PUC/PSC"}.`
+ (st.intrastate_authority_notes ? ` ${st.intrastate_authority_notes}` : ""),
action_url: st.intrastate_authority_url || null,
});
}
// Check 14: State DOT Number
if (st.state_dot_required) {
checks.push({
id: "state_dot",
label: st.state_dot_number_name || "State DOT Registration",
status: "yellow",
detail: `${phyState} requires a ${st.state_dot_number_name || "state DOT number"} in addition to your federal USDOT number.`
+ (st.state_dot_notes ? ` ${st.state_dot_notes}` : ""),
action_url: st.state_dot_url || null,
});
}
}
} catch (stErr) {
// Table may not exist yet — skip state checks silently
console.warn("[dot-lookup] State checks skipped:", (stErr as Error).message);
}
}
// Build response // Build response
const redCount = checks.filter(c => c.status === "red").length; const redCount = checks.filter(c => c.status === "red").length;
const yellowCount = checks.filter(c => c.status === "yellow").length; const yellowCount = checks.filter(c => c.status === "yellow").length;
@ -416,4 +519,87 @@ router.get("/api/v1/dot/search", async (req, res) => {
} }
}); });
// ── State Requirements Lookup ──────────────────────────────────────
router.get("/api/v1/dot/state-requirements", async (req, res) => {
const baseState = ((req.query.base_state as string) || "").toUpperCase().trim();
const opStates = ((req.query.operating_states as string) || "")
.split(",")
.map(s => s.toUpperCase().trim())
.filter(s => s.length === 2);
// Include base_state in the lookup set
const allStates = [...new Set([baseState, ...opStates].filter(Boolean))];
if (!allStates.length) {
res.status(400).json({ error: "Provide base_state and/or operating_states." });
return;
}
try {
const result = await pool.query(
"SELECT * FROM state_trucking_requirements WHERE state_code = ANY($1::char(2)[])",
[allStates],
);
const requirements: Record<string, any> = {};
const recommended: Array<{ slug: string; name: string; price_cents: number; reason: string }> = [];
let needsIrp = false;
let needsIfta = false;
for (const st of result.rows) {
const code = st.state_code;
const reqs: string[] = [];
if (st.irp_member) { reqs.push("IRP"); needsIrp = true; }
if (st.ifta_member) { reqs.push("IFTA"); needsIfta = true; }
if (st.weight_distance_tax) {
reqs.push(st.weight_distance_tax_name || "Weight-Distance Tax");
const slugMap: Record<string, string> = { OR: "or-weight-mile-tax", NY: "ny-hut-registration", KY: "ky-kyu-registration", NM: "nm-weight-distance", CT: "ct-highway-use-fee" };
if (slugMap[code]) {
recommended.push({ slug: slugMap[code], name: st.weight_distance_tax_name, price_cents: 19900, reason: `${code} ${st.weight_distance_tax_name} required` });
}
}
if (st.state_carrier_permit) {
reqs.push(st.state_carrier_permit_name || "State Carrier Permit");
if (code === "CA") recommended.push({ slug: "ca-mcp-carb", name: "California MCP + CARB Compliance", price_cents: 34900, reason: "CA Motor Carrier Permit + CARB required" });
}
if (st.emissions_program) reqs.push(st.emissions_program_name || "Emissions");
if (st.intrastate_authority_required) {
reqs.push("Intrastate Authority");
recommended.push({ slug: "intrastate-authority", name: "Intrastate Operating Authority", price_cents: 24900, reason: `${code} requires state operating authority` });
}
if (st.state_dot_required) reqs.push(st.state_dot_number_name || "State DOT Number");
requirements[code] = { ...st, requirement_summary: reqs };
}
// Add IRP/IFTA recommendations if any state requires them
if (needsIrp && allStates.length > 1) {
recommended.unshift({ slug: "irp-registration", name: "IRP Registration Assistance", price_cents: 19900, reason: "IRP required for interstate operation" });
}
if (needsIfta && allStates.length > 1) {
recommended.splice(1, 0, { slug: "ifta-application", name: "IFTA Application + Decals", price_cents: 14900, reason: "IFTA required for interstate fuel tax" });
}
// Deduplicate recommendations by slug
const seen = new Set<string>();
const uniqueRecs = recommended.filter(r => { if (seen.has(r.slug)) return false; seen.add(r.slug); return true; });
// Add bundle if 3+ recommendations
if (uniqueRecs.length >= 3) {
uniqueRecs.push({ slug: "state-trucking-bundle", name: "State Compliance Bundle", price_cents: 59900, reason: "Bundle saves vs. individual services" });
}
res.json({
base_state: baseState || null,
operating_states: opStates,
requirements,
recommended_services: uniqueRecs,
});
} catch (err) {
console.error("[dot-state-requirements] Error:", err);
res.status(500).json({ error: "State requirements lookup failed." });
}
});
export default router; export default router;

View file

@ -48,6 +48,8 @@ from .fcc_carrier_registration import FCCCarrierRegistrationHandler
# DOT / FMCSA Motor Carrier Services # DOT / FMCSA Motor Carrier Services
from .mcs150_update import MCS150UpdateHandler from .mcs150_update import MCS150UpdateHandler
from .boc3_filing import BOC3FilingHandler from .boc3_filing import BOC3FilingHandler
# State-level trucking compliance (IRP, IFTA, weight taxes, MCP, etc.)
from .state_trucking import StateTruckingHandler
SERVICE_HANDLERS: dict[str, type] = { SERVICE_HANDLERS: dict[str, type] = {
"flsa-audit": FLSAAuditHandler, "flsa-audit": FLSAAuditHandler,
@ -103,6 +105,20 @@ SERVICE_HANDLERS: dict[str, type] = {
"dot-drug-alcohol": MCS150UpdateHandler, # admin-assisted (partner enrollment) "dot-drug-alcohol": MCS150UpdateHandler, # admin-assisted (partner enrollment)
"dot-audit-prep": MCS150UpdateHandler, # admin-assisted (document prep) "dot-audit-prep": MCS150UpdateHandler, # admin-assisted (document prep)
"dot-full-compliance": MCS150UpdateHandler, # fans out to individual services "dot-full-compliance": MCS150UpdateHandler, # fans out to individual services
# ── State-Level Trucking Compliance ───────────────────────────────
"irp-registration": StateTruckingHandler,
"ifta-application": StateTruckingHandler,
"ifta-quarterly": StateTruckingHandler,
"or-weight-mile-tax": StateTruckingHandler,
"ny-hut-registration": StateTruckingHandler,
"ky-kyu-registration": StateTruckingHandler,
"nm-weight-distance": StateTruckingHandler,
"ct-highway-use-fee": StateTruckingHandler,
"ca-mcp-carb": StateTruckingHandler,
"state-dot-registration": StateTruckingHandler,
"intrastate-authority": StateTruckingHandler,
"osow-permit": StateTruckingHandler,
"state-trucking-bundle": StateTruckingHandler,
} }
# Service slugs that operate on a telecom entity — used by job_server.py # Service slugs that operate on a telecom entity — used by job_server.py

View file

@ -42,11 +42,14 @@ from datetime import datetime
LOG = logging.getLogger("workers.services.boc3_filing") LOG = logging.getLogger("workers.services.boc3_filing")
# Process agent partner details — update when partnership is established # Process agent partner details
# NWRA (Northwest Registered Agent) confirmed they no longer offer BOC-3.
# Registered Agents Inc is the replacement vendor (contract pending).
# Wholesale cost: ~$25 or less. Manual fulfillment until API is available.
PROCESS_AGENT_PARTNER = { PROCESS_AGENT_PARTNER = {
"name": "TBD — NWRA or similar", "name": "Registered Agents Inc",
"contact_email": "", "contact_email": "", # Update when contract is executed
"api_endpoint": None, # Will be set when partner API is available "api_endpoint": None, # Will be set when RAI API is available
} }
@ -56,6 +59,11 @@ class BOC3FilingHandler:
SERVICE_SLUG = "boc3-filing" SERVICE_SLUG = "boc3-filing"
SERVICE_NAME = "BOC-3 Process Agent Filing" SERVICE_NAME = "BOC-3 Process Agent Filing"
async def process(self, order_data: dict) -> list[str]:
"""Entry point called by job_server. Delegates to handle()."""
order_number = order_data.get("order_number", order_data.get("name", ""))
return self.handle(order_data, order_number)
def handle(self, order_data: dict, order_number: str) -> list[str]: def handle(self, order_data: dict, order_number: str) -> list[str]:
""" """
Process a BOC-3 filing order. Process a BOC-3 filing order.

View file

@ -56,6 +56,11 @@ class MCS150UpdateHandler:
SERVICE_SLUG = "mcs150-update" SERVICE_SLUG = "mcs150-update"
SERVICE_NAME = "MCS-150 Biennial Update" SERVICE_NAME = "MCS-150 Biennial Update"
async def process(self, order_data: dict) -> list[str]:
"""Entry point called by job_server. Delegates to handle()."""
order_number = order_data.get("order_number", order_data.get("name", ""))
return self.handle(order_data, order_number)
def handle(self, order_data: dict, order_number: str) -> list[str]: def handle(self, order_data: dict, order_number: str) -> list[str]:
""" """
Process an MCS-150 update order. Process an MCS-150 update order.

View file

@ -0,0 +1,377 @@
"""
State-Level Trucking Compliance Service Handler.
Handles all state-specific motor carrier compliance services:
- IRP Registration Assistance
- IFTA Application + Decals
- IFTA Quarterly Filing
- Oregon Weight-Mile Tax Setup
- NY Highway Use Tax Registration
- KY Weight-Distance Tax Setup
- NM Weight-Distance Tax Setup
- CT Highway Use Fee Setup
- California MCP + CARB Compliance
- State DOT Registration
- Intrastate Operating Authority
- Oversize/Overweight Permit
- State Compliance Bundle
All are admin-assisted: we create a todo with state-specific filing
instructions. The state_trucking_requirements table (migration 079)
provides agency names, portal URLs, and requirement details.
Pricing: $99-$599 depending on service.
"""
from __future__ import annotations
import json
import logging
import os
from datetime import datetime
LOG = logging.getLogger("workers.services.state_trucking")
# Map service slugs to human-readable names and filing instructions
SERVICE_INFO = {
"irp-registration": {
"name": "IRP Registration Assistance",
"category": "irp",
"steps": [
"1. Verify carrier's base state and operating states",
"2. Determine vehicle types and weights for apportionment",
"3. File IRP application through base state's IRP office",
"4. Submit cab card documentation for each power unit",
"5. Pay apportioned fees to each jurisdiction",
"6. Send confirmation + cab cards to client",
],
},
"ifta-application": {
"name": "IFTA Application + Decals",
"category": "ifta",
"steps": [
"1. Verify carrier's base state for IFTA",
"2. File IFTA license application through base state",
"3. Order IFTA decals (2 per qualifying vehicle)",
"4. Set up quarterly filing schedule",
"5. Send IFTA license + decals to client",
],
},
"ifta-quarterly": {
"name": "IFTA Quarterly Filing",
"category": "ifta",
"steps": [
"1. Collect mileage records for the quarter by jurisdiction",
"2. Collect fuel purchase records for the quarter",
"3. Calculate net tax/credit per jurisdiction",
"4. File quarterly return through base state's IFTA portal",
"5. Pay any taxes due or process credits",
"6. Send confirmation to client",
],
},
"or-weight-mile-tax": {
"name": "Oregon Weight-Mile Tax Setup",
"category": "weight_distance",
"steps": [
"1. Register carrier with Oregon DOT for Weight-Mile Tax",
"2. Set up Oregon Trucking Online (OTO) account",
"3. File for weight receipt / temporary pass if needed",
"4. Configure monthly/quarterly reporting schedule",
"5. File first weight-mile tax report",
"6. Send account credentials and confirmation to client",
],
},
"ny-hut-registration": {
"name": "NY Highway Use Tax Registration",
"category": "weight_distance",
"steps": [
"1. Register carrier with NY Department of Tax and Finance",
"2. File Form TMT-1 (Highway Use Tax Return) registration",
"3. Obtain NYHUT certificate of registration",
"4. Set up quarterly filing schedule",
"5. Send certificate and filing instructions to client",
],
},
"ky-kyu-registration": {
"name": "KY Weight-Distance Tax Setup",
"category": "weight_distance",
"steps": [
"1. Register carrier with Kentucky Department of Revenue",
"2. Obtain KYU number",
"3. Set up quarterly reporting on KY E-file system",
"4. File first weight-distance tax return",
"5. Send KYU number and confirmation to client",
],
},
"nm-weight-distance": {
"name": "NM Weight-Distance Tax Setup",
"category": "weight_distance",
"steps": [
"1. Register carrier with NM Motor Vehicle Division",
"2. Obtain annual weight-distance tax permit (per vehicle)",
"3. Set up e-permit account",
"4. Send permits and confirmation to client",
],
},
"ct-highway-use-fee": {
"name": "CT Highway Use Fee Setup",
"category": "weight_distance",
"steps": [
"1. Register carrier with CT Department of Revenue Services",
"2. Set up myconneCT portal account",
"3. File initial Highway Use Fee registration",
"4. Set up quarterly filing schedule",
"5. Send registration confirmation to client",
],
},
"ca-mcp-carb": {
"name": "California MCP + CARB Compliance",
"category": "state_permit",
"steps": [
"1. Obtain CA Number from California Highway Patrol (CHP)",
"2. Apply for Motor Carrier Permit (MCP) through CA DMV",
"3. Verify vehicle fleet meets CARB Truck & Bus Rule requirements",
"4. File CARB compliance documentation if needed",
"5. Set up annual MCP renewal reminders",
"6. Send CA Number, MCP, and CARB compliance status to client",
],
},
"state-dot-registration": {
"name": "State DOT Registration",
"category": "state_dot",
"steps": [
"1. Determine which state requires separate DOT registration",
"2. File registration application with state DOT/DMV",
"3. Submit required documentation (insurance, USDOT, etc.)",
"4. Obtain state registration number",
"5. Send registration confirmation to client",
],
},
"intrastate-authority": {
"name": "Intrastate Operating Authority",
"category": "intrastate",
"steps": [
"1. Determine state-specific authority type (COA, CPCN, etc.)",
"2. File application with state PUC/PSC/DOT",
"3. Submit required documentation (insurance, BOC-3, financials)",
"4. Pay state filing fees",
"5. Monitor application status",
"6. Send authority certificate to client when issued",
],
},
"osow-permit": {
"name": "Oversize/Overweight Permit",
"category": "osow",
"steps": [
"1. Determine permit type (single trip vs annual)",
"2. Collect load specifications (dimensions, weight, route)",
"3. File permit application with state DOT",
"4. Pay permit fees",
"5. Obtain and verify permit conditions/restrictions",
"6. Send permit to client",
],
},
"state-trucking-bundle": {
"name": "State Compliance Bundle",
"category": "bundle",
"steps": [
"1. Review carrier's base state and operating states",
"2. Identify all state-level obligations (IRP, IFTA, weight tax, permits)",
"3. File IRP registration through base state",
"4. File IFTA application through base state",
"5. Register for any applicable weight-distance taxes",
"6. Apply for state carrier permits where required",
"7. Send all registrations and confirmations to client",
],
},
}
class StateTruckingHandler:
"""Handle all state-level trucking compliance orders."""
SERVICE_SLUG = "state-trucking"
SERVICE_NAME = "State Trucking Compliance"
async def process(self, order_data: dict) -> list[str]:
"""Entry point called by job_server. Delegates to handle()."""
order_number = order_data.get("order_number", order_data.get("name", ""))
return self.handle(order_data, order_number)
def handle(self, order_data: dict, order_number: str) -> list[str]:
"""Process a state trucking compliance order."""
# Resolve the service slug — job_server may store it in order_data,
# or we can look it up from the DB via order_number.
service_slug = order_data.get("service_slug", "")
if not service_slug and order_number:
service_slug = self._resolve_slug(order_number)
info = SERVICE_INFO.get(service_slug, {})
service_name = info.get("name", service_slug)
LOG.info("[%s] Processing %s order", order_number, service_name)
intake = order_data.get("intake_data") or {}
if isinstance(intake, str):
intake = json.loads(intake)
dot_number = intake.get("dot_number", "")
entity_name = intake.get("entity_name", order_data.get("customer_name", ""))
customer_email = order_data.get("customer_email", "")
base_state = intake.get("base_state", intake.get("phy_state", ""))
operating_states = intake.get("operating_states", [])
# Look up state requirements if we have a base state
state_reqs = None
if base_state:
state_reqs = self._get_state_requirements(base_state)
# Build the admin todo
steps = info.get("steps", ["1. Review order and fulfill manually"])
# Enrich steps with state-specific agency info if available
if state_reqs:
agency_info = self._get_agency_info(info.get("category", ""), state_reqs)
if agency_info:
steps = steps + [f"Agency: {agency_info['agency']}", f"Portal: {agency_info['url']}"]
todo_data = {
"order_number": order_number,
"service": service_name,
"service_slug": service_slug,
"dot_number": dot_number,
"entity_name": entity_name,
"customer_email": customer_email,
"base_state": base_state,
"operating_states": operating_states,
"intake_data": intake,
"state_requirements": state_reqs,
"steps": steps,
}
try:
import psycopg2
conn = psycopg2.connect(os.environ.get("DATABASE_URL", ""))
try:
with conn.cursor() as cur:
cur.execute("""
INSERT INTO admin_todos (
title, category, priority, order_number, service_slug,
description, data, status
) VALUES (%s, %s, %s, %s, %s, %s, %s, 'pending')
""", (
f"{service_name}{entity_name} (DOT {dot_number})"
if dot_number else f"{service_name}{entity_name}",
"filing",
"high" if service_slug in ("ca-mcp-carb", "state-trucking-bundle") else "normal",
order_number,
service_slug,
f"Service: {service_name}\n"
f"DOT: {dot_number}\n"
f"Base state: {base_state}\n"
f"Operating states: {', '.join(operating_states) if operating_states else 'N/A'}\n"
f"Customer: {customer_email}\n\n"
f"Steps:\n" + "\n".join(steps),
json.dumps(todo_data),
))
conn.commit()
finally:
conn.close()
LOG.info("[%s] Admin todo created for %s", order_number, service_name)
except Exception as exc:
LOG.error("[%s] Failed to create admin todo: %s", order_number, exc)
# Send status email
self._send_status_email(
order_number, service_name, entity_name, dot_number, customer_email
)
return []
def _resolve_slug(self, order_number: str) -> str:
"""Look up the service_slug from compliance_orders by order_number."""
try:
import psycopg2
conn = psycopg2.connect(os.environ.get("DATABASE_URL", ""))
try:
with conn.cursor() as cur:
cur.execute(
"SELECT service_slug FROM compliance_orders WHERE order_number = %s",
(order_number,),
)
row = cur.fetchone()
return row[0] if row else ""
finally:
conn.close()
except Exception as exc:
LOG.warning("Could not resolve slug for %s: %s", order_number, exc)
return ""
def _get_state_requirements(self, state_code: str) -> dict | None:
"""Fetch state trucking requirements from database."""
try:
import psycopg2
conn = psycopg2.connect(os.environ.get("DATABASE_URL", ""))
try:
with conn.cursor() as cur:
cur.execute(
"SELECT * FROM state_trucking_requirements WHERE state_code = %s",
(state_code.upper(),),
)
cols = [d[0] for d in cur.description]
row = cur.fetchone()
if row:
return dict(zip(cols, row))
finally:
conn.close()
except Exception as exc:
LOG.warning("Could not fetch state requirements for %s: %s", state_code, exc)
return None
def _get_agency_info(self, category: str, reqs: dict) -> dict | None:
"""Extract the relevant agency name and URL for a service category."""
mapping = {
"irp": ("irp_agency", "irp_url"),
"ifta": ("ifta_agency", "ifta_url"),
"weight_distance": ("weight_distance_agency", "weight_distance_url"),
"state_permit": ("state_carrier_permit_agency", "state_carrier_permit_url"),
"state_dot": ("state_dot_agency", "state_dot_url"),
"intrastate": ("intrastate_authority_agency", "intrastate_authority_url"),
}
keys = mapping.get(category)
if keys and reqs.get(keys[0]):
return {"agency": reqs[keys[0]], "url": reqs.get(keys[1], "")}
return None
def _send_status_email(self, order_number, service_name, entity_name, dot_number, customer_email):
"""Send client a status email."""
if not customer_email:
return
try:
import smtplib
from email.mime.text import MIMEText
dot_line = f" (DOT# {dot_number})" if dot_number else ""
body = (
f"Hi,\n\n"
f"We've received your {service_name} order for "
f"{entity_name}{dot_line}.\n\n"
f"Order: {order_number}\n\n"
f"Our team is reviewing your information and will complete "
f"the filing typically within 1-2 business days. We'll send "
f"you a confirmation email when everything is done.\n\n"
f"Questions? Reply to this email or call (888) 411-0383.\n\n"
f"Performance West Inc.\n"
f"DOT Compliance Services\n"
)
msg = MIMEText(body)
msg["Subject"] = f"{service_name} In Progress — {entity_name}{dot_line}"
msg["From"] = "noreply@performancewest.net"
msg["To"] = customer_email
with smtplib.SMTP("localhost", 25) as s:
s.sendmail(msg["From"], [customer_email], msg.as_string())
LOG.info("[%s] Status email sent to %s", order_number, customer_email)
except Exception as exc:
LOG.warning("[%s] Failed to send status email: %s", order_number, exc)

View file

@ -169,6 +169,140 @@
</div> </div>
</label> </label>
<div id="pw-state-services" style="display:none">
<h3 style="font-size:11px;font-weight:700;color:#ea580c;text-transform:uppercase;letter-spacing:0.05em;margin:24px 0 8px">State Compliance</h3>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="irp">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="irp-registration" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">IRP Registration Assistance</span>
<span class="text-sm font-bold text-orange-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">International Registration Plan — apportioned vehicle registration for interstate carriers. Filed through your base state.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="ifta">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ifta-application" data-price="14900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">IFTA Application + Decals</span>
<span class="text-sm font-bold text-orange-600">$149</span>
</div>
<p class="text-xs text-gray-500 mt-1">International Fuel Tax Agreement — get your IFTA license and decals for interstate fuel tax reporting.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="ca-mcp">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ca-mcp-carb" data-price="34900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">California MCP + CARB Compliance</span>
<span class="text-sm font-bold text-orange-600">$349</span>
</div>
<p class="text-xs text-gray-500 mt-1">Motor Carrier Permit (MCP) + CARB Truck & Bus Rule compliance. Required for all carriers operating in California.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-or">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="or-weight-mile-tax" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Oregon Weight-Mile Tax Setup</span>
<span class="text-sm font-bold text-orange-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">Account setup and first filing for Oregon's Weight-Mile Tax. Required for vehicles over 26,001 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-ny">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ny-hut-registration" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">NY Highway Use Tax (HUT)</span>
<span class="text-sm font-bold text-orange-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">Registration and first filing for New York's Highway Use Tax. Required for vehicles over 18,000 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-ky">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ky-kyu-registration" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">KY Weight-Distance Tax (KYU)</span>
<span class="text-sm font-bold text-orange-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">KYU number and account setup for Kentucky's Weight-Distance Tax. Required for vehicles over 59,999 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-nm">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="nm-weight-distance" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">NM Weight-Distance Tax</span>
<span class="text-sm font-bold text-orange-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">E-permit and account setup for New Mexico's Weight-Distance Tax. Required for vehicles over 26,001 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="weight-tax-ct">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="ct-highway-use-fee" data-price="19900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">CT Highway Use Fee</span>
<span class="text-sm font-bold text-orange-600">$199</span>
</div>
<p class="text-xs text-gray-500 mt-1">Registration and first filing for Connecticut's Highway Use Fee. Required for vehicles over 26,000 lbs.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-gray-200 bg-white p-4 cursor-pointer hover:border-orange-300" data-state-svc="intrastate">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="intrastate-authority" data-price="24900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">Intrastate Operating Authority</span>
<span class="text-sm font-bold text-orange-600">$249</span>
</div>
<p class="text-xs text-gray-500 mt-1">State-level operating authority (Certificate of Authority / CPCN) for for-hire intrastate carriers.</p>
</div>
</div>
</label>
<label class="svc-card block rounded-xl border-2 border-orange-200 bg-orange-50 p-4 cursor-pointer hover:border-orange-400" data-state-svc="bundle">
<div class="flex items-start gap-3">
<input type="checkbox" data-slug="state-trucking-bundle" data-price="59900" class="mt-1 accent-orange-500">
<div class="flex-1">
<div class="flex items-center justify-between">
<span class="font-semibold text-gray-900">State Compliance Bundle</span>
<span class="text-sm font-bold text-orange-600">$599 <span class="text-xs font-normal text-green-600 ml-1">Save vs. individual</span></span>
</div>
<p class="text-xs text-gray-500 mt-1">IRP + IFTA + weight-distance tax + state permits — everything your state requires. We identify and file all obligations.</p>
</div>
</div>
</label>
</div>
</div> </div>
<!-- Insurance referral (shown if carrier has insurance issue and didn't submit on checker page) --> <!-- Insurance referral (shown if carrier has insurance issue and didn't submit on checker page) -->
@ -272,6 +406,23 @@ if (dot) {
if (emailFromUrl) { var e = document.getElementById("pw-email"); if (e) e.value = emailFromUrl; } if (emailFromUrl) { var e = document.getElementById("pw-email"); if (e) e.value = emailFromUrl; }
if (promoFromUrl) { var p = document.getElementById("pw-promo"); if (p) { p.value = promoFromUrl.toUpperCase(); p.readOnly = true; p.style.background = "#fff7ed"; p.style.borderColor = "#f97316"; } } if (promoFromUrl) { var p = document.getElementById("pw-promo"); if (p) { p.value = promoFromUrl.toUpperCase(); p.readOnly = true; p.style.background = "#fff7ed"; p.style.borderColor = "#f97316"; } }
// Show state compliance services section — always visible so users can add them
var stateSection = document.getElementById("pw-state-services");
if (stateSection) stateSection.style.display = "block";
// If ?state=XX, highlight relevant state services
var stateParam = (params.get("state") || "").toUpperCase();
if (stateParam && dot) {
fetch(API + "/api/v1/dot/state-requirements?base_state=" + stateParam).then(function(r) { return r.json(); }).then(function(d) {
if (d.recommended_services) {
d.recommended_services.forEach(function(svc) {
var cb = document.querySelector('input[data-slug="' + svc.slug + '"]');
if (cb) { cb.checked = true; cb.dispatchEvent(new Event("change", { bubbles: true })); }
});
}
}).catch(function() {});
}
// Checkbox change → update total // Checkbox change → update total
var checkboxes = document.querySelectorAll("input[data-slug]"); var checkboxes = document.querySelectorAll("input[data-slug]");
var totalSection = document.getElementById("pw-total-section"); var totalSection = document.getElementById("pw-total-section");

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -112,6 +112,22 @@ export const INTAKE_MANIFEST: Record<string, IntakeStep[]> = {
"dot-drug-alcohol": ["review"], "dot-drug-alcohol": ["review"],
"dot-audit-prep": ["review"], "dot-audit-prep": ["review"],
"dot-full-compliance": ["review"], "dot-full-compliance": ["review"],
// ── State-Level Trucking Compliance ─────────────────────────────────
// Admin-assisted: info collected at checkout, no intake form needed.
"irp-registration": ["review"],
"ifta-application": ["review"],
"ifta-quarterly": ["review"],
"or-weight-mile-tax": ["review"],
"ny-hut-registration": ["review"],
"ky-kyu-registration": ["review"],
"nm-weight-distance": ["review"],
"ct-highway-use-fee": ["review"],
"ca-mcp-carb": ["review"],
"state-dot-registration":["review"],
"intrastate-authority": ["review"],
"osow-permit": ["review"],
"state-trucking-bundle": ["review"],
}; };
// Category-gated dynamic steps. The Wizard inserts these after the `category` // Category-gated dynamic steps. The Wizard inserts these after the `category`
@ -155,6 +171,20 @@ export const SERVICE_META: Record<string, { name: string; price_cents: number }>
"dot-drug-alcohol": { name: "DOT Drug & Alcohol Compliance Program", price_cents: 14900 }, "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-audit-prep": { name: "New Entrant Safety Audit Preparation", price_cents: 39900 },
"dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 49900 }, "dot-full-compliance": { name: "DOT Full Compliance Bundle", price_cents: 49900 },
// State-level trucking
"irp-registration": { name: "IRP Registration Assistance", price_cents: 19900 },
"ifta-application": { name: "IFTA Application + Decals", price_cents: 14900 },
"ifta-quarterly": { name: "IFTA Quarterly Filing", price_cents: 9900 },
"or-weight-mile-tax": { name: "Oregon Weight-Mile Tax Setup", price_cents: 19900 },
"ny-hut-registration": { name: "NY Highway Use Tax Registration", price_cents: 19900 },
"ky-kyu-registration": { name: "KY Weight-Distance Tax Setup", price_cents: 19900 },
"nm-weight-distance": { name: "NM Weight-Distance Tax Setup", price_cents: 19900 },
"ct-highway-use-fee": { name: "CT Highway Use Fee Setup", price_cents: 19900 },
"ca-mcp-carb": { name: "California MCP + CARB Compliance", price_cents: 34900 },
"state-dot-registration": { name: "State DOT Registration", price_cents: 14900 },
"intrastate-authority": { name: "Intrastate Operating Authority", price_cents: 24900 },
"osow-permit": { name: "Oversize/Overweight Permit", price_cents: 9900 },
"state-trucking-bundle": { name: "State Compliance Bundle", price_cents: 59900 },
}; };
export function formatUSD(cents: number): string { export function formatUSD(cents: number): string {

View file

@ -20,3 +20,11 @@ const description = "Designate a process agent in all 48 states plus DC.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Prepare for your 18-month FMCSA safety audit.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Consortium enrollment, written policy, and DER designation.
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "MCS-150 + BOC-3 + UCR + Drug & Alcohol + Audit Prep.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Register a new USDOT number with FMCSA.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Apply for common or contract carrier operating authority.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "FMCSA biennial update of company profile, fleet size, and m
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>

View file

@ -20,3 +20,11 @@ const description = "Unified Carrier Registration for interstate carriers.";
<Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} /> <Wizard service_slug={slug} steps={steps ?? ["entity", "review", "payment"]} title={meta?.name ?? slug} />
</main> </main>
</Base> </Base>
<style>
main { max-width: 900px; margin: 0 auto; padding: 2rem 1.25rem 4rem; }
.pw-order-intro { margin-bottom: 1.5rem; }
.pw-order-intro h1 { margin: 0 0 0.25rem; color: var(--pw-navy, #1a2744); }
.pw-price { font-size: 1.5rem; font-weight: 700; color: var(--pw-green, #059669); margin: 0 0 0.75rem; }
.pw-desc { color: var(--pw-muted, #64748b); max-width: 48rem; }
</style>