103 lines
4.0 KiB
Python
103 lines
4.0 KiB
Python
"""
|
|
陆运群协同项:六套名单、展示名、预填、口语危险品。
|
|
不连企微 / TMS / 主账。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
import unittest
|
|
|
|
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
|
if ROOT not in sys.path:
|
|
sys.path.insert(0, ROOT)
|
|
|
|
from agent.llm.extract_text import extract_collab_fields
|
|
from agent.schema.field_validate import (
|
|
collab_display_name,
|
|
collab_fields_for_ticket,
|
|
harvest_oral_collab,
|
|
land_collab_fields,
|
|
pick_collab_from_facts,
|
|
)
|
|
|
|
|
|
class LandCollabFieldsTest(unittest.TestCase):
|
|
def test_domestic_ltl_keys(self):
|
|
keys = land_collab_fields("国内运输拼车", "国内长途/零担")
|
|
self.assertEqual(keys, ("客户名称", "包装方式", "货值", "是否为危险品"))
|
|
|
|
def test_domestic_ftl_longhaul_keys(self):
|
|
keys = land_collab_fields("国内运输整车", "国内长途/零担")
|
|
self.assertEqual(keys, ("客户名称", "货值", "包装方式", "是否为危险品"))
|
|
|
|
def test_domestic_ftl_order(self):
|
|
keys = land_collab_fields("国内运输整车", "国内城配/拖车/打包")
|
|
self.assertEqual(keys, ("客户名称", "货值", "包装方式", "是否为危险品"))
|
|
|
|
def test_cross_ftl_no_vehicle(self):
|
|
keys = land_collab_fields("跨境整车", "东南亚")
|
|
self.assertIn("HS编码", keys)
|
|
self.assertNotIn("车型/数量", keys)
|
|
|
|
def test_hk_ftl_has_vehicle(self):
|
|
keys = land_collab_fields("中港整车", "中港/中亚/中欧")
|
|
self.assertIn("车型/数量", keys)
|
|
self.assertEqual(keys[0], "客户名称")
|
|
|
|
def test_unlisted_pair_empty(self):
|
|
self.assertEqual(land_collab_fields("国内运输拼车", "东南亚"), ())
|
|
|
|
def test_land_hs_display(self):
|
|
self.assertEqual(collab_display_name("HS编码", "LAND"), "海关编码")
|
|
self.assertEqual(collab_display_name("HS编码", "SEA"), "商品海关编码")
|
|
|
|
def test_ticket_sea_air(self):
|
|
self.assertIn("是否含电", collab_fields_for_ticket({}, "SEA"))
|
|
self.assertEqual(
|
|
collab_fields_for_ticket({}, "AIR"),
|
|
("是否含电", "是否含磁"),
|
|
)
|
|
|
|
def test_pick_skips_inquiry_vehicle(self):
|
|
got = pick_collab_from_facts(
|
|
{"包装方式": "纸箱", "车型/数量": "9米/1", "海关编码": "8479"},
|
|
land_collab_fields("跨境整车", "东南亚"),
|
|
)
|
|
self.assertEqual(got.get("包装方式"), "纸箱")
|
|
self.assertEqual(got.get("HS编码"), "8479")
|
|
self.assertNotIn("车型/数量", got)
|
|
|
|
def test_dg_oral(self):
|
|
self.assertEqual(harvest_oral_collab("普货")["是否为危险品"], "否")
|
|
self.assertEqual(harvest_oral_collab("危险品")["是否为危险品"], "是")
|
|
self.assertEqual(harvest_oral_collab("不是危险品")["是否为危险品"], "否")
|
|
|
|
def test_labeled_without_colon(self):
|
|
allowed = land_collab_fields("国内运输拼车", "国内长途/零担")
|
|
got = extract_collab_fields(
|
|
"客户名称张三 包装方式编织袋 货值 10万",
|
|
allowed_keys=allowed,
|
|
)
|
|
self.assertEqual(got.get("客户名称"), "张三")
|
|
self.assertEqual(got.get("包装方式"), "编织袋")
|
|
self.assertEqual(got.get("货值"), "10万")
|
|
|
|
def test_bare_pack_ignored(self):
|
|
allowed = land_collab_fields("国内运输拼车", "国内长途/零担")
|
|
self.assertEqual(extract_collab_fields("编织袋", allowed_keys=allowed), {})
|
|
|
|
def test_trade_terms_filtered_for_ltl(self):
|
|
allowed = land_collab_fields("国内运输拼车", "国内长途/零担")
|
|
got = extract_collab_fields("客户名称张三,贸易条款 FOB", allowed_keys=allowed)
|
|
self.assertEqual(got, {"客户名称": "张三"})
|
|
|
|
def test_sea_labeled_still_works(self):
|
|
got = extract_collab_fields("贸易条款:FOB")
|
|
self.assertEqual(got.get("贸易条款"), "FOB")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|