# 公司/使用者 自行定義SSP功能實作規格
## 原因
目前的專案啟動流程如下:
合規框架(compliant_frameworks)(oscal.catalog) -> 
由User從合規框架挑選適合公司的控制項, 建立適合公司的合規資源庫(module_frames)(oscal.profile) ->
由User發起啟動專案(start_oscal_project) -> 
專案建立流程:
  POST /oscal/projects/start                                                                                                                                                                                  
    │                                                                                                                                                                                                         
    ├─ 1. 驗證專案名稱不重複                                                                                                                                                                                  
    │                                                                                                                                                                                                         
    ├─ 2. 取得 Profile（by profile_uid）                                                                                                                                                                    
    │                                                                                                                                                                                                         
    ├─ 3. 處理 SSP                                                                                                                                                                                          
    │     ├─ 有帶 ssp_uid → 嘗試取得既有 SSP                                                                                                                                                                  
    │     └─ 沒有或找不到 → 建立空白 SSP ✦ 這裡才建 SSP                                                                                                                                                       
    │                                                                                                                                                                                                         
    ├─ 4. 建立 Assessment Plan (AP) + 空白 Assessment Result (AR)                                                                                                                                             
    │                                                                                                                                                                                                         
    ├─ 5. 建立 Project + ProjectExtension                                                                                                                                                                   
    │     └─ ProjectExtension: module_frame_id（反查 profile→module_frame）、owner_id                                                                                                                         
    │                                                                                                                                                                                                         
    ├─ 6. 建立 Project ↔ AP mapping
    │                                                                                                                                                                                                         
    ├─ 7. 初始化 AP（從 Profile clone 控制項/任務）                                                                                                                                                         
    │     → assessment_plan_groups / controls / tasks / task_controls                                                                                                                                         
    │     （try/except 包裹，失敗不回滾）                                                                                                                                                                     
    │                                                                                                                                                                                                         
    ├─ 8. 為每個 AP Task 建立定版 Workflow                                                                                                                                                                    
    │     ├─ 從 profile_assessment_workflow_mapping 找到預設 template                                                                                                                                         
    │     ├─ clone workflow_template（定版，獨立副本）                                                                                                                                                        
    │     ├─ 建立 workflow_execution（子流程實例）                                                                                                                                                            
    │     ├─ 建立 task ↔ workflow_template mapping                                                                                                                                                            
    │     └─ 建立 task ↔ workflow_execution mapping                                                                                                                                                           
    │                                                                                                                                                                                                         
    ├─ A. 建立稽核系統（audit_systems）                                                                                                                                                                       
    │     → SSP system_characteristics 快照 + project 映射                                                                                                                                                    
    │                                                                                                                                                                                                         
    ├─ B. 加入額外參與者（排除建立者）                                                                                                                                                                        
    │                                                                                                                                                                                                         
    ├─ C. 加入設備（project_device_mapping）                                                                                                                                                                
    │                                                                                                                                                                                                         
    └─ 9. 把建立者加為專案管理員
    

目前希望把SSP編輯功能補上, 所以要調整合規資源庫和專案的啟動流程:
合規框架(compliant_frameworks)(oscal.catalog) -> 
由User從合規框架挑選適合公司的控制項, 建立適合公司的合規資源庫(module_frames)(oscal.profile) ->
由User定義SSP(system_characteristics) -> 
- 目前公司如何符合這些控制項（目前先以文字描述，未來可考慮結構化資料）
- 有哪些對應的表單, 應該會完成後續的專案任務（task）需要填寫這些表單, 以利後續稽核使用
由User發起啟動專案(start_oscal_project)



    