# Ecom Po Build

> 跨境电商 PO 采购订单制作与校验技能。把选品或补货需求表与供应商报价转成可直接下发、财务可直接付款的采购订单（表头 + 明细 + 合计），并在下单前做全套校验：必填缺失、数量单价非法、重复行、MOQ 不足、阶梯价跨档、单位混用、币种与含税口径、金额复核、审批阈值、交期风险、新供应商风险。涉及「帮我做 PO 单 / 采购订单」「这批货下多少」「供应商报价怎么核」「下单前要检查什么」这类请求时使用。

- Skill: `xianglouw/ecom-po-build` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add xianglouw/ecom-po-build`
- Raw SKILL.md: https://api.skillmd.com/api/skills/xianglouw/ecom-po-build/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: xianglouw (https://skillmd.com/u/xianglouw)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/xianglouw/ecom-po-build

---


# 阶段 6 · PO 单制作与校验

把需求表和供应商报价转成**供应商可直接执行、财务可直接付款、系统可直接导入**的采购订单。PO 出错直接等于资金损失，所以本阶段的校验比生成更重要。

完整字段字典与校验规则见 [references/po-creation.md](references/po-creation.md)。

## 输入

- **需求侧**：选品/补货需求表（SKU、数量、目标仓、期望到仓日、优先级）。
- **供应商侧**：报价表（单价、阶梯价、MOQ、交期、币种、贸易条款 EXW/FOB/CIF/DDP、是否含税、包装要求）。
- **商务侧**：付款条件（如 T/T 30%+70%）、验货方式、贴标与包装要求、认证要求。
- **约束侧**：采购预算上限（`--max-amount`）、审批阈值、汇率与锁汇日期。

## 怎么跑

```bash
python3 scripts/po_build.py sourcing.csv --supplier "供应商A" --currency USD \
  --order-date 2026-09-14 --lead-time 30 --max-amount 20000 --trade-term FOB \
  --payment-term "T/T 30%+70%" --arrive-by 2026-11-15 \
  --out PO.csv --out-xlsx PO.xlsx --out-json PO.json
```

`--out-xlsx` 一次给三张工作表：PO 明细 / 订单信息 / 隔离行。

## 校验清单

必填缺失（缺单价不可下单，直接隔离）、数量或单价非法、同 SKU + 同规格重复行、MOQ 不足、阶梯价跨档（拆单更便宜时给对比）、单位混用（件/箱/托）、币种不一致、含税口径不明、行金额合计与表头或需求表不一致、总额超审批阈值、交期晚于期望到仓日、新供应商首单。

## 风险与人工边界

| 等级 | 本阶段场景 | AI 权限 | 人工权限 |
|---|---|---|---|
| 高 | 金额不符、币种不一致、缺单价、超审批阈值、新供应商首单 | 只出校验结果 + 待办 | 资金终审并下单付款 |
| 中 | MOQ 不足、阶梯价跨档、单位不一致、含税口径不明、交期偏紧 | 出结论 + 建议 | 与供应商确认 |
| 低 | 明细排版、编号生成、合计复核、表头信息填充 | 直接执行 | 事后抽查 |

**不自动下单、不自动付款。** 只生成 PO 与校验结果，提交供应商与付款由人工执行。

## 常见坑

- 单位混用（箱/件）导致数量差几十倍，是最高频的金额错误来源。
- 报价含税与否没写清，付款时才暴露。
- 交期从下单日算还是从付款日算，不同供应商口径不同，`etd` 必须写明依据。
- 同一 SKU 出现在多张需求表里，合并前先查已下未到货的 PO，避免重复下单。
- 认证与标签要求没写进 PO，货到仓被拒收或平台下架，返工成本远高于采购差价。

## 输出契约

与其他跨境电商技能共用同一个 JSON 信封，便于跨阶段串联、工单回写与事后追责：

```json
{
  "task": "po_build",
  "status": "ok | partial | blocked",
  "confidence": 0.0,
  "data": {},
  "flags": [{ "level": "high | medium | low", "type": "", "detail": "", "action": "" }],
  "need_human_review": false,
  "sources": [{ "ref": "", "as_of": "" }],
  "assumptions": [],
  "audit": { "snapshot_at": "" }
}
```

- `status`：`ok` 输入齐全 / `partial` 有缺失但结论可用 / `blocked` 关键输入缺失、必须人工先介入。
- 只要出现 `high` 级 flag，`need_human_review` 必须为 `true`。
- `confidence` 口径：有 `high` 不超过 0.7，有 `medium` 不超过 0.85，还有待填位不超过 0.9，上限 0.95。

## 交付表格

**要表格就给文件，不要只给结论。** 逐行测算、对照、明细类交付必须落到能直接打开的文件：

| 参数 | 产物 | 说明 |
|---|---|---|
| `--out` | CSV 主表 | UTF-8 BOM，Excel 双击打开中文不乱码 |
| `--out-xlsx` | Excel 工作簿 | 多工作表、表头加粗并冻结首行、列宽自适应；数字写成数值，打开即可求和与做透视 |
| `--out-md` | Markdown 报告 | 给人读的结论版 |
| `--quarantine` | 问题清单 CSV | 被拦下的素材/行，不静默丢弃 |
| `--out-json` | JSON 信封 | 给下游脚本、工单系统读 |

`.xlsx` 由 `scripts/sheetio.py` 用标准库写出，不需要 openpyxl，Excel 与 WPS 都能直接打开；同一个工具也用来读 `.xlsx`（`--sheet` 支持工作表名）。

## 作业习惯

- 先要数据再下结论；能算就不要估，能引用就不要复述。
- 结论固定附「支撑数据 + 判定规则 + 边界/反例」三段，而不是只给一个数。
- `flags` 比结论更重要：写清「我不确定什么、为什么不确认、需要谁确认」。
- 术语保留英文缩写（ROAS、ACOS、TACOS、PO、MOQ、FBA），其余用中文。

## 上下游

- 上游：[`ecom-selection-profit`](../ecom-selection-profit/) 定下要下的 SKU 与数量。
- 下游：到仓与库存数据回流到 [`ecom-roi-review`](../ecom-roi-review/) 的成本口径。
- 总控与共享约定见 [`crossborder-ecom-ops`](../crossborder-ecom-ops/)。

