阅读用户复制的 17 章课程和 README,范围与分批方法见文档阅读清单。系统业务明确是财务报销/发票审计,不是任意智能体执行行为的通用安全审计。五种角色、四节点主干与独立 feedback、七类规则、双引擎风险、确定性路由、政策 RAG、审批状态机和报表来自课件。Vue 前端、SQLite/local 文件、持久 outbox、配置管理页、不可变快照和站内告警是为本次完整可运行要求选择的实现。
本版不把课件中引用但未提供的源码当作已读代码。没有添加真实税务验真、任意代码执行、邮件/短信发送或自动模型训练。企业制度只能由用户提供,不以假制度或随机向量代替真实内容。
| 领域 | 模型 | 约束及用途 |
|---|---|---|
| 身份 | Department / Role / User / RefreshSession | 部门/登录名唯一;密码 scrypt;刷新凭据仅存哈希,轮换撤销 |
| 配置 | AgentConfig / AuditRule | 固定节点和规则;标识+版本唯一,更新追加记录 |
| 报销 | Reimbursement / Invoice / SequenceCounter | 金额整数分;单号按业务日期原子取号;发票 UUID 受控文件键与 SHA256;移除是软标记 |
| 审核 | AuditRun / AgentExecution / RuleEvaluation | 单据+轮次唯一;输入配置历史快照;节点尝试唯一;每条结果保留版本、级别与证据 |
| 审批 | ApprovalChain / ApprovalRound / ApprovalRecord | 路由/类型/部门/金额筛选;冻结链;每个审核一轮次;每轮每节点只签一次 |
| 政策 | KnowledgeDocument / KnowledgeChunk | 正文版本、中文分块与真实向量;改正文让索引失效;旧审核保存冻结原文 |
| 运行 | OutboxEvent / Alert / OperationLog / HumanFeedback / CacheEntry | 幂等事件键、租约、重试;告警去重;只读操作留痕;独立纠正建议;缓存 TTL |
当前共有 22 类关系/运行模型,字段含义和约束在 app/domain/models.py 的 comment 中。具体表清单以模型源文件为准;OpenAPI 提供请求契约,不暴露密码哈希、刷新凭据哈希或内部文件键。
核心日期、金额、抬头和重复规则不允许关闭、缩小范围或降低基础严重程度。日期过期和大额提醒另用 warning 表达“需复核”,而非把格式与有效期混成同一个法律结论。税额使用发票明确声明率,税号检查只验证配置长度与字符。
stateDiagram-v2
[*] --> draft
draft --> pending_audit: 本人提交
rejected --> pending_audit: 修订后重提
pending_audit --> in_approval: 派单/自动轮次
pending_audit --> withdrawn: 本人撤回
in_approval --> approved: 最后节点通过/系统批准
in_approval --> rejected: 驳回
in_approval --> draft: 退回草稿
approved --> [*]
withdrawn --> [*]
员工仅看自己,主管可看同部门,财务/经理/管理员可看全局。可查看不代表可改别人的申请;编辑、上传和撤回另做所有权与状态检查。审批只允许冻结节点指定人员,禁止自审和管理员代签;当前角色变化或停用立即阻止推进。
修改单据用 revision,配置用 expected_version。提交与重跑要求 Idempotency-Key,同键返回同一审核;审批用条件更新和唯一约束防重签。API事务中写业务与 outbox,提交后消费者读取;外部模型调用不占写事务。消费者租约、退避与启动恢复为至少一次;真正业务副作用用 audit_id/轮次/事件键幂等。任务完成或失败回写都检查旧 revision,撤回和新轮次不会被迟到结果覆盖。
默认每文件图级最多 3 次;HTTP 层不自动重试。outbox 最多 3 次事件恢复用于核心故障,不对正常 AI 降级重新跑图;崩溃后的恢复可能重新执行已完成节点,执行日志新增而不覆盖。只部署单个主程序消费者,禁止多 worker 使用启动回收逻辑。
本地缓存、规则、文件、队列、审批均真实运行;外部模型未给服务地址时明确降级。真实 LLM/VLM协议测试使用 MockTransport,自动通过测试使用明确的合约替身,不能当作外部模型已验证。语义向量必须真实服务返回合格维度;改正文或模型名称使旧索引失效。模型服务升级可能改变同名模型的输出,冻结输入和最终输出用于解释与路由复现,不能保证生成模型的重复输出逐字相同。
SQLite 与本地向量扫描适合小规模单实例。配置不能宣称已经切换为 PostgreSQL/Redis/Milvus/MinIO;这些属于后续部署改造。Excel/PDF导出是实际字节,PDF默认中文 CID字体;如查看器缺字体,可配置具有使用授权的中文 TTF。
JSON 配置清单不允许写注释,所以 package.json、tsconfig.json、锁文件的说明集中在 README 和 docs/依赖与配置说明.md;其他手写源码、组件、关键配置和脚本包含中文注释。