Files
skill-template/development/REQUIREMENTS.md
chendelian 4a0be93b4a
All checks were successful
技能自动化发布 / release (push) Successful in 5s
chore: auto release commit (2026-07-03 12:09:55)
2026-07-03 12:09:55 +08:00

201 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# REQUIREMENTS
## 0. 技能标识(复制 REQUIREMENTS 时必填)
| 项 | 值 |
|----|-----|
| slug | `download-settlement-report-amazon` |
| 中文 name | Amazon 结算报表自动下载 |
| 中文 description | 在 Amazon 卖家中心自动请求并下载结算报表Settlement |
| account-manager platform_key | `amazon_sim`(若尚未注册,见 README / 本文 §7 |
| 命名形态 | 标准型verb-noun-platform |
## 1. 文档目标
- 本文档用于明确 `download-settlement-report-amazon` 的研发范围、交付标准、依赖关系和验收要求。
- 技术人员应以本文件作为开发范围依据,以避免实现偏差、范围蔓延或理解不一致。
- 本文档同时作为**老师/实训样板**:学员可复制本技能结构开发同类 Amazon / 跨境报表技能。
## 2. 业务背景
- 跨境财务实训需定期从 Amazon 下载**结算报表Settlement**,用于对账、利润分析与凭证附件。
- 人工操作路径:登录卖家中心 → Reports → **Payments** 分类 → 选择 Settlement → 填写日期 → 请求 → 等待生成 → 下载 xlsx。
- 本技能用 **Playwright RPA** 在仿真环境 `https://sandbox.jc2009.com/industries/ecommerce/amazon` 自动完成上述流程,产出 xlsx 并写入 `task_logs``task_type=download_settlement`)。
- **禁止**调用 `GET/POST /api/ecommerce/amazon/reports` 等 REST API 下载;必须走浏览器页面操作。
## 3. 开发目标
- 提供标准 CLI`health``version``run``logs``log-get`
- 实现四档 adapter 中的 **mock**CI 默认)与 **simulator_rpa**(联调)
- 集成 **account-manager**`pick-web --platform amazon_sim --lease` 获取 `profile_dir` 与租约
- 登录:`launch_browser_with_profile` + `ensure_logged_in`account-manager `rpa_helpers`
- 下载文件保存至 `{skill_data_dir}/downloads/`;失败截图至 `{skill_data_dir}/rpa-artifacts/{batch_id}/`
- 可选 `RpaVideoSession` 录屏(中文步骤标题)
## 4. 功能范围
### 必须实现
- `python scripts/main.py health`
- `python scripts/main.py version`
- `python scripts/main.py run --date-from YYYY-MM-DD --date-to YYYY-MM-DD [--seller-code CODE]`
- Playwright RPA`OPENCLAW_TEST_TARGET=simulator_rpa`
- mock adapterCI 默认,`OPENCLAW_TEST_TARGET=mock`
- 写入 `task_logs``task_type=download_settlement`
- 下载文件保存到 `{skill_data_dir}/downloads/`
- 失败截图到 `rpa-artifacts/`
### 第一版不做
- 解析 xlsx 内容
- 多店铺批量下载
- 直接调 `/api/ecommerce/amazon/reports` API
- `real_rpa` 真实 Amazon 生产站点
## 5. 非功能要求
- 目录结构符合 `skill-template` 规范;入口 `scripts/main.py`
- Playwright 由宿主共享 runtime 提供;技能侧不要 `playwright install`
- URL **不要**放进 `launch_persistent_context(args=[...])`Reports 页通过 `page.goto(REPORTS_URL)` 打开
- 元素定位优先 `data-testid`F12 原则)
- 步骤间 `random_delay`;禁止 `el.value=`、JS 跳转
- Windows UTF-8 输出;错误前缀 `ERROR:`
## 6. 输入输出要求
### 输入
| 参数 | 必填 | 默认 | 说明 |
|------|------|------|------|
| `--date-from` | 是* | `2025-12-01` | 报表起始日期 |
| `--date-to` | 是* | `2025-12-31` | 报表结束日期 |
| `--seller-code` | 否 | 页面第一个 seller | 店铺代码,如 `AMA1OF6T` |
\* CLI 提供默认值,业务上仍须为合法 `YYYY-MM-DD`
环境变量见 `.env.example``AMAZON_SIM_BASE_URL``AMAZON_SIM_REPORTS_URL``OPENCLAW_TEST_TARGET` 等。
### 成功输出stdout JSON
```json
{
"ok": true,
"job_id": "...",
"file_path": "...",
"filename": "settlement_....xlsx",
"date_from": "2025-12-01",
"date_to": "2025-12-31"
}
```
### 失败输出
- 退出码非 0
- stdout JSON 中 `ok: false` 或前置 `ERROR:` 行(如 `ERROR:INVALID_ARGS`
- `task_logs.status=failed``error_msg` 含原因
- 可选:`rpa-artifacts/` 下 PNG 截图
## 7. 依赖的兄弟技能或外部系统
### 兄弟技能
- **account-manager**`platform_key=amazon_sim`;提供 `profile_dir`、租约、`get-credential --reveal`
-`amazon_sim` 平台不存在,需运维在 account-manager 注册后再添加账号
添加账号示例:
```bash
python D:\OpenClaw\client-commons\account-manager\scripts\main.py account add-web \
--platform amazon_sim \
--login-id <邮箱> \
--url https://sandbox.jc2009.com/industries/ecommerce/amazon/login \
--environment simulator \
--auth-strategy password_auto
```
`extra_json` 建议:`{"logged_in_url_pattern": "/seller"}`
Amazon 仿真登录:登录页为**邮箱 + Continue**,无复杂验证码。
### 外部系统
| 页面 | URL |
|------|-----|
| 卖家首页 | `https://sandbox.jc2009.com/industries/ecommerce/amazon/seller` |
| 登录页 | `https://sandbox.jc2009.com/industries/ecommerce/amazon/login` |
| Reports | `https://sandbox.jc2009.com/industries/ecommerce/amazon/seller/reports` |
**禁止**使用 `localhost:5173`
## 8. 不在本次范围内的内容
- 不解析 xlsx、不入账 Kingdee / 星航
- 不实现多店铺批跑
- 不修改 `client-sandbox` 源码
- 不修改 `skill-template` 源仓库
- 不实现 `real_api` / 生产 Amazon `real_rpa`
## 9. 验收标准与 RPA 步骤
### RPA 步骤(与 sandbox 联调文档一致)
参考:`client-sandbox/sandbox-docs/migration/from-monolith-docs/skill-integration-guide.md`
1. `account-manager pick-web --platform amazon_sim --lease``profile_dir``url``lease_token`
2. `launch_browser_with_profile` + `ensure_logged_in`
3. `page.goto(REPORTS_URL)`URL 不进 launch args
4. 等待 `[data-testid="reports-page-root"]`
5. 切换到 **Payments** 分类Settlement 在该 Tab默认 Tab 为 Fulfillment
- 优先 `[data-testid="reports-tab-payments"]`
- 若无 testid`get_by_role("button", name="Payments")`
6. 点击 `[data-testid="reports-type-item-settlement"]`
7. 填写 `[data-testid="reports-form-date-from"]` / `reports-form-date-to`
8. 可选:`[data-testid="reports-form-seller-select"]`
9. 点击 `[data-testid="reports-form-submit"]`
10. 轮询 `[data-testid^="reports-jobs-status-"][data-status="DONE"]`(超时 60s间隔 2s
11. 点击 `[data-testid^="reports-jobs-download-"]``expect_download` 保存 xlsx
12. `lease release`
13.`task_logs` + 返回 JSON
### 仿真环境已知依赖Payments Tab
截至开发时,`sim-ecommerce-amazon/frontend/pages/ReportsPage.jsx` 中:
- 已定义 `REPORT_TABS`(含 Payments`settlement` 类型挂载在 `payments` Tab 下
- **但页面未渲染 Tab 切换按钮**(无 `reports-tab-payments` DOM默认 `activeTab=fulfillment`,页面上仅显示 Orders 类型
因此 **线上仿真** 联调时RPA 可能在步骤 5 失败Payments Tab 不可见)。处理方式:
- **mock 测试**必须全部通过CI 不依赖 Tab UI
- **simulator_rpa** 代码已实现 Tab 切换逻辑,待 sandbox 前端补充 Tab UI 后即可联调
- 联调前可请 sandbox 团队在 Reports 页渲染 Tab 并添加 `data-testid="reports-tab-payments"`
### 命令验收
- `python tests/run_tests.py -v` 全部通过
- `python scripts/main.py health` 退出码 0
- `OPENCLAW_TEST_TARGET=mock python scripts/main.py run --date-from 2025-12-01 --date-to 2025-12-31` 退出码 0 且产出 mock xlsx
### 联调验收(有账号时)
```powershell
$env:OPENCLAW_TEST_TARGET="simulator_rpa"
$env:JIANGCHANG_DATA_ROOT="D:\claw-data"
$env:JIANGCHANG_USER_ID="10032"
python scripts/main.py run --date-from 2025-12-01 --date-to 2025-12-31
```
成功:产出 xlsx + `task_logs``download_settlement` 记录 + 退出码 0。
## 10. 开发注意事项
- 只修改本 skill 仓库;不改动其他 61 个空目录
- adapter 目录:`scripts/service/amazon_report_adapter/`
- 真实浏览器联调样例:`tests/integration/test_simulator_rpa_contract.py.sample`(不进默认套件)
## 11. 变更记录
| 日期 | 版本 | 变更人 | 变更内容 |
|------|------|--------|----------|
| 2026-07-03 | v1.0.0 | 样板实现 | 初版mock + simulator_rpa + REQUIREMENTS 填实 |