diff --git a/.claude/WAL.md b/.claude/WAL.md index 8c55778..985f259 100644 --- a/.claude/WAL.md +++ b/.claude/WAL.md @@ -56,8 +56,9 @@ next: 5/6 OG CHỐT (1 schema-GỘP+UI-1-1 · 2 đội-hình-cũ · 7 N-phiếu+ đối chiếu chéo 4 spec → A mâu-thuẫn-liên-spec · B vá-đè-vá · C build-order · E GO/NO-GO · F digest-owner). Về → lead tổng → BẢNG TỔNG trình anh → B4 build K1 (anh pre-authorize "chốt kỹ rồi thì dry-run luôn"; seed-land vẫn chờ OG-6+câu-II · K8 chờ câu-V). - (V) ✅ CHỐT: "phiếu đã duyệt không xóa" = THIẾT KẾ ĐÚNG ERP (owner ratified — CẤM B4 sửa allow-list) - ⇒ K8 dùng PE ZZTEST RIÊNG (phiếu bất tử nằm gói test). +BACKLOG giai-đoạn-sau: phiếu điều-chỉnh/thay-thế + (V) ✅ CHỐT TRỌN: "phiếu đã duyệt không xóa" = THIẾT KẾ ĐÚNG ERP (CẤM B4 sửa allow-list) + phương án (b) + ratified — K8 dựng gói test tên `SOLUTION-PE-1..n` đi trọn vòng, KHÔNG test trên phiếu thật (mã phiếu vẫn + auto-gen RG-001; nhận diện qua TÊN GÓI + danh-sách-ID). +BACKLOG giai-đoạn-sau: phiếu điều-chỉnh/thay-thế (amendment, áp PE/KHKK/HĐ) + authz-per-nhóm + bung-gộp UI — spec tổng đã ghi 3 mục. CHỜ ANH: (I) bản-15-trang · (II) B2-14-dòng+"/" · (III) ai-bấm [default Drafter+Procurement+Admin] · OG-6. Sổ lane-chết: fable 3/8 · opus 1/12. diff --git a/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-cum3-chi-tiet-31-07-2026.md b/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-cum3-chi-tiet-31-07-2026.md index 785a498..6ec96a4 100644 --- a/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-cum3-chi-tiet-31-07-2026.md +++ b/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-cum3-chi-tiet-31-07-2026.md @@ -21,7 +21,7 @@ K7 cầu KHKK→HĐ (bridge 8v/8test — đường ống S156 ĐÃ vá @W6-S161, 9. 🔴 **[L2-H5] B0 = FORM NGƯỜI THẬT fail-closed**: bảng 14 dòng {bước · người · email · tài khoản} PHẢI ĐIỀN ĐỦ trước giờ-G (12/14 bước đang trống); nguồn = K3-acceptance LIVE; thiếu 1 dòng = KHÔNG chạy. 10. 🔴 **[L2-H2] Phép đo QĐ9 phải TRƯỢT ĐƯỢC**: sau finalize → **sửa NS/giá nguồn** (PE hoặc catalog) → reload phiếu → số **KHÔNG đổi** = PASS (đổi = FAIL); đo **CẢ 2 nhánh** (a-Chương finalize-CCM VÀ lên-CEO-Trường duyệt) — hiện phép đo 0-bit. 11. 🔴 **[L2-H3] Dấu ZZTEST cho phiếu KHKK**: mã phiếu auto-gen (`KHKK/2026/xxx`) KHÔNG mang ZZTEST — bản ghi sống-vĩnh-viễn lại không dấu. Vá: nhét `ZZTEST` vào field hiển thị được trên list (tên kế hoạch/ghi chú — soi DTO chọn field) + **rollback theo DANH SÁCH ID** ghi lại từng bước, không theo prefix. -12. ✅ **[CHỐT @S164 — câu V] "Phiếu đã duyệt không xóa" = THIẾT KẾ ĐÚNG, owner ratified** (verbatim: *"đồng ý luôn, hiện tất cả các phiếu nếu đã duyệt gần như ko xóa đc. Đồng ý cái này đúng với thiết kế ERP."*) ⇒ (i) delete allow-list `{DangSoanThao, TuChoi}` **GIỮ NGUYÊN — CẤM B4 "sửa" nó** (nó không phải bug); (ii) hệ quả vận hành: phiếu test đã duyệt BẤT TỬ ⇒ **K8 CHỐT dùng bộ PE ZZTEST RIÊNG** (để phiếu bất tử nằm trên gói test, không phải gói thật `A/049` — trước K2 rào per-PE còn khóa nguyên gói); (iii) 🆕 **BACKLOG giai-đoạn-sau (lời anh):** tính năng **"phiếu điều chỉnh/thay thế"** — cập nhật chứng từ đã duyệt bằng chứng từ điều chỉnh, KHÔNG xóa gốc (khuôn amendment ERP; áp được cả PE/KHKK/HĐ) — ghi nhận, KHÔNG làm đợt này. +12. ✅ **[CHỐT @S164 — câu V] "Phiếu đã duyệt không xóa" = THIẾT KẾ ĐÚNG, owner ratified** (verbatim: *"đồng ý luôn, hiện tất cả các phiếu nếu đã duyệt gần như ko xóa đc. Đồng ý cái này đúng với thiết kế ERP."*) ⇒ (i) delete allow-list `{DangSoanThao, TuChoi}` **GIỮ NGUYÊN — CẤM B4 "sửa" nó** (nó không phải bug); (ii) hệ quả vận hành: phiếu test đã duyệt BẤT TỬ ⇒ **K8 CHỐT dùng bộ PE TEST RIÊNG — owner ratified @S164** (verbatim: *"tạo 1 cái PE Test SOLUTION-PE-1, 2, 3 j đó để test, cái này đúng ko test trên phiếu thật"*): dựng **gói thầu/hạng mục test đặt tên `SOLUTION-PE-1..n`** (dưới dự án test — tái dùng convention ZZTEST-project S160 hoặc dự án test sẵn có), phiếu PE tạo trên gói đó đi trọn vòng từ GĐ1; ⚠️ note kỹ thuật: MÃ phiếu vẫn auto-gen theo RG-001 (không nhét chữ test vào mã được) — nhận diện test qua TÊN GÓI `SOLUTION-PE-{n}` hiện trên list + cây, và danh-sách-ID ghi lại từng bước (vá-11); (iii) 🆕 **BACKLOG giai-đoạn-sau (lời anh):** tính năng **"phiếu điều chỉnh/thay thế"** — cập nhật chứng từ đã duyệt bằng chứng từ điều chỉnh, KHÔNG xóa gốc (khuôn amendment ERP; áp được cả PE/KHKK/HĐ) — ghi nhận, KHÔNG làm đợt này. 13. **[L3-H4] B16 rollback HĐ = NO-OP hiện tại** (numeric guard chặn xóa cả khi TuChoi) — rollback plan ghi rõ: HĐ test dọn bằng **sqlcmd soft-delete** (lệnh cụ thể per bảng: Contracts + ContractApprovals + Changelogs + Line.ContractId=NULL + pe.ContractId=NULL), thứ tự ngược. 14. **[L2-M10] Câu III treo → acceptance "ai bấm" để [CHỜ-ANH]** — không chốt trong DoD tới khi anh trả; default dialog + người-có-quyền. 15. **[L2-M12] DoD cardinality đo được**: sau bridge UI-1-1 — đếm `SELECT COUNT(DISTINCT ContractId) FROM Lines WHERE PlanId=X AND ContractId IS NOT NULL` == số lần bấm; gộp (sau này) = N line 1 ContractId.