diff --git a/src/Backend/SolutionErp.Infrastructure/Services/PurchaseEvaluationWorkflowService.cs b/src/Backend/SolutionErp.Infrastructure/Services/PurchaseEvaluationWorkflowService.cs index 61f146c..b3f7518 100644 --- a/src/Backend/SolutionErp.Infrastructure/Services/PurchaseEvaluationWorkflowService.cs +++ b/src/Backend/SolutionErp.Infrastructure/Services/PurchaseEvaluationWorkflowService.cs @@ -286,7 +286,8 @@ public class PurchaseEvaluationWorkflowService( { case WorkflowReturnMode.OneLevel: // Lùi 1 Cấp trong cùng Step. Nếu đang Cấp 1 → lùi sang Bước trước - // Cấp cuối. Nếu đang Bước 1 Cấp 1 → fallback Drafter (no further). + // Cấp cuối. Nếu đang Bước 1 Cấp 1 → reset về (0, 1) giữ ChoDuyet + // (Plan M S23 t3 — KHÔNG fallback Drafter, phiếu giữ "đang duyệt"). if (curLevel > 1) { evaluation.CurrentApprovalLevelOrder = curLevel - 1; @@ -302,12 +303,12 @@ public class PurchaseEvaluationWorkflowService( } else { - // Bước 1 Cấp 1 — no further back. Fallback Drafter. - evaluation.Phase = PurchaseEvaluationPhase.TraLai; - evaluation.CurrentWorkflowStepIndex = null; - evaluation.CurrentApprovalLevelOrder = null; - evaluation.SlaDeadline = null; - return "Trả về Người soạn thảo (fallback — đang Bước 1 Cấp 1)"; + // Bước 1 Cấp 1 → reset về (0, 1) giữ Phase=ChoDuyet (no-op effective + // — Approver A hiện tại). Audit log rõ "không lùi được". SLA reset + // dưới cuối hàm cho approver giữ nguyên. + evaluation.CurrentWorkflowStepIndex = 0; + evaluation.CurrentApprovalLevelOrder = 1; + summary = "Action 'Trả lại 1 Cấp' không lùi được — phiếu reset về Approver Bước 1 Cấp 1"; } break; @@ -323,12 +324,11 @@ public class PurchaseEvaluationWorkflowService( } else { - // Đang Bước 1 → fallback Drafter - evaluation.Phase = PurchaseEvaluationPhase.TraLai; - evaluation.CurrentWorkflowStepIndex = null; - evaluation.CurrentApprovalLevelOrder = null; - evaluation.SlaDeadline = null; - return "Trả về Người soạn thảo (fallback — đang Bước đầu)"; + // Bước 1 → reset về (0, 1) giữ Phase=ChoDuyet (Plan M S23 t3 — + // KHÔNG fallback Drafter, phiếu giữ "đang duyệt"). + evaluation.CurrentWorkflowStepIndex = 0; + evaluation.CurrentApprovalLevelOrder = 1; + summary = "Action 'Trả lại 1 Bước' không lùi được — phiếu reset về Approver Bước 1 Cấp 1"; } break;