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.

47 lines
1.5 KiB

import type { QuoteItem } from "@/modules/providers/quote-provider";
import type { RawQuoteTier } from "@/modules/pricing/engine";
import type { Priority1QuoteLine } from "@/workers/rpa/priority1/quote-extract";
const RATE_BY_RANK: Array<QuoteItem["rateOption"]> = [
"lowest",
"fastest",
"bestValue",
"lowest",
];
/** Priority1 承运商列表 → 系统报价格式(不要求四档齐全) */
export function priority1LinesToQuoteItems(
lines: Priority1QuoteLine[],
): QuoteItem[] {
return lines.map((line, idx) => {
const total = line.totalUsd;
return {
serviceLevel: line.serviceLevel.toLowerCase().includes("expedited")
? "guaranteed"
: "standard",
rateOption: RATE_BY_RANK[idx] ?? "lowest",
carrier: line.carrier || line.carrierCode || "Unknown",
transitDays: String(line.transitDays || "—"),
transitDescription: line.deliveryDate
? `预计送达 ${line.deliveryDate}`
: `${line.transitDays}`,
rawFreight: total,
surcharges: 0,
rawTotal: total,
};
});
}
export function priority1LinesToRawTiers(lines: Priority1QuoteLine[]): RawQuoteTier[] {
return priority1LinesToQuoteItems(lines).map((item) => ({
service_level: item.serviceLevel,
rate_option: item.rateOption,
carrier: item.carrier,
transit_days: item.transitDays,
transit_description: item.transitDescription,
raw_freight: item.rawFreight,
surcharges: item.surcharges,
raw_total: item.rawTotal,
}));
}