# 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 由独立团队维护、平台包发布流程需要隔离权限。