aps-agent/aps/README.md

87 lines
4.4 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.

# APS(独立业务系统 · 开发期同仓形态)
> 本目录是 APS 的开发期落点,形态由 ADR-0010 规定:**同仓库、不同目录、独立系统**。
## 现状
APS 现在还在 `main` 分支里与平台混装(`server/aps_domain` 39,212 行、`server/engines` 7,551 行、`server/state`、`server/importers`,以及早期原型 `aps-frontend/`)。B0–B7 负责把它拆到这里并补齐独立运行所需的能力。
B0 已完成:工具链与包骨架、边界清单与契约草案、端点分流清单。
B1 首批 / B5 首批已完成:9 个只读模块从 `main` 搬入并改写引用(`domain` 4,053 行)+ 演示数据快照 + FastAPI 服务,**现在能独立启动**(`uv run python -m aps.api`),九个只读能力按契约返回。剩余:APS 侧另外 134 个端点、APS 自己的库、界面对话之外的独立界面。
## 工具链(B0.1)
| 项 | 值 |
| --- | --- |
| Python | 3.11+ |
| 依赖与锁定 | `uv`;`uv.lock` 入库,CI 用 `uv sync --locked` |
| 代码检查 | `ruff`(配置在 `pyproject.toml`) |
| 测试 | `pytest`(`tests/`) |
| 包结构 | `src/aps/`,子包对应 B 线的搬迁目标 |
```bash
cd aps
uv sync # 建 .venv 并按 uv.lock 安装(含 dev 依赖)
uv run ruff check .
uv run pytest -q
```
依赖取舍:依赖清单以 `main` 分支的 `requirements.txt` 为准,按 B 线边界做了两处增删——**去掉** LLM 与对话智能体相关依赖(D12:APS 不内置对话智能体),**保留**求解引擎(ortools / scipy)、文档与图纸解析(openpyxl / pdfplumber / python-docx / lxml / ezdxf)与持久层(sqlalchemy / alembic / pymysql)——它们都归 APS。
## 怎么跑(B1 首批 / B5 首批)
```bash
cd aps
uv sync
uv run python -m aps.api # http://127.0.0.1:8000,交互式文档在 /docs
```
```bash
curl http://127.0.0.1:8000/api/health
curl http://127.0.0.1:8000/api/manifest
curl -X POST http://127.0.0.1:8000/api/capabilities/aps.orders.query \
-H 'content-type: application/json' -d '{"params":{"limit":3}}'
```
已经能跑的九个只读能力:`aps.master.query` / `aps.orders.query` / `aps.capacity.query` / `aps.calendar.query` / `aps.routing.query` / `aps.schedule.query` / `aps.exceptions.query` / `aps.inventory.query` / `aps.forecast.query`。
## 数据从哪来
| 阶段 | 数据源 |
| --- | --- |
| B1 过渡(现在) | `data/demo_world.json`——由 `main` 的 `build_demo_world()` 导出(10 物料 / 7 销售订单 / 13 工位 / 180 条班次日历)。`APS_WORLD_PATH` 可指向别的快照 |
| B2 拆库后 | APS 自己的库(开发期 SQLite、生产 PostgreSQL)。`domain` 的读函数都吃 `World` 字典,换数据源不动它们 |
## 边界规则
| 规则 | 说明 |
| --- | --- |
| 工具链独立 | Python;不共享平台的 Node 依赖 |
| 不互相引用 | 平台代码不得引用 `aps/`;APS 不得引用平台 TS 代码 |
| 唯一界面 | Provider 契约(HTTP);平台通过 `providers/aps` 的适配器调用 APS |
| 数据库独立 | APS 库归 APS(ADR-0008):独立账号、独立 database |
| 交付独立 | APS 单独部署与升级(ADR-0009) |
| CI 分流 | 平台 job 与 APS job 互不阻塞 |
## 要搬进来的东西
| 来源(`main`) | 内容 | 对应任务 |
| --- | --- | --- |
| `server/aps_domain` | 业务主体:排产、主数据、订单、柔性、闭环运行时、报告 | B1–B4 |
| `server/engines` | 求解引擎:CP-SAT / GA / NSGA2 / 池 / 规则 + 求解进程隔离 | B1 |
| `server/state` | 世界状态、检查点、分支、数据包 | B1 |
| `server/importers` | Excel / SQL / MOM 导入与 profile | B1 |
| `aps-frontend` 页面清单 | 界面外壳的范围参照(代码不搬) | B6 |
## 文档
| 文档 | 内容 |
| --- | --- |
| [docs/boundary.md](./docs/boundary.md) | 边界清单(B0.2):带走 / 留下 / 丢弃、反向依赖清单、客户硬编码处置 |
| [docs/contract-draft.md](./docs/contract-draft.md) | 对平台的契约草案(B0.2 → B5 输入):传输形状、只读能力清单、错误映射 |
| [docs/endpoint-split.md](./docs/endpoint-split.md) | 端点分流清单(B1 第一步):245 个端点分成 APS / 平台 / 第三方 Provider / 丢弃四类 |
## 迁出条件(ADR-0010)
满足任一条即迁出独立仓库:APS 需要独立发版节奏、APS 由独立团队维护、平台包发布流程需要隔离权限。