# Hermes 数据库表结构设计

为了支持后台异步任务的执行和长期记忆（风险标记、执行结果归档），我们需要在数据库中增加（或扩充）以下表结构。

## 1. 任务调度与执行表

### `hermes_task_config` (定时任务配置表)
用于管理所有的后台巡检和推送任务，支持动态调整频率与开关。
- `id`: string (UUID)
- `task_type`: string (enum: `global_risk_scan`, `weekly_expense_report`, `kb_validation`...)
- `cron_expression`: string (e.g., `0 2 * * *`)
- `is_enabled`: boolean (默认 True)
- `payload_template`: jsonb (预留参数，如扫描的时间窗口、特定部门过滤条件等)
- `updated_at`: datetime

### `hermes_task_execution_log` (任务执行日志表)
记录每次任务的执行状态，便于排错与溯源。
- `id`: string (UUID)
- `config_id`: string (外键，关联 `hermes_task_config`)
- `started_at`: datetime
- `completed_at`: datetime
- `status`: string (enum: `running`, `success`, `failed`)
- `result_summary`: string (执行结果的简要说明，如“扫描了 1500 条单据，发现 12 条高危”)
- `error_trace`: text (如果失败，存储错误堆栈)

## 2. 深度分析结果表

### `hermes_risk_report` (深度风险报告表)
用于存储 LLM 找出的深层逻辑风险。
- `id`: string (UUID)
- `claim_id`: string (外键，关联存疑的主单据 `expense_claim`)
- `execution_log_id`: string (外键，由哪次扫描任务产生的)
- `risk_level`: string (enum: `low`, `medium`, `high`, `critical`)
- `risk_type`: string (enum: `split_billing` 拆单, `collusion` 合谋, `policy_violation` 违规...)
- `risk_description`: text (大模型生成的自然语言报告，如“该单据与前天提交的单据存在拆分可能...”)
- `related_claim_ids`: jsonb (存储关联的同谋/相关单据 ID 列表，提供上下文线索)
- `status`: string (enum: `pending_review` 待人工复核, `confirmed` 已确认为风险, `dismissed` 已忽略)

## 3. 现有表的平滑改造

### 修改 `employee` 表 (员工信用分预留)
- **新增字段** `compliance_score`: int (默认 100，由 Hermes 动态扣减或恢复，用于风控引擎调节对该员工的抽查率和宽容度)

### 修改 `expense_claim` 表 (风控标记)
- **新增字段** `hermes_scanned_at`: datetime (记录该单据上次被 Hermes 扫描的时间，防止重复扫描)
- **新增字段** `hermes_risk_flag`: boolean (快速判断该单子是否被挂载了 `hermes_risk_report`)
