# 项目生命周期状态机

> DDS-Section: 3. 项目生命周期管理
> DDS-Lines: L65-L106

## 状态定义

| 状态 | 说明 | 触发动作 | 权限 |
|:---|:---|:---|:---|
| **INIT** | 项目元数据已创建，等待详细信息录入 | 超级管理员创建项目 | SuperAdmin |
| **DRAFTING** | 正在进行初始信息填写（关联填写工单） | 指定填写人保存/编辑 | 填写人/SuperAdmin |
| **REVIEWING** | 初始信息或变更信息提交审核 | 提交审核 | SuperAdmin |
| **RELEASED** | 审核通过，正常运行中 | 审核通过 | All (View) |
| **MODIFYING** | 存在活跃的变更工单（不影响主线运行） | 发起修改工单 | Owner/SuperAdmin |
| **ARCHIVED** | 软删除状态，不可见但保留数据 | 删除项目 | SuperAdmin |

## 状态转换图

```mermaid
stateDiagram-v2
    [*] --> INIT: 创建项目
    
    INIT --> DRAFTING: 分配填写人
    
    DRAFTING --> DRAFTING: 保存草稿
    DRAFTING --> REVIEWING: 提交审核
    
    REVIEWING --> DRAFTING: 审核打回
    REVIEWING --> RELEASED: 审核通过
    
    RELEASED --> MODIFYING: 发起修改工单
    RELEASED --> ARCHIVED: 归档删除
    
    MODIFYING --> MODIFYING: 保存草稿
    MODIFYING --> REVIEWING: 提交变更审核
    MODIFYING --> RELEASED: 撤销变更/审核通过
    
    ARCHIVED --> [*]
    
    note right of RELEASED: 项目认证状态=official
    note right of DRAFTING: 支持多次保存草稿
    note right of MODIFYING: 可同时存在多个变更工单
```

## 状态转换触发条件

| From | To | 触发条件 | 执行操作 |
|:---|:---|:---|:---|
| `[*]` | `INIT` | SuperAdmin 创建项目 | 创建 Project 记录，生成 project_id |
| `INIT` | `DRAFTING` | 分配填写人 | 创建填写工单，关联用户 |
| `DRAFTING` | `DRAFTING` | 填写人保存草稿 | 更新 ProjectVersion 草稿 |
| `DRAFTING` | `REVIEWING` | 填写人提交审核 | 工单状态 → pending_review |
| `REVIEWING` | `DRAFTING` | 审核人打回 | 工单状态 → returned |
| `REVIEWING` | `RELEASED` | 审核人通过 | 生成正式版本，certification → official |
| `RELEASED` | `MODIFYING` | 发起修改工单 | 创建修改工单+草稿 |
| `MODIFYING` | `REVIEWING` | 提交变更审核 | 工单状态 → pending_review |
| `MODIFYING` | `RELEASED` | 撤销变更 或 审核通过 | 删除草稿 或 合并修改 |
| `RELEASED` | `ARCHIVED` | SuperAdmin 删除 | 软删除，设置 deleted_at |
