文件
hyb-oa/.trellis/tasks/07-27-yang-jun-reimbursement-readiness/prd.md
T

6.0 KiB

杨俊报销就绪

Goal

让已在企业微信通讯录中的杨俊尽快具备真实报销能力:能够通过企微进入 OA、创建并提交出差后的报销,由其真实直属主管马建勇审批,再进入王芝玲负责的财务处理链路;先修复生产 timer 构建合同并取得新鲜异机恢复点,再执行最小范围的账号与主管写入。

Background

  • 杨俊已存在于管理员导出的企业微信通讯录,因此具备企微成员账号;生产只读体检已确认他尚无 OA 员工记录和企微绑定。
  • 上一轮通讯录 apply 只包含两名财务职责目标,明确没有把其余四名成员送入生产输入。
  • 报销是当前急需的真实业务,不等待站内通知、入职向导、审批流简化或月度报表等后续产品项。
  • 生产写入前需同时确认自动异机备份 timer 的构建合同未因最近部署发生漂移。
  • 通讯录单人子集唯一、active、企业邮箱完整、手机号缺失但满足现有 nullable 合同。
  • 当前有 37 个 active 费用类型和 1 个 active 报销工作流定义;active 法体为 0,但代码确认报销创建/提交不读取法体,法体不是本次硬门禁。
  • 当前自动备份 daily/watchdog/drill-reminder 和日常巡检 service 的 BUILD_SHA 均与活动 server 不一致;最近一次备份成功发生在该漂移被今晚任务触发之前,不能视为今晚安全。

Requirements

  • 生产只读体检必须一次性核对:OA 员工、企微绑定、active 状态、角色、直属主管、主管 active/审批权限、可用费用类型、报销功能开关和审批定义;法体仅记录现状,不作为报销阻断项。
  • 同时比较自动备份 systemd unit 中烤入的 BUILD_SHA 与活动 server 构建标识;只输出是否一致,不输出环境文件或宿主路径。
  • 若 OA 账号缺失,复用现有通讯录 stdin 路径只筛选目标员工,先 dry-run,另行获批后 apply;初始角色严格为 employee,其余通讯录成员不进入输入。
  • 通讯录导入只允许把企微管理员导出的成员资料写入 OA 并建立身份绑定;OA 不调用企微成员 create/update/disable,不反向修改企微姓名、部门、主管、手机号或邮箱。企微成员资料由本人在企微或企微管理员在管理后台维护。
  • 将杨俊的 direct_manager_id 设置为用户已确认的真实直属主管马建勇;写入前仍需只读确认马建勇为不同、active 且具有 expense.approve 权限的 OA 员工,不得为了报销绕过审批或扩宽角色。
  • 若费用类型或报销工作流缺失,只补足完成报销所需的最小主数据;不为了本次报销新建法体,不顺带整理全部组织架构或导入其余员工。
  • 写入后只做账号、绑定、主管解析、费用类型和提交流程的安全验证;不创建虚假生产报销、发票或付款数据。
  • 真实报销提交前至少需要一条费用明细和一张已绑定、状态有效的票据;这由员工在真实业务中提供,不用合成数据代替。
  • 最近部署后必须重装自动备份三项 service/timer 和日常巡检 timer,使 unit BUILD_SHA 与活动 server 一致;重装后手工触发一次真实自动异机备份,确认源端成功且 ARM 恢复点新鲜,再允许写入杨俊账号或主管关系。
  • 第一笔真实业务由员工本人正常发起,目标链路为“员工提交 → 真实主管审批 → 财务处理”;付款批次仍遵守既有 maker-checker。

Scope

本轮范围只包括:修复生产 automatic-backup/WARCH3 timer 的构建合同并取得新鲜异机恢复点;从通讯录中仅导入杨俊为 employee;将杨俊的真实直属主管设置为马建勇;验证企微登录和现有报销链路已就绪。所有真实报销内容由杨俊本人提供和提交,所有审批与财务处理由对应真实人员完成。

Acceptance Criteria

  • 只读体检给出脱敏、可执行的缺口清单,并确认 timer BUILD_SHA 是否与活动构建一致。
  • 目标员工在 OA 中为 active,企微绑定唯一,初始业务角色不超过 employee。
  • 至少有一个 active 费用类型可用于填单;法体缺失已确认不阻断当前报销创建/提交。
  • direct_manager_id 能解析到真实、active 且具有 expense.approve 权限的不同员工。
  • 报销相关功能开关和工作流定义可用;无需差旅申请也能创建报销。
  • 自动备份三项 timer 与日常巡检 timer 的 BUILD_SHA 均与活动 server 一致,且 timer 保持 enabled/active。
  • timer 修复后生成一份新的成功异机批次,ARM 侧完整性/新鲜度检查通过;该门禁先于任何杨俊生产数据写入。
  • 目标员工完成一次真实企微登录并能看到报销入口;主管能看到相应审批入口。
  • 不持久化通讯录筛选文件,不导入其他成员,不产生测试报销、测试发票或测试付款。
  • 本轮没有调用企微成员写接口;企微成员资料未被 OA 反向修改。

Out of Scope

  • 不修改 CEO 本人无主管报销限制,不通过授予 finance_mgr 或管理员代批绕过。
  • 不重构报销状态机、审批引擎、企微 OAuth 或权限模型。
  • 不从 OA 创建、更新或停用企微成员;需要修改企微成员资料时,由本人或企微管理员在企微侧处理。
  • 不提前实现 R63–R66,不扩大为全员入职或组织架构治理。
  • 不在未获单独批准时执行通讯录 apply、主管/法体写入、生产报销或付款操作。
  • 不把手机号缺失视为导入阻断项;该员工使用企微或企业邮箱登录,后续按需补手机号。

Test Plan

  • Trellis task/governance、敏感扫描、流程与文档门禁、git diff --check。
  • 通讯录聚焦 dry-run 仅输出人数、计划、冲突、跳过和失败计数。
  • 生产只读 SQL/Prisma 只返回布尔值和计数,不输出手机号、邮箱、企微 userid、完整账号或原始 payload。
  • 使用既有报销 workflow/权限聚焦回归验证主管解析和 expense.approve,不写生产业务单据。