feat(advisory): prerequisite-aware DOT lookup + state recommendations
- DOT lookup now returns prerequisite_status {usdot_active, authority_active,
authority_pending} from live FMCSA data so the order flow can advise
sequencing BEFORE a customer places an order.
- State-requirements recommendations annotated with prerequisite + label
(e.g. IRP/IFTA/state taxes need an active USDOT) for UI warnings.
This commit is contained in:
parent
3322003da0
commit
fc1a0588f7
1 changed files with 44 additions and 3 deletions
|
|
@ -598,6 +598,20 @@ router.get("/api/v1/dot/lookup", async (req, res) => {
|
|||
const yellowCount = checks.filter(c => c.status === "yellow").length;
|
||||
|
||||
if (res.headersSent) return; // deadline already responded
|
||||
|
||||
// Prerequisite status — lets the order flow / advisory know whether the
|
||||
// upstream items a state/authority service depends on are ACTIVE at FMCSA,
|
||||
// so we can advise sequencing BEFORE the customer places an order.
|
||||
const usdotActive = carrier?.allowedToOperate === "Y"
|
||||
&& !carrier?.oosDate
|
||||
&& (carrier?.statusCode === "A" || carrier?.statusCode == null);
|
||||
const authorityActive = carrier?.commonAuthorityStatus === "A"
|
||||
|| carrier?.contractAuthorityStatus === "A"
|
||||
|| carrier?.brokerAuthorityStatus === "A";
|
||||
const authorityPending = carrier?.commonAuthorityStatus === "P"
|
||||
|| carrier?.contractAuthorityStatus === "P"
|
||||
|| carrier?.brokerAuthorityStatus === "P";
|
||||
|
||||
res.json({
|
||||
dot_number: rawDot,
|
||||
legal_name: name,
|
||||
|
|
@ -613,6 +627,11 @@ router.get("/api/v1/dot/lookup", async (req, res) => {
|
|||
mcs150_date: census?.mcs150_parsed || null,
|
||||
carrier_type: carrier?.censusTypeId?.censusTypeDesc || census?.carrier_operation || null,
|
||||
for_hire: census?.authorized_for_hire || false,
|
||||
prerequisite_status: {
|
||||
usdot_active: Boolean(usdotActive),
|
||||
authority_active: Boolean(authorityActive),
|
||||
authority_pending: Boolean(authorityPending),
|
||||
},
|
||||
checks,
|
||||
summary: {
|
||||
red: redCount,
|
||||
|
|
@ -878,16 +897,38 @@ router.get("/api/v1/dot/state-requirements", async (req, res) => {
|
|||
const seen = new Set<string>();
|
||||
const uniqueRecs = recommended.filter(r => { if (seen.has(r.slug)) return false; seen.add(r.slug); return true; });
|
||||
|
||||
// Prerequisite-awareness: annotate each recommendation with what must be
|
||||
// active at FMCSA before it can be filed, so the UI can warn / sequence
|
||||
// services rather than letting a customer order something blocked.
|
||||
const PREREQUISITES: Record<string, { needs: string; label: string }> = {
|
||||
"irp-registration": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"ifta-application": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"ifta-quarterly": { needs: "ifta_account", label: "an active IFTA account" },
|
||||
"intrastate-authority": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"or-weight-mile-tax": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"ny-hut-registration": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"ky-kyu-registration": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"nm-weight-distance": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"ct-highway-use-fee": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
"ca-mcp-carb": { needs: "usdot_active", label: "an active USDOT number" },
|
||||
};
|
||||
const annotatedRecs = uniqueRecs.map(r => {
|
||||
const pre = PREREQUISITES[r.slug];
|
||||
return pre
|
||||
? { ...r, prerequisite: pre.needs, prerequisite_label: pre.label }
|
||||
: r;
|
||||
});
|
||||
|
||||
// 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" });
|
||||
if (annotatedRecs.length >= 3) {
|
||||
annotatedRecs.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,
|
||||
recommended_services: annotatedRecs,
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("[dot-state-requirements] Error:", err);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue