docs(pl): 记录分段计量审查结果并明确复用已有界面样式。

This commit is contained in:
wuzilong committed 2026-11-01 21:01:35 +08:00
1 parent cde30287fd
commit f3745f416a
3 files changed
+16 -11

No files matched your search

@@ -14,20 +14,24 @@
用户已明确“采用v3,继续实现”。分支`codex/pl-stop-cert-management`,集成目标`V3.0`。使用现有隔离worktree,不触碰主目录未提交文件。先后端计量,再资料及统计,再Web;任务间规格审查后质量审查。Agent执行合成数据测试;不启动MySQL容器,不连接业务库验证、不执行SQL、不部署。主目录项目配置允许任务分支推送/工单回写,不允许合并。本任务不扩大手机UI范围,但共享API保持兼容。
界面依据用户补充沿用已有样式:列表采用P02,参考`web-admin/src/views/pl/plan-quota/index.vue`和`web-admin/src/views/demo/order/index.vue`;合同详情沿用P10及`ContractDetailDialog.vue`;建档沿用P12及现有`web-admin/src/views/pl/quota-cert/index.vue`。复用统一路由页签、搜索、漏斗、工具栏和附件组件。v3确定功能与信息组织,Fresh Mint与现有组件确定视觉。
## Task 1: 服务器决定计量版本及各段独立来源
Files: `backend/app/services/pl_quota_sources.py`、`pl_quota_planning.py`、`pl_quota_business.py`、`pl_quota_usage_service.py`;`backend/app/schemas/pl/quota_planning.py`;`backend/tests/test_pl_quota_sources.py`、`test_pl_quota_planning.py`、`test_pl_quota_business.py`。
- [ ] 增加失败用例,复用现有SQLite合成fixture,将装货100、两送40/60分别关联不同合同产品,断言新来源三条且合计200;实际量独立取每段。保留显式legacy测试。
- [x] 增加失败用例,复用现有SQLite合成fixture,将装货100、两送40/60分别关联不同合同产品,断言新来源三条且合计200;实际量独立取每段。保留显式legacy测试。
```python
assert sum(source.quantity for source in sources) == Decimal('200')
assert {source.source_id for source in sources} == {'load:lp', 'delivery:dp', 'delivery:dp2'}
assert {source.contract_id for source in sources} == {'purchase', 'sale', 'sale2'}
```
- [ ] 用主目录虚拟环境从本worktree的backend运行`python -m pytest tests/test_pl_quota_sources.py tests/test_pl_quota_planning.py -q`,记录预期失败。
- [ ] 来源增加`measurement_version`选择;旧版本维持原算法,新版按所有易制毒段产品创建来源,不依赖客户端挑选计量侧。缺少段产品或合同身份拒绝;来源指纹含新版标识,legacy指纹不改变。配置接受`measurementVersion`用于显示,但服务端根据已持有账目/安排归档状态决定版本,拒绝客户端降级/切换;历史已产生账目缺版本视为legacy,新草稿/新安排固定per_stop_v2。新版本忽略旧客户端对侧配对选择,不允许借它少扣。
- [ ] 正式reserve/resize把服务端版本写回配置/账本快照;settle/release保持旧版可追溯,避免旧计划升级加扣。预览和正式提交共用版本决策。get返回版本及来源主体、段序、合同、产品。
- [ ] 运行来源、planning、business、usage、allocation、supplement相关pytest;验证旧单侧100、新版200、跨合同匹配、不可降级、0实际量和缺失实际量。提交本任务。
- [x] 用主目录虚拟环境从本worktree的backend运行`python -m pytest tests/test_pl_quota_sources.py tests/test_pl_quota_planning.py -q`,记录预期失败。
- [x] 来源增加`measurement_version`选择;旧版本维持原算法,新版按所有易制毒段产品创建来源,不依赖客户端挑选计量侧。缺少段产品或合同身份拒绝;来源指纹含新版标识,legacy指纹不改变。配置接受`measurementVersion`用于显示,但服务端根据已持有账目/安排归档状态决定版本,拒绝客户端降级/切换;历史已产生账目缺版本视为legacy,新草稿/新安排固定per_stop_v2。新版本忽略旧客户端对侧配对选择,不允许借它少扣。
- [x] 正式reserve/resize把服务端版本写回配置/账本快照;settle/release保持旧版可追溯,避免旧计划升级加扣。预览和正式提交共用版本决策。get返回版本及来源主体、段序、合同、产品。
- [x] 运行来源、planning、business、usage、allocation、supplement相关pytest;验证旧单侧100、新版200、跨合同匹配、不可降级、0实际量和缺失实际量。提交本任务。
Task 1证据:提交`cde30287f`;实施者298项回归通过,独立规格审查320项通过并验证跨合同新200/旧100,独立质量审查104项通过。均为SQLite合成测试;未执行MySQL并发验证。
## Task 2: 段产品证明与合同范围分页
@@ -54,12 +58,12 @@ Files: 新增`backend/app/services/pl_quota_statistics.py`、`backend/app/servic
## Task 4: 五Tab容器和复用统计面板
Files: `web-admin/src/api/pl/quota-cert.ts`;新`web-admin/src/views/pl/cert-management/index.vue`、`ContractQuotaPanel.vue`、`CertificateUsagePanel.vue`;修改router和`ContractDetailDialog.vue`。
Files: `web-admin/src/api/pl/quota-cert.ts`;新`web-admin/src/views/pl/contract-quota/index.vue`、`web-admin/src/views/pl/certificate-usage/index.vue`和复用统计面板;修改router和`ContractDetailDialog.vue`。
- [ ] 增加API类型和请求方法与Task2/3一致,分页保留数值字符串。用组件行为测试覆盖Tab切换正确视图、合同固定id、切换合同清空旧响应、统计不相加共享余额。
- [ ] 容器五Tab按已确认顺序,仅有合法证明菜单权限时不请求额度API。旧Web菜单URL进入对应Tab,移动路由保持原组件;主Tab挂载已有建档/计划组件,补`embedded`支持避免双标题/双padding。
- [ ] 沿用现有ArtGroupLeafTabs路由组扩为五个叶子,避免再嵌套第二层Tab;静态路由和数据库菜单迁移同步维护。仅有合法证明菜单权限时不请求额度API。旧Web菜单URL保留,移动路由保持原组件;复用已有建档/计划组件,面板嵌入合同详情时补`embedded`支持避免双标题/双padding。
```ts
const tabs = ['archive', 'contracts', 'certificates', 'plans', 'documents'] as const
const tabPaths = ['quota-cert', 'contract-quota', 'certificate-usage', 'plan-cert', 'legal-use-document'] as const
```
- [ ] 统计面板使用ListQuickSearchInput/ListToolbarEndActions/ColumnHeaderFilter、服务端分页、展开按需取明细。合同面板prop`contractId?: string`固定范围,复用ContractScopeDialog维护绑定;证件面板按证种展示全局数量和各合同明细,展开段产品用量。
- [ ] 合同详情运输计划后插入两个lazy Tab,按菜单权限显示,分别挂载ContractQuotaPanel和段证明页面固定contractId,切换合同销毁旧状态。
@@ -19,6 +19,7 @@
3. 合法使用证明按每个段次产品分别上传;不做多段批量覆盖。
4. 合同详情“运输计划”后为两个独立Tab:合同证件与额度、运输计划合法使用证明。资料仅汇总当前合同对应段次产品。
5. 用户“好的,请继续”确认继续已讨论方案;此前#8免Figma仅适用于列表修复,新版原型单独确认。
6. 用户在v3确认后补充“界面参考已有的界面样式进行开发”。v3作为功能与信息布局依据,实际视觉复用项目已有组件、同类页面与Fresh Mint规范,不引入独立视觉体系。
## 现状与复用
@@ -5,11 +5,11 @@
- [x] 用户明确“采用 v3,继续实现”,已允许按新版原型开发。
## 2. 后端与迁移
- [ ] 先写新规则100+40+60=200及旧版100不变的失败回归,再扩展版本化来源提取及分配入口。
- [x] 先写新规则100+40+60=200及旧版100不变的失败回归,再扩展版本化来源提取及分配入口。
- [ ] 实现合同/证件统计查询及主对象分页,验证单位、证种、权限与期初未归属口径。
- [ ] 实现证件+合同产品原子保存,覆盖多合同失败回滚、遗漏/空集合、身份及引用保护。
- [ ] 新增段产品资料模型/schema/API与MySQL5.7迁移,保留旧附件和旧账;不自动执行数据库迁移。
- [ ] 校验安排、调整、释放、归档、异常补量及旧客户端不能绕过正式规则。
- [x] 校验安排、调整、释放、归档、异常补量及旧客户端不能绕过正式规则。
## 3. Web界面
- [ ] 实现五Tab容器及共用合同、证件、段次明细组件。
@@ -23,4 +23,4 @@
- [ ] 独立审查、适用数据库事务验证及迁移演练(此前用户要求暂不启MySQL容器,未完成项如实保留)。
- [ ] 记录最终版本、实际测试与缺口,再按已有授权交付;不自动部署或关闭旧工单。
当前状态:规格与原型阶段。尚未修改业务代码、创建数据库表或执行迁移;不得标记实现/测试完成。
当前状态:实施阶段。Task 1分段计量已提交`cde30287f`并通过独立规格及质量审查,SQLite专项通过;段产品证明、统计、原子绑定与Web界面尚在实现。未创建业务数据库表或执行迁移,MySQL真实并发验证未完成。