主管交接

考核進行中主管離職時,保留 ExamRecord 歷史 + 換 ExamParticipant 配置欄位

ReviewerTransferService 處理。

兩種模式

模式 1:保留記錄換配置

  • ExamRecord.ReviewerName 不動
  • ExamParticipant.Reviewer1/2/Approver* 換新主管
  • 適用:人離職但要繼續考核

模式 2:Shift 遞補(NewReviewerName 為空)

  • 整關往前遞補
  • TotalReviewSteps -= 1
  • 適用:刪掉某層審核(例如把終審拿掉變五審)

API

POST /api/hr/participants/batch-transfer-reviewers

支援 DryRun: true —— 先預覽影響哪些人,不實際寫入。

前端入口

人員管理頁批次調整主管 Dialog → 切換「保留記錄 / 清空重評」兩模式。

孤立 ExamRecord 防護

TotalReviewSteps 減少時,可能產生 Step > TotalReviewSteps 的孤立 ExamRecord。三層防護:

  1. UpdateReviewersAsync:減少關卡時自動刪除孤立 ExamRecord + ExamAnswers,重算 FinalScore
  2. SubmitDepartmentAsync:提交前檢查並自動修復,記錄稽核日誌
  3. 查詢規則:validRecords 過濾 r.Step <= p.TotalReviewSteps

FinalScore 重算保護

孤立記錄清理後重算 FinalScore,必須優先使用 GradeAdjustment 調分值

  • 有 GradeAdjustment → 使用最後一筆的 AdjustedScore/AdjustedGrade
  • 沒有 → 從 ExamRecord 重算 ScoreD

跨 Controller 共用方法

方法位置用途
GetFinalScore(record, totalSteps, isMerged)ReviewController (internal static)根據 TotalReviewSteps 取最終分數
CalculateGrade(score)ReviewController (internal static)分數→等第(fallback,正路請用 GradingService

相關概念

強連結(原文明確提及)

← 回到 wiki