""" 陆运群协同项:六套名单、展示名、预填、口语危险品。 不连企微 / 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()