Forráskód Böngészése

master_task_7094428397

jackson 4 napja
szülő
commit
72195ba8f7

+ 1 - 1
README.md

@@ -41,7 +41,7 @@ Gateway 保持“薄网关”边界:
 | `query_receivable_cost_list` | 按明确四类号码或最多 31 天业务日期查询应收费用单列表 | `/mcp/tools/queryReceivableCostList` | 固定 24 列安全表格 |
 | `query_payable_cost_list` | 按业务类型、五类号码或最多 31 天日期查询应付费用列表 | `/mcp/tools/queryPayableCostList` | 按页签严格动态列安全表格 |
 | `query_customs_declaration_files` | 按订单号或排舱单号查询报关资料 | `/mcp/tools/queryCustomsDeclarationFiles` | 安全表格 |
-| `query_outbound_list` | 按业务阶段和筛选条件查询排舱列表 | `/mcp/tools/queryOutboundList` | 固定 31 列安全表格 |
+| `query_outbound_list` | 按业务阶段和筛选条件查询排舱列表 | `/mcp/tools/queryOutboundList` | 固定 40 列安全表格 |
 | `query_outbound_detail` | 按排舱单号查询排舱汇总与订单明细 | `/mcp/tools/queryOutboundDetail` | 11 项汇总 + 38 项明细 |
 | `query_destination_trailer_list` | 按六个类型查询海外提柜进度或 DO 制作列表 | `/mcp/tools/queryDestinationTrailerList` | 进度 30 列或 DO 11 列安全表格 |
 | `list_destination_trailer_filter_options` | 查询海外提柜七类筛选项 | `/mcp/tools/listDestinationTrailerFilterOptions` | 安全筛选项 |

+ 9 - 0
services/output_presenter.py

@@ -270,6 +270,7 @@ class OutputPresenter:
             'container_code': ('柜号',),
             'seal_number': ('封条号',),
             'container_type': ('柜型',),
+            'cabinet_type': ('整拼类型',),
             'shipping_method': ('运输方式',),
             'total_volume': ('体积(CBM)',),
             'total_weight': ('重量(KG)',),
@@ -278,16 +279,24 @@ class OutputPresenter:
             'est_loading_time': ('预计装柜时间',),
             'operator': ('操作人',),
             'operation_modes': ('拖报清方式',),
+            'handle_method': ('操作方式',),
             'operation_time': ('操作时间',),
             'ship_company': ('船司',),
             'vessel_name': ('船名航次',),
+            'route': ('航线',),
             'cutoff_time_si': ('截SI时间',),
             'clearance_port': ('清关口岸',),
+            'clearance_port_eta': ('清关口岸ETA',),
             'loading_port': ('起运港',),
             'destination_port': ('目的港',),
+            'wharf_name': ('到港码头',),
             'transit_port': ('中转港',),
             'etd': ('ETD',),
             'eta': ('ETA',),
+            'ata': ('ATA',),
+            'clearance_release_time': ('清关放行时间',),
+            'overseas_warehouse': ('海外仓',),
+            'providers_name': ('拖车行',),
             'has_fda': ('是否含FDA认证商品',),
             'has_cpsc': ('是否含CPSC商品',),
             'has_food': ('是否含食品',),

+ 19 - 8
tests/test_outbound_query_tools.py

@@ -13,12 +13,14 @@ from services.output_presenter import OutputPresenter
 LIST_KEYS = [
     'outbound_number', 'direct_send', 'remark', 'cargo_type',
     'warehouse_name', 'status', 'so_number', 'container_code',
-    'seal_number', 'container_type', 'shipping_method', 'total_volume',
-    'total_weight', 'ship_schedule', 'closing_time', 'est_loading_time',
-    'operator', 'operation_modes', 'operation_time',
-    'ship_company', 'vessel_name', 'cutoff_time_si', 'clearance_port',
-    'loading_port', 'destination_port', 'transit_port', 'etd', 'eta',
-    'has_fda', 'has_cpsc', 'has_food',
+    'seal_number', 'container_type', 'cabinet_type', 'shipping_method',
+    'total_volume', 'total_weight', 'ship_schedule', 'closing_time',
+    'est_loading_time', 'operator', 'operation_modes', 'handle_method',
+    'operation_time', 'ship_company', 'vessel_name', 'route',
+    'cutoff_time_si', 'clearance_port', 'clearance_port_eta',
+    'loading_port', 'destination_port', 'wharf_name', 'transit_port',
+    'etd', 'eta', 'ata', 'clearance_release_time', 'overseas_warehouse',
+    'providers_name', 'has_fda', 'has_cpsc', 'has_food',
 ]
 
 DETAIL_KEYS = [
@@ -359,13 +361,22 @@ class OutboundQueryToolTest(unittest.TestCase):
 
         self.assertFalse(result['is_error'])
         content = result['structured_content']
-        self.assertEqual(31, len(content['headers']))
-        self.assertEqual(31, len(content['rows'][0]))
+        self.assertEqual(40, len(content['headers']))
+        self.assertEqual(40, len(content['rows'][0]))
         serialized = json.dumps(content, ensure_ascii=False)
         for key in LIST_KEYS:
             self.assertNotIn(key, serialized)
         self.assertIn('排舱单号', serialized)
         self.assertIn('拖报清方式', serialized)
+        self.assertIn('航线', serialized)
+        self.assertIn('清关口岸ETA', serialized)
+        self.assertIn('整拼类型', serialized)
+        self.assertIn('操作方式', serialized)
+        self.assertIn('清关放行时间', serialized)
+        self.assertIn('ATA', serialized)
+        self.assertIn('到港码头', serialized)
+        self.assertIn('海外仓', serialized)
+        self.assertIn('拖车行', serialized)
 
     def test_detail_presenter_outputs_eleven_item_summary_and_thirty_four_fields(self):
         presenter = OutputPresenter()

+ 1 - 1
tests/test_tool_description_boundaries.py

@@ -73,7 +73,7 @@ class ToolDescriptionBoundaryTest(unittest.TestCase):
             QueryOrderDetailTool(): ('单个订单的详情', '逐个调用', 'query_order_exact', '订单列表'),
             QueryTrackTool(): ('物流轨迹', '订单资料', '报关资料文件'),
             QueryCustomsDeclarationFilesTool(): ('报关资料文件', '完整排舱详情', '文件链接'),
-            QueryOutboundListTool(): ('排舱列表', '31个字段', '排舱详情'),
+            QueryOutboundListTool(): ('排舱列表', '40个字段', '排舱详情'),
             QueryOutboundDetailTool(): ('排舱详情', '11项汇总', '38项订单明细'),
             ListOrderFilterOptionsTool(): ('query_order_exact', '授权筛选值', '业务数据'),
             ListPendingOutboundExportFilterOptionsTool(): (

+ 1 - 1
tools/query_outbound_list.py

@@ -97,7 +97,7 @@ class QueryOutboundListTool:
             'name': self.name,
             'description': (
                 '使用场景:用户明确要查看或筛选排舱列表时使用,返回后台排舱单列表权限'
-                '范围内固定的31个字段。运输方式未指定时查询全部;排舱阶段必须由用户明确,未明确时'
+                '范围内固定的40个字段。运输方式未指定时查询全部;排舱阶段必须由用户明确,未明确时'
                 '必须先询问,不得默认选择。号码类型不明确时必须先'
                 '询问用户,确认是排舱单号、订单号、柜号、SO号还是提单号后再调用。'
                 '只有用户明确分别提供多个不同类型条件时才按AND组合。阶段、运输方式、仓库、'