|
|
import { z } from "zod";
|
|
|
|
|
|
export const flockHoldDeclineSchema = z.object({
|
|
|
customer_id: z.string().min(1, "请填写客户标识"),
|
|
|
quote_id: z.string().min(1, "请填写报价单号"),
|
|
|
quote_session_id: z.string().min(1, "请填写询价会话标识"),
|
|
|
});
|
|
|
|
|
|
export const flockHoldContinueSchema = flockHoldDeclineSchema;
|
|
|
|
|
|
/** Redis hold JSON(安全审查 #5) */
|
|
|
export const flockQuoteHoldStateSchema = z.object({
|
|
|
quote_id: z.string().min(1),
|
|
|
quote_session_id: z.string().min(1),
|
|
|
customer_id: z.string().min(1),
|
|
|
parked_at_ms: z.number().finite(),
|
|
|
decision_deadline_ms: z.number().finite(),
|
|
|
total_deadline_ms: z.number().finite(),
|
|
|
status: z.enum([
|
|
|
"awaiting_decision",
|
|
|
"filling",
|
|
|
"checking_out",
|
|
|
"declined",
|
|
|
"done",
|
|
|
"expired",
|
|
|
]),
|
|
|
});
|
|
|
|
|
|
const flockFlexibilityOptionSchema = z.object({
|
|
|
key: z.enum(["2_day", "1_day", "none"]),
|
|
|
label: z.string(),
|
|
|
rateUsd: z.number().finite(),
|
|
|
pickupWindow: z.string().optional(),
|
|
|
deliverBy: z.string().optional(),
|
|
|
});
|
|
|
|
|
|
export const flockFlexibilityByTierSchema = z.object({
|
|
|
flock_direct: z.array(flockFlexibilityOptionSchema).optional(),
|
|
|
standard: z.array(flockFlexibilityOptionSchema).optional(),
|
|
|
});
|
|
|
|
|
|
const flockCarrierOptionSchema = z.object({
|
|
|
carrierName: z.string().min(1).max(128),
|
|
|
transitDays: z.string(),
|
|
|
pickupDate: z.string().optional(),
|
|
|
deliveryEstimate: z.string().optional(),
|
|
|
rateUsd: z.number().finite(),
|
|
|
label: z.string(),
|
|
|
});
|
|
|
|
|
|
export const flockCarriersByTierSchema = z.object({
|
|
|
flock_direct: z.array(flockCarrierOptionSchema).optional(),
|
|
|
standard: z.array(flockCarrierOptionSchema).optional(),
|
|
|
});
|