From 0d776987e4a259ff412da71302c81efa536a6307 Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Thu, 7 May 2026 19:25:44 +0700 Subject: [PATCH] =?UTF-8?q?[CLAUDE]=20PE=20workflow=203-button=20Duy?= =?UTF-8?q?=E1=BB=87t/Tr=E1=BA=A3=20l=E1=BA=A1i/T=E1=BB=AB=20ch=E1=BB=91i?= =?UTF-8?q?=20(Task=204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User chỉ thị thay 2-button hiện tại bằng 3 hành động rõ ràng: - Duyệt = forward phase tiếp theo - Trả lại = về DangSoanThao + Drafter sửa → workflow tự jump tới phase đã reject (smart reject Mig 16 pattern + clear N-stage rows) - Từ chối = phiếu khoá hoàn toàn (Phase=TuChoi → 17 handler Mig 16 lock edit). Drafter phải tạo phiếu mới. Domain (PurchaseEvaluationPolicy.cs): - NccOnly + NccWithPlan: thêm (X → TuChoi) transition cho mọi phase trung gian (ChoPurchasing/ChoCCM/ChoCEODuyetNCC/ChoDuAn/ChoCEODuyetPA) với roles của phase đó. Trước đây chỉ DangSoanThao → TuChoi (Drafter). - FromDefinition expand: mỗi step (trừ DangSoanThao) thêm (step.Phase → TuChoi) với roles của step. Service (PurchaseEvaluationWorkflowService.cs): - Reject branch tách 2 case: * target=TuChoi → giữ nguyên (KHÔNG override + KHÔNG set RejectedFromPhase + KHÔNG clear N-stage rows). Phiếu khoá vĩnh viễn. * target khác (thường DangSoanThao) → smart reject (set RejectedFromPhase + force DangSoanThao + clear N-stage rows). FE (PeWorkflowPanel.tsx, fe-admin + fe-user mirror): - next.phases render 3 button rõ ràng: * "✓ Duyệt →