feat(corporate-bank-account-payment-order): 基于原模板生成建行制单
这个提交包含在:
@@ -133,14 +133,15 @@ POST 制单接口接收 `{ reason }`,仅允许明确 finance/finance_mgr 业
|
||||
|
||||
禁止部分成功:任意一项失败时不生成文件、不更新制单状态、不写成功导出审计。
|
||||
|
||||
### 6.3 BIFF8 与下载
|
||||
### 6.3 BIFF8 模板填充与下载
|
||||
|
||||
- 使用 SheetJS 官方精确 `0.20.3` tarball并锁定 package-lock 完整性。
|
||||
- 运行时代码只调用生成 API,不解析上传文件或用户提供的工作簿。
|
||||
- 显式构建七个字符串字段的 `{ t: "s", v: value }` 单元格;金额使用数值类型和两位小数格式。
|
||||
- 工作簿按顺序创建 `Sheet1`、`Sheet2`、`Sheet3`,Sheet1 固定 15 列表头。
|
||||
- 内存生成 `bookType: "biff8"` buffer,先完成审计和制单计数事务,再设置 `application/vnd.ms-excel`、安全附件名、`nosniff`、`private, no-store` 等响应头并发送。
|
||||
- 不写对象存储或服务器持久目录。网络中断后的已记录导出按保守口径视为已生成,用户可填写新原因重导。
|
||||
- 仓库保存一份经脱敏和元数据检查的固定空白 BIFF8 模板资产;它保留三个工作表、15 列表头和三行预格式化空数据行,不含真实业务数据。运行时校验固定 SHA-256,不解析上传文件,也不接受请求控制模板路径。
|
||||
- Node 继续负责解密、资格校验、聚合 blockers、排序、流水号、金额和审计;固定 Python 填充器只接收已经校验的行 DTO,不承担权限或状态机判断。
|
||||
- Node 通过子进程 stdin 发送 JSON,Python 从 stdout 返回 BIFF8 二进制。完整账号不得进入 argv、env、日志或 stderr;子进程使用固定解释器路径、超时和 `maxBuffer`,并校验退出码、输出大小与 OLE 魔数。
|
||||
- Python 使用固定版本 `xlrd==2.0.2`、`xlwt==1.3.0`、`xlutils==2.0.0`,以 `XLWTWriter + process(XLRDReader(...))` 复制原工作簿,再按模板首个数据行样式写值。生产镜像与 CI 从同一份 `--require-hashes` requirements 安装到专用 venv。
|
||||
- 模板已有三行数据样式;超过三笔时复制第一个数据行的样式并设置相同行高。金额列复制原样式后只把 `num_format_str` 改为 `0.00`,七个标识字段以字符串写入。
|
||||
- 生成器不再依赖 SheetJS;`xlsx` 依赖从服务端移除。先完成审计和制单计数事务,再设置 `application/vnd.ms-excel`、安全附件名、`nosniff`、`private, no-store` 等响应头并发送。
|
||||
- 不写对象存储、临时制单文件或服务器持久目录。网络中断后的已记录导出按保守口径视为已生成,用户可填写新原因重导。
|
||||
|
||||
## 7. 页面动作与进度
|
||||
|
||||
@@ -164,10 +165,11 @@ POST 制单接口接收 `{ reason }`,仅允许明确 finance/finance_mgr 业
|
||||
## 9. 验证与依赖门禁
|
||||
|
||||
- Node 单元/路由测试覆盖权限矩阵、单一启用账户并发约束、通知、审计、批次快照、历史拒绝、CCB-only、确定性排序、重导和隐私负向断言。
|
||||
- 使用合成数据生成 `.xls`,由 CI 明确安装的 `xlrd==2.0.2` 独立读回三个工作表、15 列、七个字符串字段、金额、中文和重复导出一致性。
|
||||
- 使用合成数据生成 `.xls`,由 CI 的固定 Python 环境独立读回三个工作表、15 列、七个字符串字段、金额、中文和重复导出一致性,并比较列宽、行高、字体、加粗、底色、边框、对齐等模板样式签名。
|
||||
- 覆盖超过三笔的扩展行、模板 hash 漂移、解释器/依赖缺失、子进程失败、输出越界和 stderr 隐私负向断言。
|
||||
- 用合成非建行项证明整批失败且没有文件、制单计数或成功审计。
|
||||
- Excel/WPS 人工打开验证中文、长字符串和金额;企业网银只有存在明确“仅校验”步骤时才使用虚构建行数据做最终确认。
|
||||
- 安装依赖后运行 npm audit/许可证与 lockfile 审查;如官方精确 tarball不可重复获取或引入不可接受告警,暂停而非换用 registry 旧版。
|
||||
- 固定 Python requirements 必须带完整哈希并在 CI/镜像使用 `--require-hashes`;任何包或模板哈希不符时暂停,不允许联网浮动安装或自动降级到重建工作簿。
|
||||
|
||||
## 10. 迁移、上线与回滚
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户