diff --git a/DEVLOG.md b/DEVLOG.md index acce09f..7202168 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -1068,6 +1068,45 @@ scripts/test_batch19_units.py、scripts/run_tests.py(新增 2 例, 全套 587 --- +## 2026-08-28 · 公示导出重做:模板文件直填 + 持仓合一 + 含费口径, 588 例全绿 + +**做了什么** +公司流程要求每日把持仓与净值按固定 excel 版式导出公示。在既有实现 (按钮/接口/参数/ +净值快照表/调度 都已就位) 的基础上重做了两层: +1. **版式不再用代码重画**: 把公司模板裁成空模板进仓库 (app/assets/publish_template.xlsx, + 保留全部字体/颜色/边框/列宽/数字格式/行高), 导出时只插行、填数、按最终行位重排合并区 + 与行高 (openpyxl 插删行不搬 merges 与 row_dimensions, 全部手工重排)。图表按模板标题 + 与占位重建 (原模板图表引用外部工作簿, 数据改为本表净值序列)。 +2. **口径按模板逐项对数**: 持仓明细按**股票合并一行** (多批加权成本、起始取最早); + 平仓明细按 **(股票, 平仓日)** 合并; 自然天数**含头含尾** (7-03→8-03 记 32, 原实现差 1); + 持仓行盈亏不含费 (模板 S=Q×L 逐分一致)、**平仓行盈亏 = 已实现 − 当日该票费用** + (模板卖出行含双边费, 费用取 pms_cash_flow FEE 按日按码聚合); 买入侧/校准费摊不进 + 明细的部分在表尾按残差如实标注 —— S 合计=持仓Σ+平仓Σ 是模板恒等式, 不为塞费用破坏它。 + 表内金额与比率一律写公式 (SUM/引用), 不写死数。 + +**动了哪些文件** +app/services/publish_export.py (重写)、app/repo/pms_repo.py (fee_sum_by_code / +sum_fee_all 两个聚合)、scripts/test_wiring.py (FakeRepo 补 lot 明细/净值快照/费用桩, +新增公示导出装配用例)、scripts/run_tests.py (67/588)、新增 app/assets/publish_template.xlsx。 + +**部署方式** +tlai4090: git pull 后 make deploy (openpyxl 已在 requirements, pms_nav_daily 建表由 +init_db 幂等带上)。无新 env。 + +**真机判收** +开发机: 全部 20 套 588 例 ALL PASS; 生成样例经 LibreOffice 全量重算 54 条公式 0 错误, +恒等式 (S合计/剩余可开仓/仓位/累计净值) 现场核验; 样例与公司原表并排渲染逐区比对 +(段落标签/小计粉底/存量合计黄条/底行/图表占位)。部署后判收: 页面点「导出公示表」, +下载的表与人工表并排看一屏。 + +**还欠着什么** +1. 三个口径请使用者过目拍板 (都按模板反推, 改口一句话): 平仓按(票,平仓日)合并; + 平仓行含费=已实现−当日该票 FEE; 起始时间=系统接管日 (不回填历史)。 +2. 图表纵轴范围/网格样式与公司原图未逐像素对齐 (原图数据在外部工作簿, 只对齐了 + 标题/位置/尺寸), 有要求再调。 + +--- +