## 核心数据模型 & 状态流转

12 张核心表 + 5 阶段状态机，支撑全链路可追溯

### 数据库 ER 关系（核心表）

① sys_user 用户账号
id, username, password_hash, real_name, position (职位展示), department_id, superior_id (直属上级), role (EMPLOYEE/SUPER_ADMIN), created_at
② sys_department 部门/分组
id, name, parent_id (树形), leader_id, sort_order
③ assessment_period 考核周期
id, name, start_date, end_date, status (DRAFT→OKR_ALIGN→EXECUTING→ASSESSING→ARCHIVED), created_by
④ okr_objective 目标 O
id, period_id, user_id, dept_id, type (DEPT/PERSONAL), title, status, version, snapshot_json (归档快照), reviewed_by, reviewed_at
⑤ kr_key_result 关键结果 KR
id, objective_id, title, target_value, current_value, status (NOT_STARTED/IN_PROGRESS/COMPLETED/BLOCKED), weight
⑥ kr_progress_log KR 进度更新
id, kr_id, old_value, new_value, old_status, new_status, remark, updated_by, created_at
⑦ kpi_template KPI 模板
id, name, category, items_json (指标项列表), created_by
⑧ kpi_config 个人 KPI 配置
id, period_id, user_id, items_json, version, snapshot_json, locked_at
⑨ performance_score 绩效打分
id, period_id, user_id, evaluator_id, okr_score (0-40), kpi_score (0-60), bonus (加分), penalty (扣分), total, grade (S/A/B/C), type (SELF/SUPERIOR/FINAL), comments_json
⑩ performance_feedback 面谈反馈
id, period_id, user_id, superior_id, interview_notes, highlights, issues, improvements, employee_feedback
⑪ operation_log 操作日志
id, operator_id, action, entity_type, entity_id, old_data_json, new_data_json, ip, created_at
⑫ audit_correction 修正记录
id, performance_id, correction_type, old_values_json, new_values_json, reason, operated_by, created_at

### 考核周期状态机

📝 待发布
管理员创建
未开放给员工
⟶
🎯 OKR 对齐
部门OKR发布
员工提交审核
⟶
▶️ 执行中
每周更新进度
阻塞自动提醒
⟶
✍️ 考评中
自评→上级打分
面谈沟通
⟶
📦 已归档
数据锁定
快照留存
状态转换规则：
• 待发布→OKR对齐：管理员手动触发，系统为所有员工创建空白OKR记录
• OKR对齐→执行中：管理员手动触发（或周期开始日期自动），员工OKR锁定
• 执行中→考评中：周期结束日期到达时自动切换（定时任务检查）
• 考评中→已归档：管理员手动触发，执行数据快照
• 已归档数据不可修改，仅支持管理员发起审计修正（写入 audit_correction 表）

### 权限链路（基于汇报关系）

👤 普通员工
✅ 个人OKR 增改查
✅ 绩效自评
✅ 查看本人结果
❌ 他人数据
❌ 打分/配置
👔 直属上级
✅ 下属OKR审核
✅ 下属绩效打分
✅ 面谈记录
✅ 下属数据查看
❌ 全局配置
权限自动生效：userId = superior_id
🔧 超级管理员
✅ 全系统最高权限
✅ 周期/组织/备份
✅ 全量日志查看
✅ 审计修正