# 数字员工财务经验沉淀与定时提醒概念文档 更新日期:2026-06-02 ## 功能一句话 把数字员工定位为后台财务数据分析员:定时沉淀企业财务经验,周期性生成分析报告,并在审批、预算、出差申请和报销流程中生成可追踪的提醒建议。 ## 背景与问题 当前数字员工已经具备技能目录、财务看板快照和员工行为画像扫描能力,但业务价值仍偏弱: - 技能列表数量多,但多数只是能力定义,缺少持续沉淀和行动产出。 - 员工画像已有数据,但如果不持续沉淀,系统不会随企业数据变多而变聪明。 - 财务流程中存在大量需要定时推动的事项,例如领导审批、预算编制、出差申请到期、报销补材料和归档。 - 现在缺少统一的后台提醒扫描结果,无法证明数字员工每天发现了哪些待处理事项、提醒了谁、为什么提醒。 因此本功能把数字员工拆成三条主线: - **行为沉淀技能**:每天小颗粒沉淀费用、预算、单据、流程、画像经验。 - **定时提醒技能**:按时间窗口扫描待办事项,生成面向责任人的提醒清单。 - **周期报告技能**:读取沉淀结果和提醒效果,形成企业财务经验报告。 ## 目标与非目标 ### 目标 - 建立数字员工“后台分析员”定位,不再把全部技能包装成前台执行能力。 - 收敛技能体系为行为沉淀、定时提醒、周期报告三类。 - 第一阶段落地一个真实可运行的 **定时提醒扫描任务**。 - 提醒扫描使用现有业务数据,不新增数据库结构,结果写入 `agent_runs` 和 `agent_tool_calls`。 - 提醒扫描至少覆盖: - 待审批单据提醒。 - 预算编制/预算缺口提醒。 - 出差申请到期后待报销提醒。 - 报销逾期、补材料、付款/归档提醒。 - 数字员工看板能够看到提醒扫描的运行记录和提醒产出数量。 ### 非目标 - 第一阶段不做站内信、邮件、短信或企业微信真实投递。 - 第一阶段不新增提醒表、已读表、重复提醒去重表等数据库结构。 - 第一阶段不替代审批、付款、预算编制和报销操作,只生成提醒建议。 - 第一阶段不让数字员工自动修改单据状态、预算状态或审批结果。 - 第一阶段不做完整报告页面,只把提醒报告结构化写入运行记录。 ## 用户与场景 - **部门领导**:每天收到待审批单据汇总,知道待审数量、最高金额、最长等待时间。 - **预算管理员**:在预算周期临近或预算池缺失时收到编制/补齐提醒。 - **出差员工**:出差申请结束后未报销时收到报销或延长申请提醒。 - **财务人员**:看到报销逾期、补材料、付款、归档等流程卡点。 - **财务负责人**:周期性查看提醒扫描报告,判断哪些流程经常阻塞。 - **系统管理员**:在数字员工看板查看提醒任务是否稳定运行。 ## 功能能力 ### 行为沉淀技能 后续应逐步沉淀以下经验快照: - 费用结构基线:部门、费用类型、月份、单数、金额、均值、P90。 - 预算执行偏差:使用率、闲置率、超支风险、预测偏差。 - 报销行为画像:员工/部门报销频率、金额区间、退回率、补材料率。 - 单据质量经验:缺附件、发票异常、金额不一致、退回原因。 - 流程效率经验:提交到审批、审批到付款、付款到归档的耗时。 - 制度执行经验:制度条款命中频率、人工否定频率、制度缺口。 ### 定时提醒技能 第一阶段实现 `digital_employee_reminder_scan`,生成统一提醒报告: - `approval_pending`:待审批提醒。 - `budget_compilation`:预算编制/预算池缺口提醒。 - `travel_application_expiry`:出差申请已结束但未报销提醒。 - `reimbursement_overdue`:报销逾期、补材料、待付款、待归档提醒。 提醒报告只写入数字员工运行记录,结构包含: - 扫描时间和窗口。 - 每类提醒数量。 - 每个收件人的提醒摘要。 - 关联单据、金额、最长等待时间、建议动作。 - 是否需要人工处理。 ### 周期报告技能 后续在沉淀和提醒任务稳定后生成: - 每日财务经营摘要。 - 周度流程效率复盘。 - 月度预算执行复盘。 - 半年度企业财务经验报告。 ## 方案设计 ### 后端 第一阶段新增三个后端模块: - `digital_employee_reminder_task.py`:执行提醒扫描,写入 `AgentRun`。 - `digital_employee_reminder_scheduler.py`:后台调度器,默认每天 02:00 扫描,可配置首次延迟用于开发验证。 - `digital_employee_dashboard.py`:扩展任务类型和指标,让看板统计提醒产出。 提醒扫描复用现有表: - `expense_claims`:报销单和费用申请单。 - `employees`:员工、直属领导、角色。 - `budget_allocations`:预算池。 - `agent_runs` / `agent_tool_calls`:数字员工运行记录。 ### 数据输出结构 运行记录中的 `route_json.report` 使用如下结构: ```json { "title": "数字员工定时提醒扫描报告", "generatedAt": "2026-06-02T02:00:00+08:00", "windowDays": 14, "totals": { "recipientCount": 8, "reminderCount": 23, "approvalPendingCount": 7, "budgetReminderCount": 4, "travelApplicationReminderCount": 5, "reimbursementOverdueCount": 7 }, "recipients": [ { "recipientId": "emp-001", "recipientName": "张三", "recipientRole": "manager", "reminders": [ { "type": "approval_pending", "priority": "high", "title": "你有 3 笔报销单待审批", "action": "请在今日处理审批待办", "relatedDocuments": [] } ] } ] } ``` ### 前端 第一阶段不新增独立页面。数字员工看板通过已有最近运行记录展示: - 任务名称:定时提醒扫描。 - 产出数量:提醒数量。 - 最近摘要:提醒了多少人、多少条事项。 后续可在数字员工工作记录详情中扩展“提醒报告详情”。 ## 算法与公式 ### 提醒优先级 提醒优先级由等待天数、金额和业务类型决定: $$ priority\_score = 0.45 \times wait\_score + 0.35 \times amount\_score + 0.20 \times type\_score $$ 其中: - `wait_score = min(wait_days / threshold_days, 1)` - `amount_score = min(amount / high_amount_threshold, 1)` - `type_score`:审批、预算、出差、报销流程分别给定基础分。 优先级映射: $$ priority = \begin{cases} high, & priority\_score \ge 0.75 \\ medium, & 0.45 \le priority\_score < 0.75 \\ low, & priority\_score < 0.45 \end{cases} $$ ### 待审批等待天数 $$ wait\_days = floor((now - submitted\_at) / 86400) $$ 如果 `submitted_at` 为空,则使用 `updated_at` 或 `created_at` 降级计算。 ### 预算缺口识别 当前阶段使用预算池存在性和周期作为提醒依据: $$ budget\_gap = active\_allocation\_count = 0 $$ 当当前年度/期间没有有效预算池,或预算池处于非 active/published 状态时,生成预算编制提醒。 ## 测试方案 - 后端单元测试:构造员工、领导、报销单、申请单和预算池,验证提醒报告数量与收件人。 - 看板聚合测试:构造 `digital_employee_reminder_scan` 运行记录,验证 `reminders` 指标被统计。 - 调度器测试:验证 scheduler 能调用任务服务,不重复启动。 - 容器验证:在 `x-financial-main:/app` 内运行定向 pytest,60s 超时。 - 运行时验证:重启容器后查询 `agent_runs`,确认提醒扫描记录成功生成。 - HTTP 验证:调用 `/api/v1/analytics/digital-employee-dashboard`,确认任务分布包含定时提醒扫描。 ## 指标与验收 - `agent_runs` 中出现 `task_type=digital_employee_reminder_scan` 的成功运行。 - 工具响应包含 `recipient_count`、`reminder_count` 和四类提醒计数。 - 数字员工看板 `businessOutputs` 计入提醒数量。 - 最近运行记录展示“定时提醒扫描”。 - 定向测试通过。 - 不新增数据库结构,不改变现有单据状态。 ## 风险与开放问题 - 第一阶段只生成提醒报告,不做真实消息投递;后续需要站内信/邮件/企业微信时再新增消息模型。 - 当前预算编制状态模型还不完整,第一阶段只能基于预算池缺口和期间判断。 - 出差申请到期依赖申请单中的 `application_detail.time`,如果历史数据缺失,只能降级使用 `occurred_at`。 - 审批责任人目前主要通过员工直属领导推断,复杂动态审批流需要后续对接审批路由结果。 - 如果后续需要“已读/已处理/重复提醒抑制”,必须新增提醒表或消息表,并进行数据库迁移确认。