# 商品识别与履约 SKU 配置

当前后端已支持把外部商品先识别为内部履约 SKU，再继续匹配库存或人工履约。
配置来源已经统一为后台管理页和后端数据文件，不再使用 `.env` 里的 `ORDER_FULFILLMENT_BINDINGS_JSON`。

## 配置目标

- `match` 负责识别外部商品
- `skuCode` 代表内部履约 SKU
- `profileKey` 决定后续走库存自动链路还是人工链路

## 推荐配置格式

后台保存后会写入后端数据文件：

- `/app/data/order-fulfillment-bindings.json`

配置结构如下：

```json
[
  {
    "provider": "agiso",
    "platform": "xianyu",
    "shopId": "2209880145223",
    "skuCode": "sjz_hdl_test01",
    "profileKey": "tencent_claim_redeem",
    "priority": 10,
    "config": {
      "note": "三角洲行动腾讯兑换码自动领取"
    },
    "match": {
      "externalSkuCode": "6228372634012",
      "externalItemId": "1040695550204",
      "externalSkuName": "周边",
      "config": {
        "resolvedSkuName": "三角洲行动-自动领取"
      }
    }
  },
  {
    "provider": "agiso",
    "platform": "xianyu",
    "shopId": "2209880145223",
    "skuCode": "danzai_manual_special",
    "profileKey": "manual_review",
    "priority": 20,
    "match": {
      "externalSkuCode": "7000000000001",
      "externalSkuName": "需要人工发货的商品"
    }
  }
]
```

## 匹配顺序

系统会按下面顺序匹配外部商品：

1. `externalSkuCode`
2. `externalItemId`
3. 归一化后的 `externalSkuName`
4. 名称包含关系兜底

其中店铺级规则优先于平台级和全局级规则。

## 当前落库行为

- 订单商品的 `sku_code` 会保存为内部履约 SKU
- 原始外部商品信息会保留在 `item_snapshot_json`
- 后续履约任务、库存预占、领取链接都会按内部履约 SKU 继续执行

## 生效方式

- 后台保存后会立即同步到 `sku_fulfillment_bindings`
- 同时会同步到 `product_match_rules`
- 未匹配到规则的商品会自动落到人工处理
