落地多段联运私聊:齐了才建单拉群,附件只收格子值,核对改正不再整单重开。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -327,5 +327,114 @@ class OralExtractTests(unittest.TestCase):
|
||||
self.assertNotIn("【询价卡片】", joined)
|
||||
|
||||
|
||||
class ImageOptionalClipTests(unittest.TestCase):
|
||||
def test_numbered_extra_lines_do_not_enter_fields(self) -> None:
|
||||
oral = """
|
||||
运输方式:空运
|
||||
目的地:印尼巴淡
|
||||
件数:1PLT
|
||||
重量:55.8KGS
|
||||
体积:1.23CBM
|
||||
包装类型:托盘
|
||||
报价日期:2026-09-23
|
||||
起运地:深圳坪山保税仓
|
||||
货好时间:今天货好
|
||||
4. 希望送到目的地工厂时间: 尽快
|
||||
5.
|
||||
提货地址:深圳市坪山区龙田街道大工业区绿荫北路7号601、
|
||||
602、603 (保税仓库)
|
||||
6. 送货地址: PT SAT NUSAPERSADA TBK----JL. PELITA VI NO.99
|
||||
"""
|
||||
snap = extract_inquiry_snapshot(oral, allow_b=False)
|
||||
facts = snap["facts"]
|
||||
self.assertEqual(facts.get("货好时间"), "今天货好")
|
||||
self.assertIn("坪山区", facts.get("提货地址") or "")
|
||||
self.assertNotIn("希望送到", facts.get("货好时间") or "")
|
||||
self.assertNotIn("希望送到", facts.get("提货地址") or "")
|
||||
self.assertNotIn("送货地址", facts.get("提货地址") or "")
|
||||
self.assertIn("PT SAT", facts.get("收货地址") or "")
|
||||
from agent.policy import inquiry_copy as copy
|
||||
|
||||
card = copy.ask_clarify(
|
||||
facts=facts,
|
||||
missing_keys=["品名"],
|
||||
transport_mode="空运",
|
||||
)
|
||||
self.assertNotIn("希望送到", card)
|
||||
self.assertNotIn("4.", card)
|
||||
self.assertIn("收货地址", card)
|
||||
|
||||
|
||||
# 测服手工海运报价单:表头和格子在同一行,还带 POL/POD/Terms。
|
||||
SEA_SHEET_ORAL = """
|
||||
起运港/POL(有指定起运港口的必填) 纽约港
|
||||
*品名/Commodity: 机器设备 目的港/POD(有指定目的港口的必填) 巴生西港
|
||||
*货物数量/Quantity (或提供装箱单/Packing List) 18
|
||||
整柜或拼柜:FCL
|
||||
箱型箱量:40HQ*1
|
||||
贸易条款/Terms: CIF 要求运输时效/Requested Transit Time
|
||||
运输分类:其他
|
||||
报价日期:2026-09-07
|
||||
"""
|
||||
|
||||
|
||||
class SeaSheetHeaderClipTests(unittest.TestCase):
|
||||
def test_quote_sheet_headers_do_not_stick_to_values(self) -> None:
|
||||
"""报价单表头不能进补问:起运港只要纽约港,贸易条款只要 CIF。"""
|
||||
snap = extract_inquiry_snapshot(SEA_SHEET_ORAL, allow_b=False)
|
||||
facts = snap["facts"]
|
||||
self.assertEqual(facts.get("起运港"), "纽约港")
|
||||
self.assertEqual(facts.get("目的港"), "巴生西港")
|
||||
self.assertEqual(facts.get("品名"), "机器设备")
|
||||
self.assertEqual(str(facts.get("货量") or facts.get("货物数量") or ""), "18")
|
||||
self.assertEqual(facts.get("整柜或拼柜"), "FCL")
|
||||
self.assertEqual(facts.get("箱型箱量"), "40HQ*1")
|
||||
self.assertEqual(facts.get("贸易条款"), "CIF")
|
||||
self.assertNotIn("必填", facts.get("起运港") or "")
|
||||
self.assertNotIn("Terms", facts.get("贸易条款") or "")
|
||||
self.assertNotIn("Commodity", facts.get("品名") or "")
|
||||
self.assertNotIn("时效", facts.get("贸易条款") or "")
|
||||
|
||||
from agent.policy import inquiry_copy as copy
|
||||
|
||||
card = "\n".join(
|
||||
copy.inquiry_field_lines(
|
||||
work_order_no="",
|
||||
facts=facts,
|
||||
transport_mode="海运",
|
||||
)
|
||||
)
|
||||
self.assertIn("纽约港", card)
|
||||
self.assertNotIn("口的必填", card)
|
||||
self.assertNotIn("Commodity", card)
|
||||
self.assertNotIn("Requested Transit", card)
|
||||
|
||||
def test_next_column_header_is_not_the_value(self) -> None:
|
||||
"""
|
||||
手工海运单同一行是「字段、格子、下一列表头」。
|
||||
目的港只要巴生西港,不能收成费用汇总/POD Local Charges。
|
||||
"""
|
||||
oral = """
|
||||
起运港/POL(有指定起运港口的必填) 纽约港 目的港/POD(有指定目的港口的必填) 巴生西港 费用汇总/POD Local Charges
|
||||
*品名/Commodity: 机器设备 *货物数量/Quantity (或提供装箱单/Packing List) 18 提货地址/Place of Receipt
|
||||
整柜或拼柜:FCL 箱型箱量:40HQ*1 送货地址/Place of Delivery
|
||||
贸易条款/Terms: CIF 要求货物抵达时间/Requested Arrival Time
|
||||
运输分类:其他
|
||||
报价日期:2026-09-07
|
||||
"""
|
||||
facts = extract_inquiry_snapshot(oral, allow_b=False)["facts"]
|
||||
self.assertEqual(facts.get("起运港"), "纽约港")
|
||||
self.assertEqual(facts.get("目的港"), "巴生西港")
|
||||
self.assertEqual(facts.get("品名"), "机器设备")
|
||||
self.assertEqual(str(facts.get("货量") or facts.get("货物数量") or ""), "18")
|
||||
self.assertEqual(facts.get("整柜或拼柜"), "FCL")
|
||||
self.assertEqual(facts.get("箱型箱量"), "40HQ*1")
|
||||
self.assertEqual(facts.get("贸易条款"), "CIF")
|
||||
self.assertNotIn("费用汇总", facts.get("目的港") or "")
|
||||
self.assertNotIn("提货地址", facts.get("货量") or facts.get("货物数量") or "")
|
||||
self.assertNotIn("送货地址", facts.get("整柜或拼柜") or "")
|
||||
self.assertNotIn("抵达", facts.get("箱型箱量") or "")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user