落地并存测服全端:智能体 Graph/路由、后台切 8180、主账与部署脚本齐备,便于线上重发与验收。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+8
-13
@@ -1,20 +1,15 @@
|
||||
# 字段合同(contracts)
|
||||
|
||||
本目录存放与现网等价的字段 / 字典投影 JSON。智能体写字段校验、主账写 TMS 字典投影前,**必须**以本目录真文件为准。
|
||||
本目录存放字段 / 字典投影 JSON。智能体写字段校验、主账写 TMS 字典投影前,**必须**以本目录**正式**文件为准。
|
||||
|
||||
## 需要从现网拷贝的文件
|
||||
## 当前状态
|
||||
|
||||
| 文件名 | 用途 |
|
||||
| 文件名 | 状态 |
|
||||
|---|---|
|
||||
| `inquiry-required-fields-v1.json` | 询价必填与条件激活合同 |
|
||||
| `tms-dictionary-projection-v2.json` | TMS 字典 EXACT_ONLY 投影合同 |
|
||||
| `inquiry-required-fields-v1.json` | 正式(已从现网对照源拉入) |
|
||||
| `tms-dictionary-projection-v2.json` | 正式(已从现网对照源拉入) |
|
||||
| `*.PLACEHOLDER.json` | 历史占位,加载器优先正式文件 |
|
||||
|
||||
骨架阶段仅放占位文件(见同名 `*.PLACEHOLDER.json`)。拿到现网拷贝后:
|
||||
备份另见 `_ref/prod-pull/contracts/`(勿提交密钥目录)。
|
||||
|
||||
1. 覆盖为正式文件名(去掉 `.PLACEHOLDER`)。
|
||||
2. 再实现字段校验 / 字典投影;没读真 JSON 不准写校验逻辑。
|
||||
|
||||
## 禁止
|
||||
|
||||
- 不要把合同只记在提示词里而不更新本目录。
|
||||
- 不要在代码里硬编码另一套字段名。
|
||||
代码加载:`agent.schema.load_contract` / `require_formal_contract`。
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"_comment": "占位:请用现网 inquiry-required-fields-v1.json 覆盖为同名正式文件后再写字段校验。骨架阶段禁止依赖本文件做业务判断。",
|
||||
"_comment": "占位:正式合同由产品/仓库内审交付到同名 inquiry-required-fields-v1.json。禁止从现网服务器或现网发布目录拷贝。骨架阶段禁止依赖本文件做业务判断。",
|
||||
"schemaVersion": "v1-placeholder",
|
||||
"fields": []
|
||||
}
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"contract_id": "INQUIRY_REQUIRED_FIELDS_V1",
|
||||
"status": "APPROVED",
|
||||
"approved_by": "user",
|
||||
"approved_at": "2026-08-30T02:30:00+08:00",
|
||||
"requirement_id": "REQ-20260830-030",
|
||||
"last_amended_requirement_id": "REQ-20260831-009 revision 1",
|
||||
"stage_semantics": {
|
||||
"PRICE_REQUIRED": "首次查价必须满足的字段;只按已确认的业务线和二级类型激活。",
|
||||
"COLLAB_REQUIRED": "首次查价字段保持有效后,进入协同阶段追加的必填字段。"
|
||||
},
|
||||
"value_validity": {
|
||||
"scope": "ONLY_CURRENTLY_ACTIVATED_REQUIRED_FIELDS",
|
||||
"completion_rule": "TRIMMED_NON_EMPTY_VALUE_IS_PRESENT",
|
||||
"content_validation": "DISABLED_LOCAL_VALUE_FORMAT_AND_COMPATIBILITY_VALIDATION_EXCEPT_DECLARED_MACHINE_TYPES",
|
||||
"accepted_user_values": "当前作用域字段收到任意非空值即视为已采集;本地不得按单位、车型、布尔文案、别名、格式或封闭枚举拒绝。SEA箱型箱量保持一个原始业务字段,结构化containerItems只由DeepSeek B投影;投影不可用时由TMS查询边返回1003。",
|
||||
"inactive_field_display_not_a_fact": "未激活字段摘要中的-只表示不适用,不作为字段值进入完整性校验。"
|
||||
},
|
||||
"model_scopes": {
|
||||
"PRICING": "DeepSeek B只接收本合同pricing_required中当前激活字段、必要路由身份和optional_projection_fields中当前业务线允许的可选事实;缺项只按pricing_required计算。",
|
||||
"COLLABORATION": "DeepSeek B接收同一票不可变销售原话、已确认运输模式和陆运二级类型,只返回当前激活协同字段;结果保存到独立快照。点击协同时必须重新执行本范围。"
|
||||
},
|
||||
"pricing_required": {
|
||||
"SEA": {
|
||||
"always": ["起运港", "目的港", "品名", "货量", "整柜或拼柜", "箱型箱量"],
|
||||
"display_names": {"货量": "货物数量"}
|
||||
},
|
||||
"AIR": {
|
||||
"always": ["起运港", "目的港", "品名", "件数", "毛重", "体积", "包装方式"],
|
||||
"display_names": {"起运港": "起运地", "目的港": "目的地", "毛重": "重量(KG)", "体积": "体积(CBM)", "包装方式": "包装类型"}
|
||||
},
|
||||
"LAND": {
|
||||
"国内运输拼车": {
|
||||
"always": ["起运港", "目的港", "品名", "体积", "毛重"],
|
||||
"display_names": {"起运港": "始发站", "目的港": "目的地", "品名": "货物品名", "体积": "体积(CBM)", "毛重": "重量(KG)"}
|
||||
},
|
||||
"国内运输整车": {
|
||||
"always": ["起运港", "目的港", "品名", "车型数量"],
|
||||
"display_names": {"起运港": "始发站", "目的港": "目的地", "品名": "货物品名", "车型数量": "车型/数量"}
|
||||
},
|
||||
"跨境集拼": {
|
||||
"always": ["起运港", "目的港", "品名", "体积", "毛重"],
|
||||
"display_names": {"起运港": "始发站", "目的港": "目的地", "品名": "货物品名", "体积": "体积(CBM)", "毛重": "重量(KG)"}
|
||||
},
|
||||
"跨境整车": {
|
||||
"always": ["起运港", "目的港", "品名"],
|
||||
"display_names": {"起运港": "起运地", "目的港": "目的地", "品名": "货物品名"}
|
||||
},
|
||||
"中港": {
|
||||
"always": ["起运港", "目的港", "品名", "车型数量"],
|
||||
"display_names": {"起运港": "始发站", "目的港": "目的地", "品名": "货物品名", "车型数量": "车型/数量"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"optional_projection_fields": {
|
||||
"LAND": ["件数", "毛重", "体积", "时效要求", "cargo_items"],
|
||||
"semantics": "这些字段不是首次查价必填项;只有销售原话明确出现且DeepSeek B给出逐项证据时才保真保存。代码不得从原始自然语言猜测,只可对模型结构化cargo_items做单位与算术投影。"
|
||||
},
|
||||
"collaboration_required": {
|
||||
"SEA": ["贸易条款", "货好时间", "HS编码", "是否含油", "是否含电", "是否含磁"],
|
||||
"AIR": ["是否含电", "是否含磁"],
|
||||
"LAND": {
|
||||
"国内运输整车": ["时效要求", "客户名称", "货值", "包装方式", "是否危险品"],
|
||||
"国内运输拼车": ["时效要求", "客户名称", "包装方式", "货值", "是否危险品"],
|
||||
"跨境整车": ["时效要求", "客户名称", "HS编码", "车型数量", "贸易条款", "货值", "包装方式", "是否危险品"],
|
||||
"跨境集拼": ["时效要求", "客户名称", "HS编码", "贸易条款", "包装方式", "是否危险品"],
|
||||
"中港": {"same_as": "跨境整车"}
|
||||
}
|
||||
},
|
||||
"collaboration_value_contracts": {
|
||||
"enforcement": "SUGGESTION_ONLY_USER_TYPED_NON_EMPTY_VALUE_IS_ACCEPTED",
|
||||
"LAND": {
|
||||
"时效要求": {
|
||||
"国内运输整车": ["普件(常用线路/常规车型)", "普件(非常用线路/临时线路/特种车型)", "急件"],
|
||||
"国内运输拼车": ["普件(常用线路/常规车型)", "普件(非常用线路/临时线路/特种车型)", "急件"],
|
||||
"跨境整车": ["普件(中港、东南亚常用线路/常规车型)", "普件(中亚、中欧、东南亚涉及国内+国外段)", "普件(中亚、中欧、东南亚涉及境外段清派等特殊要求)", "急件"],
|
||||
"跨境集拼": ["普件(中港、东南亚常用线路/常规车型)", "普件(中亚、中欧、东南亚涉及国内+国外段)", "普件(中亚、中欧、东南亚涉及境外段清派等特殊要求)", "急件"],
|
||||
"中港": {"same_as": "跨境整车"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"legacy_read_aliases": {
|
||||
"时效要求": ["服务档位", "货物类型", "服务类型", "普件/急件"]
|
||||
},
|
||||
"semantic_ownership": {
|
||||
"owner": "DeepSeek B",
|
||||
"must_output": ["raw_value", "normalized_value", "evidence", "segment_binding", "cargo_binding"],
|
||||
"forbidden_local_capabilities": ["semantic_regex", "alias_inference", "content_normalization", "semantic_fallback", "value_format_rejection", "closed_enum_value_rejection"]
|
||||
},
|
||||
"machine_types": {},
|
||||
"deterministic_invariants": [
|
||||
"SEA货物数量与AIR件数是不同字段;自然语言数量落入哪个字段只能由DeepSeek B依据已解析业务线决定。",
|
||||
"SEA箱型箱量是一个首次查价必填字段,整柜/FCL和拼柜/LCL均激活;任意非空原值完成采集。",
|
||||
"SEA箱型箱量原值到containerItems.type/quantity的结构化投影只由DeepSeek B输出,本地不得拆分、去单位或限制格式。",
|
||||
"DeepSeek B不能形成可用containerItems时不得重新补问箱型或箱量,由item投影或TMS查询边返回业务1003。",
|
||||
"AIR包装类型使用内部字段包装方式承载,但只在AIR首次查价作用域激活。",
|
||||
"尺寸原文不得在本地代码中用正则、别名或关键词解析为体积(CBM);DeepSeek B已输出带证据的结构化cargo_items后,代码可按单位做确定性乘法和加总并投影总体积。",
|
||||
"协同字段只能在对应基础查价字段满足后追加,不得反向扩大首次查价必填。",
|
||||
"代码只校验字段键作用域、JSON结构、非空、条件激活、权限、版本与幂等;字段内容格式、规范性和是否适合报价由模型与下游报价服务负责。"
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"_comment": "占位:请用现网 tms-dictionary-projection-v2.json 覆盖为同名正式文件后再写字典投影。骨架阶段禁止依赖本文件做业务判断。",
|
||||
"_comment": "占位:正式合同由产品/仓库内审交付到同名 tms-dictionary-projection-v2.json。禁止从现网服务器或现网发布目录拷贝。骨架阶段禁止依赖本文件做业务判断。",
|
||||
"schemaVersion": "v2-placeholder",
|
||||
"projections": []
|
||||
}
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
{
|
||||
"schema_version": 2,
|
||||
"contract_version": "TMS-DICTIONARY-PROJECTION-V2",
|
||||
"supersedes": ".project-control/architecture/tms-dictionary-projection-v1.json",
|
||||
"required_fields_contract_ref": ".project-control/architecture/inquiry-required-fields-v1.json",
|
||||
"business_semantics_owner": "DEEPSEEK_B",
|
||||
"protocol_projection_owner": "JAVA_TMS_ADAPTER",
|
||||
"last_amended_requirement_id": "REQ-20260831-009 revision 1",
|
||||
"matching_policy": {
|
||||
"mode": "EXACT_ONLY",
|
||||
"allowed_keys": ["source_code", "source_name"],
|
||||
"allow_regex": false,
|
||||
"allow_fuzzy": false,
|
||||
"allow_alias_inference": false,
|
||||
"allow_suffix_trimming": false,
|
||||
"allow_last_write_wins": false,
|
||||
"multiple_distinct_values": "AMBIGUOUS",
|
||||
"zero_values": "UNMAPPED",
|
||||
"air_package_fallback": {
|
||||
"target_field": "packageType",
|
||||
"value": 1,
|
||||
"meaning": "全部",
|
||||
"preserve_raw_source": true
|
||||
}
|
||||
},
|
||||
"catalog_statuses": [
|
||||
"PROJECTABLE",
|
||||
"AMBIGUOUS_NAME_GROUP",
|
||||
"SOURCE_VALUE_MISSING",
|
||||
"REFERENCE_ONLY"
|
||||
],
|
||||
"resolution_statuses": [
|
||||
"RESOLVED",
|
||||
"UNMAPPED",
|
||||
"AMBIGUOUS",
|
||||
"SOURCE_VALUE_MISSING",
|
||||
"CARDINALITY_UNSUPPORTED",
|
||||
"NOT_APPLICABLE"
|
||||
],
|
||||
"dictionary_domains": [
|
||||
"air_airport",
|
||||
"air_packaging_type",
|
||||
"land_address",
|
||||
"land_vehicle",
|
||||
"sea_container",
|
||||
"land_transport_type",
|
||||
"currency_reference"
|
||||
],
|
||||
"projection_rules": [
|
||||
{
|
||||
"transport_mode": "AIR",
|
||||
"transport_type": null,
|
||||
"source_field": "origin",
|
||||
"target_field": "originCode",
|
||||
"dictionary_domain": "air_airport",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
},
|
||||
{
|
||||
"transport_mode": "AIR",
|
||||
"transport_type": null,
|
||||
"source_field": "destination",
|
||||
"target_field": "destinationCode",
|
||||
"dictionary_domain": "air_airport",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
},
|
||||
{
|
||||
"transport_mode": "AIR",
|
||||
"transport_type": null,
|
||||
"source_field": "packagingType",
|
||||
"target_field": "packageType",
|
||||
"dictionary_domain": "air_packaging_type",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": "全部"
|
||||
},
|
||||
{
|
||||
"transport_mode": "LAND",
|
||||
"transport_type": null,
|
||||
"source_field": "origin",
|
||||
"target_field": "originCode",
|
||||
"dictionary_domain": "land_address",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
},
|
||||
{
|
||||
"transport_mode": "LAND",
|
||||
"transport_type": null,
|
||||
"source_field": "destination",
|
||||
"target_field": "destinationCode",
|
||||
"dictionary_domain": "land_address",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
},
|
||||
{
|
||||
"transport_mode": "LAND",
|
||||
"transport_type": "DOMESTIC_FTL|HK",
|
||||
"source_field": "vehicleItems",
|
||||
"target_field": "vehicleType",
|
||||
"dictionary_domain": "land_vehicle",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
},
|
||||
{
|
||||
"transport_mode": "SEA",
|
||||
"transport_type": null,
|
||||
"source_field": "containerItems",
|
||||
"target_field": "containerType",
|
||||
"dictionary_domain": "sea_container",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
},
|
||||
{
|
||||
"transport_mode": "LAND",
|
||||
"transport_type": null,
|
||||
"source_field": "transportType",
|
||||
"target_field": "landTransportType",
|
||||
"dictionary_domain": "land_transport_type",
|
||||
"output_column": "projection_value",
|
||||
"default_source_value": null
|
||||
}
|
||||
],
|
||||
"direct_projection_rules": [
|
||||
{
|
||||
"transport_mode": "SEA",
|
||||
"transport_type": null,
|
||||
"source_field": "containerItems",
|
||||
"source_item_field": "quantity",
|
||||
"target_field": "containerQty",
|
||||
"value_type": "positive_integer",
|
||||
"dictionary_domain": null,
|
||||
"unit_in_value": false
|
||||
}
|
||||
],
|
||||
"non_blocking_projection_failures": [
|
||||
{
|
||||
"transport_mode": "LAND",
|
||||
"dictionary_domain": "land_address",
|
||||
"target_fields": ["originCode", "destinationCode"],
|
||||
"resolution_status": "UNMAPPED",
|
||||
"required_source_names": ["origin", "destination"],
|
||||
"behavior": "保留投影审计;名称非空时以名称且代码空值继续真实TMS查询。AMBIGUOUS、SOURCE_VALUE_MISSING及其他业务线仍失败关闭。"
|
||||
}
|
||||
],
|
||||
"direct_passthrough_fields": [
|
||||
{
|
||||
"transport_mode": "LAND",
|
||||
"source_field": "时效要求",
|
||||
"target_field": "routeCategory",
|
||||
"behavior": "逐字透传用户值,不做字典或本地语义映射。"
|
||||
}
|
||||
],
|
||||
"unsupported_projection_fields": [
|
||||
{
|
||||
"field": "seaPortCode",
|
||||
"reason": "SOURCE_WORKBOOK_HAS_NO_SEA_PORT_DICTIONARY"
|
||||
},
|
||||
{
|
||||
"field": "currency",
|
||||
"reason": "WORKBOOK_NUMERIC_VALUE_IS_REFERENCE_ONLY_NOT_ISO4217_PROJECTION"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user