feat(fulfillment): bundle/exclusion enforcement + REQUIRED_FIELDS + intake wiring (Phases 1/1.5/2)

- compliance-orders: hazmat-phmsa/state-emissions products, full REQUIRED_FIELDS
  table for all DOT/state/hazmat slugs, BUNDLE_COMPONENTS dedup + MUTUALLY_EXCLUSIVE
  enforcement on /batch (single source of truth, exported)
- checkout: empty ADMIN_ASSISTED_SLUGS (state/hazmat now get intake links)
- services/__init__: register HazmatPHMSAHandler + state-emissions handler
- state_trucking: _summarize_intake admin-todo enrichment
- Wizard: wire StateTruckingIntakeStep + step labels
This commit is contained in:
justin 2026-06-02 03:51:25 -05:00
parent 426fbb2ea1
commit b85be726b7
5 changed files with 215 additions and 16 deletions

View file

@ -41,6 +41,7 @@ import CDRPeriodStep from "./steps/CDRPeriodStep.astro";
import OCNStep from "./steps/OCNStep.astro";
import MCS150Step from "./steps/MCS150Step.astro";
import DOTIntakeStep from "./steps/DOTIntakeStep.astro";
import StateTruckingIntakeStep from "./steps/StateTruckingIntakeStep.astro";
import ClassificationWizard from "./steps/ClassificationWizard.astro";
import ReviewStep from "./steps/ReviewStep.astro";
import PaymentStep from "./steps/PaymentStep.astro";
@ -78,6 +79,8 @@ const STEP_LABELS: Record<string, string> = {
cpni_questions: "CPNI Details",
cdr_period: "Reporting Period",
ocn: "OCN Details",
"dot-intake": "Carrier Details",
"state-trucking": "Filing Details",
review: "Review",
payment: "Payment",
};
@ -122,6 +125,7 @@ const STEP_LABELS: Record<string, string> = {
{steps.includes("ocn") && <div data-step="ocn" hidden><OCNStep /></div>}
{steps.includes("mcs150") && <div data-step="mcs150" hidden><MCS150Step /></div>}
{steps.includes("dot-intake") && <div data-step="dot-intake" hidden><DOTIntakeStep /></div>}
{steps.includes("state-trucking") && <div data-step="state-trucking" hidden><StateTruckingIntakeStep /></div>}
{steps.includes("classification") && <div data-step="classification" hidden><ClassificationWizard /></div>}
{steps.includes("review") && <div data-step="review" hidden><ReviewStep service_slug={service_slug} /></div>}
{steps.includes("payment") && <div data-step="payment" hidden><PaymentStep service_slug={service_slug} /></div>}
@ -226,7 +230,7 @@ const STEP_LABELS: Record<string, string> = {
block6_cert: "Certifications", bdc_data: "BDC Data",
stir_shaken: "STIR/SHAKEN", calea: "CALEA",
foreign_carrier: "Foreign Affiliation", foreign_qual: "State Registration", dc_agent: "D.C. Agent", cpni_questions: "CPNI Details", cdr_period: "Reporting Period",
ocn: "OCN Details", review: "Review", payment: "Payment",
ocn: "OCN Details", "dot-intake": "Carrier Details", "state-trucking": "Filing Details", review: "Review", payment: "Payment",
};
// Category-gated dynamic step insertion. After the user picks Line 105