You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
2.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* Flock Freight 官网硬限PRD §14.32026-07-13 实测)
* 禁止与 MOTHERSHIP / CARGO_LIMITS 混用
*
* 字段上限之外另有拖车线性英尺约束:
* 「Linear feet of shipment is larger than trailer」→ 53' (636 in)
*/
export const FLOCK_LIMITS = {
palletCount: { min: 4, max: 20 },
totalWeightLbMax: 45_000,
dimIn: { lengthMax: 636, widthMax: 102, heightMax: 108, min: 1 },
/** 53' 拖车可用线性英尺(官网实测) */
trailerLinearFeetMax: 53,
/** 调度高级选项(非 FCFS须整票总重 > 此值才可选用,对齐官网灰色按钮 */
schedulingWeightMinLb: 5000,
zipPattern: /^\d{5}(-\d{4})?$/,
defaultDimsIn: { length: 48, width: 40, height: 48 },
} as const;
export const FLOCK_VALIDATION_MESSAGES = {
palletCount: "托盘件数只能输入 4 到 20",
totalWeight: "整票总重不能超过 45000 lb",
length: "单托长度不能超过 636 in",
width: "单托宽度不能超过 102 in",
height: "单托高度不能超过 108 in",
linearFeet:
"整票占用车长超过可用挂车长度,请下调件数或尺寸。",
pickupZip: "需要提供提货邮编",
deliveryZip: "需要提供派送邮编",
pickupDate: "请选择提货日期",
pickupDateTooEarly: "提货日期不能早于今天",
pickupDateWeekend: "提货日期不能为周六或周日",
zipFormat: "邮编须为 5 位数字(可选 +4",
} as const;
/**
* 估算占用线性英尺:拖车宽约 102in托盘宽 ≤51 可双排,否则单排。
* rows × (lengthIn/12) ≤ 53
*/
export function estimateFlockLinearFeet(
palletCount: number,
lengthIn: number,
widthIn: number,
): number {
const across = widthIn <= 51 ? 2 : 1;
const rows = Math.ceil(Math.max(1, palletCount) / across);
return (rows * Math.max(1, lengthIn)) / 12;
}
export function fitsFlockTrailerCargo(input: {
palletCount: number;
lengthIn: number;
widthIn: number;
}): boolean {
return (
estimateFlockLinearFeet(
input.palletCount,
input.lengthIn,
input.widthIn,
) <= FLOCK_LIMITS.trailerLinearFeetMax + 1e-6
);
}