# 财务项目基础系统开发交付总方案 > 文档编号:KD-FIN-DELIVERY-001
> 版本:V3.26(Preview.9 公共 Release 一键安装)
> 状态:第一版 Preview 候选包已具备 22 页功能框架、核心业务链和可部署制品;PAGE-13/14 已通过模块验收,PAGE-12/16/17/18/19/20/21/22 为 `IMPLEMENTED_PENDING_ACCEPTANCE`,PAGE-15 正式业务矩阵仍为 `IN_PROGRESS`;整套 R1 尚未达到第 12.9 节 Definition of Done,不得把 Preview 上线等同于甲方最终验收
> 编制依据:2026-08-05 腾讯会议转写、14 张 OA 表单、财务岗位职责资料、项目管理流程图
> 最新项目决策:按既定 Java/TDesign 技术栈交付第一版 Preview;2026-08-17 已完成 PAGE-08 来源、记账、档案双向穿透,PAGE-20 审计稳定排序/筛选/脱敏导出、PAGE-21 权限与配置、PAGE-22 公共 Gitea 签名在线更新、OA-04/OA-06 动态附件矩阵、OA-06 财务终审付款投影、Release/SBOM/依赖门禁、Linux i386/i486/i586/i686 外部 MySQL 8.4.x 单命令安装、更新请求持久领取/中断恢复/数据库备份校验/回滚健康复核,以及隔离超级管理员全部功能权限和全局数据范围;本轮新增 PAGE-23 首次安装向导、无业务数据库启动上下文、只校验 JDBC 配置格式(安装器不调用 MySQL 客户端、不执行 DDL/DML)、一次性安装码和安装状态锁定,数据库基线新增 `V072`。远端仓库 `https://git.awaioi.com/ERP-Team/kaidi.git` 与 Release 均已公开;安装和在线更新默认不使用 Token,安装器内置发布公钥指纹,推送符合 SemVer 的 `v*` tag 后由带签名密钥的发布流程生成 Release;PAGE-15 完整业务矩阵继续保持 `DRAFT`,须经 D-02/D-09 确认后才允许作为正式规则发布
> 实际开发技术:Java 17 + Spring Boot 3.5.16 + MyBatis 3.0.5 + MySQL 8.4 + TDesign Vue Next Starter;前端仍只允许在现有 `frontend/` Starter 中原位增加菜单、页面、组件和真实功能 > 文档性质:本项目唯一 PRD、SPEC、开发任务书、测试验收与交付基线
> 文档用途:甲方需求确认、产品设计、开发拆分、测试验收和交付培训
> 阅读方式:第 0~10 章说明“做什么和业务逻辑”,第 11~12 章说明“怎么开发”,第 13~19 章说明“怎么验收、交付和控制风险” ## 0. 给非技术人员的一页说明 ### 0.1 这次要做的系统 首期做一套“项目财务基础系统”,把资料从进入系统到可查询的全过程串起来: ```text 项目/业务人员提供资料 → 系统校验并留存附件 → 项目或财务人员审批、退回补件 → 形成收款、发票、成本、付款等财务记录 → 生成记账准备资料并登记人工记账结果 → 资料人员检查、归档 → 按项目、合同、金额、状态和附件查询分析 ``` ### 0.2 第一轮必须交付的“完整” 完整不是“把所有财务和税务都做完”,而是第 12.9 节定义的 R1 全部完成:22 个页面、14 类表单、真实 Java/MySQL 数据、三类业务身份和独立系统管理员、审批、财务台账、记账准备、档案、报表、权限、审计、测试、部署和交付材料都能实际使用。银行网银/U 盾、电子税务局、自然人税务系统、第三方账号/API、RPA 和自动付款/报税/过账明确不在 R1。 ### 0.3 前端唯一规则 前端只能在现有 `frontend/` TDesign Vue Next Starter 中增加菜单、路由、页面和业务组件。按钮、表单、表格、弹窗、抽屉、分页、标签、图标和反馈**必须使用 TDesign 或经批准的 TDesign 组合组件**;不能新建第二个前端、引入 Ant Design/Element Plus 等第二套 UI、用原生控件替代 TDesign,或用静态页面/Mock 冒充真实功能。具体例外和批准流程见 11.2 节。 ### 0.4 开发团队的责任 开发执行期由开发团队负责“实现 → 自测 → 联调 → 定位 → 修复 → 同类扫描 → 回归 → 部署 → 证据 → 验收”的完整闭环。甲方只确认业务规则和验收结果,不负责替开发人员查代码、改数据库、补接口或发现基础缺陷。 ### 0.5 当前状态 项目已按 2026-08-11 最新指令进入 R1 开发执行阶段。当前采用“模块逐项验收、整套系统统一交付”的口径:一个页面只有真实前端、Java 接口、MySQL 持久化、权限/状态/金额控制、自动化测试和浏览器实操都通过,才可标记为模块级完成;模块级完成不等于整套 R1 已交付。 | 层级 | 当前状态 | 准确结论 | | --- | --- | --- | | Preview 工程实现 | `100%` | PAGE-01~22、核心业务链、构建制品、签名安装/更新框架和自动化发布门禁均已具备;该比例只表示第一版可预览框架,不表示全部业务规则已由甲方确认 | | 整体 R1 工程实现估算 | `约 95%` | 按当前已冻结范围估算代码、页面、接口、迁移和开发自验证进度;正式 UAT、部署恢复、性能、培训、规则确认和签字仍单独阻断 R1 交付 | | 整体 R1 | `IN_PROGRESS` | PAGE-01~22 尚未全部完成,第 12.9 节 DoD 尚未满足,不得对甲方宣称整套系统交付完成 | | PAGE-12 主数据中心 | `IMPLEMENTED_PENDING_ACCEPTANCE` | 已新增部门主数据表、共享字典权限范围升级回填、完整草稿/编辑/提交/异人复核/生效/停用链路、重复编码/版本冲突/审计断言、八类资源版本记录/版本对比、旧编号映射和 TDesign 部门页签;`MasterDataIntegrationTest` `8/8`、PAGE-12 三档行为测试 `3/3` 通过。正式异常矩阵、Chrome/Edge UAT 和甲方证据包仍未完成 | | PAGE-13 合同与成本 | `MODULE_ACCEPTED` | 合同额度、变更、结算、开票、应付、付款汇总与下钻已连接真实接口;应付登记/确认职责分离、OA-04/OA-11 已批准来源和金额口径已通过自动化及浏览器验收 | | PAGE-14 收款与发票 | `MODULE_ACCEPTED` | 收款草稿/确认/核销/作废、正式应收、开票申请/审核/人工结果/作废/红冲、合同额度、权限范围、金额上限、SOD、乐观锁、查询分页和 CSV 导出已接真实接口并通过本节记录的验收 | | OA-04/05/08 来源投影 | `IMPLEMENTED_PENDING_ACCEPTANCE` | 财务终审已分别生成已确认应付、已确认收款和开票候选;来源专项自动化已通过;OA-08 已审批候选退回后的“来源更正→新版本→重新终审”闭环、正式三档浏览器 UAT、迁移升级预检和证据包仍待补齐 | | PAGE-15 进度款与付款 | `IN_PROGRESS` | 付款主链、OA-06 v2 稳定引用及财务终审 `OFFLINE_PENDING` 付款投影、成本类型附件规则、同项目并发余额控制、独立逐笔资金台账和例外申请/复核/消费机制已实现并通过定向验证;正式矩阵仍为 `DRAFT`,正式规则确认和浏览器证据仍未完成 | | PAGE-16 记账准备 | `IMPLEMENTED_PENDING_ACCEPTANCE` | 财务事件、凭证草稿、编辑、复核、导出、人工结果登记/异人复核、已完成结果冲销/异人重开、分轮证据和历史下载、历史外部凭证号唯一、授权额度/数据范围、SOD、乐观锁、幂等和审计已实现;`AccountingIntegrationTest` `18/18`、PAGE-16 三档专项 `12/12` 通过,正式外部导入样例、Chrome/Edge 业务 UAT 和甲方证据包仍未完成 | | PAGE-17 项目归档 | `IMPLEMENTED_PENDING_ACCEPTANCE` | 已实现财务资料完整确认、档案包生成门禁、缺件清单、对象快照、检查、提交、异人审核、退回补件、归档、冻结及保管到期状态提示;正式 Chrome/Edge 三档全流程、异常状态 fixture 和甲方证据包仍未完成 | | PAGE-18 文件检索与借阅 | `IMPLEMENTED_PENDING_ACCEPTANCE` | 检索、扫描/归档状态、详情、受控预览、隔离文件可恢复重扫、异人批准借阅/归还及范围外直链下载回归已贯通;正式 Chrome/Edge 三档全流程、axe 和甲方证据包仍未完成 | | PAGE-19 查询与报表 | `IMPLEMENTED_PENDING_ACCEPTANCE` | 六类报表、汇总、同权限下钻、筛选快照及两阶段导出已实现,MySQL 8.4 全量集成回归已通过;D-08、日期口径、流程时长样本和正式 UAT 仍阻断验收 | | S3 财务收支阶段 | `IN_PROGRESS` | PAGE-13/14 已完成模块级验收;PAGE-15 核心付款链已通过定向验证,但模块级阻断项仍未清零,S3 付款与例外任务继续按各自证据单独判断 | | S0 决策与合同 | 并行收口 | D-01~D-11、全量机器合同和其他页面 fixture 仍要继续完成;未确认规则继续阻断其影响到的具体模块,不回滚已通过验证的 PAGE-14 事实 | | 范围外事项 | `OUT_OF_SCOPE` | 网银/U 盾、税务平台、第三方权限/API、RPA、自动付款、自动报税、自动缴税和自动过账继续不做 | **剩余时间估算(以甲方规则、样本和环境按时到位为前提)**:第一版 Preview 候选包可在 Git 仓库和 Release 地址配置完成后当天发布;剩余代码与内部验证约 `1~2` 个工作日,正式 Chrome/Edge UAT、异常/权限证据、staging/恢复/性能、培训与签字约 `5~8` 个工作日。并行推进时,整套 R1 预计还需 `5~8` 个工作日;D-02/D-07/D-08/D-09、正式样本、生产域名/证书或甲方验收人延迟的时间不计入该估算并顺延交付日期。 ### 0.6 V3.22 本次修订记录 | 修订项 | 本版固定结果 | | --- | --- | | 页面层级 | PAGE-03~21 以路由合同面包屑作为静态页面名称的唯一可见来源;工作台、列表、台账、报表和配置页删除内容区重复的模块名、页面名及功能说明,只保留读屏标题和紧凑操作栏。项目详情、表单详情继续显示不与面包屑重复的业务编号、对象名称和状态 | | Preview.6 | 在 Preview.5 基础上,窄屏表格固定列统一降级为横向滚动列,顶部账号文本增加省略保护;通过 TypeScript、ESLint、Stylelint、Vitest `10 files / 56 tests`、production build/hygiene、完整 Playwright `198/198`(含 390px 固定列几何回归);真实 Edge 复测权限与配置、系统更新、财务工作台和记账准备页面无整体横向溢出或控件重叠 | | Preview.8 安装向导 | 新增 PAGE-23 独立无库启动上下文;安装器只保存端口和向导启动配置,不连接数据库、不执行 SQL;首次访问 `/setup` 以一次性安装码接收外部 MySQL 连接信息,点击完成后由应用执行 Flyway、创建自定义 `SYSTEM_ADMIN` 和全局权限,写入受限运行时配置并锁定向导;32 位 curl 路径不再把数据库密码放进命令行,安装完成后的修复重装优先读取运行时覆盖文件;通过 Java 编译、无库 HTTP smoke、TDesign 输入可访问性和 setup wizard Playwright 回归 | | 超级管理员权限 | V071 将 `SYSTEM_ADMIN` 固定为隔离超级管理员,逐条授予全部 `iam_permission` 和无额度 `GLOBAL` scope,并由启动同步补齐后续权限;前端菜单、直链和按钮统一放行全部 PAGE-04~21。管理员可管理跨人员表单/导入/付款草稿,PAGE-15 增加仅管理员可见的“全部付款”,三类业务工作台显示跨人员项目、资金、档案和全部待办;审批实际处理人、SOD、状态机、资金、附件安全和审计继续强制执行 | | OA-06 付款投影 | V070 发布 OA-06 v2,新增生效合同、供应商和已确认应付稳定引用;财务终审在来源审批事务内生成 `OFFLINE_PENDING` 付款,执行付款检查、冻结项目资金并追加资金流水。余额不足等投影失败时来源状态、审批任务、付款、资金控制和流水整体回滚;不产生银行付款指令,不接网银、U 盾或第三方平台 | | OA 动态附件矩阵 | OA-04/OA-06 的条件附件行支持 TDesign 布尔开关、长文本、不涉及原因和嵌套文件上传;仅 `required=true` 的行要求文件或原因,可选空行不阻断。上传状态按字段和表格单元隔离,上传期间锁定刷新、保存、校验和提交;更新请求不再携带创建专用字段,校验前自动保存当前草稿 | | 本轮运行验收 | 最近完整后端 MySQL 8.4/Testcontainers 基线 `213/213`,Failures/Errors/Skipped 均为 0,迁移基线扩展至 `V072`;本轮新增 setup context smoke、安装器/包装器夹具和 PAGE-23 Playwright 回归;`1.0.0-preview.8` 已发布 9 个验签资产,Preview.9 进一步将公共仓库安装入口精简为单行 `curl | sudo bash` | | 第一版 Preview | PAGE-01~22 页面和菜单框架齐备,真实前后端核心链保持可用;Preview 上线与整套 R1 最终验收分开计量 | | 来源表格校验 | V068 为 14 类 OA 的 33 个 TABLE 字段补齐嵌套类型、必填和文件引用规则;V069 保留 OA-02 v1 历史账户表格契约,避免 v2 字段追溯污染 | | PAGE-20 审计 | 增加不可变事件序号、四种稳定排序、URL 查询状态、同排序 CSV 导出、脱敏详情及 OpenAPI `422` 参数门禁 | | PAGE-22 在线更新 | 更新源固定为公共 Gitea Latest Release API,默认不使用 Token;“获取版本”只读取最新版本信息,发现新版本后由管理员点击“立即更新”开始下载。下载、验签完成进入 `READY/下载完成` 后显示“立即更新并重启”。安装健康检查成功后页面从 10 秒倒计时自动刷新;刷新、短暂断线或命令响应丢失时恢复状态轮询。后台只写固定结构请求,由 root oneshot 服务验签、验哈希、按配置选择是否调用已有 `mysqldump`、切换和回滚,不接受页面传入地址、Token 或命令 | | Release 工程 | `.gitea/workflows/release.yml` 监听严格 SemVer `v*` tag;Maven `revision`、npm、JAR、前后端 SBOM、签名 manifest 与 tag 必须同版本。工作流执行 Java/前端/OpenAPI/Playwright/依赖审计,使用至少 3072 位 RSA 密钥生成并独立验收恰好 9 个资产;先创建不可见草稿、逐项上传并核对名称/大小,最后发布为可被 `/releases/latest` 读取的正式 Release | | Linux 32 位 | i386/i486/i586/i686 下载 Java 17 i686 JRE;JRE 元数据和归档均使用仅允许 HTTPS/TLS 1.2 及以上的受限下载器;由于 MySQL 8.4 无对应服务端镜像,要求预置外部 MySQL 8.4.x,curl 安装只开启 `/setup` 向导,数据库密码在浏览器中提交;安装器不安装 MySQL、不运行 MySQL 客户端,点击完成安装后由应用在专用 schema 中执行迁移 | | 更新可靠性 | 下载和安装拆为两个持久动作;下载阶段不停止业务服务,安装阶段只接受同版本 `READY` 缓存并重新验签。公共 Gitea 默认不使用 Token;如改接私有镜像,Token 仅从权限为 `0600` 的 root 配置/临时文件读取,不进入 `curl` 参数、页面、状态或日志,且只允许同源 API/资产使用;请求原子领取到持久 `processing`,systemd 限制失败重试;数据库备份默认为 `skip`,只有显式配置 `KAIDI_DB_BACKUP_MODE=mysqldump` 才调用已有工具;新旧版本健康和回滚均有独立门禁,跨来源拒绝、成功、健康回滚、下载失败、备份失败和不安全请求夹具纳入 CI | | 阶段口径 | 把“开发前冻结”更新为“R1 开发中”;明确模块级验收与整套 R1 交付是两个层级,避免一页完成后虚报整套系统完成 | | PAGE-13 页面 | 完成合同执行汇总、筛选、服务端分页、来源下钻、CSV 导出、合同详情及变更/结算/应付操作;页面仅使用现有 TDesign Starter 和 TDesign 组件 | | PAGE-13 后端 | 新增 `contractcost:payable:create`,项目经理可登记但不可确认;同人登记/确认返回 `422 SOD_VIOLATION`;应付必须关联已批准 OA-04,结算必须关联已批准 OA-11,同一来源不得重复消费 | | PAGE-13 金额口径 | 展示层分列“待确认应付”和“已应付”;待确认应付仍预占合同额度,避免连续登记绕过限额 | | PAGE-14 页面 | 在唯一 TDesign Starter 内完成收款/发票双页签、筛选、服务端分页、详情抽屉、草稿录入/编辑、状态动作、金额格式化、CSV 导出及加载/空态/错误反馈 | | PAGE-14 后端 | 完成正式应收、收款确认与多对多核销、收款作废、开票提交/复核/人工结果、发票作废/红冲、自动生成应收与财务事件,并由 Java 后端执行权限范围、金额阈值、SOD、状态机和版本冲突控制 | | OA-04/05/08 审批投影 | 财务终审在同一事务内分别生成 `CONFIRMED` 应付、`CONFIRMED` 收款和 `DRAFT` 开票候选;来源版本、公司/项目/客户/合同快照、额度、SOD、资金台账、会计事件和重复消费由 Java/MySQL 共同约束 | | OA-08 合同口径 | 投影前锁定合同控制行,分别复核合同金额快照、已开票快照和包含 `DRAFT/REVIEWING` 候选的在途预占额;本次申请与在途候选累计超过合同额度,或快照过期时,终审整体回滚,不能留下已批准但无法继续复核的超额候选 | | PAGE-15 页面 | 在唯一 TDesign Starter 的付款申请弹窗中,把 OA 来源自由文本改为按当前项目加载的 TDesign 下拉;只显示已批准 OA-06,切换项目清空并重载,编辑历史草稿可回显已关联来源 | | PAGE-15 后端 | OA 来源保持可选;一旦选择,保存草稿和财务批准时均要求 OA-06、同公司、同项目、当前版本存在 `APPROVED` 审批实例,并允许来源进入批准后的结果/归档后续状态;批准前发生版本替换会阻断付款 | | PAGE-15 付款主链 | 付款申请、项目/合同/应付/账户/通用附件/精确重复/项目风险检查、线下结果登记、异人复核、部分支付、失败、退汇和重付已实现;不产生银行付款指令,不接网银、U 盾或第三方平台 | | PAGE-15 条件附件 | 应付成本分类命中生效矩阵后,TDesign 页面逐项显示齐全/缺失/文件检查中并要求每个文件选择资料类型;Java 在保存时固化参数版本和分类规则快照,批准时按快照阻断缺件、矩阵外类型及未通过检查的文件 | | 附件兼容与发布 | 历史付款及无生效规则路径继续按通用附件检查;生效矩阵下旧 `attachmentFileIds` 在保存时明确拒绝,必须改用结构化 `attachments`;包含 `allowNotApplicable=true` 的矩阵在例外复核闭环完成前禁止发布 | | PAGE-15 并发资金控制 | 资金控制行存在时以冲突更新先获取排他锁,再读取余额并冻结;两笔各 600 元付款并发竞争 1,000 元项目余额时,固定只有一笔批准、一笔返回 `422 FUNDS_INSUFFICIENT`,最终冻结额为 600 元,不出现超支或 500 死锁错误 | | 数据库 | 当前最高迁移为 `V071`;V064 完成八类主数据旧编号映射,V065 完成人工记账结果冲销/重开,V066 增加审计全局时间线索引,V067 增加系统更新查看/执行权限,V068 补齐来源表格嵌套列的类型、必填和文件校验元数据,V069 保留 OA-02 v1 历史账户表格契约,V070 完成 OA-06 v2 与批准来源付款投影约束,V071 完成超级管理员全权限和全局范围回填;V062/V063 的部门及字典范围升级兼容继续保留 | | PAGE-12 | 部门复用 `masterdata:dictionary:*` 权限和全局范围,后端覆盖创建、列表/详情、编辑、提交、异人复核、停用、重复编码、版本冲突和审计;八类资源新增独立授权的版本分页接口,快照清除执行人相关 `allowedActions`;TDesign 页面新增部门页签、版本记录和双版本字段差异;`MasterDataIntegrationTest` `8/8`、`FinanceOperationsIntegrationTest` `10/10`、三档 PAGE-12 行为测试 `3/3` 通过,两个 Testcontainers 测试库均从空库迁移至 `V063` | | PAGE-11 | 待办列表新增项目、任务状态、到达日期、逾期和排序服务端筛选,返回申请人、关键金额和当前节点;列表退回先读取最新任务详情,再按详情版本与字段退回点提交;`workflow:task:view` 按公司/项目数据范围校验;OpenAPI 已重新导出并通过合同门禁,真实财务账号组合查询无 Console 错误;后端查询专项 `1/1`、退回三档 E2E `3/3` 通过 | | PAGE-16 | 状态机扩展为 `COMPLETED → RESULT_REVERSED → EXPORTED`;冲销恢复来源事件、重开递增结果轮次并清空当前结果,新旧证据和备注按轮次隔离,历史外部凭证号不得复用;两命令分别执行权限、公司/项目/金额范围、异人 SOD、版本、幂等和审计控制,理由按去空格后的至少 2 个有效字符校验;`AccountingIntegrationTest` `18/18`、三档 PAGE-16 专项 `12/12` 通过,测试库从空库迁移至 `V065` | | PAGE-17 | 财务管理人员在 PAGE-08 确认项目财务资料完整后,PAGE-17 才允许生成档案包;服务端执行权限、范围、状态、版本和审计校验,页面展示保管到期日及 `PENDING/ACTIVE/DUE_SOON/EXPIRED/FROZEN` 状态,到期仅提示、不自动删除;`ProjectIntegrationTest#financeConfirmationIsRequiredBeforeArchiveGenerationAndUsesScopeVersionAndAudit` `1/1` 通过,测试库从空库迁移至 `V061` | | 兼容查询合同 | `/api/v1/contracts`、`/costs`、`/payables` 保留现有 `keyword/status/sort/page/size` 合同;未知 query 参数固定返回 `400 QUERY_PARAMETER_UNKNOWN`,非法排序格式、字段、方向、重复项或超过 3 项固定返回 `400 SORT_FIELD_NOT_ALLOWED`,不再混用笼统错误码 | | 生产密钥门禁 | 新增 production profile 回归:缺失 `FIELD_ENCRYPTION_KEY` 或使用仓库公开的本地开发默认值时,敏感字段组件初始化失败;注入 Base64 编码的 256 位密钥后,银行账户和来源敏感值两个加密组件均可初始化 | | PAGE-15 逐笔资金台账 | 核对 `V037` 追加式 `fund_ledger`、付款冻结/支付和收款变动写入、来源事件幂等键、范围权限、审计、`/api/v1/funds/ledger` 查询及 TDesign 资金流水抽屉;OpenAPI operationId 已统一为 `listFundLedger`,真实 MySQL 8.4 数据查询已验证 | | PAGE-18 | 扫描器不可用时,隔离文件仍建立带公司/项目范围的 `file_link`;重扫采用“持久化意图 → 同 FileStore 原子移动 → 独立事务确认”流程,崩溃后可从源或目标恢复;同幂等键保持首次 503/200/422 结果,成功后转为 `AVAILABLE` 并清空转存意图 | | PAGE-18 借阅闭环 | 资料身份申请、财务身份批准、资料身份登记归还的真实浏览器流程已完成;申请、批准、归还分别形成 `ARCHIVE_BORROW_APPLY/APPROVE/RETURN` 成功审计,申请人与审批人不同,最终状态为 `RETURNED` | | PAGE-19 | 导出改为“服务端预检冻结 → 页面显示预计行数/排序/筛选/脱敏说明 → 用户确认 → 服务端重新校验并生成文件”;一次 POST 直接导出入口已移除 | | 前端三档门禁 | Playwright + axe 合同驱动覆盖 PAGE-01~22 的 `1366×768`、`1440×900`、`1920×1080`;完整 Playwright 套件已扩展为 `198/198`,另含 390px 固定列几何回归和超级管理员逐页打开全部业务页面,无 serious/critical WCAG 违规、整体横向溢出或 Console error | | 本轮验证 | 2026-08-17 最近完整后端全量基线 `213/213`(Failures/Errors/Skipped 均为 0),MySQL 8.4 Testcontainers 在 9 分 19 秒内完成全量回归并从空库执行 71 个 Flyway 迁移至 `V071`;OA-06 成功链、`FUNDS_INSUFFICIENT` 回滚链及超级管理员跨人员数据可见/审批处理人拒绝已通过集成测试;前端 ESLint/Stylelint、Vitest `10 files / 56 tests`、TypeScript、production build/hygiene、npm 完整依赖树 `0 vulnerabilities`、Playwright `198/198`、在线更新专项 `15/15`、真实 Edge 管理员 390px/1440px 页面复测、OpenAPI、ShellCheck、Actionlint、安装器/更新/Gitea 发布夹具均通过 | | 证据文件一致性 | 三张本地浏览器证据按真实 JPEG 格式改为 `.jpg`;重扫图按实际像素命名为 `archive-rescan-1366x612.jpg`,批准/归还图保持实际 `1366×768`,总文档引用已同步 | | 浏览器验收 | PAGE-13 在真实 Java/MySQL 环境验证 OA-04 应付来源与 OA-11 结算来源的 TDesign 下拉、项目范围筛选及必填提示,未提交验收业务数据;默认桌面宽度和 `1440×900` 无整体横向溢出、按钮重叠或控制台错误 | | PAGE-15 浏览器验收 | 财务身份打开新建付款申请,选择 `P-DEMO-001` 后 OA-06 下拉只显示临时已批准来源,选择后正确回显;未保存草稿,桌面弹窗无控件重叠,Console 无 warning/error,临时付款和来源数据已清理 | | PAGE-15 剩余阻断 | D-02/D-09 正式矩阵确认和发布、正式三档浏览器/异常状态证据和甲方验收仍未完成;PAGE-15 不升级为 `MODULE_ACCEPTED` | | 剩余质量项 | Starter 演示页面/API/组件/资产已从 production 源码移除,全仓 ESLint、Vitest、release build、source/dist hygiene 及 Chromium 三档 Playwright + axe 基线已通过;真实 API 关键动作、键盘焦点、Edge、异常状态矩阵和正式 FE-GATE 证据仍未完成 | | 前端硬规范 | 把“使用 TDesign”落成 Starter 实际布局基线、组件来源、菜单/页面新增步骤、原生控件、图标、Token、例外批准和机器合同规则;页面必须在唯一 Starter 内原位实现 | | 新增功能规则 | 新增菜单、路由、页面、组件、按钮、筛选、图表时,必须同步页面合同、`COMP-*`/`OPS-*`、OpenAPI、权限、状态、审计和测试,禁止只摆界面后再补功能 | | 页面与功能 | 保留 PAGE-01~PAGE-22、14 类表单和既有页面合同;新增页面、菜单或平行入口必须走变更,不得绕开本文件 | | 第一轮交付 | 明确 R1 是前端、Java、MySQL、权限、流程、文件、审计、测试、部署和交付材料的完整闭环,不是静态页面或局部接口 | | 修复责任 | 增加“复现 → 定位 → 修复 → 同类扫描 → 回归 → 部署 → 证据”的开发团队闭环,甲方不承担基础调试和补实现责任 | | 范围边界 | 继续排除银行/U 盾、电子税务局、自然人税务系统、第三方权限/API、RPA 和自动执行;不因“完整系统”而扩回范围 | | 资料状态 | 已从微信正式文件目录找回并复核 14 张 OA 表单图和 12 份财务岗位职责表,记录三份原始资料 SHA-256;项目管理流程图仍未找回,须在 D-03 前补齐或书面确认 | | 当前基线复核 | PAGE-12 已补部门主数据、升级库字典范围兼容和旧编号映射,PAGE-13/14 维持模块级已验收;OA-04/05/06/08 来源到财务对象的事务投影已实现并通过来源审批专项回归,但正式三档浏览器 UAT 和证据包仍待补齐;PAGE-15 的核心主链、OA-06 自动付款投影和条件附件技术能力已验证,但正式业务规则仍未发布;PAGE-16 已补已完成结果冲销/重开和分轮历史;PAGE-17 已补财务确认门禁和保管到期状态,PAGE-18 已补可恢复重扫和异人借阅闭环,PAGE-19/20/21 已形成 Preview 实现并等待正式验收;`SYSTEM_ADMIN` 已升级为全部页面/权限/全局数据可见且保留业务控制的隔离超级管理员。数据库当前最高迁移为 `V071` | | 基线材料 | 把签字版总方案、21 页原型、14 类字段/附件字典、fixture、状态/数据/OpenAPI 合同、D-01~D-11 和任务追溯表合并定义为唯一《R1 基线包》;材料不齐时,对应未确认模块不得通过模块验收或进入发布 | ## 1. 先说结论 ### 1.1 甲方现在真正要的东西 甲方暂时不是要一套把所有财务、税务、银行和自动化都做完的大系统,而是要一套**看得懂、用得起来、能把项目资料和财务流程串起来的基础系统**。 系统首期只解决这一条主线: ```text 业务人员提交资料 → 项目/财务人员审批和复核 → 形成收款、发票、成本、付款等财务数据 → 形成可供记账的凭证资料 → 项目完成后归档 → 按项目、合同、金额和状态查询 ``` 会议原文明确了四个方向: 1. 先做简单版本,原有系统继续保留,避免用户一开始看不懂。 2. 登录后先选择身份,首期分为项目管理人员、财务管理人员、资料管理人员三类。 3. 14 个 OA 表单不是 14 个孤立页面,而是要按角色放进一条项目财务数据流。 4. 报税、网银/U 盾、第三方权限和跨系统自动化暂时不做;记账先做成可供现有系统或人工使用的结果。 ### 1.2 我们最终要交付什么 | 交付类别 | 交付内容 | 甲方得到的结果 | | --- | --- | --- | | 可运行系统 | 一个 Java Web 系统,可部署、可登录、可演示 | 三类人员从各自入口开展工作 | | 项目业务 | 项目、供应商、合同、进度、收款、发票、付款等基础数据 | 项目资料不再散落在表格和聊天记录里 | | 审批复核 | 表单提交、待办、审核、退回、驳回、状态跟踪 | 每个决定都有操作人、时间和意见 | | 记账准备 | 财务事件、凭证草稿或标准导出、人工登记结果 | 财务可以接着现有记账系统工作 | | 资料归档 | 项目档案包、附件版本、检索、下载和归档审核 | 项目结束后资料可查、可追溯 | | 查询分析 | 项目台账、合同执行、收付款和流程进度 | 管理人员能看到项目处于什么阶段、钱和资料在哪里 | | 交付材料 | 源代码、数据库、部署包、测试报告、模板、操作手册 | 甲方能够部署、验收和后续维护 | ### 1.3 首期不交付什么 以下内容明确排除在本期之外: - 不登录、不控制、不保存网银、银企直连、U 盾、电子税务局、自然人税务系统。 - 不申请 OA、T+、HR 或其他第三方账号、Token、证书、Webhook、SSO 权限。 - 不做 RPA、自动付款、自动报税、自动缴税、自动过账和无人值守定时任务。 - 不做完整税务申报模块;税务资料以后可作为扩展模块。 - 不替换现有法定总账系统;首期输出记账准备数据和人工登记结果。 - 不首期建设完整人力资源、工资、固定资产、预算、融资和合并报表系统。 ### 1.4 V2.8 冻结基线与 V2.9 执行关系 V2.8 冻结的范围、页面、技术和质量规则继续有效;V2.9 只把项目阶段更新为开发执行,并记录已经形成客观证据的 PAGE-14,不降低整套 R1 的完成标准。 1. 当前状态更新为“R1 开发中”;Starter 导入本身仍不算业务完成,只有通过模块级代码、数据、测试和浏览器验收的功能才计入实际进度。 2. 前端继续锁定为现有 TDesign Vue Next Starter 原位开发,只能在其中加菜单、页面、组件和真实功能;文件级保留、重写、删除和新增范围按 11.2 节执行,不引入第二套 UI 或平行前端。 3. 21 个页面补齐默认进入状态、主操作顺序、完成标志、TDesign 组件、路由、查询语义、接口组和验收条件。 4. 已逐张复核原始压缩包中的 14 张 OA 表单图,并回填可见字段、重复明细和人材机/进度款条件附件;原图没有给出的必填条件、枚举、金额公式、审批时限和下游映射仍按第 18 节资料可复核性规则在开工前签字,不把设计推导当成原表事实。 5. 权限判定、权限码、分域状态码、状态按钮、数据库列/约束/索引基线、R1 接口 DTO 规则、幂等并发、文件状态、安全参数和测试判定已统一。 6. 岗位职责资料按“R1 吸收、仅留内部记录、后续单独立项”分类,不把网银/U 盾、税务、工资社保或自动化执行重新带回第一轮。 7. D-01~D-11 和 S0 技术合同继续并行冻结;未签字、未形成字段字典、OpenAPI 快照和数据字典时,受影响模块不得验收或发布,不允许边开发边猜关键规则。 8. 每一个前端菜单、页面和可见操作都必须同时绑定本地路由、TDesign 组件、权限码、对象状态、OpenAPI operationId、成功/失败结果、审计事件和自动化测试;缺少任一项不得合并,也不得计入完成率。 9. “第一轮完整系统”的完成口径统一为第 12.9 节 R1 Definition of Done 全部满足,包含 PAGE-01~PAGE-21、OA-01~OA-14、真实前后端闭环、P0/P1 缺陷清零和可独立部署;阶段演示、单条样例或局部接口不得替代完整交付。 10. 前端增加唯一工程、唯一入口、依赖白名单、ECharts 使用边界、组件批准记录、逐操作状态矩阵、可访问性和验收证据包门禁,使“使用 Starter 和 TDesign”能够由 CI 与 UAT 客观检查,不依赖口头判断。 11. 每个页面和功能固定按“需求/页面合同 → 数据合同 → OpenAPI → Java 实现 → Starter/TDesign 页面 → 联调测试 → 证据验收”顺序完成;`COMP-*`、`OPS-*` 和路由页面合同在 S1 落为可由 CI 校验的机器文件,但不新增第二份 PRD/SPEC。 12. 会议原话、后续项目决策、方案设计基线和待确认事项按 2.3 节分级记录;21 个页面、完整 R1、Java 技术栈和 TDesign 唯一前端属于后续项目决策与设计冻结,不冒充 2026-08-05 会议逐字结论。 13. 开发团队在开工后承担“实现 → 自测 → 联调 → 修复 → 回归 → 交付”的完整责任,不能把局部页面、局部接口或甲方代测当成完成。 14. 仓库中的 Java、数据库、部署和接口代码按模块逐项评审:PAGE-13/14 已有完整证据的部分按本版记录为模块级完成;其他代码在通过所属任务评审和验收前仍不得计入 S1~S5 完成率。 15. 三类业务身份与超级管理员身份不混授:项目、财务、资料是普通业务身份;仅隔离的 `SYSTEM_ADMIN` 账号在 PAGE-02 显示“超级管理员”入口并默认进入 PAGE-21。进入系统后,超级管理员可访问全部业务菜单、页面、功能权限和全局数据,但不会被伪装成普通业务角色,也不能绕过审批处理人、异人复核、状态机、资金硬控制和审计。 16. 正式页面不得出现“页面已接入”“功能建设中”“后续实现”等占位提示,也不得保留空按钮、空表格或共用占位组件;这类内容只可存在于隔离原型,不能进入 production 或计入页面完成率。 17. Starter 的 `side + light` 布局、侧栏/顶部/内容区基线、TDesign Token、组件与图标来源、页面密度和目标分辨率已经冻结;新增菜单、页面、组件和功能必须执行 11.2 节七步流程和逐项变更表。 18. 第 3.6 节 A~F 统一称为《R1 基线包》;当前开发已启动,但未完成的基线材料必须继续收口,且总方案、页面、业务、技术合同、样本测试和执行计划未全部确认前,整套 R1 不得进入发布或整体验收。 ### 1.5 当前是否可以进入正式开发 **结论:第一轮正式开发已经开始,但整套 R1 尚未完成。** PAGE-13/14 已通过模块级验收;技术栈、前端实现方式、R1 总范围和交付责任继续按本文件执行。D-01~D-11、21 页原型、14 类字段/附件字典、完整 OpenAPI 快照、数据字典及其他页面实现仍须按第 3.6 节完成和确认。 | 判断项 | 当前结论 | 接下来要做什么 | | --- | --- | --- | | 产品方向 | 已冻结 | 按“来源 → 审批 → 财务处理 → 记账准备 → 归档 → 查询”做完整 R1 | | 前端规范 | 已冻结 | 当前及后续只在现有 `frontend/` Starter 原位增加菜单、页面、组件和真实功能 | | 技术架构 | 已冻结 | 使用第 11 章 Java 模块化单体、MySQL、Flyway、OpenAPI 和测试规范 | | 业务细节 | 尚待甲方签字 | 完成 D-01~D-11,尤其是字段、金额公式、审批节点、导出格式和报表口径 | | 当前开发状态 | 已启动 | 按“一个功能一条真实纵向闭环”继续开发;未通过证据验收的代码不计完成 | | 当前已验收模块 | PAGE-14 | 按 8.15.1、11.6.3、11.7.3.1、12.5 和 13.1.1 的实际记录维护 | | 整体发布 | 尚未触发 | 《R1 基线包》和第 12.9 节全部通过后,才能形成唯一 R1 整体验收结论 | “已进入第一轮开发”不表示可以跳过未完成的 S0 基线工作。每个后续模块仍须从已冻结的页面、数据、接口和测试合同开始;缺少关键决策时只阻断受影响模块,不允许开发人员自行猜测。 ### 1.6 第一轮开发执行口径 这一节给甲方、产品、开发和测试统一使用,避免把“马上开发”“完整系统”和“使用 TDesign”理解成不同事情。 | 问题 | 固定答案 | | --- | --- | | 现在是否已经正式开发 | 已经开始。当前 R1 为 `IN_PROGRESS`,PAGE-14 为 `MODULE_ACCEPTED`,整套系统仍未交付 | | 后续模块什么时候可以开始 | 其页面、数据、接口、权限、状态、fixture 和验收人已经明确时即可进入实现;关键规则未确认则阻断该模块 | | 前端在哪里开发 | 只在仓库现有 `frontend/` TDesign Vue Next Starter 中原位增加和修改,不新建第二工程、不换模板、不用 iframe 拼装 | | 前端怎么做 | 按 7.3 节加菜单和路由,按 8.24~8.26 节逐页实现,通用控件和图标只使用 TDesign;业务组合组件也必须由 TDesign 组件组成 | | 每个功能怎么完成 | 同一个功能按“页面/业务规则 → 数据库 → OpenAPI → Java → TDesign 页面 → 联调测试 → 验收证据”纵向做完,不把空页面、空接口或 Mock 留到最后补 | | 第一轮交付什么 | 一次性交付第 12.9 节定义的完整 R1:21 个页面、14 类表单、真实数据闭环、权限、文件、测试、部署和交付材料全部可用 | | 谁负责修改和修复 | 开发团队负责实现、自测、联调、定位、修复、回归和部署;甲方负责确认业务规则和验收业务结果,不替开发团队查代码、改库或补测试 | | 哪些仍然不做 | 银行/U 盾、税务平台、第三方账号/API/SSO、RPA、自动付款、自动报税、自动缴税和自动过账继续排除 | 按 S1~S5 分阶段开发和内部演示,但对甲方只有一个“第一轮完成”结论:完整 R1 通过验收。PAGE-14 的模块级完成可以作为阶段进度和复用基线,不能单独称为已交付系统。 ## 2. 会议结论转成产品规则 ### 2.1 会议内容和系统决策 下表左列是会议原文的业务方向,右列是为便于开发而做的产品化表达。产品化表达包含必要设计推导,不等于会议逐字确认;其确认等级和生效规则统一按 2.3 节执行。 | 会议说法 | 转成开发规则 | | --- | --- | | “先做简单的,后面再做加法” | 首期只做 P0 闭环;每个功能必须有明确页面、输入、输出和验收,不把未来模块混进首期 | | “用户看不懂,做出来给他们看” | 先做可演示原型和一家公司/一个项目样例,再用真实操作反馈迭代 | | “登录后选择身份” | 登录后显示当前账号被授权的角色卡片;选择角色后进入对应工作台,服务端仍然再次校验权限 | | “至少两类,后面加资料审核” | 首期固定三类普通业务身份:项目管理、财务管理、资料管理;`SYSTEM_ADMIN` 是隔离的超级管理员身份,只对纯管理员账号显示入口,不与业务身份混授,但自动拥有全部功能权限和全局数据范围 | | “14 个界面分成两类” | 14 个表单按发起/财务审核/资料归档分配;页面可合并,但表单代码和数据关系不能混淆 | | “记账可以用现有系统做” | 本系统生成凭证草稿/标准文件并登记人工记账结果,不调用现有系统接口 | | “报税先不管” | 首期不开发申报执行;只保留税务字段扩展位,不把报税作为 MVP 验收条件 | | “把数据流打通” | 每条记录必须能从来源单号追到审批、财务结果、记账准备和档案附件 | ### 2.2 用通俗话解释系统逻辑 - **项目管理人员**:把项目资料填进来,补附件,跟进审批,查看自己的项目进度。 - **财务管理人员**:检查项目、合同、供应商、金额、收款、发票和付款资料,确认哪些数据可以进入财务台账和记账准备。 - **资料管理人员**:项目完成后检查资料是否齐全、文件是否可读、档案包是否完整,然后归档。 - **超级管理员**:使用独立账号查看和管理全部业务及系统配置;系统自动展开全部权限码和 `GLOBAL` 数据范围。它仍以 `SYSTEM_ADMIN` 身份留痕,不冒充审批节点处理人,同人登记/复核、状态机、资金余额、附件和审计控制继续生效。 - **系统**:负责记录谁在什么时候做了什么,不替人登录外部系统,也不替人自动付款或报税。 ### 2.3 需求来源与确认等级 为了让普通使用者、产品、开发和测试都能分清“甲方说过什么、方案补充了什么、还有什么没定”,本文件中的要求按以下四级管理: | 等级 | 含义 | 本项目中的典型内容 | 是否允许开发自行修改 | | --- | --- | --- | --- | | `CONFIRMED-MEETING` | 2026-08-05 会议明确提出的业务方向 | 先做基础版本、原系统保留、按身份进入、14 类表单进入数据流、报税先不做 | 不允许;变化必须走需求变更 | | `CONFIRMED-PROJECT` | 会议后由项目方继续明确的实施决定 | Java 技术栈、现有 TDesign Starter 唯一前端、第一轮交付完整 R1、2026-08-11 进入开发执行、第三方权限和自动化排除 | 不允许;变化必须由项目负责人书面确认 | | `DESIGN-BASELINE` | 为把业务要求变成可开发系统而形成的产品/技术设计 | PAGE-01~21、菜单路由、模块边界、接口、数据表、权限、状态机、测试和部署规则 | 文档批准后即为开发基线;只能按变更流程修改 | | `PENDING-DECISION` | 仍需甲方拿样例和选项确认的具体规则 | D-01~D-11 的人员、字段、金额、流程、导出、报表、文件、容量和品牌 | 不允许猜测;未确认时阻塞受影响模块验收和整套 R1 发布 | 本文件对来源的处理规则如下: 1. 会议原文优先用于确认业务目标和范围方向,不从含糊表述中擅自推导具体金额、状态、字段或接口规则。 2. 2026-08-10 后续项目决策明确:第一轮不是只交原型或局部模块,而是交付第 12.9 节定义的完整 R1,前端必须采用当前已拉取的 TDesign Vue Next Starter;2026-08-11 最新执行决定进一步启动 R1 开发,并要求已完成模块按客观证据写回本文件。上述内容均属于 `CONFIRMED-PROJECT`,不是会议逐字原话。 3. PAGE-01~PAGE-21、六类报表、权限码、SOD、审计、文件版本和工程门禁属于 `DESIGN-BASELINE`。甲方批准本文件后即具有约束力,但不能写成“会议已经逐项确认”。 4. 记账首期固定为“凭证草稿/标准导出 + 人工登记和复核结果”,不接现有记账系统接口,不自动过账;其最终文件样式和字段仍由 D-07 确认。 5. 需求冲突时按“最新书面项目决策 → 已批准的本文件 → 会议原始方向 → 开发个人理解”处理;如冲突影响范围、权限、金额、状态或交付日期,先停止相关实现并完成变更确认。 ## 3. 首期范围和后续范围 ### 3.1 MVP 必须做完的闭环 MVP 范围必须全部完成。“一家公司、一个项目、一组完整样例”只是最低端到端验收数据集,不表示只开发一家公司、一个项目或只实现样例触发的功能。该数据集必须能跑通: 1. 登录并选择三类身份。 2. 创建或导入项目、供应商、合同基础资料。 3. 提交并审批项目立项、供应商准入、成本合同等表单。 4. 记录人材机成本确认、收款确认、发票申请、进度款支付。 5. 财务人员审核金额、附件、合同和项目关联关系。 6. 生成财务台账和凭证草稿/记账导出文件,人工登记记账结果。 7. 项目资料归档,资料人员完成归档审核。 8. 按项目查询全过程和未完成事项。 ### 3.2 后续再做的加法 | 阶段 | 扩展方向 | 本期处理方式 | | --- | --- | --- | | V1 | 银行流水人工导入、对账、更多凭证规则、项目成本分析 | 预留数据结构,首期可先用人工台账 | | V1 | 工资、社保、固定资产、折旧摊销 | 只接收人工结果,不做完整子系统 | | V2 | 税务日历、税会核对、申报资料包 | 不接税务平台,不自动申报 | | V2 | 报表、经营分析、移动端 | 先完成基础查询和导出 | | 单独项目 | OA/T+/银行/税务 API、RPA、自动化执行 | 重新立项、重新评估第三方权限和安全责任 | ### 3.3 现有系统如何处理 旧系统不删除、不替换、不要求一次性迁移。首期新系统作为“项目财务资料和流程中台”: - 旧系统继续承担已有工作。 - 新系统接收人工导出的数据和附件。 - 新系统把财务审核、台账、记账准备、归档和查询做清楚。 - 未来要不要替换旧系统,等 MVP 使用稳定后再决定。 ### 3.4 当前模块是否齐全 **结论:整套财务系统的模块仍未齐全,但已经不再是全部待开发。** PAGE-14 收款与发票已通过模块级验收;其余页面必须按各自实现和证据判断。当前仍不能证明 PAGE-01~21 和完整端到端业务闭环已经全部实现,也不能把“Starter 能打开”“接口能返回”“有一张表格”或“某个页面完成”扩大解释为整套系统完成。 | 业务区域 | 当前材料能证明什么 | 当前缺口判断 | 本期要开发的结果 | | --- | --- | --- | --- | | 14 类 OA 表单 | 有表单样式、字段和审批业务基础 | 表单之间仍是分散数据,未形成统一编号、版本和下游关系 | 模板化录入/导入、校验、审批快照、内部处理和归档 | | 人员岗位职责 | 有财务岗位分工资料 | 系统角色、数据范围、金额权限和岗位互斥尚未落地 | 三类业务身份、管理员账号和服务端权限控制 | | 项目与主数据 | 表单中反复出现项目、供应商、合同、账户 | 重复录入、编码和历史版本没有统一控制 | 公司、项目、往来单位、合同、账户和字典中心 | | 审批与财务复核 | OA 可提供原审批痕迹 | 来源审批、内部财务复核和补件状态未串成一条链 | 来源快照、待办、退回/驳回、财务确认和审计记录 | | 收款、发票、成本、付款 | PAGE-13/14 已完成合同成本与收款发票模块级验收;付款仍须按 PAGE-15 单独验收 | PAGE-13/14 不再是缺口;PAGE-15 和跨模块全链路仍未据此自动完成 | 保持 PAGE-13/14 回归稳定,继续完成付款检查、线下结果登记及异人复核的独立验收 | | 记账 | 现有记账系统可继续使用 | 业务单据到记账资料之间仍需人工重新整理 | 财务事件、凭证草稿、标准导出和人工凭证结果登记 | | 资料归档 | 有附件和资料岗位职责 | 缺少统一档案包、文件版本、检索、借阅和下载留痕 | 项目档案包、缺件检查、归档审核、检索和借阅 | | 查询分析 | 主要依赖表格临时汇总 | 数据口径、下钻和权限不统一 | 项目、合同、收付款、流程和资料完整性报表 | | 银行、税务和外部自动化 | 业务客观存在 | 涉及第三方权限和执行责任 | 本期不开发,只保留人工结果和附件的内部记录 | ### 3.5 第一轮开发必须交付什么 第一轮开发不是只交一套页面、一个原型或几个接口,而是交付一个**前端、后端、数据库、文件、权限、测试和部署全部可用的完整 R1 系统**。这里的“完整”指第 12.9 节 R1 Definition of Done 全部完成,包括 P0/MVP 全范围、P0/P1 缺陷清零和完整交付证据;不代表把明确排除的银行、税务平台和第三方自动化重新纳入范围。 | 完整性维度 | 第一轮必须达到的结果 | | --- | --- | | 前端完整 | 基于 TDesign Vue Next Starter 完成 PAGE-01~PAGE-21,菜单、按钮、表单、列表、详情和异常状态都可操作 | | 后端完整 | Java 模块、权限、状态机、金额规则、审计、文件和导出接口全部实现,不用 Mock 代替正式业务 | | 数据完整 | Flyway 可从空库建立数据库;主数据、14 类表单、审批、财务记录、记账准备和档案关系可持续保存 | | 流程完整 | “来源资料 → 审核 → 财务处理 → 记账准备 → 归档 → 查询”能用真实接口端到端跑通 | | 权限完整 | 项目、财务、资料三类身份及系统管理员按功能、公司/项目、金额和流程节点生效,越权由后端拒绝 | | 交付完整 | 可在 staging/production 部署,具备初始化、备份恢复、日志监控、测试报告、操作手册和验收证据 | 第一轮内部仍按 S1~S5 分阶段开发和演示,但这些阶段不是五个可以单独验收的残缺产品。对甲方的第一轮正式交付只有一个:S1~S5 全部完成后的 R1 完整系统。 以下情况不算第一轮完成:只有静态页面;页面仍调用 Mock;按钮没有后端逻辑;只完成部分 OA 表单;权限只隐藏菜单;数据刷新后丢失;关键流程靠开发人员改数据库;不能独立部署;P0 或 P1 缺陷未清零。 R1 继续排除:网银/U 盾、银企直连、电子税务局、自然人税务系统、第三方账号/API/Token/SSO、RPA、自动付款、自动报税、自动缴税和自动过账。它们不是“完整系统”的缺口,而是已经签字确认的范围外事项。 ### 3.6 当前阶段和第一轮基线门槛 当前处于**R1 开发执行阶段**。`frontend/` 是唯一 TDesign Vue Next Starter 前端,Java/MySQL 和业务页面按模块纵向实现。PAGE-13/14 已有模块级验收事实,但它们不代表 PAGE-01~PAGE-21、全部 Java 模块、数据库关系和端到端业务闭环已经完成。 仓库代码统一按证据分级:通过页面、接口、数据、权限、状态、自动化测试和浏览器验收的模块可记录为 `MODULE_ACCEPTED`;只具备局部页面、局部接口或技术可行性的代码仍按“待评审实现”处理。任何模块在通过所属任务验收前,不能据此把整个阶段或 R1 标记为完成。 低保真原型继续只用于确认尚未开发页面的结构和业务理解,必须与 production 真实链路明确区分;已进入正式开发的页面不得再使用 Mock、静态占位或原型状态冒充业务结果。 以下六项现在作为各模块验收和 R1 整体发布的共同基线;缺项时阻断受影响模块验收,并阻断整套 R1 发布: 1. D-01~D-11 全部有书面结论和确认人,不残留 `TBD`、口头规则或“开发中再定”的临时默认值。 2. PAGE-01~PAGE-21 的低保真原型使用 TDesign Starter 框架完成,三类身份分别走查并签字。 3. OA-01~OA-14 每类具备脱敏的成功、必填失败、重复、越权四类 fixture 和正式字段字典;付款、凭证、档案另具备成功、业务阻断、并发冲突和 SOD fixture。每个 fixture 都已写清前置数据、执行身份、输入、预期页面/HTTP/业务状态、金额、下游对象和审计事件。 4. 关键金额公式、状态机、岗位互斥、附件矩阵和记账导出格式已经冻结。 5. 前后端目录、逐表数据字典、分域状态机、OpenAPI operation/DTO、Flyway 规则、错误码、测试门槛和发布方式按第 11 章冻结。 6. R1 范围、负向范围、Definition of Done 和 UAT-001~UAT-035 进入项目管理工具并关联负责人。 六项基线全部通过后,项目经理形成书面《R1 基线确认》,至少记录文档版本、决策项版本、样本版本、原型/页面评审结论、开发启动日期和各模块负责人。当前已启动开发不免除这项工作;没有完整确认时,整套 R1 不得进入 production 发布或最终验收。 为避免开发和验收时分散寻找材料,上述六项统一组成一份《R1 基线包》,只允许引用这一份总方案中的编号,不再另写一套含义不同的 PRD/SPEC: | 基线包分册 | 必须包含 | 通过标志 | | --- | --- | --- | | A. 需求基线 | 本文件 V2.9 签字版、R1 正向/负向范围、PAGE/F/OA 编号和变更记录 | 甲方负责人、产品、技术和测试签字,文档哈希固定 | | B. 页面基线 | PAGE-01~PAGE-21 低保真原型、三类业务身份与系统管理员逐页走查、菜单/路由/模板/组件清单 | 每页有进入状态、主操作、完成结果、异常状态和验收人 | | C. 业务基线 | OA-01~OA-14 字段/附件字典、状态机、金额公式、权限/SOD、D-01~D-11 结论 | 没有 `TBD`、口头默认值或“开发时再定” | | D. 技术合同 | 逐表数据字典、ER 关系、OpenAPI 快照、错误码、`routes/components/operations` 机器合同设计 | 前端、后端、DBA、测试共同评审,无互相矛盾字段 | | E. 样本和测试 | 脱敏 fixture、UAT-001~035 前置数据、账号/身份/范围、预期状态、金额和审计断言 | 样本可重复初始化,成功、失败、重复、越权和并发均有明确预期 | | F. 执行计划 | S1~S5 任务、负责人、主责闭环人、前置项、环境、证据位置、缺陷处理和发布时间 | 每项可进入 `READY`,且所有关键路径都有负责人和验收人 | 《R1 基线确认》只在 A~F 全部通过后签发。若变更页面数量、表单含义、金额公式、权限、状态或范围,必须先更新本文件和受影响合同,再继续受影响实现;开发人员不能用聊天记录或临时口头决定覆盖基线包。 任何人口头提出的新功能先登记为变更,不直接插入当前迭代。影响 R1 范围、金额口径、权限或状态机的变更,必须评估页面、接口、数据迁移、测试和交付日期后,由甲方和项目负责人共同确认。 #### 开发执行期允许和禁止的工作 | 类别 | 当前允许 | 当前禁止 | | --- | --- | --- | | 需求 | 修改本文件、补字段字典、流程、页面、权限、状态、验收和决策项 | 口头规则不落文档就直接开发 | | 原型 | 为尚未实现页面制作与 production 链路隔离的低保真走查稿,明确标记“原型” | 用 Mock、静态 JSON、硬编码数据或原型页面宣称正式业务功能完成 | | 样本 | 整理、脱敏、编号 OA-01~OA-14 成功/失败/重复/越权样本 | 把原始账号、密码、身份证、银行卡等敏感资料提交到仓库 | | 技术 | 按页面/数据/OpenAPI 合同实现 Java、Flyway、TDesign 页面并完成真实联调 | 绕过合同、权限、状态、测试或审计直接实现;把局部成功扩大为阶段完成 | | 项目管理 | 建立 TODO、负责人、前置项、验收人和证据位置;按 `MODULE_ACCEPTED` 记录已通过模块 | 没有完整证据就把任务、阶段或 R1 标为已完成 | 本阶段的过程交付物包括本文件、原型、字段/附件字典、脱敏样本、D-01~D-11 决策记录,以及通过模块验收的源代码、迁移、测试和证据。开发团队负责从实现、联调、测试、缺陷修复一直处理到第 12.9 节 Definition of Done;甲方负责确认业务规则和验收结果,不负责替开发团队定位代码、改数据库或补齐未实现按钮。 ### 3.7 当前工程差距基线 截至 2026-08-17,仓库使用唯一 `frontend/` Starter,R1 已进入开发。PAGE-12 已补部门主数据、升级库字典范围兼容、旧编号映射和三档动作回归;PAGE-13 已按 8.14.1 和 13.1.2、PAGE-14 已按 8.15.1 和 13.1.1 形成模块级验收;OA-04/05/06/08 来源终审投影已完成代码和专项回归,但正式页面 UAT 仍未签字;PAGE-15 已按 8.16.1、13.1.3 和 13.1.9 完成核心付款链、条件附件技术能力及 OA-06 付款投影定向验证,但仍为 `IN_PROGRESS`;PAGE-16 已形成 `COMPLETED → RESULT_REVERSED → EXPORTED` 冲销/重开闭环;数据库当前最高迁移为 `V071`,并完成隔离超级管理员全部权限、全局数据范围和三类业务工作台跨人员数据可见。PAGE-17 已补齐财务确认门禁、归档状态机和保管到期提示,PAGE-18 已补齐隔离文件可恢复重扫和本地异人借阅/归还闭环,PAGE-19/20/21 已进入 Preview 阶段验收,相关页面均未达到 `MODULE_ACCEPTED`。其他页面仍按下表逐项评审,任何“已有页面/接口/测试”都不自动等于模块完成,更不等于整套 R1 完成。 | 当前现状 | 与 R1 的差距 | 对应处理 | | --- | --- | --- | | PAGE-01~06 已出现 Session/CSRF、身份选择和工作台真实接口实现 | 尚缺正式 OpenAPI、权限/状态矩阵、全异常状态和对应模块自动化验收的完整证据 | `TODO-S1-007`~`TODO-S1-012`、`TODO-S1-019`~`TODO-S1-023` 逐项评审,不直接标记完成 | | PAGE-01~21 已声明本地路由和菜单,已建立 `routes.json`、`components.json`、`operations.json` 初版机器合同,并由 Vitest 校验页面、运行时路由及 API wrapper 映射 | Starter 演示源码清理和 source/dist hygiene 门禁已完成;机器合同尚未覆盖全量 query 白名单、逐操作状态/fixture/拒绝码,逐操作 `allowedActions`、权限版本失效测试和全量正向/越权证据仍未完成 | `TODO-S0-017`、`TODO-S1-022`、`TODO-S1-028`、`UAT-029`、`UAT-035` | | PAGE-07~08 已有独立项目列表/详情实验;PAGE-09~11 已有表单中心、动态填写/导入和审批任务实验,并接入来源表单、两阶段导入及审批命令 | PAGE-07/08 尚缺正式十页签、导入导出和全异常验收;PAGE-09~11 尚缺经 D-02/D-03 冻结的 14 类完整字段/附件/路线、逐操作合同、正式 OpenAPI 和全部 fixture。已有正常路线不能代表 S2 完成 | `TODO-S2-006`~`TODO-S2-028`、8.24~8.26 节、`UAT-004`~`UAT-010`、`UAT-026` | | PAGE-14 已有独立 `ReceiptsInvoicesPage`、真实 API、分域 DTO、服务端 `allowedActions`、应收/核销/发票命令、V017 数据结构增量、专项测试和浏览器证据 | 模块级功能已经验收;初版机器合同已建立,但全量操作字段、前端组件覆盖率和三档正式桌面 UAT 证据包尚未完成,因此不满足整套 R1 DoD | 维持 `MODULE_ACCEPTED`,按 8.15.1、11.6.3、11.7.3.1、13.1.1 回归;全局门禁归 `TODO-S1-023/028`、`TODO-S5-018/019/021` 收口 | | PAGE-13 已有独立 `ContractCostLedgerPage`、真实 API、分域 DTO、服务端 `allowedActions`、合同/变更/结算/应付命令、V034/V035 迁移、专项/全量测试和浏览器证据 | 模块级功能已经验收;三档 Chrome/Edge 标准证据包仍归全局 UAT 收口,不因本页完成而满足整套 R1 DoD | 维持 `MODULE_ACCEPTED`,按 8.14.1、13.1.2 回归;继续 PAGE-15 和 `TODO-S3-011/015` | | PAGE-18 已有独立 TDesign 文件检索/借阅页、空条件不查敏感文件、扫描/归档状态筛选、版本详情、受控水印预览和隔离文件重扫;工作台“隔离文件”已按 `scanStatus=QUARANTINED` 精确跳转 | 本地浏览器已验证检索、详情、水印预览、重扫、异人批准借阅和归还;范围外直链下载回归及 Chromium 三档空态 axe/溢出门禁已通过。真实数据 Chrome/Edge 三档全流程、正式负向 fixture 和标准证据包仍待完成 | 状态为 `IMPLEMENTED_PENDING_ACCEPTANCE`;保持 `TODO-S4-011/012` 未完成,按 13.1.4、UAT-020~022 收口 | | PAGE-19 已有独立 TDesign 报表页、六类报表、后端汇总、同筛选下钻、中文状态、两位小数和权限范围哈希;已实现服务端预检、冻结排序/筛选/列/预计行数、页面确认及确认时重新鉴权的两阶段导出,MySQL 8.4 全量集成回归已通过 | D-08 尚未确认;日期口径仍混合业务日期与更新时间;流程时长真实样本、三档真实数据浏览器和标准证据包未完成 | 状态为 `IMPLEMENTED_PENDING_ACCEPTANCE`;保持 `TODO-S4-013/014/015` 未完成,按 13.1.4、UAT-023 收口 | | PAGE-12、PAGE-15~21 已分别使用 `MasterDataPage`、`PaymentsPage`、`AccountingPage`、`ProjectArchivesPage`、`ArchiveFilesPage`、`ReportsPage`、`AuditLogsPage`、`SystemSettingsPage` | 独立页面和初版 API 合同不等于验收完成;正式 DTO、详情、下钻、受控导出、逐页筛选、全量数据范围、失败状态和 UAT 证据仍须逐页核验 | `TODO-S2-001`~`TODO-S2-005`、`TODO-S3-008`~`TODO-S3-017`、`TODO-S4-001`~`TODO-S4-016` | | PAGE-15 已有独立 `PaymentsPage`、分域前端 API/机器操作合同、`payment`/`fund` 后端模块、V012/V036~V041/V053/V054/V070 数据结构和 `PaymentIntegrationTest`;核心付款链、OA-06 当前批准版本及终审付款投影、条件附件规则/快照、并发余额控制、逐笔资金台账及例外机制已通过付款 `29/29`、来源审批 `37/37` 专项和页面/HTTP 验证 | 正式附件矩阵仍待 D-02/D-09 确认和发布;三档浏览器、异常状态和标准证据包尚未完成 | 维持 `IN_PROGRESS`,按 8.16.1、13.1.3、13.1.9 和 `TODO-S3-011/015` 继续收口 | | 已新增基于 TDesign `Input` 和 `decimal.js@10.6.0` 的 `MoneyInput`,PAGE-14 已使用十进制字符串 | PAGE-14 金额由 Java `BigDecimal` 最终复算并通过专项回归;跨页面 `COMP-*`、组件测试、可访问性和全部金额页面迁移仍未完成 | PAGE-14 保持回归,组件级全局工作归 `TODO-S1-020`、`TODO-S1-028` | | 新增运营查询服务目前使用 `Map` 读模型,并由前端做 snake_case 到 camelCase 归一化 | 尚未达到 11.7.4 合同:后端应返回分域 DTO,财务金额应为十进制字符串,筛选/排序字段应逐项枚举;公司/项目数据范围过滤尚未对所有查询分支形成完整证据 | `TODO-S0-024`、`TODO-S1-019`、`TODO-S4-014`、`UAT-003`、`UAT-023` | | Starter 演示 API、页面、组件、资产及 `/dashboard/base` 死链已从 production 源码移除,source/dist hygiene 门禁、release build 和 Chromium 三档 Playwright + axe 路由基线已通过 | 仍需把真实 API 动作、Chrome/Edge、键盘、Network/Storage 和逐按钮证据纳入正式 FE-GATE 包 | `TODO-S1-023`、`TODO-S1-028`、`TODO-S5-018`~`021`、`UAT-028`、`UAT-034`、`UAT-035` | | `npm test` 已接入 Vitest,当前 `9 files / 53 tests` 通过;Playwright + axe 已接入 `test:e2e/test:a11y`,合同驱动三档路由基线 `63/63`、完整 Playwright 套件 `183/183` 通过 | 当前 Playwright fixture 已覆盖路由基线及 PAGE-07/08/09/10/11/12/13/14/15/16/17/18/20/21 定向行为,但仍不替代真实 API 全业务矩阵、正式 Chrome/Edge UAT、键盘路径和逐操作权限证据 | `TODO-S1-023`、`TODO-S5-001`、`TODO-S5-018~020` | | `frontend/contracts/routes.json`、`components.json`、`operations.json` 已形成初版并由 Vitest 校验;OpenAPI 生成客户端尚未形成 | 初版合同已能校验页面、路由、基础组件要求和 API wrapper,但完整 OPS 状态矩阵、query 合同、OpenAPI 类型及生成无差异门禁仍待完成 | `TODO-S0-017`、`TODO-S0-024`、`TODO-S1-019`、`TODO-S1-028` | | 前端生产构建可完成,但当前主包仍明显超过 11.11 节预算 | 页面和图表尚未完成代码拆分,也未生成正式 `FE-GATE` 证据 | `TODO-S1-023`、`TODO-S1-027`、`UAT-034`、`UAT-035` | | 仓库已包含 IAM、项目、主数据、来源表单、审批、文件、工作台、运营查询、合同成本、PAGE-14、付款、记账、档案、报表、审计、在线更新及 V001~V071 迁移 | 当前编译和已执行的定向验证只证明对应基线可回归,不证明每个页面均满足 PAGE 合同、浏览器 UAT 和 R1 DoD | PAGE-13/14 之外继续按第 11~13 章逐项形成“保留/重写/补齐”结论和验收证据 | 后续工程基线评审必须逐项给出“保留/重写/补齐”结论、负责人和验证证据。除明确标记 `MODULE_ACCEPTED` 的 PAGE-14 外,表中代码即使能够登录、返回数据或通过局部测试,也不能自动标记页面完成;在第 12.9 节全部满足前,不得称为“第一轮完整系统”。 ## 4. 三类业务身份与系统管理权限 ### 4.1 登录流程 ```mermaid flowchart LR A["输入账号密码"] --> B["校验账号是否启用"] B --> C["显示该账号可用的角色卡片"] C --> D["选择项目管理人员"] C --> E["选择财务管理人员"] C --> F["选择资料管理人员"] C --> J["选择系统管理"] D --> G["项目管理工作台"] E --> H["财务管理工作台"] F --> I["资料管理工作台"] J --> K["系统配置"] ``` “选择身份”只是让用户进入容易理解的工作界面,不是绕过权限。比如一个人同时被授予项目管理和财务管理角色,必须分别进入两个工作台;服务端按角色、公司、项目和流程节点再次判断能否操作。 R1 固定行为:所有账号每次新登录都先进入 PAGE-02。单身份账号只显示一张可用身份卡,用户点击“进入系统”后进入对应工作台;多业务身份账号显示全部已授权业务卡片供选择。仅超级管理员账号显示一张“超级管理员”卡并默认进入 PAGE-21,不显示三类业务卡,也不得与任何业务身份授予同一账号;该卡只是隔离身份入口,不是页面权限上限,进入后侧栏展示全部业务和治理菜单。系统不因只有一个身份而自动跳过 PAGE-02,避免用户不清楚当前身份。会话未失效时刷新页面保留当前身份;主动切换身份必须重新经过 PAGE-02,并清空上一身份的页签、页面缓存和待办查询。 ### 4.2 角色权限矩阵 | 功能 | 项目管理人员 | 财务管理人员 | 资料管理人员 | 超级管理员 | | --- | --- | --- | --- | --- | | 查看本人/授权项目 | 可查看 | 可查看授权公司/项目 | 可查看授权归档范围 | 查看全部公司、项目和跨人员记录 | | 新建项目和业务表单 | 可新建、补件、提交 | 可代录入但需留痕 | 不负责 | 可新建并管理跨人员草稿/导入,全部动作留痕 | | 项目立项/供应商/合同业务审核 | 查看进度,不审批本人 | 审核财务条件和金额 | 只审核资料完整性 | 可查看全部任务;流程审批仍只允许实际节点处理人 | | 收款、发票、付款财务处理 | 查看状态 | 负责审核和登记 | 不负责 | 具有全部功能权限;同人登记/复核和资金硬控制继续生效 | | 记账准备/凭证草稿 | 不可修改 | 生成、复核、导出、登记结果 | 只读关联资料 | 可访问全部功能;制单/复核和登记/复核仍须异人 | | 项目完成归档 | 提交归档 | 确认财务资料完整 | 接收、审核、归档 | 可访问全部档案功能;同人提交/审核限制继续生效 | | 删除正式数据 | 只能删除草稿 | 只能作废/冲销 | 不能删除 | 不增加物理删除正式数据能力,仍按作废/冲销/版本处理 | | 用户和权限配置 | 不可 | 不可 | 不可 | 可管理用户、角色、范围、模板、参数和在线更新 | 超级管理员的“全部权限”指功能权限、菜单页面和数据可见范围完整,不等于跳过业务完整性控制。Java 后端仍逐项执行状态、版本、幂等、实际审批处理人、SOD、合同/应付/资金余额、附件安全和审计规则。 ### 4.3 权限判断的四个问题 每次查询或操作都必须回答: 1. 这个人有没有这个功能权限? 2. 他能看哪家公司、哪个项目? 3. 这笔金额是否超过他的授权额度? 4. 当前流程是否已经到他可以处理的节点? ### 4.4 三类入口与实际岗位权限的关系 三类身份是让普通用户容易理解的**工作台入口**,不是把所有财务人员都授予同一套万能权限。后台仍按甲方实际人员逐人组合岗位权限、公司/项目范围、金额阈值和流程节点。首期至少预置以下岗位权限模板: | 岗位权限模板 | 进入的身份工作台 | 首期主要权限 | 必须禁止 | | --- | --- | --- | --- | | 项目经办/负责人 | 项目管理 | 发起项目、14 类业务表单、补件、查看本人项目 | 审批本人申请、登记付款/记账结果 | | 成本/应付审核 | 财务管理 | 审合同、成本、应付、发票和付款附件 | 登记并复核同一笔线下付款结果 | | 收款/开票经办 | 财务管理 | 确认收款、应收核销、开票申请和人工开票结果 | 自批本人录入的例外和结果 | | 线下付款结果登记 | 财务管理 | 对已批准单据登记线下付款结果和回单 | 在系统内发起银行指令;复核本人登记结果 | | 结算/资金复核 | 财务管理 | 复核项目余额、合同可付额、付款结果和退汇 | 修改已批准来源金额、代替记账复核 | | 记账会计 | 财务管理 | 生成/编辑凭证草稿、导出、登记外部凭证号 | 同时制单和复核同一张凭证 | | 财务负责人 | 财务管理 | 金额阈值内终审、批准允许例外、查看汇总报表 | 绕过永不允许例外的账户/SOD/重复硬控制 | | 资料管理员 | 资料管理 | 缺件检查、档案审核、检索、借阅和归还 | 修改合同、金额、付款和凭证状态 | | 超级管理员 | PAGE-02 的隔离入口,默认进入 PAGE-21,侧栏展示全部页面 | 全部功能权限、全局数据范围、跨人员草稿/导入管理和系统治理 | 与任一业务身份共用账号;冒充审批节点处理人;绕过 SOD、状态机、资金、附件或审计控制 | 一个业务账号可以被授予多个业务岗位模板,但每次只能在一个业务身份上下文中工作;互斥模板不能同时对同一业务对象生效。超级管理员必须使用独立账号,不能与任何业务身份或岗位模板组合;系统通过 `SYSTEM_ADMIN` 自动展开全部权限码和全局范围,不通过混授普通角色实现。是否展示按钮由当前身份和权限摘要共同决定,是否允许执行永远由 Java 后端重新判断。D-01、D-03、D-05 必须把实际姓名、岗位模板、公司/项目范围、金额阈值和互斥关系确认到人。 ### 4.5 服务端授权判定顺序 每个查询、下载和写命令都按同一顺序判断,任一步不满足即拒绝,默认规则是“没有明确授权就是无权”: 1. Session 有效、账号启用、密码不处于强制修改状态。 2. 当前会话已经选择一个有效身份,且该身份仍在账号授权范围内。 3. 当前身份具有本动作的权限码。 4. 请求对象所属公司/项目落在该权限授权的数据范围内。 5. 涉及金额时,金额不大于该动作在该公司/项目下的授权阈值;等于阈值允许,大于阈值进入更高审批节点或返回 `403`,不能由前端自行放行。 6. 业务对象当前状态和流程节点允许该动作,当前用户是节点处理人或明确授权的候补处理人。 7. 岗位互斥、自审自批、同人登记/复核、制单/复核等禁止规则没有命中。 8. 写命令的版本号、幂等键、前置数据和附件仍然有效。 同一普通身份下可以组合多个岗位模板:功能和数据范围只合并明确授予的正向权限;禁止规则、岗位互斥和对象级拒绝优先于允许。金额阈值必须绑定“权限码 + 公司/项目范围”,不能把一个项目的高额度带到另一个项目。`SYSTEM_ADMIN` 在第 3~5 步自动按“全部权限码 + `GLOBAL` + 无 IAM 人员授权额度上限”判定,但第 6~8 步的节点处理人、SOD、状态、版本、幂等、业务余额和附件规则完全不变。超级管理员身份和普通业务身份禁止同时存在于同一账号;授权变更保存成功后立即使相关旧会话失效,用户重新登录后生效。每次拒绝至少记录用户、当前身份、权限码、对象、请求编号和拒绝原因,但响应不泄露无权对象的敏感内容。 ### 4.6 权限码目录 权限码固定使用 `模块:资源:动作`,不使用页面名称或中文作为持久化权限值。OpenAPI、路由 `meta.permission`、按钮指令、后端鉴权和测试样本必须引用同一权限码。 | 权限域 | R1 权限码动作集合 | 主要页面 | | --- | --- | --- | | 项目 | `project:project:view/create/edit/submit/export`、`project:risk-flag:view/create/resolve` | PAGE-04、07、08 | | 来源表单 | `source:form:view/create/edit/import/validate/submit/withdraw/void` | PAGE-09、10 | | 审批任务 | `workflow:task:view/approve/return/reject/reassign` | PAGE-11 | | 主数据 | `masterdata:company:*`、`project:*`、`counterparty:*`、`bank-account:*`、`contract:*`、`dictionary:*`;动作限 `view/create/edit/submit/review/activate/disable` | PAGE-12 | | 合同成本 | `contractcost:ledger:view/export`、`contractcost:payable:view/create/confirm` | PAGE-13 | | 收款发票 | `receivable:receipt:view/create/edit/confirm/allocate/void/export`、`receivable:invoice:view/create/edit/submit/review/record-result/void/red-letter/export` | PAGE-14 | | 付款 | `payment:request:view/create/review/approve/record-result/verify-result/refund/export` | PAGE-15 | | 记账准备 | `accounting:event:view/generate`、`accounting:voucher:view/edit/review/export/record-result/verify-result/reverse-result/reopen-result/void` | PAGE-16 | | 档案文件 | `archive:package:view/create/submit/review/archive`、`archive:file:view/preview/download`、`archive:borrow:apply/approve/return` | PAGE-17、18 | | 查询报表 | `report:finance:view/export` | PAGE-19 | | 审计 | `audit:log:view/export` | PAGE-20 | | 系统治理 | `admin:user:*`、`admin:role:*`、`admin:scope:*`、`admin:template:*`、`admin:parameter:*`;动作限 `view/create/edit/enable/disable/publish`;在线更新固定使用 `admin:update:view/execute` | PAGE-21、PAGE-22 | | 敏感字段 | `sensitive:identity:view`、`sensitive:bank-account:view`、`sensitive:payroll:view` | PAGE-08、12、15、18 | 表中的 `*` 只是在本文件中压缩展示,数据库和接口中禁止保存或判断通配符权限;S0 冻结时必须展开成逐条权限码。查询默认只授予脱敏视图;查看完整敏感字段、下载、导出、审批和结果登记必须分别授权,不能因为拥有 `view` 就自动获得其他动作。 `SYSTEM_ADMIN` 不使用数据库通配符。V071 把当前 `iam_permission` 的每一条真实权限码和对应无额度 `GLOBAL` scope 授予隔离超级管理员账号,启动同步负责补齐后续新增权限;会话返回展开后的真实权限码清单,前端菜单、直链和按钮统一把 `SYSTEM_ADMIN` 识别为超级身份。禁用账号或角色仍会阻断登录。 **权限常量不可自行改名**:业务身份代码固定为 `PROJECT_MANAGER`、`FINANCE_MANAGER`、`ARCHIVE_MANAGER`,独立系统管理员固定为 `SYSTEM_ADMIN`。`ADMIN`、`all`、`project:read`、`workflow:task:read` 等历史试验代码、缩写或通配写法均不是 R1 合法值;正式路由、OpenAPI、Java 鉴权、按钮指令、fixture 和测试必须引用本节展开后的同一权限码。发现旧值时先做映射和迁移评审,再改代码和测试,不能在前端兼容多个别名后继续发布。 ## 5. 总体业务流程和数据流 ### 5.1 一条主数据流 ```mermaid flowchart TB S["来源资料\nOA导出/Excel/人工录入/附件"] --> V["资料校验\n必填、格式、主数据、重复"] V -->|"错误"| R["错误清单\n补资料后重新提交"] R --> S V -->|"通过"| P["项目业务确认\n内部审批或只读 OA 审批快照"] P -->|"退回/驳回"| R P -->|"通过"| F["财务管理复核"] F -->|"退回/例外"| R F --> E["财务业务记录\n成本/收款/发票/付款"] E --> B["记账准备\n凭证草稿/导出文件/人工结果"] E --> A["项目档案\n附件、版本、归档包"] B --> A A --> Q["查询和分析\n项目、合同、金额、状态"] ``` ### 5.2 三种来源如何进入审批 同一张表单允许三种来源,但进入系统后的处理路线必须明确,避免把 OA 已完成的审批再审批一遍,也避免历史数据未经确认就直接成为正式财务记录。 | 来源方式 | 适用场景 | 系统处理路线 | 必须保留的证据 | | --- | --- | --- | --- | | 系统在线填写 | 新业务直接在本系统发起 | 草稿 → 项目审核 → 财务复核 → 形成业务记录 | 表单版本、每次审批动作、附件版本 | | OA 已审批资料导入 | OA 已完成业务审批,本系统接收结果 | 来源校验 → 保存只读 OA 审批快照 → 财务接收复核 → 形成业务记录 | OA 单号、审批链、意见、时间、原始导出文件和哈希 | | Excel/人工历史导入 | 期初数据或旧资料迁移 | 导入批次 → 错误修正 → 业务确认 → 财务确认 → 形成期初/历史记录 | 导入人、确认人、批次、原始文件、差异说明和对账结果 | OA 导入路线不重新判断原 OA 的业务审批结论,但财务金额、主数据、附件和重复性检查仍必须通过。历史导入不得直接把数据标成“已付款”或“已记账”;必须同时提供回单、凭证号等证据并由财务确认。单纯补充附件时,要关联原单据并生成附件新版本,只重新进入受影响的财务或资料节点。 ### 5.3 每条记录都要带的“身份证” 不论是表单、合同、收款还是附件,都必须至少带: `内部编号 + 来源单号 + 所属公司 + 项目 + 业务日期 + 金额(如有)+ 当前状态 + 当前版本 + 创建人/时间 + 审核记录` 这样财务人员点开一笔付款时,可以反查:它来自哪个表单、谁审批过、使用了哪个合同、有哪些发票和附件、是否已经生成记账资料、是否已经归档。 ### 5.4 状态的通用规则 所有业务对象都遵循: ```text 草稿 → 提交 → 审核中 → 通过/退回/驳回 → 形成财务记录 → 记账准备 → 归档 ``` 正式数据不直接删除。错误通过退回、作废、冲销或新版本修正;每个动作留下操作人、时间、意见和前后状态。 ## 6. 系统总体功能拆分 ### 6.1 功能总览 | 功能编号 | 功能组 | 要解决的问题 | MVP | | --- | --- | --- | --- | | F-01 | 登录与身份选择 | 用户不知道从哪里进入、权限混在一起 | 必做 | | F-02 | 项目工作台 | 项目资料、待办和进度分散 | 必做 | | F-03 | 财务工作台 | 财务审核任务找不到、口径不统一 | 必做 | | F-04 | 资料工作台 | 项目结束后资料无法归档和检索 | 必做 | | F-05 | 项目与主数据 | 项目、供应商、合同重复录入 | 必做 | | F-06 | 14 类来源表单 | OA 数据无法进入财务流程 | 必做 | | F-07 | 审批与复核 | 审批结果和财务审核断开 | 必做 | | F-08 | 成本与合同 | 合同额度、成本和付款无法核对 | 必做 | | F-09 | 收款与发票 | 收款、开票和项目关联不清 | 必做 | | F-10 | 进度款与付款 | 付款前缺少金额、附件和责任控制 | 必做 | | F-11 | 记账准备 | 业务数据无法变成可记账资料 | 必做 | | F-12 | 档案管理 | 文件散落、版本不清、找不到依据 | 必做 | | F-13 | 查询和导出 | 管理人员无法快速查项目和财务状态 | 必做 | | F-14 | 审计和运行管理 | 出问题无法还原谁改了什么 | 必做 | | F-15 | 银行对账 | 银行资料无法勾稽 | 后续加法 | | F-16 | 税务准备 | 申报资料缺少统一底稿 | 后续加法 | ### 6.2 首期最小可用闭环 首期不要求 14 个表单都产生复杂会计分录,但必须做到: - 14 个表单都能收进系统、查看、审批、退回、归档。 - 财务核心表单能产生结构化业务记录。 - 每条结构化业务记录能进入项目台账和记账准备队列。 - 所有附件能从项目或单据反向查到。 ## 7. 页面结构总览 ### 7.1 页面导航 ```text 登录 └── 身份选择 ├── 项目管理工作台 │ ├── 我的项目 │ ├── 待办审批 │ ├── 14类表单 │ ├── 项目详情 │ └── 项目进度 ├── 财务管理工作台 │ ├── 财务待办 │ ├── 项目/合同/成本 │ ├── 收款确认 │ ├── 发票申请 │ ├── 进度款/付款 │ ├── 记账准备 │ └── 财务查询 └── 资料管理工作台 ├── 待归档项目 ├── 档案包审核 ├── 文件检索 └── 借阅/归还记录 ``` 上图是业务功能视图,不代表每个叶节点都要做成左侧菜单。第一轮真正的左侧菜单、隐藏路由和页面数量只以 7.3 节为准:例如“我的项目”“财务待办”“档案包审核”是对应工作台的卡片、页签或带初始筛选的快捷入口,不新增平行页面。工作台快捷入口必须跳转到 7.3 节既有页面,并通过 URL query 保存非敏感筛选条件,以便刷新和返回时结果一致。 ### 7.2 页面数量和合并原则 首期固定交付 **18 个业务页面 + 3 个公共页面,共 21 个页面**。14 张 OA 表单在页面上可以按业务分组,但每张表单必须保留独立的表单代码、字段校验、审批路线和数据映射。 公共页面:登录、身份选择、个人中心。
业务页面:三类工作台、项目、表单、审批、财务、记账、档案、查询、审计等。 页面分类固定为:公共 PAGE-01~03;工作台 PAGE-04~06;项目 PAGE-07~08;表单审批 PAGE-09~11;财务 PAGE-12~16;资料档案 PAGE-17~18;查询分析 PAGE-19;系统治理 PAGE-20~21。PAGE-01、02 使用公共入口,PAGE-03 使用顶部头像入口,PAGE-08、10 是隐藏业务路由,其余业务页面按 7.3 节进入左侧菜单。工作台卡片、页签、抽屉、对话框和项目详情的十个页签都不是新增页面,不得据此增加 PAGE 编号或平行菜单。 ### 7.3 Starter 菜单、路由与页面映射 登录后的整体框架直接使用 TDesign Starter 的左侧菜单、顶部栏、页签和内容区。菜单层级已经表达业务归属,首期不在内容区显示面包屑,避免与菜单和页签重复;详情、编辑等隐藏路由必须保留安全返回路径。 | 一级菜单/入口 | 二级菜单 | 页面 | 路由 | 默认可见身份 | | --- | --- | --- | --- | --- | | 公共入口 | 登录 | PAGE-01 | `/login` | 未登录用户 | | 公共入口 | 身份选择 | PAGE-02 | `/role-select` | 已登录用户 | | 顶部头像菜单 | 个人中心 | PAGE-03 | `/profile` | 全部已登录用户 | | 工作台 | 项目管理工作台 | PAGE-04 | `/workbench/project` | 项目管理 | | 工作台 | 财务管理工作台 | PAGE-05 | `/workbench/finance` | 财务管理 | | 工作台 | 资料管理工作台 | PAGE-06 | `/workbench/archive` | 资料管理 | | 项目管理 | 项目列表 | PAGE-07 | `/projects` | 项目/财务/资料 | | 隐藏详情路由 | 项目详情 | PAGE-08 | `/projects/:projectId` | 按项目数据范围 | | 表单审批 | 表单中心 | PAGE-09 | `/forms` | 项目/财务 | | 隐藏编辑路由 | 表单填写/导入 | PAGE-10 | `/forms/:formType/:documentId?` | 项目/财务按动作权限 | | 表单审批 | 待办审批 | PAGE-11 | `/tasks` | 当前节点处理人 | | 财务管理 | 主数据中心 | PAGE-12 | `/finance/master-data` | 授权财务/管理员只读配置 | | 财务管理 | 合同与成本 | PAGE-13 | `/finance/contracts-costs` | 项目/财务 | | 财务管理 | 收款与发票 | PAGE-14 | `/finance/receipts-invoices` | 财务 | | 财务管理 | 进度款与付款 | PAGE-15 | `/finance/payments` | 项目/财务 | | 财务管理 | 记账准备 | PAGE-16 | `/finance/accounting` | 财务 | | 资料档案 | 项目归档 | PAGE-17 | `/archives/projects` | 项目/财务/资料按动作权限 | | 资料档案 | 文件检索与借阅 | PAGE-18 | `/archives/files` | 三类身份中的授权查询人 | | 查询分析 | 查询与报表 | PAGE-19 | `/reports` | 三类身份按数据范围 | | 系统治理 | 审计日志 | PAGE-20 | `/governance/audit` | 授权审计/管理员 | | 系统治理 | 权限与配置 | PAGE-21 | `/governance/settings` | 系统管理员 | | 系统治理 | 系统更新 | PAGE-22 | `/governance/update` | 系统管理员 | 本地路由表固定声明组件映射,后端只返回当前身份、权限码和数据范围,前端据此过滤菜单和按钮;后端不得下发任意组件文件路径。业务页面路由的 `meta` 至少包含 `pageId`、`pageType`、`pageTemplate`、`title`、`permission` 和 `requiresAuth`;历史 `breadcrumb` 字段可保留作路由合同和返回路径元数据,但不得渲染为可见导航。出现在菜单中的路由组沿用 Starter 的 `orderNo` 排序字段,不再另造 `menuOrder`。S0 页面追溯表还要逐路由冻结本地 `componentPath`、默认入口、URL query 白名单、首个读取 operationId(没有接口时明确记 `N/A` 和原因)及证据 ID;菜单、路由和页面不得出现三份不同配置。 同一账号切换身份时必须清空当前身份的页签、页面缓存、待办查询和按钮权限,再加载新身份菜单;不能沿用上一个身份打开的详情页。手工输入隐藏路由或无权路由时统一进入 Starter 的 403 页面,后端接口同时返回 `403` 并写审计日志。 ## 8. 页面清单与每页功能 ### 8.1 页面总表 | 页面 ID | 页面名称 | 主要用户 | 主要功能 | | --- | --- | --- | --- | | PAGE-01 | 登录页 | 全部用户 | 登录、失败提示、密码重置入口、账号锁定说明 | | PAGE-02 | 身份选择页 | 全部已登录用户(含单身份) | 显示已授权角色卡片、角色说明、进入对应工作台 | | PAGE-03 | 个人中心 | 全部用户 | 查看账号、修改密码、切换身份、退出登录 | | PAGE-04 | 项目管理工作台 | 项目管理人员 | 我的项目、我的待办、被退回表单、项目进度和快捷发起 | | PAGE-05 | 财务管理工作台 | 财务管理人员 | 财务待办、异常、待记账、付款资料、项目资金概览 | | PAGE-06 | 资料管理工作台 | 资料管理人员 | 待归档、缺资料、借阅到期和已归档统计 | | PAGE-07 | 项目列表 | 项目/财务/资料人员 | 按公司、项目、负责人、阶段和状态筛选项目 | | PAGE-08 | 项目详情 | 三类角色 | 项目总览、表单、合同、收付款、进度、人员、附件和操作时间线 | | PAGE-09 | 表单中心 | 项目和财务人员 | 14 类表单分组、模板下载、创建、导入、草稿和状态查询 | | PAGE-10 | 表单填写/导入页 | 项目和财务人员 | 动态字段、附件、Excel 导入、校验、预览和提交 | | PAGE-11 | 待办审批页 | 当前节点处理人 | 待我处理、通过、退回、驳回、意见和审批记录 | | PAGE-12 | 主数据中心 | 授权财务人员 | 公司、项目、供应商、账户、合同、成本类别维护和版本审核 | | PAGE-13 | 合同与成本台账 | 项目和财务人员 | 合同额、变更、结算、应付、已付、开票和成本分类 | | PAGE-14 | 收款与发票页 | 财务人员 | 收款确认、应收核销、开票申请、人工开票结果和异常 | | PAGE-15 | 进度款与付款页 | 项目和财务人员 | 付款申请、额度检查、附件检查、结果登记、退汇和回单 | | PAGE-16 | 记账准备中心 | 财务人员 | 财务事件、凭证草稿、复核、导出和人工记账结果 | | PAGE-17 | 项目归档页 | 项目、财务和资料人员按动作权限 | 生成档案包、缺件检查、归档审核和项目关闭 | | PAGE-18 | 文件检索与借阅页 | 三类身份中的授权查询人员 | 条件检索、预览、下载、借阅、归还和水印 | | PAGE-19 | 查询与报表页 | 三类角色按权限 | 项目台账、合同、收付款、流程、附件完整性和导出 | | PAGE-20 | 审计日志页 | 审计/授权管理员 | 查询登录、查看、修改、审批、导入、导出和结果登记记录 | | PAGE-21 | 权限与配置页 | 系统管理员 | 用户、角色、数据范围、模板和参数版本 | | PAGE-22 | 系统更新页 | 系统管理员 | 当前/最新版本、显式下载、下载完成确认、安装重启和历史更新记录 | ### 8.2 PAGE-01 登录页 **页面目的**:让用户安全进入系统,同时把错误原因说清楚。 页面内容: - 账号、密码、登录按钮。 - 密码是否可见的切换按钮。 - 账号锁定、停用、密码错误和会话超时提示。 - 首次登录/管理员重置后的强制改密入口。 页面规则: - 连续输错密码后临时锁定。 - 停用或离职账号立即停止登录。 - 密码重置由用户发起申请、系统管理员执行重置并要求下次登录改密;首期不依赖短信、邮件或第三方身份服务。 - 登录成功后不直接进入复杂首页,而是进入 PAGE-02 身份选择页。 - 登录成功、失败、锁定和退出全部留审计记录。 验收结果:正确账号可登录;错误、锁定和停用账号得到不同提示;旧会话在账号停用后失效。 ### 8.3 PAGE-02 身份选择页 **页面目的**:用当前账号被授权的入口卡片告诉用户“你现在要以什么身份工作”。业务账号显示三类业务卡中的一张或多张;纯超级管理员账号只显示隔离的超级管理员卡。 角色卡片: - 项目管理人员:发起项目业务、补资料、看项目进度。 - 财务管理人员:做财务审核、付款检查和记账准备。 - 资料管理人员:检查资料、归档、检索和借阅。 - 超级管理员:只对独立的 `SYSTEM_ADMIN` 账号显示,默认进入 PAGE-21;进入后可通过侧栏访问全部业务和治理页面。 页面规则: - 只显示当前账号已授权的角色。 - 单角色账号只显示一张身份卡,并由用户点击“进入系统”;不自动跳过本页。 - 系统管理卡不得与三类业务卡同时出现在同一账号;发生冲突时登录后阻断进入并记录配置错误审计。 - 切换身份不会扩大数据范围;未经授权的角色 URL 直接访问也要被服务端拒绝。 ### 8.4 PAGE-03 个人中心 功能:查看姓名、部门、当前角色和授权公司/项目;修改密码;切换身份;退出全部会话;查看最近登录记录。 不提供:自行增加角色、扩大项目范围、查看其他人的敏感信息。 ### 8.5 PAGE-04 项目管理工作台 **首页要回答五个问题**:我有哪些项目?有什么待办?哪些被退回?哪些资料缺失?项目现在到哪一步? 页面区块: 1. 数字概览:进行中项目、待我处理、被退回、即将到期。 2. 我的待办:表单名称、项目、当前节点、提交时间、剩余时限。 3. 我的项目:项目名称、负责人、阶段、合同额、最近动作。 4. 快捷发起:项目立项、供应商准入、合同会签、收款确认、进度款申请等。 5. 异常提示:缺附件、超期、合同/供应商未生效、表单版本过旧。 可操作:新建、继续编辑草稿、补件、撤回未处理单据、查看审批进度。 不可操作:财务终审、修改已通过金额、登记付款结果、生成正式凭证。 ### 8.6 PAGE-05 财务管理工作台 **首页要回答六个问题**:今天要审什么?哪些金额异常?哪些付款待处理?哪些数据待记账?哪些项目资料不齐?哪些事情快超时? 页面区块: 1. 财务待办:按立项、供应商、合同、收款、发票、应付、付款分类。 2. 阻断异常:余额不足、合同超额、账户未生效、疑似重复、附件缺失。 3. 待记账:已财务确认但未生成凭证草稿的业务。 4. 待登记结果:需要人工登记付款、开票或记账结果的事项。 5. 项目资金概览:收款、成本、已付、待付和可用余额。 6. 月度工作:本月已完成、待完成和超时事项。 可操作:审核、退回、发起例外、确认财务事件、生成记账草稿、导出和登记人工结果。 ### 8.7 PAGE-06 资料管理工作台 页面区块:待接收档案包、缺失附件、待复核原件、借阅到期、已归档项目和近期下载。 可操作:检查文件、标注原件类型和存放位置、退回补件、确认档案包、借阅/归还登记。 不可操作:改项目金额、改合同额度、审批付款、修改凭证。 ### 8.8 PAGE-07 项目列表 筛选条件:公司、项目编号/名称、负责人、客户、项目阶段、财务状态、归档状态、开始/结束日期。 列表字段:项目编号、项目名称、公司、负责人、合同额、已收、已付、当前阶段、待办数、资料完整率、状态。 页面操作:新建项目、导入、查看详情、导出当前筛选结果。导出必须使用和页面相同的权限及脱敏规则。 ### 8.9 PAGE-08 项目详情 这是系统最重要的“总账页”,不是会计总账,而是一个项目的全过程总览。 顶部信息:项目编号、名称、公司、客户、负责人、状态、合同额、项目起止时间。 页签: 1. 总览:关键金额、当前阶段、异常和待办。 2. 业务表单:14 类表单及状态。 3. 合同与成本:合同、变更、结算、成本分类。 4. 收款与发票:应收、收款、开票和核销。 5. 付款:应付、申请、结果、回单和退汇。 6. 进度与验收:履约进度、任务、照片和验收。 7. 人员:中标人员、班组人员、变更和押证费。 8. 记账准备:财务事件、凭证草稿和人工结果。 9. 档案:附件、版本、原件位置和档案包。 10. 时间线:谁在何时提交、审核、修改、退回、作废和归档。 ### 8.10 PAGE-09 表单中心 表单按业务阶段分组展示: - 项目准备:OA-01、OA-02、OA-03。 - 收支执行:OA-04、OA-05、OA-06、OA-08、OA-13。 - 项目过程:OA-09、OA-10、OA-14。 - 结束归档:OA-11、OA-12。 - 银行资料:OA-07。 每张表单卡片显示:名称、用途、适用角色、当前模板版本、我的草稿数、待处理数和新建按钮。 支持操作:在线填写、下载标准模板、上传 Excel/CSV、查看草稿和历史版本。 ### 8.11 PAGE-10 表单填写/导入页 页面区块: 1. 基本信息:公司、项目、来源单号、版本、申请人和日期。 2. 表单字段:根据 OA-01~OA-14 动态显示。 3. 明细表格:人员、支付明细、附件矩阵等重复行。 4. 附件区:文件类型、是否必需、是否齐全、“不涉及”原因。 5. 校验结果:错误、警告和可提交项。 6. 审批快照:原 OA 节点、人员、意见和时间。 操作顺序:保存草稿 → 校验 → 预览 → 提交。Excel 导入使用“上传校验 → 查看错误 → 确认入库”两步,错误数据不进入正式表。 ### 8.12 PAGE-11 待办审批页 列表分类:待我处理、我已处理、我发起、被退回、已完成。 详情区同时展示:原始表单、关键金额、附件、历史意见、项目/合同/供应商摘要和系统校验结果。 允许动作:通过、退回补件、驳回、撤回、作废、提交例外申请。所有动作必须记录意见;退回时选择需要修改的字段或附件。 ### 8.13 PAGE-12 主数据中心 对象:公司、部门、项目、客户/供应商、供应商账户、公司银行账户、合同、成本类别、科目、税率字典。 功能:新增、编辑草稿、提交复核、版本对比、生效、停用、旧编号映射和重复检查。 关键规则: - 项目编号在同一公司内唯一。 - 供应商按证照号去重。 - 银行账户新增或变更必须由另一名财务人员复核后生效。 - 停用主数据不影响历史单据,但不能用于新单据。 ### 8.14 PAGE-13 合同与成本台账 合同列表字段:合同编号、项目、供应商、原合同额、批准变更、结算金额、已开票、已应付、已付款、可付余额、状态。 成本视图:人工、材料、机械、专业分包、运输、设备、间接费和其他成本。 支持下钻:点击“已付款”能看到付款单和回单;点击“已开票”能看到发票和来源表单。 #### 8.14.1 PAGE-13 已实现页面与业务合同(2026-08-13) PAGE-13 当前为 `MODULE_ACCEPTED`。本结论只覆盖合同执行、结算、应付及联动汇总,不代表 PAGE-15、整个 S3 或整套 R1 完成。 - 合同列表、全量筛选汇总、详情下钻和 CSV 导出均使用服务端权限范围、分页和金额重算。 - “待确认应付”仅统计 `PENDING`;“已应付”统计 `CONFIRMED/PART_PAID/PAID`;待确认记录仍参与合同额度预占。 - 项目经理使用 `contractcost:payable:create` 登记应付,财务使用 `contractcost:payable:confirm` 确认;登记人不得确认同一笔应付。 - 应付来源必须是同公司、同项目、当前版本已批准的 OA-04;结算来源同理必须是 OA-11。两类来源均不接受自由文本输入,也不允许重复生成业务记录。 - OA-04 财务终审现在直接在同一事务中生成 `CONFIRMED` 应付,写入合同额度占用、含税发票汇总和唯一 `PAYABLE` 会计事件;不是先生成一个待确认空壳再依赖人工补确认。历史/人工登记入口仍按原状态机执行,来源单据不得重复消费。 - 前端使用 TDesign `Select`、`Form`、`Table`、`Tabs`、`Statistic`、对话框和抽屉;来源下拉只查询当前项目已批准单据,最终约束仍由 Java 后端执行。 ### 8.15 PAGE-14 收款与发票页 收款功能:登记/接收收款确认单、匹配项目和客户、分配到应收、处理暂收款、查看已收/未收。 发票功能:接收开票申请、检查合同额度和已开票金额、登记人工开票结果、关联已上传并通过检查的票据文件、处理红冲/作废;直接上传交互归统一 `FileUploader` 全局任务收口。 首期不做:连接发票平台、自动验真、自动开票。 #### 8.15.1 PAGE-14 已实现页面与业务合同(2026-08-11) PAGE-14 当前为 `MODULE_ACCEPTED`。该结论只覆盖本节列出的收款、应收和发票闭环,不代表 PAGE-15、整个 S3 或整套 R1 已完成。PAGE-13 的独立模块结论见 8.14.1 和 13.1.2。 **页面和功能** | 区域 | 已实现内容 | 用户得到的结果 | | --- | --- | --- | | 公共查询 | 收款/开票双页签;关键词、公司、项目、客户/开票对象、状态、业务日期和排序筛选;20/50/100 服务端分页;当前筛选 CSV 导出 | 页面刷新和翻页后从 Java/MySQL 重新查询,金额不由前端临时合计 | | 收款列表与详情 | 收款编号、公司、项目、客户、日期、金额、已分配、未分配、状态;详情抽屉展示流水号、确认人、作废原因和逐笔核销明细 | 可从一笔收款反查核销到哪些应收、项目和合同,以及每笔应收剩余金额 | | 收款动作 | 新建/编辑草稿、异人确认、分配到应收、未分配收款作废;项目和客户可暂不选择以形成待匹配暂收款 | 支持一收多应收和一应收多次收款;分配后收款与应收余额同步更新 | | 发票列表与详情 | 开票业务号、公司、项目、对象、申请日期、金额、税率、发票号和状态;详情显示合同额度、累计占用、剩余额度、提交/复核/结果人员、意见、原票和终止原因 | 审核人员能在一个抽屉内核对申请、额度、人员分工和后续结果 | | 发票动作 | 新建/编辑草稿、提交复核、通过/退回/驳回、登记人工开票结果、作废、登记红冲;可关联已通过本地检查的结果文件 | 不连接外部发票平台;人工结果、原票/红字票关系、终止原因和责任人可追溯 | | OA 来源结果 | OA-05 财务终审直接生成 `CONFIRMED` 收款、项目资金控制增量、资金台账和待处理 `RECEIPT` 会计事件;OA-08 财务终审生成带来源版本的 `DRAFT` 开票候选,后续仍由 PAGE-14 人工提交、异人复核和登记开票结果 | 来源审批和 PAGE-14 人工处理不重复生成收款/发票;失败时来源状态、工作流任务、财务对象、台账和会计事件整体回滚 | | 页面反馈 | TDesign `Tabs/Table/Form/Drawer/Dialog/Tag/Alert/Empty/Pagination`;金额使用 `MoneyInput` 和 `decimal.js` 字符串;必填意见/发票号/日期/原因校验;401/403/404/409/422/5xx 分级提示 | 重复点击、版本冲突或业务阻断不会在前端伪造成功;写成功后重新读取列表、引用项和已打开详情 | **状态和硬控制** | 对象 | 已实现状态主线 | 后端硬控制 | | --- | --- | --- | | 收款 | `DRAFT → CONFIRMED → PARTIALLY_ALLOCATED → ALLOCATED`;未发生分配的 `DRAFT/CONFIRMED` 可进入 `VOID` | 登记人与确认人必须不同;分配额不得超过收款未分配额和应收未收额;公司、项目、客户、币种必须匹配;重复公司+流水号拒绝;每次命令校验权限范围、金额上限和版本 | | 应收 | 人工开票结果自动生成 `OPEN`;核销后进入 `PARTIALLY_SETTLED/SETTLED`;未核销发票被作废或红冲时进入 `VOID` | 一张有效发票只生成一条应收;未收余额保持在 0~原额;核销使用数据库行锁和乐观锁,禁止超收 | | 发票 | `DRAFT/RETURNED → REVIEWING → RESULT_PENDING → ISSUED`;审核可进入 `RETURNED/REJECTED`;终止可进入 `VOID/RED_LETTERED` | 提交人与复核人必须不同;审核通过和登记结果都复算合同可开票额;同公司发票号唯一;已核销应收不得直接作废/红冲;红冲生成关联原票的红字票并按净额进入合同/报表统计 | **实际权限码** `receivable:receipt:view/create/edit/confirm/allocate/void/export`;`receivable:invoice:view/create/edit/submit/review/record-result/void/red-letter/export`。页面按钮来自服务端 `allowedActions`;Java 后端再次执行功能权限、公司/项目范围、金额阈值、对象状态、SOD 和版本校验。 ### 8.16 PAGE-15 进度款与付款页 页面分区:付款申请列表、待财务检查、待线下付款、待登记结果、已支付、失败/退汇。 付款前检查:项目可用余额、合同可付余额、应付余额、供应商账户版本、发票和附件、重复风险、审批是否完成。 结果登记:由经办人填写线下付款日期、金额、结果和回单;另一名财务人员复核。同一人不能同时登记和复核。 首期不做:系统发起银行付款、读取 U 盾、保存网银密码或 PIN。 #### 8.16.1 PAGE-15 当前实现边界(2026-08-13) PAGE-15 当前为 `IN_PROGRESS`。下表用于区分“已经能用的核心付款链”和“模块验收前必须补齐的控制”,不能把存在页面或接口等同于整页完成。 | 区域 | 当前已经实现 | 仍须完成 | | --- | --- | --- | | 页面与查询 | 六个业务页签;关键词、公司、项目、供应商、状态、风险、日期、排序筛选;服务端分页、详情抽屉、检查清单、CSV 导出;新建/编辑及各状态动作均使用 TDesign | 三档 Chrome/Edge 正式证据包、全部失败/无权/慢请求状态和包体预算仍归 S5 收口 | | 付款申请 | 选择公司、项目、合同、供应商、可选应付、生效收款账户、金额、日期、币种和附件;应付分类命中生效规则时,页面逐项显示必需资料的齐全/缺失/文件检查中状态,每个文件必须选择矩阵内资料类型;后端复核对象归属、数据范围、金额权限并保存规则版本和分类快照;附件“不涉及”申请已接入异人财务复核和消费审计 | D-02/D-09 确认并发布正式完整矩阵;正式矩阵的必需项与“不涉及”范围未确认前禁止发布 | | OA 来源 | OA-06 来源为可选;选择后页面只查询当前项目已批准 OA-06,后端在保存和批准时复核表单类型、公司、项目、当前版本及其 `APPROVED` 实例;OA-06 v2 财务终审已在同一事务内生成 `OFFLINE_PENDING` 付款、冻结资金并写入流水 | 自动投影只形成待线下付款记录,不产生银行指令;PAGE-15 正式矩阵、三档浏览器证据和甲方验收仍按本页独立收口 | | 批准前检查 | 项目可用余额、合同余额、应付余额、生效账户、通用或按成本类型的附件完整性/文件状态、精确/近似重复付款、OA 来源和项目阻断风险;批准事务内锁资金控制行、合同、应付和付款;同项目余额并发竞争只允许余额覆盖的付款成功;历史无规则快照付款继续按通用附件语义检查;独立逐笔资金台账已记录并可查询 | D-02/D-09 正式矩阵和业务口径确认 | | 线下结果 | 登记成功/部分成功/失败及回单;另一人复核;部分支付保留剩余冻结额;失败释放未支付额;退汇逆转资金、应付和会计事件;重付关联原付款和序号 | 正式桌面端全状态业务证据包及跨模块记账/档案追溯仍须补齐 | | 例外 | `DUPLICATE`、`PROJECT_RISK` 支持一次性申请;申请人与财务复核人必须分离,最多 7 天有效,批准时重算指纹并在付款批准事务内原子消费;附件“不涉及”同样要求理由、异人复核和消费审计 | 账户未生效、同人登记/复核、项目资金/合同/应付额度、附件硬要求、OA 来源、重复有效来源/事件等硬控制永不允许例外;正式矩阵仍须 D-02/D-09 确认 | **当前主要状态主线**:`DRAFT/RETURNED → REVIEWING → OFFLINE_PENDING → RESULT_RECORDED → PART_PAID/PAID`;批准或线下阶段可按规则进入 `FAILED/VOID`,已复核结果可登记 `REFUNDED` 并创建关联重付。所有写动作继续由 Java 后端校验权限、范围、金额、状态、SOD、幂等键和版本,前端不得自行推进状态。 ### 8.17 PAGE-16 记账准备中心 页面分区:待生成、草稿、待复核、已导出、待登记结果、已完成、已冲销、已作废。 功能: - 从已确认的收款、应付、付款、发票等财务记录生成凭证草稿。 - 显示借方、贷方、摘要、项目、往来单位和来源依据。 - 财务人员修改科目或金额时填写原因。 - 借贷不平或缺辅助信息时阻止复核。 - 导出标准文件,人工导入现有记账系统后登记凭证号和结果。 - 已复核完成但外部结果错误时,由非原登记人填写原因执行冲销;冲销后来源事件回到可更正状态,旧凭证号、登记/复核信息和证据保留在不可变历史中。 - 已冲销结果由另一名具备权限的财务人员重开,进入已导出待重新登记状态;新一轮结果与旧轮证据隔离,旧外部凭证号不得再次使用。 - 冲销和重开都校验独立权限、公司/项目/金额范围、当前版本、状态、岗位分离和幂等键,并记录操作人、时间、原因、前后版本及审计日志。 首期不做:调用 T+ 接口、自动过账、自动修改外部账套。 ### 8.18 PAGE-17 项目归档页 流程:财务管理人员在 PAGE-08 对授权项目执行“确认财务完整” → 项目财务状态变为 `COMPLETED` → 用户在 PAGE-17 主动生成档案包 → 系统检查缺件 → 财务提交 → 资料人员异人审核 → 退回补件或确认归档。未完成财务确认时,服务端拒绝生成档案包;确认命令同时校验权限、公司/项目范围、项目状态、财务状态和版本,并记录 `PROJECT_FINANCE_CONFIRM` 审计。 档案包应包含:项目基础资料、14 类相关表单、审批记录、合同、发票、收付款资料、记账准备结果、验收资料和文件清单。 每个文件保存 SHA-256 哈希,用来判断文件是否改变;替换文件生成新版本,旧版本继续保留。 档案记录保管期限、纸质原件位置和冻结标记。归档后计算 `retentionExpiresOn`,保管状态固定为 `PENDING`、`ACTIVE`、`DUE_SOON`(90 天内)、`EXPIRED`、`FROZEN`。到期只在页面提示,不自动删除或销毁;处于审计、争议或其他冻结状态的档案禁止处理。档案销毁审批不纳入 MVP。 ### 8.19 PAGE-18 文件检索与借阅页 检索条件:公司、项目、合同、供应商、表单、文件名、上传人、日期、原件类型、归档状态和扫描状态。 操作:预览、下载、查看版本、申请借阅、批准借阅、登记归还。下载显示用户和时间水印并记录审计。 当前实现状态(2026-08-15):本地真实浏览器已验证首次进入不自动查询、项目条件检索、文件版本详情、受控水印预览,以及工作台“隔离文件”按扫描状态精确跳转。扫描器不可用时,系统保留 `QUARANTINED` 文件并建立带公司/项目范围的 `file_link`;用户可在扫描服务恢复后重扫,成功时文件进入 `AVAILABLE`、正式路径存在、隔离源消失、转存意图清空,503/200/422 幂等结果保持首次语义。资料身份申请、财务身份批准、资料身份归还的异人流程已在真实页面和数据库贯通,范围外档案直链下载回归已通过。移动 `390×844` 只作为补充视口检查,不属于 R1 正式支持范围;Chrome/Edge 三档全流程、axe、正式负向 fixture 和甲方证据包仍须按 `TODO-S4-011/012`、UAT-020~022 收口,PAGE-18 当前不是 `MODULE_ACCEPTED`。 ### 8.20 PAGE-19 查询与报表页 首期报表: 1. 项目综合台账:项目、合同、收款、成本、付款、记账和归档状态。 2. 合同执行台账:合同额、变更、结算、开票、应付和已付。 3. 收款/开票台账:本次及累计收款、开票和未收。 4. 付款进度台账:申请、审核、线下结果、回单和记账状态。 5. 流程时效:各节点停留时间、退回次数和未处理任务。 6. 资料完整性:缺失、待补、不涉及和已齐全。 所有汇总数据必须能点击下钻到明细、来源表单、审批记录和附件。 当前实现状态(2026-08-16):六类报表、服务端汇总、筛选快照和同权限下钻已实现;金额按两位小数显示,业务状态中文化,下钻四类子查询再次复用当前用户、角色、权限和完整父行筛选。导出已改为两阶段:服务端预检冻结人员/身份/权限范围指纹、口径版本、筛选、列、排序和预计行数,页面展示筛选快照与脱敏说明后由用户确认,服务端再次鉴权和校验全部快照后才生成文件。MySQL 8.4 全量集成回归已通过;D-08、各指标日期口径、流程时长真实样本和正式浏览器证据尚未完成,PAGE-19 当前只能标记 `IMPLEMENTED_PENDING_ACCEPTANCE`,不得标记 `MODULE_ACCEPTED`。 ### 8.21 PAGE-20 审计日志页 可查询:登录、敏感字段查看、创建、修改、提交、审批、退回、导入、导出、下载、结果登记、作废、归档和权限变化。 日志显示:用户、角色、公司/项目范围、操作时间、对象、动作、前后值、原因和请求编号。普通业务人员不能删除或修改审计日志。 ### 8.22 PAGE-21 权限与配置页 配置对象:用户、角色、公司/项目数据范围、金额阈值、互斥规则、表单模板、字典、附件矩阵、审批路线和版本。 本页只管理权限和业务配置,不配置系统名称、系统域名,也不承载在线更新。用户、角色和数据范围变更后,受影响账号的既有会话失效,必须重新登录获取最新权限。 PAGE-21 只向超级管理员开放。超级管理员账号不得混授普通业务角色,但其 `SYSTEM_ADMIN` 身份本身自动拥有全部财务和治理功能权限;审批处理人、异人复核、状态机、资金和审计控制继续由后端强制执行。 ### 8.22.1 PAGE-22 系统更新页 系统更新使用独立入口 `/governance/update`,同时显示当前版本、最新版本、更新状态、四步进度和最近更新记录。拥有 `admin:update:view` 的隔离系统管理员可进入页面;下载与重启安装仍由 `admin:update:execute` 和服务端 `allowedActions` 共同控制。未启用或 Release 地址无效时显示明确禁用状态并禁用“获取版本”。 更新固定为“检查、下载、安装”三个服务端阶段和四个明确用户反馈。管理员点击“获取版本”时只请求最新版本、发布时间和发布说明,不提交下载;发现新版本后显示“立即更新”,再次确认后才提交 `DOWNLOAD`。root oneshot 从固定 Gitea Latest Release API 下载 manifest、签名和应用包,验签/验哈希后写入 root-only 版本缓存并进入 `READY/下载完成`,期间当前业务版本继续运行。此时页面显示“立即更新并重启”,点击后只允许安装同版本缓存,并在切换前重新验证。页面以 3 秒轮询显示排队、下载、校验、备份、安装和重启状态;命令已经被服务端接受但 HTTP 响应丢失时也会主动重读状态。健康检查成功后显示 10 秒倒计时并自动刷新;失败时保留明确状态并恢复已验证的上一版本。 页面只提交目标版本和原因,不接收下载地址、Token、脚本或任意命令。公共 Gitea 默认不配置 Token;如改接私有镜像,只读 Token 仅存在于权限为 `0600` 的 root 环境文件和临时 Header 文件,不进入进程参数、DTO、状态 JSON、审计参数或页面响应;API 和资产必须同 scheme、host、port,认证请求不跟随跨来源重定向。文件锁和 inbox/processing 双路径防止并发覆盖,独立 root oneshot 执行 RSA/SHA-256 校验、可验证数据库备份、持久事务、应用与运维文件原子切换、新旧版本健康检查和失败回滚。 ### 8.23 页面通用要求 - 列表有搜索、筛选、分页、排序和列显示设置。 - 详情页固定显示业务编号、状态、版本、创建人和更新时间。 - 按钮只显示当前状态允许的操作,但后端仍必须做权限校验。 - 删除只用于草稿;正式数据使用作废、冲销或新版本。 - 保存和提交后给出明确结果,失败信息定位到字段或附件。 - 页面上的金额使用千分位和两位小数;日期、状态和颜色保持一致。 - 所有页面在常见办公电脑分辨率下不横向溢出;复杂明细允许表格内部滚动。 ### 8.24 页面开发交付矩阵 下表是前端、后端和测试共同使用的页面级开发合同。组件列表示必须优先采用的 TDesign 组件基线,不是允许开发人员另做一套同类控件;接口组最终以评审通过的 OpenAPI 为准。 | 页面 | Starter 内实现位置 | 主要 TDesign 组件 | 必须接通的真实接口组 | 核心权限/完成结果 | | --- | --- | --- | --- | --- | | PAGE-01 登录 | `pages/login` | `Form`、`Input`、`Button`、`Alert` | `/api/v1/auth/login`、`session`、`logout`、`csrf` | 未登录可访问;成功后获得服务端会话,失败/锁定/停用分别反馈并留痕 | | PAGE-02 身份选择 | `pages/role-select` | `Card`、`Button`、`Tag`、`Alert` | `/api/v1/auth/roles`、`select-role` | 只显示已授权入口;业务账号显示业务身份,纯管理员只显示系统管理卡;选择后清空旧身份状态并进入对应页面 | | PAGE-03 个人中心 | `pages/profile` | `Descriptions`、`Form`、`Timeline`、`Dialog` | `/api/v1/auth/profile`、`password`、`sessions` | 只能处理本人账号;切换身份、改密和退出全部会话真实生效 | | PAGE-04 项目工作台 | `pages/workbench/project` | `Statistic`、`Table`、`Tag`、`Timeline` | `/api/v1/workbenches/project` | 仅汇总本人授权项目、待办、退回和缺件;数字均可下钻 | | PAGE-05 财务工作台 | `pages/workbench/finance` | `Statistic`、`Table`、`Tabs`、`Alert` | `/api/v1/workbenches/finance` | 展示授权范围内财务待办、阻断异常、待记账和待登记结果 | | PAGE-06 资料工作台 | `pages/workbench/archive` | `Statistic`、`Table`、`Tag`、`Timeline` | `/api/v1/workbenches/archive` | 展示待归档、缺件、借阅到期和归档统计,不提供金额修改入口 | | PAGE-07 项目列表 | `pages/projects/list` | `Form`、`Table`、`Pagination`、`Dropdown` | `/api/v1/projects`、`/api/v1/projects/imports`、`/api/v1/projects/exports` | 服务端筛选/分页/排序;查看和导出执行同一数据范围与脱敏规则 | | PAGE-08 项目详情 | `pages/projects/detail` | `Descriptions`、`Tabs`、`Table`、`Timeline` | `/api/v1/projects/{id}` 及表单、财务、风险标记等详情子资源 | 十个页签可从项目穿透到表单、财务、记账、档案和审计证据;人工风险标记只向授权人员开放 | | PAGE-09 表单中心 | `pages/forms/index` | `Tabs`、`Card`、`Table`、`Tag` | `/api/v1/source/templates`、`/api/v1/source/forms` | 14 类模板、版本、草稿、待办和历史状态完整;按身份显示发起能力 | | PAGE-10 表单填写/导入 | `pages/forms/editor` | `Form`、`Table`、`Upload`、`Alert`、`Steps` | `/api/v1/source/forms`、`validate`、`imports`、`submit` | 保存草稿、校验、预览、提交和两阶段导入均真实落库且可定位错误 | | PAGE-11 待办审批 | `pages/tasks` | `Table`、`Descriptions`、`Timeline`、`Dialog` | `/api/v1/workflow/tasks` 及 `approve/return/reject/withdraw/void` | 只允许当前节点处理人操作;意见、字段/附件退回点和状态迁移完整 | | PAGE-12 主数据 | `pages/finance/master-data` | `Tabs`、`Table`、`Form`、`Dialog`、`Descriptions` | `/api/v1/masterdata/*` | 新增、变更、版本对比、复核、生效和停用完整;提交人与复核人分离 | | PAGE-13 合同与成本 | `pages/finance/contracts-costs` | `Form`、`Table`、`Tabs`、`Statistic` | `/api/v1/contracts/*`、`/api/v1/costs/*` | 合同原额/变更/结算、开票/应付/已付和成本分类可计算、下钻、导出 | | PAGE-14 收款与发票 | `pages/finance/receipts-invoices` | `Tabs`、`Table`、`Form`、`Drawer`、`Dialog` | `/api/v1/receivables/*`、`/api/v1/receipts/*`、`/api/v1/invoices/*` | 收款分配、暂收、正式应收、开票申请及人工开票/红冲/作废结果可追溯;当前已通过模块级验收 | | PAGE-15 进度款与付款 | `pages/finance/payments` | `Tabs`、`Table`、`Descriptions`、`Dialog`、`Alert` | `/api/v1/payments/*` | 额度/账户/附件/重复/SOD 检查生效;只登记和复核线下结果,不产生银行指令 | | PAGE-16 记账准备 | `pages/finance/accounting` | `Tabs`、`Table`、`Form`、`Dialog` | `/api/v1/accounting/*` | 财务事件、借贷草稿、复核、导出、人工结果登记/异人复核、结果冲销/异人重开和分轮证据完整且幂等 | | PAGE-17 项目归档 | `pages/archives/projects` | `Table`、`Steps`、`Timeline`、`Drawer`、`Dialog` | `/api/v1/projects/{id}/finance-complete`、`/api/v1/archive/packages/*` | 仅项目财务状态为 `COMPLETED` 后允许主动生成档案包;缺件、退回补件、复核、冻结版本和保管到期状态完整 | | PAGE-18 文件检索借阅 | `pages/archives/files` | `Form`、`Table`、`Pagination`、`Dialog` | `/api/v1/archive/files/*`、`/api/v1/archive/borrows/*` | 受控预览/下载/版本/借阅/归还;敏感访问、水印和审计有效 | | PAGE-19 查询报表 | `pages/reports` | `Tabs`、`Form`、`Table`、按需 `ECharts` | `/api/v1/reports/{reportCode}`、`drilldown`、`exports` | 六类报表同口径汇总、下钻、导出;不以硬编码数字或前端合计冒充结果 | | PAGE-20 审计日志 | `pages/governance/audit` | `Form`、`Table`、`Drawer`、`Tag` | `/api/v1/audit/logs`、`/api/v1/audit/exports` | 授权审计人员按请求编号还原关键动作;日志不可由业务页面修改/删除 | | PAGE-21 权限与配置 | `pages/governance/settings` | `Tabs`、`Tree`、`Table`、`Form`、`Dialog` | `/api/v1/admin/users`、`roles`、`scopes`、`templates`、`parameters` | 仅超级管理员可用;用户、角色、范围、模板和参数按版本与动作白名单管理 | | PAGE-22 系统更新 | `pages/governance/update` | `Steps`、`Table`、`Alert`、`Tag`、`Button` | `/api/v1/admin/system-update/{check,download,install}`、`/api/v1/audit/logs` | 获取版本只检查;立即更新才下载;下载完成后显示立即更新并重启;健康后 10 秒刷新;历史操作来自不可变审计日志 | 每个页面只有同时满足以下条件才算完成: 1. 路由、菜单、面包屑、返回路径、页签标题和当前身份规则正确。 2. 页面所有可见数据和操作均接真实 OpenAPI;不存在 Mock、静态 JSON、空按钮或“后续实现”。 3. 菜单、按钮、接口、数据范围、状态、金额阈值和岗位互斥都通过正向及越权测试。 4. 首次加载、刷新、空结果、字段错误、401、403、404、409、422、500 和网络失败均有确定界面。 5. 正常、失败、重复点击、并发冲突、未保存离开和刷新恢复测试通过。 6. Chrome、Edge 三档目标分辨率截图通过评审,无重叠、截断、异常跳动和页面整体横向溢出。 ### 8.25 页面进入、主操作和完成结果 下表锁定“进入页面先看到什么、用户按什么顺序操作、做到什么算这次操作完成”。它与 8.24 节共同组成页面合同;开发不能只把路由和空壳组件做出来。 | 页面 | 默认进入状态 | 主操作顺序 | 本次操作完成标志 | | --- | --- | --- | --- | | PAGE-01 | 未登录表单,账号为空、密码为空 | 获取 CSRF → 输入账号密码 → 登录 | 服务端建立 Session,跳转 PAGE-02;失败停留本页并显示稳定错误码 | | PAGE-02 | 显示当前账号全部已授权入口;单业务身份或纯管理员也只显示一张卡 | 选择身份卡 → 点击“进入系统” | 服务端保存当前身份并返回权限摘要;业务身份进入对应工作台,`SYSTEM_ADMIN` 进入 PAGE-21 | | PAGE-03 | 本人资料、当前身份、授权范围和最近登录 | 改密/切换身份/退出指定或全部会话 → 确认 | 服务端返回新会话状态;切换身份后旧页签和缓存清空 | | PAGE-04 | 授权项目的概览、待办、退回和缺件,更新时间倒序 | 点击指标/待办/项目/快捷发起 | 进入既有目标页面并带初始筛选;返回后保持非敏感筛选条件 | | PAGE-05 | 财务待办、阻断异常、待记账、待登记结果 | 点击分类 → 打开对应单据 → 执行授权动作 | 服务端状态改变并重新计算工作台数字;数字与明细数量一致 | | PAGE-06 | 待接收档案、缺件、借阅到期和近期下载 | 打开档案包/文件/借阅记录 → 处理 | 对象进入新状态,工作台计数和对应列表同步更新 | | PAGE-07 | 当前身份全部授权项目,按最近更新时间倒序 | 筛选/排序/分页 → 查看、新建、导入或导出 | 详情路由可刷新;导出使用相同筛选、权限和脱敏口径 | | PAGE-08 | 项目总览页签和项目摘要,保留来源列表返回路径 | 在十个页签查看/下钻 → 执行当前身份允许的业务入口 | 每个金额、状态、表单和附件能回到唯一来源;对象不存在显示业务 404 | | PAGE-09 | 14 类模板按业务阶段分组,显示可用版本和本人数量 | 选模板 → 新建、导入、继续草稿或查看历史 | 进入 PAGE-10 并携带表单类型和已有单据 ID;无发起权时只读 | | PAGE-10 | 新建空表单、已有草稿或导入校验批次三种模式之一 | 保存草稿 → 完整校验 → 预览 → 提交;导入为上传校验 → 确认入库 | 获得唯一业务编号和版本,状态进入 `SUBMITTED`;错误批次不产生正式数据 | | PAGE-11 | 默认“待我处理”,按到达时间升序 | 打开任务 → 核对表单/金额/附件/历史 → 通过、退回或驳回 | 当前任务关闭并生成下一任务或终态;意见、退回点和审计记录可查 | | PAGE-12 | 默认显示公司/项目等主数据页签及生效状态 | 新增/变更草稿 → 提交复核 → 另一人复核 → 生效或停用 | 新版本生效且历史单据仍引用原版本;同人复核被拒绝 | | PAGE-13 | 合同执行台账,默认授权范围、最近更新排序 | 筛选合同/项目 → 查看额度与成本 → 下钻或导出 | 汇总值与来源明细一致,合同可付额由后端重算 | | PAGE-14 | 默认进入“收款记录”页签,按最近更新倒序加载当前范围数据,可切换“开票申请” | 收款新建/编辑 → 异人确认 → 分配/作废;或开票新建/编辑 → 提交 → 异人审核 → 登记人工结果/作废/红冲 | 形成可追溯收款、应收分配或发票结果并重读服务端详情;不调用外部发票平台 | | PAGE-15 | 项目身份进入“我的申请”,财务身份进入“待财务检查” | 申请 → 检查额度/账户/附件/重复 → 审批 → 登记线下结果 → 另一人复核 | 状态到 `PAID`、`FAILED` 或 `REFUNDED`,回单和人员分工完整;不产生银行指令 | | PAGE-16 | 默认“待生成”,显示已确认财务事件 | 生成草稿 → 编辑分录 → 另一人复核 → 导出 → 登记并复核人工记账结果;结果有误时由异人冲销 → 再由异人重开 → 登记新一轮结果 | 借贷平衡、导出批次/哈希、当前结果和分轮历史完整;旧凭证号及旧证据可追溯且不与新轮混合 | | PAGE-17 | 项目人员显示财务确认状态和待生成/待提交,财务显示待检查,资料人员显示待审核 | 财务确认完整 → 用户主动生成包 → 缺件检查 → 提交 → 资料异人审核/退回 → 归档 | 未确认时生成被拒绝;成功生成不可静默覆盖的归档版本;已归档包只允许受控后续动作 | | PAGE-18 | 空查询条件,不自动加载完整敏感文件全集 | 输入条件 → 查询 → 预览/下载或发起借阅 → 审批/归还 | 每次敏感访问带水印和审计;无权对象不出现在结果中 | | PAGE-19 | 默认项目综合台账和当前月份/授权范围 | 筛选 → 汇总 → 点击金额下钻 → 导出 | 汇总、明细和导出同一口径;每个数字可到来源对象 | | PAGE-20 | 默认最近 24 小时授权范围内审计记录 | 按用户/对象/动作/请求编号查询 → 查看前后值或导出 | 可用请求编号还原完整动作链;前后值按敏感规则脱敏 | | PAGE-21 | 默认用户管理页签,只向系统管理员开放 | 编辑草稿 → 校验冲突 → 保存/发布新配置版本 | 新版本有生效时间和发布人;权限变更使受影响旧会话立即失效 | | PAGE-22 | 当前版本、最新版本、更新状态和最近更新记录 | 获取版本 → 立即更新并下载验签 → 下载完成 → 立即更新并重启 → 等待健康检查 | 健康检查成功后倒计时 10 秒自动刷新;失败状态和审计历史可查询 | 所有列表默认每页 20 条;默认排序已在上表写明,未单独写明时使用 `updatedAt,desc`。无功能权限的动作隐藏;有功能权限但当前状态、资料或岗位互斥不允许的动作禁用并说明原因。任何写操作成功后都必须重新读取服务端对象和允许动作,不能只修改前端状态;失败时保留尚未提交成功的用户输入。 ### 8.26 列表查询、列和动作白名单 列表查询条件之间默认使用 AND;同一个多选条件内部使用 OR。空字符串、空数组和未传参数都表示“不限制”,但 `false`、`0` 和明确的空值筛选不能被后端当成未传。日期范围含首尾日期,页面按北京时间选择,后端换算为 UTC 半开区间。URL 只保存下表允许的非敏感条件;身份证、手机号、银行账号、工资和自由审批意见不得写入 URL。 | 页面/默认视图 | 允许筛选参数 | 允许排序字段 | 固定主列与动作 | | --- | --- | --- | --- | | PAGE-04 项目工作台 | `owner=current`、`taskStatus`、`projectStage`、`issueType` | 卡片明细仅 `dueAt/updatedAt` | 指标、待办、项目、异常;点击只跳 `/projects`、`/forms`、`/tasks` 的既有路由并携带白名单 query | | PAGE-05 财务工作台 | `taskType`、`blockingCode`、`accountingStatus`、`resultStatus`、`month` | `dueAt/amount/updatedAt` | 财务待办、阻断异常、待记账、待登记结果、项目资金;动作进入 PAGE-11/13/14/15/16 | | PAGE-06 资料工作台 | `packageStatus`、`missingType`、`borrowStatus`、`dueBefore` | `dueAt/updatedAt` | 待归档、缺件、借阅到期、近期下载;动作进入 PAGE-17/18 | | PAGE-07 项目列表 | `companyId`、`keyword`、`ownerId`、`customerId`、`stage`、`financeStatus`、`archiveStatus`、`startDateFrom/To`、`endDateFrom/To` | `updatedAt/businessNo/name/contractAmount/status` | 项目编号、名称、公司、负责人、合同额、已收、已付、阶段、待办数、资料完整率、状态;新建、导入、详情、导出 | | PAGE-09 表单中心 | `groupCode`、`formType`、`templateVersion`、`sourceSystem`、`status`、`createdByMe`、`keyword`、`createdDateFrom/To` | `updatedAt/createdAt/businessNo/status` | 表单名称、来源、项目、版本、状态、当前节点、更新时间;新建、导入、继续草稿、查看历史 | | PAGE-11 待办审批 | `view=todo/processed/created/returned/completed`、`formType`、`projectId`、`status`、`arrivedDateFrom/To`、`overdue` | `arrivedAt/dueAt/updatedAt` | 任务、表单号、项目、申请人、关键金额、当前节点、到达/到期时间;查看、通过、退回、驳回,其他动作按状态进入“更多” | | PAGE-12 主数据 | `resource`、`companyId`、`keyword`、`status`、`versionStatus` | `businessNo/name/status/updatedAt` | 各资源固定编号/名称/所属/版本/状态/更新人;新增、编辑草稿、提交复核、版本对比、生效、停用 | | PAGE-13 合同与成本 | `companyId`、`projectId`、`counterpartyId`、`contractKeyword`、`contractStatus`、`costCategory`、`businessDateFrom/To` | `updatedAt/originalAmount/settlementAmount/pendingPayableAmount/payableAmount/paidAmount` | 11.6 节合同金额列、已开票/待确认应付/已应付/已付/可付余额;查看、下钻、导出 | | PAGE-14 收款与发票 | 页面页签 `receipts/invoices`;接口参数 `companyId`、`projectId`、`counterpartyId`、`keyword`、`status`、`dateFrom/To`、`page`、`size` | 收款:`updatedAt/receiptDate`;发票:`updatedAt/requestedDate/amount` | 收款/开票业务号、公司、项目、客户/对象、金额、分配或发票号、状态、日期;新建/编辑、确认/分配、审核、登记结果、红冲/作废、导出 | | PAGE-15 进度款与付款 | `tab=my/finance-check/offline/result/paid/failed`、`companyId`、`projectId`、`supplierId`、`status`、`riskCode`、`submittedDateFrom/To` | `submittedAt/amount/dueAt/updatedAt` | 付款号、项目、合同、供应商、申请额、可付额、账户版本、阻断数、状态、申请时间;申请、检查、审核、登记/复核线下结果、退汇/重付 | | PAGE-16 记账准备 | `tab=pending/draft/review/exported/result/completed/reversed/void`、`period`、`projectId`、`eventType`、`status`、`externalVoucherNo` | `period/businessDate/amount/updatedAt` | 事件/凭证号、来源、项目、期间、借/贷合计、状态、导出批次、外部凭证号、当前结果轮次;生成、编辑、复核、导出、登记/复核结果、冲销、重开、历史证据下载、作废 | | PAGE-17 项目归档 | `view=prepare/check/returned/archived`、`companyId`、`projectId`、`status`、`completeness`、`frozen` | `updatedAt/completeness/archivedAt` | 项目、档案包版本、完整率、缺件数、状态、保管到期日、保管状态、提交/审核人;财务确认后生成、检查、提交、退回、补件、归档、冻结/解冻 | | PAGE-18 文件检索与借阅 | `companyId`、`projectId`、`contractId`、`counterpartyId`、`formType`、`fileName`、`uploadedBy`、`uploadedDateFrom/To`、`originalType`、`archiveStatus`、`scanStatus` | `uploadedAt/displayName/sizeBytes` | 首次进入不查询;至少填写一个有效条件后返回文件名、类型、项目/对象、版本、大小、上传人、扫描/归档/借阅状态;预览、下载、版本、借阅、归还 | | PAGE-19 查询与报表 | `reportCode` 加该报表冻结的公司/项目/对象/状态/日期条件;默认当前月 | 每个报表只开放其列代码,最终补业务编号 | 六类报表列以 D-08 为准;汇总、下钻、导出必须使用同一 filter hash 和口径版本 | | PAGE-20 审计日志 | `occurredFrom/To`(默认近 24 小时)、`actorId`、`identityCode`、`objectType`、`objectId`、`action`、`requestId`、`result` | `occurredAt`(默认倒序)、`eventSequence` | 时间、用户、身份、范围摘要、对象、动作、结果、原因、请求编号;查看脱敏前后值、导出;没有修改/删除 | | PAGE-21 权限与配置 | `resource`、`keyword`、`status`、`versionStatus`、`effectiveDate` | `name/code/status/updatedAt/effectiveAt` | 用户/角色/范围/模板/参数的代码、名称、版本、状态、生效时间、发布人;新增、编辑、启停、发布,按资源动作白名单执行 | | PAGE-22 系统更新 | 固定读取当前状态与 `objectType=SYSTEM_UPDATE` 历史 | 历史按 `occurredAt,desc` | 当前/最新版本、状态、发布说明、操作时间、目标版本、动作、操作人和结果;获取版本、立即更新、立即更新并重启 | 列代码、筛选参数、排序字段和导出字段在 OpenAPI 中逐项枚举,前端不得把任意对象属性透传为查询字段。金额汇总由后端在同一筛选下返回,前端只格式化显示;当前页合计与全量合计必须使用不同标签。每个工作台快捷入口都要有 Playwright 断言,证明目标路由、初始筛选、返回恢复和数据数量一致。 ## 9. 14 个表单怎么落地 ### 9.1 统一表单骨架 每张表单都由五部分组成,不把 OA 原样截图当成唯一数据: 1. **来源信息**:来源系统、来源单号、来源版本、导入批次、原始文件哈希。 2. **业务信息**:公司、项目、合同、往来单位、日期、金额和业务字段。 3. **附件信息**:附件名称、类型、是否必需、版本、哈希和“不涉及”说明。 4. **审批信息**:节点、人员、意见、时间、动作和前后状态。 5. **财务结果**:财务确认、财务事件号、记账准备号、归档状态。 ### 9.2 表单分工和输出 | 编号 | 表单 | 主要发起角色 | 财务处理角色 | 首期结构化输出 | 首期完成标志 | | --- | --- | --- | --- | --- | --- | | OA-01 | 项目立项审批表 | 项目管理 | 财务管理审核预算/付款约定 | 项目主数据、预算基线、项目事件 | 项目生效且审批快照完整 | | OA-02 | 供应商准入申请 | 项目管理 | 财务管理审核税号、账户和资质 | 往来单位、账户待生效版本 | 供应商和账户分别复核 | | OA-03 | 项目成本合同会签审批单 | 项目管理 | 财务管理审核合同额、清单和额度 | 成本合同、合同额度控制 | 合同生效、变更可追溯 | | OA-04 | 人材机合同应付资金确认单 | 项目管理 | 财务管理审核应付、发票和附件 | 财务终审直接生成 `CONFIRMED` 应付、合同额度占用和 `PAYABLE` 会计事件 | 应付确认且附件齐全 | | OA-05 | 项目收款确认单 | 项目管理 | 财务管理确认收款和应收核销 | 财务终审直接生成 `CONFIRMED` 收款、项目资金台账和 `RECEIPT` 会计事件;后续再做应收核销 | 收款证据和审核记录齐全 | | OA-06 | 项目进度款支付 | 项目管理 | 财务管理检查额度、附件和付款 | 付款申请、冻结金额、付款任务 | 通过财务检查并待线下处理 | | OA-07 | 银行账户开户审批及账户信息表 | 项目/财务人员 | 财务管理复核账户资料 | 公司银行账户待生效版本 | 独立复核后可供新业务选择 | | OA-08 | 发票开具申请表 | 项目管理 | 财务管理审核合同额度和开票条件 | 带来源版本的 `DRAFT` 销项开票候选 | 人工开票结果登记或退回 | | OA-09 | 农民工班组实名入场 | 项目管理 | 财务管理检查付款附件引用 | 人员名册版本、工资资料来源 | 资料归档,人员字段受限访问 | | OA-10 | 项目履约进度申报表 | 项目管理 | 财务管理复核产值/成本依据 | 进度版本、收入/成本建议事件 | 进度审核完成、照片归档 | | OA-11 | 项目成本合同结算审批单 | 项目管理 | 财务管理确认结算和付款上限 | 合同结算版本、付款上限 | 结算附件和审核意见齐全 | | OA-12 | 项目验收信息登记表 | 项目管理 | 财务管理查看关闭前置项 | 验收事件、归档触发信号 | 验收结论和附件完成 | | OA-13 | 项目押证费用收取明细表 | 项目管理 | 财务管理审核费用口径 | 扣费/应收候选事件 | 作为资料和费用依据归档 | | OA-14 | 中标项目人员信息表 | 项目管理 | 财务管理审核与工资/押证资料关联 | 项目人员名册版本 | 新增/变更/驻派记录可追溯 | ### 9.3 14 个表单的关键字段 下表是对 14 张原始 OA 截图逐张复核后的**源字段清单**。它说明源资料中有什么,不表示截图上的每一格都必填;必填条件、下拉值、长度、金额精度和审批路线必须按 9.3.1 节冻结后才能开发对应正式模板。 | 编号 | 源图可见的基本字段 | 重复明细、附件和审批信息 | | --- | --- | --- | | OA-01 项目立项 | 项目所属公司、申请人/部门、中标时间、项目名称/编号、建设单位、项目地址、建设单位联系人/联系方式、中标金额、项目归属、代理公司/联系方式、是否 EPC、联合体单位 | 中标人员:岗位、姓名、类别、电话、投标社保要求时段、证件类型、是否上岗;设计:中标设计负责人、设计费、设计资质、联系人/电话;施工:合同名称、对方、金额、资金来源、工程内容、监理方/总监、开竣工日、工期、工程/合同类别、签订/归档时间、合同文本、工程资料;成本:原额/增量、预算总成本、人工/材料/机械/安全文明/间接/税金/不可预见/暂列/暂估/其他成本;财务:付款约定、建设方账号、结算方式、付款描述/比率/金额;审批意见 | | OA-02 供应商准入 | 公司名称、供应商名称、联系人、电话、产品、税号、采购额、营业执照、通用附件、供应商类型、纳税人资格类型、诚信资料、账期、是否开通银行承兑、是否主材 | 账户明细:户名、开户行、账号、准入原因;资质明细:资质、证件号码、有效期、附件;审批意见 | | OA-03 成本合同会签 | 公司、是否集采/研发、申请人/部门/时间、项目编号/名称、系统编号、成本合同名称/编号/金额/占比、合同文本及台账、标的物简写、合同类型/子类、供应商、户名、开户行、账号、账龄截止日期 | 资质附件:营业执照、资质证书、安全生产许可;项目实时成本:目标合同金额、累计签订/支付/收款/扣费、项目余额;量价审核:数量、单价、成本计划、预计超清单、超清单总额、核查情况/审核意见/备注;各节点审批意见 | | OA-04 人材机应付确认 | 公司、单据号、填报人/部门/时间、项目编号/名称、成本合同编号/名称/金额/类型/子类、供应商、合同附件/备注、累计应付/已付/已开票、发票文件、含税/不含税金额、税额/税率、发票类型/号码/日期、实际供货时间、本次费用成本类型、本次应付金额、账套、借贷方科目、往来单位 | 按材料、机械、劳务、业务、运输、临时用工、专业分包、设备采购等成本类型显示条件附件,详见 9.3.2;审批节点和财务意见 | | OA-05 项目收款确认 | 到款公司、项目名称/编号、工程类型/地址、业主单位、收款方式、开票申请流程、开票金额、结算方式、本次收款金额、收款账户/账号、收款内容描述 | 收款证据附件、填表部门/人员/时间;结算会计、财务负责人、董事长审核意见 | | OA-06 项目进度款支付 | 公司、申请人/部门/时间、涉诉纠纷、项目编号/名称、合同金额、收款/支付累计、可用资金、合同预计/累计支付、可支付余额、材料/机械/专业分包/人工/其他计划占比与实际占比、是否分包付款、发票附件是否已入账、回款预测附件 | 支付资料:成本合同编号、标的物、总价、累计应付/已付、已开发票、累计欠付、本次申请/大写金额、供应商、合同类型/子类、附件矩阵;收款账户户名/开户行/账号、其他支付事由/对象/类型/附件;支付明细:日期、方式、公司付款账号、金额;账套、借贷科目、往来单位;审批检查和意见 | | OA-07 银行账户开户 | 公司、申请人/部门/时间、开户事由、对账周期、户名、开户行、账号、账户类别、项目编号/名称、开户时间 | 开户资料是否齐全:总公司营业执照正/副本、法人身份证原件、基本户开户许可证、公司公章/法人私章、股东身份证复印件;预留印鉴附件;审批意见。公司附件按原表要求打码后上传;本表只管理内部账户资料,不连接网银或 U 盾 | | OA-08 发票开具申请 | 公司、申请人/日期、项目名称/编号/地址、总承包合同金额、已开票金额、设计费总额/已开票金额、是否设计费、本次开票所属结算方式、客户全称、预计到账时间、联系电话 | 开票抬头、纳税识别号、注册地址/电话、开户行/账号、开票金额、税率、开票内容、进度表/施工合同关键页附件、发票类型;普通/专票条件必填和审批意见 | | OA-09 农民工实名入场 | 填报人/部门/时间、项目编号/名称、班组名称/负责人/联系方式 | 人员明细:姓名、身份证号、联系方式、合同薪酬标准(月度)、工种、进场时间、紧急联系方式、工资卡开户行、工资卡账号、劳动合同、身份证;审批意见 | | OA-10 履约进度 | 公司、填报人/部门/时间、项目编号/名称、施工单位、业主单位、合同额/增量、预算总成本、人工/材料/机械/安全文明/间接/其他成本、合同工期/日历天数、实际开竣工日、交底完成情况 | 报告年/季度、本期及累计完成产值、本期及累计投入成本、本期应确认增值税收入、完成进度、剩余工期、进度概述、业主审批附件;累计成本分类;4 张项目形象照片;任务明细:名称、开始/完成日、进度、文件、负责人;审批意见 | | OA-11 成本合同结算 | 公司、填制人/部门/时间、项目编号/名称、成本合同编号/名称、供应商、合同金额、结算金额、累计已开票、累计已付款 | 合同结算单/结算单/合同扫描件/发票扫描件/现场照片;质安、成本、财务、工程负责人和盖章情况 | | OA-12 项目验收 | 公司、填制人/部门/时间、项目编号/名称 | 验收明细:阶段、时间、结论、附件、备注;资料室、工程负责人、董事长助理、档案室意见 | | OA-13 押证费用 | 公司、申请人/部门/时间、项目名称/编号、收费时间 | 费用明细按建造师、技术负责人、施工员、质量员、安全员、资料员、标准员记录姓名、人员归属、证件开始时间、收费标准、本月收费金额;公司/办事处每月应收费用;审批意见 | | OA-14 中标人员 | 公司、项目名称、是否办理施工许可证、经营负责人姓名/电话、项目负责人姓名/电话、中标金额、合同工期、中标公示日、合同竣工日、实际验收日 | 证件人员新增:岗位、姓名、类别、电话、地址、证件类型、备注、是否上网/上岗;人员变更:岗位、姓名、电话、原因、日期、备注、是否上网/上岗;驻派人员:姓名、电话、任命/调离时间、工资、备注;资料、工程、结算会计和结算出纳意见 | #### 9.3.1 字段元数据冻结规则 每个字段在本文件冻结记录中必须具备:稳定字段代码、中文名称、所属表单/分组、数据类型、最大长度、是否多行、必填条件 `requiredWhen`、默认值、枚举代码和值、金额/比例精度、单位、导入列名、重复行规则、跨字段校验、敏感等级、脱敏方式、附件关系、下游对象映射和错误文案。源图没有明确给出的内容不得由开发人员猜测;统一进入 D-02,由甲方在原型和样本上确认。 公共字段由系统统一提供,不要求 14 个模板重复配置:`documentNo`、`formType`、`templateVersion`、`sourceSystem`、`sourceNo`、`sourceVersion`、`companyId`、`projectId`、`status`、`version`、创建/修改人和时间。人员、账户、合同、供应商和项目必须优先引用生效主数据;确需保留来源原文时,同时保存主数据 ID 和只读来源快照。 字段代码一经正式模板发布不得改义或复用。更名只修改显示名称;类型、精度、必填条件或下游含义变化必须发布新模板版本。导入模板的列头、在线表单字段和 OpenAPI 字段都映射到同一字段代码,错误必须定位到表单、分组、行号、列名和字段代码。 #### 9.3.2 OA-04/OA-06 条件附件矩阵基线 现有需求整理稿显示,同一附件可能在不同成本类型下重复出现,系统必须做成“成本类型 → 附件类型 → 必填条件”的版本化矩阵,不能照截图硬编码一张超长表。以下是整理稿中的首版附件集合,待原图重新归档后复核;D-02/D-09 还需要确认哪些必需、哪些允许“不涉及”: | 成本类型 | 首版条件附件集合 | | --- | --- | | 材料 | 材料发票、送货单、结算单、入库单、出库单、领料单、现场验收照片、材料检验检测报告/合格证;进口/经销场景增加贸易商进货证明、个人经营所得完税证明、资源税完税或免税/完税证明 | | 建筑/机械租赁或服务 | 建筑服务/机械租赁发票、机械设备进出场验收表、机械结算表、机械费用结算单、机械设备权属证明或租赁服务进项证明、机械设备现场照片、个人经营所得完税证明 | | 劳务 | 劳务发票、考勤表、工资表(签字加按手印)、个人所得税申报表及完税证明、人工成本确认单、工资发放记录、质安审批核签表 | | 业务服务 | 业务发票、结算单、业务报告 | | 运输 | 运输服务发票、运输结算单、运输车辆权属证明、运输资质、运输现场照片 | | 临时用工 | 临时用工花名册、临时用工协议(签字加按手印)、项目日报表、考勤表、个人所得税申报表、质安审批核签表 | | 专业分包 | 工程服务发票、专业分包工程量清单、专业分包进度款审批单、专业分包结算单/验收单、专业分包验收报告、专业分包结算报告 | | 设备采购 | 设备采购发票、发货单、送货单、结算单、现场验收设备照片、设备检验检测报告/合格证、设备安装照片;经销场景增加特许经销证明 | 附件矩阵每次发布保存版本号和生效日期,单据保存提交时使用的矩阵快照。选择“不涉及”必须填写原因并由财务复核;已通过单据更换正式附件时生成新版本并重新进入受影响节点。 ### 9.4 来源表单状态 以下状态码只属于“来源表单”状态域,不与付款、凭证、档案或项目管理 ToDo 状态混用: ```text DRAFT 草稿 SUBMITTED 已提交 PROJECT_REVIEW 项目审核中 FINANCE_REVIEW 财务审核中 RETURNED 退回补件 REJECTED 驳回 APPROVED 已通过 RESULT_PENDING 待登记结果 ARCHIVE_PENDING 待归档 ARCHIVED 已归档 VOID 已作废 ``` 只有当前节点的角色可以执行动作;“通过”不等于“已付款”或“已记账”。 ### 9.5 关键业务对象状态和允许动作 表单、付款、发票、凭证和档案分别保存自己的状态,不能用一个字段表示全部进度。比如 OA-06 已通过,只能说明付款申请审核完成,不能直接把付款结果改成“已支付”。 | 业务对象 | 状态主线 | 关键动作和规则 | | --- | --- | --- | | 主数据 | `DRAFT → REVIEWING → ACTIVE → DISABLED`;退回为 `RETURNED` | 新增/变更由另一名授权人员复核;停用后只影响新业务 | | 来源表单 | `DRAFT → SUBMITTED → PROJECT_REVIEW → FINANCE_REVIEW → APPROVED → RESULT_PENDING → ARCHIVE_PENDING → ARCHIVED`;分支为 `RETURNED/REJECTED/VOID` | 可退回后重提;驳回、作废为终止状态;审批通过后生成下游对象 | | 财务事件 | `PENDING_CONFIRM → CONFIRMED → ACCOUNTING_PENDING → COMPLETED`;终止为 `VOID` | 只能从已批准来源生成;错误通过作废/更正事件处理 | | 收款记录 | `PENDING_CONFIRM → CONFIRMED → PARTIALLY_ALLOCATED → ALLOCATED`;终止为 `VOID` | 暂收款允许待分配;核销不得超过确认收款金额 | | 开票申请 | 新命令主线为 `DRAFT/RETURNED → REVIEWING → RESULT_PENDING → ISSUED`;分支为 `RETURNED/REJECTED/VOID/RED_LETTERED`;`APPROVED` 仅保留为既有数据兼容状态 | 复核通过直接进入待登记人工结果;作废/红冲记录原因,红字票必须关联原发票 | | 付款申请 | `DRAFT → REVIEWING → APPROVED → OFFLINE_PENDING → RESULT_RECORDED → RESULT_VERIFIED → PAID`;分支为 `RETURNED/REJECTED/FAILED/REFUNDED/VOID` | 失败或退汇进入对应分支,重付必须创建并关联新记录 | | 凭证草稿 | `DRAFT → REVIEWING → APPROVED → EXPORTED → RESULT_RECORDED → COMPLETED`;分支为 `RETURNED/VOID` | 制单与复核分离;作废后可按规则重新生成一张有效草稿 | | 项目财务状态 | `PENDING/IN_PROGRESS/BLOCKED → COMPLETED` | 仅财务管理人员在授权范围内执行确认;项目状态须为 `DRAFT/ACTIVE/SUSPENDED/CLOSED`;成功后作为生成档案包前置条件 | | 档案包 | `PREPARING → CHECKED → REVIEWING → ARCHIVED`;分支为 `RETURNED/FROZEN` | 退回后补件形成新版本;已归档只允许借阅、版本查看和受控下载;冻结时禁止到期处置 | 所有状态迁移都通过后端命令完成,并校验当前状态、角色、数据范围和版本号。前端只展示允许的按钮,不允许提交任意目标状态。一次动作必须同时写入业务状态、流程任务和审计记录;任一步失败时整笔事务回滚。 状态码按对象分域保存;同名状态只表示相近语义,不表示可以跨对象直接复制迁移规则。第 12.8 节 `BACKLOG/READY/IN_PROGRESS/REVIEW/TESTING/ACCEPTED/BLOCKED` 是项目任务状态,不得写入业务表。每个对象的全部合法状态、中文显示、允许来源状态、目标状态、命令、权限码和错误码必须在 `TODO-S0-023` 中冻结并生成状态机测试。 ### 9.6 关键状态、按钮和处理人矩阵 | 对象/当前状态 | 有权处理人 | 页面按钮和前置条件 | 成功结果 | | --- | --- | --- | --- | | 来源表单 `DRAFT` | 创建人或明确代录人 | 保存、删除草稿、校验、预览、提交;提交前完整校验并二次确认 | `SUBMITTED`,创建流程实例和首个任务 | | 来源表单审核中 | 当前任务处理人 | 通过、退回补件、驳回;三者都要意见,退回必须选字段/附件;不提供批量审批金额单据 | 关闭当前任务并进入下一节点、`RETURNED` 或 `REJECTED` | | 来源表单 `RETURNED` | 原创建人/代录人 | 编辑被退回项、补附件、重新校验、重提或作废 | 新版本重提并保留旧版本和退回意见,或进入 `VOID` | | 来源表单已提交但首节点未处理 | 发起人 | 撤回,二次确认并填写原因 | 回到可编辑草稿/新版本,原任务关闭并留痕 | | 主数据 `DRAFT/REVIEWING` | 提交人/另一名复核人 | 提交复核;复核人通过或退回,同人按钮禁用并解释岗位冲突 | 新版本 `ACTIVE` 或退回草稿 | | 收款 `PENDING_CONFIRM/CONFIRMED` | 收款经办/财务复核 | 确认收款、建立分配;金额和证据齐全,分配总额不超确认金额 | `PARTIALLY_ALLOCATED` 或 `ALLOCATED`,生成财务事件 | | 开票 `REVIEWING/RESULT_PENDING/ISSUED` | 财务审核/开票结果登记人 | 审核、退回;批准后登记人工开票结果;作废/红冲从当前原票发起并填写原因,可关联已通过检查的结果文件 | `ISSUED`、`VOID`,或原票 `RED_LETTERED` 并生成关联红字票 | | 付款 `REVIEWING/APPROVED` | 当前审批人/线下付款经办 | 审核或退回;批准后只能进入待线下处理,额度、账户、附件、重复和 SOD 全部通过 | `OFFLINE_PENDING`,冻结金额但不发银行指令 | | 付款 `OFFLINE_PENDING/RESULT_RECORDED` | 结果登记人/另一名复核人 | 登记成功、失败或退汇及回单;复核人不得与登记人相同 | `PAID`、`FAILED` 或 `REFUNDED`,释放/结转冻结并生成对应事件 | | 凭证 `DRAFT/REVIEWING` | 记账会计/另一名复核人 | 编辑分录并填修改原因、提交复核、批准;借贷不平或维度缺失时禁用批准 | `APPROVED`,允许生成一个导出批次 | | 凭证 `EXPORTED/RESULT_RECORDED` | 结果登记人/另一名复核人 | 登记外部凭证号和结果、复核;关联导出批次和哈希 | `COMPLETED`,项目详情和档案可下钻查看 | | 项目财务 `PENDING/IN_PROGRESS/BLOCKED` | 授权财务管理人员 | PAGE-08 显示“确认财务完整”;服务端校验权限、范围、项目/财务状态和版本 | `COMPLETED`,写审计并允许进入 PAGE-17 生成档案包 | | 档案 `PREPARING/CHECKED/REVIEWING` | 已完成财务确认的项目范围内,财务提交人/资料审核人 | 生成前要求 `financeStatus=COMPLETED`;检查后无缺件才提交;资料人员异人退回或归档,退回必须列缺件 | 新版本 `RETURNED` 或 `ARCHIVED` | | 借阅申请待审 | 借阅申请人/资料批准人 | 申请填写用途和归还日;批准/拒绝;归还登记需确认文件状态 | 借阅、拒绝或已归还记录,全部写审计 | 无功能权限的按钮隐藏;有功能权限但当前状态、资料、金额或岗位互斥不满足时按钮禁用并显示原因。只有低风险、同类且不含金额判断的动作才允许批量处理;R1 的审批、付款结果、凭证复核、敏感下载和归档确认默认逐笔处理。 ### 9.7 岗位职责资料如何进入 R1 岗位职责资料已经对原始压缩包中的 12 份 Excel 完成名称和文本复核,用于识别真实分工、风险点和后续扩展;这不代表 12 份岗位材料中的全部日常工作都必须在第一轮实现。会议原文明确“先做最基础的数据来源、审批、记账准备、存档和查询”,因此按下表取舍;未列为“R1 实现”的职责不得自行扩入第一轮。 | 岗位资料中的职责 | R1 处理级别 | 第一轮系统行为 | 明确不做 | | --- | --- | --- | --- | | 项目经办、财务审核、资料归档三类分工 | R1 实现 | 以三类身份工作台进入,再用岗位模板、数据范围、金额阈值和流程节点细分权限 | 不为每份岗位职责另建一套首页或平行系统 | | 成本/应付审核、收款/开票经办、付款结果登记与复核、制单与凭证复核 | R1 实现 | 按 4.4、9.6 节落实同人禁止和服务端权限;财务身份内部仍按岗位模板授权 | 不把“财务管理人员”做成万能角色 | | 项目可用资金、合同可付额、附件、重复、涉诉/罚款风险 | R1 实现 | 涉诉和未结罚款作为项目人工风险标记,由授权人员录入证据和有效期;付款检查命中有效阻断标记时返回稳定错误码 | 不连接法院、银行或其他外部平台自动查询风险 | | 主办出纳准备资料、结算出纳线下处理、另一人复核 | R1 只实现内部留痕 | 系统保存付款资料准备人、线下结果登记人和结果复核人;后两者不得相同,实际付款发生在系统外 | 不设置 `payment:execute`,不在系统内下发、确认或重放银行指令 | | 公司/供应商账户、专户和账户责任范围 | R1 实现基础主数据 | 保存账户类别、所属公司/项目、用途、脱敏账号和生效版本;历史单据保留使用时快照 | 不保存 U 盾、UK、网银密码、PIN、印鉴领取密码或银行登录材料,不做 U 盾清点台账 | | OA-09 工资卡、薪酬标准等来源字段 | R1 仅作为受限来源资料 | 按模板保存、加密、脱敏、审批和归档,只有独立权限可查看 | 不开发工资计算、工资发放、社保、公积金、个税或自然人税务子系统 | | 税金、报税、银企对账、发票验真 | 后续单独立项 | R1 只允许上传已经取得的人工结果/依据,并关联原单据 | 不登录税务/银行平台,不自动申报、缴税、对账或验真 | | 借支计息、滚动预算、预算偏差、三流一致、月结调账和账实核对 | 后续评审 | 只保留来源附件、备注和扩展位;若未来纳入,单独补页面、状态、权限、公式和 UAT | 不在 R1 中暗含利息计提、预算管理或完整总账结账功能 | | 到期催收、季度提醒、自动清点和无人值守处理 | 本期不自动执行 | 页面按当前日期计算并展示已有记录的到期/超期状态,用户进入页面后人工处理 | 不使用 Scheduler、Quartz、消息消费者或 RPA 自动执行业务 | R1 可以吸收岗位资料中的“内部控制”,但不能吸收已排除的“外部执行”。任何新增岗位规则先判断是否能落在现有 21 页、14 表单和 F-01~F-14;需要新子系统、第三方权限、自动任务或新增法定财务处理的,统一走后续变更,不改变第一轮完整交付边界。 原始岗位包中的《收集到财务岗位需求》含 OA、T+、网银、U 盾和 RPA 设想,以及不应进入需求文档、源码、样本或日志的外部系统访问信息。R1 只吸收其中“项目余额不足阻断付款、核对收款方和账户、保存回单、制单与复核分离”等内部业务规则;任何账号、密码、地址、证书、U 盾控制和自动登录/点击方案一律不复制、不实现,并由资料负责人限制原件访问。 ## 10. 关键业务规则 ### 10.1 数据不能重复 来源表单唯一键:`表单类型 + 来源系统 + 规范化来源单号 + 规范化来源版本`。 同一份资料重复上传时,系统要提示已有记录并给出链接,不能重复生成项目、应付、付款或凭证草稿。 ### 10.2 正式数据不能直接覆盖 - 草稿可以编辑和删除。 - 已提交数据修改后要增加版本。 - 已通过数据修改关键字段时重新审核。 - 已付款、已记账或已归档数据不能直接改金额或附件,只能作废、冲销、退回或创建新版本。 ### 10.3 项目资金口径 第一版建议公式: ```text 项目账面余额 = 已确认收款 - 已支付金额 - 已确认扣费 ± 已批准调整 项目可用余额 = 项目账面余额 - 已冻结金额 - 已审批未支付金额 ``` 通俗理解:已经批了但还没付的钱,也不能再拿去批第二次。 资金与付款模块验收前,财务负责人需要签字确认:哪些收款算“已确认”、哪些状态进入冻结、哪些业务允许负余额、例外由谁审批。 ### 10.4 合同付款上限 - 结算前累计付款不能超过原合同额加已批准变更。 - 结算后累计付款不能超过生效结算金额。 - 本次可付金额不能超过项目可用余额、合同可付余额和应付余额中的最小值。 - 无合同付款要用独立业务类型、附件清单和审批路线。 ### 10.5 供应商账户 - 付款不能自由手填收款账号,只能选择已复核生效的账户版本。 - 账户新增/变更提交人与复核人不能是同一人。 - 历史付款继续显示当时使用的账户版本。 ### 10.6 发票和附件 - 发票号、税号、金额、日期用于发现疑似重复,不自动判断真伪。 - 材料、机械、劳务、运输、设备等成本类型对应不同附件清单。 - 选择“不涉及”时必须填写原因,并由财务人员复核。 - 已通过后替换附件会生成新版本并重新进入资料/财务审核。 ### 10.7 付款岗位分离 同一笔付款至少要分开:申请、财务审核、线下结果登记、结果复核。结果登记人与复核人必须不同。 系统只记录线下付款结果,不发起银行操作。 ### 10.8 记账准备 - 一个财务事件只能有一张有效凭证草稿,明确拆分的情况除外。 - 借方合计必须等于贷方合计。 - 修改系统建议的科目、金额或项目维度要填写原因。 - 导出后保存导出批次、文件哈希和凭证范围。 - 外部记账完成后由用户登记凭证号和结果,另一名财务人员复核。 ### 10.9 附件和档案 每个文件保存文件名、类型、大小、SHA-256、上传人、上传时间、业务关系和版本。文件替换不覆盖旧文件;正式档案不能由普通页面物理删除。 ### 10.10 敏感信息 身份证、手机号、工资和银行账号按字段加密和脱敏。只有在对应业务节点有权限的人能查看完整值;查看和导出都留审计记录。 ### 10.11 例外审批不是通用绕过 余额暂时不足、无合同业务、非硬性附件缺失或超金额阈值等业务情况,可以按甲方确认的规则发起独立例外申请。例外记录必须包含:例外编号、触发规则、原单据、公司/项目、金额、原因、证据附件、申请人、审批人、决定、有效期和使用结果。 以下控制不允许通过例外放行:未授权访问、供应商账户未生效、同一人登记并复核付款、重复的有效来源/财务事件、借贷不平、恶意文件或审计记录写入失败。 例外被批准后只放行指定单据上的指定规则,并且只能使用一次;其他校验继续执行。例外被退回或驳回时,原业务保持阻断。系统管理员不提供“跳过全部检查”的按钮。 ## 11. Java 技术实现方案 ### 11.1 技术选型 | 层次 | 技术 | 通俗解释 | | --- | --- | --- | | 前端 | 官方 `Tencent/tdesign-vue-next-starter` | 直接使用 TDesign Vue Next 中后台 Starter,再按财务业务裁剪和改造 | | 前端运行环境 | Node.js `>=22.12.0`、npm、`package-lock.json` | 与 Starter 当前要求一致,使用 `npm ci` 保证依赖可重复安装 | | 后端语言/构建 | Eclipse Temurin/兼容发行版 Java 17 LTS、Maven Wrapper 3.9.16 | 发布字节码和生产运行时固定 Java 17;CI 使用 Java 17 与仓库内 Maven Wrapper | | Web 框架 | Spring Boot 3.5.16、Spring MVC | 负责页面请求、接口、登录和业务逻辑;补丁版本变更必须跑全量回归 | | 权限 | Spring Security、Spring Session JDBC | 负责本地账号、服务端会话、CSRF 和接口权限,不引入外部身份平台 | | 数据访问 | MyBatis Spring Boot Starter 3.0.5 | SQL 写清楚,财务查询更方便审查;不同时引入 JPA 形成两套持久化方式 | | 数据库 | MySQL 8.4.x LTS、Connector/J 由 Spring Boot BOM 锁定 | 保存结构化业务数据、状态和审计记录,staging 与 production 使用同一大版本 | | 数据库升级 | Flyway Core + Flyway MySQL | 每次改表都有版本;正式建表前必须锁定一个明确支持 MySQL 8.4 的版本,启动出现“数据库版本未测试”警告即不通过基线评审 | | 文件解析 | Apache POI、Commons CSV | 读取 Excel 和 CSV 模板 | | 测试 | JUnit 5、MockMvc、Testcontainers、Vitest、Playwright | 自动验证业务规则、接口、真实数据库和浏览器主流程 | | 架构检查 | ArchUnit、JaCoCo | 防止模块互相乱调,检查测试覆盖率 | ### 11.2 TDesign Starter 前端实施规范 **前端硬性结论已经冻结**:第一轮不再重新选 UI 框架、不另画一套后台、不另建前端工程。前端开发的工作方式只有一种:在现有 `frontend/` TDesign Vue Next Starter 中增加或修改菜单和路由,在 `pages/` 增加财务页面,用 `tdesign-vue-next` 与 `tdesign-icons-vue-next` 组合业务组件,接通本文件定义的 Java API,再按页面合同自行联调、测试和修复到验收通过。“做成腾讯这个样子”在本项目中的准确含义是遵守 TDesign 的布局、组件、Design Token 和交互习惯,不是复制腾讯商标、产品名称或演示数据。 **生效时点**:本节是当前 R1 开发的唯一正式前端实现方式。PAGE-14 已按该技术方向完成模块级实现;后续任何路由、API、Store、权限或业务组件改动都必须继续接受本节合同和证据门禁,不得因开发已启动而降级。 #### 前端硬规范一页判定表 普通使用者不需要理解全部工程细节,只要按下表即可判断前端是否符合要求;任一“硬性结果”不满足,页面不得合并、不得演示为完成功能,也不得计入 R1 完成率。 | 判定项 | 硬性结果 | 一眼可见或可自动检查的证据 | | --- | --- | --- | | 唯一工程 | 只在现有 `frontend/` 内开发,不新增第二个前端、第二入口、第二套后台或 iframe 拼装 | 仓库只有一个生产 `package.json`、`vite.config.ts`、`src/main.ts` 和根挂载 | | 唯一视觉体系 | 页面使用当前 TDesign Vue Next Starter 的 side 布局、间距、Token、信息密度和交互规则 | PAGE-03~21 共用同一侧栏、顶部栏、面包屑、页签和内容区 | | 唯一控件体系 | 通用控件只用 `tdesign-vue-next`;图标使用 Starter 的 `t-icon` 或 `tdesign-icons-vue-next` 导出组件,两者都属于 TDesign 图标体系 | 依赖和源码扫描无第二 UI 库、自绘同类图标或复制私改的 TDesign 源码 | | 业务组合组件 | 只有跨页面业务语义才建立 `components/business`,且内部仍只组合 TDesign 组件 | 每个新增组合组件有 `COMP-###`、用途、测试、可访问性和批准记录 | | 菜单与页面 | 菜单、顺序、路由和 PAGE-01~21 只按 7.3、8.24~8.26 节实现 | 本地路由、菜单、`pageId`、权限码和 `routes.json` 一致,无演示菜单或死入口 | | 真实功能 | 所有正式页面和按钮连接 Java 真实 API、MySQL、权限、状态和审计 | production Network 无 Mock/静态 JSON;刷新、重登后数据仍在;失败和越权被服务端拒绝 | | 腾讯样式边界 | “腾讯样式”只指 TDesign 规范,不使用腾讯 Logo、名称、产品文案或远程素材 | D-11 前使用临时文字和 TDesign 默认主色;production 无腾讯商标和 Starter 演示品牌 | | 财务后台形态 | 页面安静、紧凑、便于扫描和重复录入,不做营销首页 | 无 Hero、渐变背景、装饰插画、嵌套卡片、大标题宣传文案或无业务意义动效 | | 状态与异常 | 每页完整处理加载、空态、无权、冲突、校验失败、网络失败和写入结果 | 401/403/404/409/422/500、重复点击、会话失效均有自动化用例和可理解反馈 | | 交付质量 | 开发团队自行完成实现、联调、修复和回归,不把基础问题留给甲方 UAT | Vitest、Playwright、axe、production 构建、三档分辨率和 `FE-GATE` 全部通过 | #### 前端强制组件规则(不可变) 以下规则是“使用 TDesign”在代码评审中的可执行定义,适用于 PAGE-01~PAGE-21 的正式页面: 1. **业务页面不得直接替代 TDesign 控件**:不得用原生 `