退回流程邏輯

任一關退回上一關時,系統執行的 5 個操作。退回必須填寫退回原因

為什麼存在

PAM 的 考核審核流程 是 6 關鏈式審核,任何一關都可能發現上一關判錯(例如分數不合理、超額未說明、忘記填具體事蹟)。設計上不直接「改」舊紀錄,而是退回——把案件狀態 rewind 一格,並把已寫入的判定結果(FinalGrade、ForceFlag)清掉,回到可以重新評分的乾淨狀態。這條流程的核心是「保留歷史 + 重設當下」:歷史分數不能憑空消失(要可審計),但當下的計分要全部清空才能重來。

5 個操作

  1. CurrentStep--(HR 退回已完成案件時 CurrentStep 不變)
  2. Step >= 退回步驟 的舊 ExamRecord 標記為 IsReturned = true
  3. 新增一筆 IsReturned = true 的退回記錄(含退回原因)
  4. 清除FinalGradeFinalScoreScoreBeforeAdjustIsLocked
  5. 清除ForceFlag = "Normal"ForceFlagReason = null

第 2 步是「軟刪除」——舊紀錄留著但標 IsReturned,後續查詢用 validRecords 過濾掉它們即可,不會在 UI 顯示,但稽核時還在。第 3 步是「立碑」——退回原因永久保存,避免「無聲退回」造成的權責不清。

查詢 ExamRecords 的關鍵規則

變數過濾條件
validRecords!r.IsReturned && r.Step <= p.CurrentStep
reviewer2RecordCurrentStep < 2 時必須設為 null
latestRecord(取 D 分)validRecords
前一關分數(prevA / prevRecord)r.Step < p.CurrentStep
歷史紀錄排序SubmittedAt(非 Step)

最後一條是個容易踩的坑:同一關可能多次被退回再重交,Step 都一樣,要靠 SubmittedAt 才能排出真正的時間順序。

退回類型

觸發方行為
一般審核主管CurrentStep--,回上一關
HR 退回進行中案件同上
HR 退回已完成案件CurrentStep 不變,但解除 lock 重新評分

最後一種特殊:案件已走完所有關卡並 lock,HR 才發現問題,這時不能 rewind step(已經沒有「上一關」了),但要打開 lock 讓 reviewer 重新評。

退回原因(必填)

填入新增的 IsReturned = true 記錄。可選用 標語系統 預設原因模板(return tagline)——例如「具體事蹟不足」「分數未配合配額」,避免每次手打。

不填退回原因 → ReviewValidator 直接擋下,回 400。

等第審核退回

特殊:等第審核流程 Confirmed 狀態 HR 點鎖頭按鈕退回時,需 HR 管理員密碼ProtectionService),週期若已 Locked 會自動解鎖為 Active。這是因為等第審核退回會影響整個部門的分布平衡,比個案退回影響大,所以加了密碼門檻。

跟其他流程的關係

相關概念

強連結(原文明確提及)

深入閱讀(外部資源)

← 回到 wiki