From 88592bb349ee1ce2033bdbdf0d1556e91fa7c26e Mon Sep 17 00:00:00 2001 From: zlt Date: Fri, 28 Aug 2026 16:35:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=AC=E7=A4=BA=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=9A=E6=A0=87=E7=9A=84=E5=90=8D=E6=8C=89=E5=90=8D?= =?UTF-8?q?=E5=AD=97=E6=8E=A5=E5=8F=A3=E7=9C=9F=E5=AE=9E=E5=BD=A2=E7=8A=B6?= =?UTF-8?q?=EF=BC=88=E7=AE=80=E7=A7=B0/=E5=85=A8=E7=A7=B0=E5=AD=97?= =?UTF-8?q?=E5=85=B8=EF=BC=89=E6=8F=90=E5=8F=96=E4=B8=BA=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEVLOG.md | 39 +++ app/assets/publish_template.xlsx | Bin 0 -> 11747 bytes app/repo/pms_repo.py | 15 ++ app/services/publish_export.py | 402 ++++++++++++++++++------------- scripts/run_tests.py | 4 +- scripts/test_wiring.py | 118 +++++++++ 量化数据-系统样例.xlsx | Bin 0 -> 15234 bytes 7 files changed, 414 insertions(+), 164 deletions(-) create mode 100644 app/assets/publish_template.xlsx create mode 100644 量化数据-系统样例.xlsx 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. 图表纵轴范围/网格样式与公司原图未逐像素对齐 (原图数据在外部工作簿, 只对齐了 + 标题/位置/尺寸), 有要求再调。 + +--- +