Gate PASS 0-blocker (sub-reviewer-gate-k4c.md): WorkflowMatrixViewPage doc ?group= (guard
/^[1-8]$/ chan ca "03") -> loc wf.code === KHKK-N{n} client-side co-chu-dich (payload da
tai tron theo type — khong ro cache, BE khong nhan truc group) + badge nhom + link xem-tat-ca
+ rong-vi-loc tach cau; type≠10 = 0 doi hanh vi (PE matrix regression chung-la-khong).
fe-admin 0-diff (lech co-y 2026-07-27). +1 Fact ListDeleted_FiltersByApprovalGroup (5 ve +
nhanh-Admin-cung-loc, assert Total, RED->GREEN 2 chieu do that — gate-K4b MAJOR-A dong).
Suite 622/0 (45D+577I) do tuoi ca gate lan lead. Ghi mo: 1 test cu
DeleteContractSigningPlan_SoftDeletes flaky 1/12 luot quan sat (gate truy 3 ve khong ra
duong diff — moc cho CI neu tai). No con: gate-K4c 3-MINOR (helper-dispose · link-mat-query
· highlight) + K5-MINOR-3 chu SAP + MAJOR-C da dong o wave nay.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Nen cho tinh nang "xoa phieu PE o man duyet" (UAT: phieu bam sai goi thau dang
an luy ke). Dot 1 lam NEN, dot 2 moi lam nut xoa.
Vi sao phai lam nen truoc: phieu dang chay pin ApprovalWorkflowId va doc workflow
SONG theo Id do. Moi POST tao workflow moi = Id MOI, nen tick co tren ban moi
KHONG BAO GIO toi duoc phieu dang treo. Phai co lenh sua-tai-cho giu nguyen Id.
- Domain: ApprovalWorkflowLevel + AllowApproverDelete (F6, per-NGUOI) + Mig
20260727033522_AddPeAllowApproverDelete (AddColumn bit default false, no new table)
- Application: UpdateAwDefinitionCommand + Validator + Handler
- 2 phep thu: (T1) khung khong doi - Order tung row bat bien
(T2) luat choi khong doi - cam CeoApprovalThreshold, AllowApproverFinalize,
Code, ApplicableType => 409 bao tao ban moi
- diff theo Level.Id (CAM delete-then-insert: no FK Restrict + mo coi LevelOpinion)
- guard 2 tang chu ky: tang 1 chu ky tren ho so CON SONG; tang 2 chu ky CON LUU
(cha xoa mem hoac opinion xoa mem) - ca hai deu CHAN, khong xoa cung
- purge chi khi ho so cha KHONG CON ROW; boc transaction (ExecuteDelete tu commit)
- KHONG tang Version, KHONG dung IsActive, KHONG doi Id
- Api: PUT /api/approval-workflows-v2/{id} + [Authorize(Policy="Workflows.Create")]
- Infra: message 403 in TEN NGUOI thay GUID tran
- FE: Designer tach "Sua tai cho" (PUT) vs "Tao phien ban moi" (POST) + o tick F6
- Tests: +21 (551 tong, 0 fail) - gom F12 chung minh phieu dang chay nhan thay doi ngay
Review: 14 FLAG, 3 HIGH da va (ExecuteDelete ngoai transaction / purge xoa cung
chu ky phieu xoa mem / endpoint khong co day FE goi toi).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
WorkflowMatrixViewPage (màn "Luồng duyệt" read-only của user, build S24 với 7 flag) thiếu flag
thứ 8 allowApproverFinalize ("Duyệt là KẾT THÚC quy trình, không trình tiếp CEO") thêm ở Mig 58
(S87) → matrix "chưa hiển thị chính xác" QT-DN-V2-001 (anh Kiệt FDC). BE overview DTO đã gửi sẵn
field này (ApprovalWorkflowV2AdminFeatures.cs:41/188), chỉ FE matrix + AwLevelDto type thiếu.
Thêm allowApproverFinalize vào AwLevelDto + FlagRow thứ 8 (colSpan2, mirror admin Designer).
FE-user only (matrix là view user-app, không có bản fe-admin). Build xanh.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
UAT feedback 2026-05-15 sau Run #211 deploy: bro request hiển thị rõ ràng
giống admin Designer (panel per NV + 7 label tiếng Việt) + màu sắc khác nhau
giữa Cấp duyệt + giữa Phòng ban để phân biệt.
Redesign WorkflowMatrixViewPage.tsx ~250 LOC (drop table 11 cột symbol khó hiểu):
NEW layout per Step (Phòng):
- Step container có unique color (cycle 5 màu: blue/purple/emerald/amber/pink)
- Step header bar với tone đậm: "Bước N — Phòng X"
- Group levels theo level.order → 1 Cấp group = N NV panel song song (OR-of-N)
- Cấp badge có unique color (cycle 5 màu: violet/sky/teal/orange/rose)
- "1 NV duyệt" hoặc "N NV (OR-of-N — chỉ cần 1 NV duyệt là qua Cấp)" hint
- NV permission panel mirror admin Designer line 853-949:
- Header "QUYỀN DUYỆT {NV name} {email}" amber-700 uppercase
- 7 checkbox label tiếng Việt rõ (read-only disabled accent-emerald):
1. Trả về 1 Cấp trước
2. Trả về 1 Bước trước
3. Trả về Người chỉ định
4. Trả về Drafter (mặc định)
5. Cho phép chỉnh sửa Section 2 (Hạng mục/NCC/Báo giá) lúc đang duyệt
6. Cho phép chỉnh sửa Section ngân sách lúc đang duyệt
7. Cho phép duyệt thẳng Cấp cuối khi đang duyệt
- Grid 2-col cho 4 return mode + col-span-2 cho 3 Allow* label dài
- Inactive label slate-400, active slate-800 font-medium
Color palette (Tailwind JIT — full class strings array):
- STEP_PALETTE: 5 màu cycle theo sIdx % 5
- LEVEL_PALETTE: 5 màu cycle theo (level.order - 1) % 5
Drop FlagCell table cell helper. Replace với StepBlock + NvPermissionPanel +
FlagRow components.
Verify:
- npm run build fe-user PASS clean 0 TS err, 423ms, 1907 modules
- Bundle 1282.91 KB (+0.32 KB from baseline — minor add new components)
Em main solo CSS/UX redesign decision (criteria #2 Implementer REFUSE — UX flow
decision needed cho color palette + layout structure).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
UAT request 2026-05-15 sau deploy Run #210: bro muốn matrix view content sát
sidebar trái thay vì gap 24px (px-6) — tận dụng width gain từ Plan AA sidebar
widen + remove truncate.
Fix 1 line `WorkflowMatrixViewPage.tsx:43` container:
- px-6 (24px) → px-2 (8px)
- py-5 (20px) giữ nguyên
- PageHeader title + WorkflowCard + Table cùng shift left -16px
Verify:
- npm run build fe-user PASS clean 0 TS err, 486ms, bundle 1282.59 KB unchanged
Em main solo CSS polish trivial < 30 min (per criteria #6 Implementer REFUSE).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>