diff --git a/.claude/WAL.md b/.claude/WAL.md index 0afac3b..3cd22eb 100644 --- a/.claude/WAL.md +++ b/.claude/WAL.md @@ -20,10 +20,13 @@ chain: [ ] B3 /fable-real review chốt · B4 fan-out Opus MAX · B5 dry-run E2E [ ] closeout: seed diary vai (C2 A∖B=∅) · tally garble (+ngược-#53 ev#4) · nhãn D · K3-STATUS-row -next: OG-1 ✅ (schema-GỘP + UI-1-1, verbatim "thiết kế gộp nhưng giao diện thì cho 1-1") · OG-2 ✅ ("Đúng - đội hình cũ") · OG-7 ✅ ("PE cho nhiều… rào hiển thị 1-1 — User cần thì bung") — NGUYÊN TẮC OWNER MỚI: - "máy rộng, UI hẹp". OG-3/OG-6/OG-8(authz-per-nhóm) đã GIẢI THÍCH, chờ anh gật/soát → rồi B2-cụm-1. - Files: runs/2026-07-31-S164-4gd-khkk-fanout/{draft,spec-v2,b1b-synthesis,transcribe,sub×4} +next: 5/6 OG CHỐT (1 schema-GỘP+UI-1-1 · 2 đội-hình-cũ · 7 N-phiếu+UI-1 · 8 "cho hiển thị, phân quyền tính + sau" · 3 NĐUQ-tham-khảo + lên-CEO = TÁI DÙNG level-finalize [a Chương quyết, y PE]). Còn OG-6 anh soát + transcribe (chặn seed-land, KHÔNG chặn invest). wf: B2-cụm-1 wf_fe53e58b-361 ĐANG CHẠY (1 lane fable, + sub-invest-fable-b2-cum1.md, skeleton-first) → về thì: verify đĩa → merge note OG-3-finalize vào spec + chi-tiết → kết tinh → fable-clone review cụm-1. Nguyên tắc mới memory: "máy rộng, UI hẹp". + 🆕 QUYẾT ĐỊNH 9 (owner, SAU khi lane phóng — MERGE-PENDING): KHÓA BUDGET tại finalize (a Chương TP.CCM + quyết kết-thúc/CEO) = mirror khuôn PE Mig 67 snapshot-at-choke-point + né #81-EXT. Spec v2 §②.9 đã ghi. verify: grep -c 'END spec v2' .claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-4gd-khkk-tong-quat-31-07-2026.md diff --git a/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-4gd-khkk-tong-quat-31-07-2026.md b/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-4gd-khkk-tong-quat-31-07-2026.md index e57c794..542c69a 100644 --- a/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-4gd-khkk-tong-quat-31-07-2026.md +++ b/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/spec-4gd-khkk-tong-quat-31-07-2026.md @@ -16,6 +16,7 @@ Chuỗi 4 GĐ per-gói-thầu theo SOL-CCM-SP-002: GĐ1 Duyệt NCC (PE = CHA, 6. Menu: GIỮ `Khkk_G1` + 6 leaf cũ, đổi LABEL = nhóm 1 (labelBackfill khuôn S155). Nhóm 2-8 = **42 leaf MỚI + 7 group-key mới (49 row menu mới; 48 leaf TỔNG)** — sửa số l1-F8/l2-F5. 🔴 Phiếu cũ: **backfill `ApprovalGroup = 1`** (l3-F5 — mirror bài `EvaluationType` không rỗng; acceptance đếm `COUNT(phiếu) == Σ COUNT 8 folder`). 7. Admin ẩn = fe-admin **`isAdminHidden` MỞ RỘNG TẬP KEY TƯỜNG MINH** (giữ blacklist — KHÔNG đảo whitelist, tránh đổi default menu-mới; vá hội tụ l1-F2 ⨯ l3-F1/F2): ẩn thêm {`Dashboard?`→giữ, các root nghiệp vụ: `DuyetNcc-root keys`, `KeHoachKyKet`, HR/Office/Personal, `Contracts`(đã ẩn `Ct_*`), `HardCopies`, `Forms`, `Reports`, `Catalogs/Master`, **`Workflows` (:1795)**, **`PeWorkflows` (:1798)**} — CHỪA {`System` + 4 leaf quản trị + **`ApprovalWorkflowsV2` (:1801, con System)** + subtree}. Danh sách key CHÍNH XÁC = việc B2-cụm-2 liệt từ `DbInitializer` seed; acceptance = **liệt kê đúng N mục lá còn thấy** (l3-F2). 8. Nguồn danh mục: **file đĩa `QUY_TRINH/QT TRINH KY HOP DONG TP-NCC.docx` = ĐÚNG SOL-CCM-SP-002.v01 (mã ở word/header1.xml) NHƯNG bản 6-trang KHÔNG chứa bảng** (lead đo). Nguồn bảng = **7 ảnh anh gửi @S164 (trang 5-9, trọn 5.1 A/B/C + 5.2 CEO)** → transcribe → **[OG-6] anh soát bảng seed trước land** (hoặc anh gửi file 15-trang). "/" trong ô vai = OR-of-N. +9. 🆕 **KHÓA BUDGET TẠI FINALIZE (owner @S164, verbatim: "Cái tính năng chuyển CEO và duyệt kết thúc hợp đồng -> Là khóa luôn cái budget rồi, người quyết sẽ là a Chương, Trưởng phòng CCM"):** khi phiếu KHKK được **duyệt-kết-thúc tại CCM (a Chương finalize) HOẶC CEO duyệt final** ⇒ **freeze số** (ApprovedAmount/giá chốt/NS tham chiếu) — phiếu DaDuyet đọc SNAPSHOT, không đọc live. **Mirror nguyên khuôn PE Mig 67** (`AddPeApprovedBudgetSnapshot` S133): snapshot chốt tại finalize choke-point + display-gate `frozen` + 🔴 né **#81-EXT**: grep MỌI Phase-assignment-site (kể cả admin-override + seeder) kẻo bypass hook — bài đã trả giá 1 lần bên PE. Người quyết finalize-hay-CEO = **TP.CCM Phan Văn Chương** (cấp 2 CCM đội hình `QT-DN-V2-001`). ⚠️ MERGE-PENDING: B2-cụm-1 lane phóng TRƯỚC lời này — lead merge vào spec chi tiết khi lane về (schema cột snapshot → K2, hook finalize → K3). ## ③ Wave K1-K8 (v2 — PRE-gate + acceptance có răng) @@ -42,9 +43,9 @@ Chuỗi 4 GĐ per-gói-thầu theo SOL-CCM-SP-002: GĐ1 Duyệt NCC (PE = CHA, | OG-1 | Gộp HĐ | ✅ **CHỐT @S164** (verbatim: *"thiết kế gộp nhưng giao diện thì cho 1-1 (Khi user đổi ý thì mình làm luôn)"*) ⇒ **schema GỘP-capable (N line chung ContractId) + UI default 1-1** (bridge = 1 hàm nhận list-line, UI truyền 1 line; bung gộp = FE sau, 0 đổi máy) | K2, K7 | | OG-2 | Roster 8 workflow | ✅ **CHỐT @S164** (*"Đúng đội hình cũ"*) — map đội hình `QT-DN-V2-001`, **verify bản LIVE (không archived) trước seed** | K3 | | OG-7 | 1 PE → N phiếu | ✅ **CHỐT @S164** (*"PE cho nhiều, nhưng… rào hiển thị 1-1 lại — User cần thì bung ra"*) ⇒ **BE mở N-phiếu/PE (đổi rào 2 site :342/:1201 → (PeId, ApprovalGroup)) + UI default hướng-1**: PE có phiếu rồi → hiện phiếu + nút phụ "Tạo thêm cho nhóm khác" (thay 409 chặn hẳn) | K2 | -| OG-3 | NĐUQ tham khảo (máy chưa enforce — ảnh 0 số ngưỡng; enforce = wave sau khi anh cho bảng số) | ⏳ đã giải thích, chờ anh gật | — | +| OG-3 | NĐUQ | ✅ **CHỐT @S164** (*"Đồng ý. Vẫn như trước - các quyền kiểu chuyển CEO các thứ y chang vậy luôn, thì ko cần quan tâm mức duyệt, vì a Chương sẽ quyết định là cái đó cần CEO ko hay là anh ấy đc duyệt."*) ⇒ NĐUQ = ghi chú tham khảo; **cơ chế lên-CEO = TÁI DÙNG level-finalize sẵn có của V2** (người trạm CCM — Phan Văn Chương — tự chọn "kết thúc tại cấp" hay trình tiếp, y PE đang chạy: `EndedByLevelFinalize` runtime + checkbox opt-in S97) — K3 **0 code mới** cho nhánh này, CHỈ config workflow 8 nhóm có cấp CCM mang quyền finalize | — | | OG-6 | Soát bảng transcribe 86 dòng (gõ tay từ ảnh; 4 ô ⚠️ cuối file) HOẶC anh gửi file 15-trang | ⏳ đã giải thích, chờ anh soát | K1 (seed) | -| OG-8 | Authz per-nhóm: đợt này XEM/TẠO chung 1 bộ khóa module (duyệt vẫn đúng người theo luồng); khóa-xem-theo-nhóm = wave riêng | ⏳ đã giải thích, chờ anh | — | +| OG-8 | Authz per-nhóm | ✅ **CHỐT @S164** (*"Đúng chính xác. Cho hiển thị, phân quyền tính sau."*) — đợt này 8 nhóm = hiển thị + luồng duyệt; XEM/TẠO chung bộ khóa module; authz-per-nhóm = wave sau khi anh gọi | — | | OG-5 | Extract mơ hồ → hỏi khi gặp | mở | K1 | END spec v2 — 8 wave · 8 quyết định · 6 OG · 14 vá B1b áp đủ. diff --git a/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/sub-invest-fable-b2-cum1.md b/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/sub-invest-fable-b2-cum1.md new file mode 100644 index 0000000..a44e5b3 --- /dev/null +++ b/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/sub-invest-fable-b2-cum1.md @@ -0,0 +1,18 @@ +# sub-invest-fable-b2-cum1 — B2 CỤM-1: SPEC CHI TIẾT K1+K2+K3 (S164, /fable-real) + +> Engine /fable-real single deep-pass. Nguồn pin: spec v2 §②§③§④ + danh-muc-sp002-transcribe (86 row) + b1a §B ground-truth + b1b 14 vá. + +## K1 Master-data danh mục +(ĐANG LÀM) + +## K2 Phiếu hạng-mục + nhóm +(ĐANG LÀM) + +## K3 8 workflow + designer +(ĐANG LÀM) + +## Thứ tự commit + phụ thuộc chéo +(ĐANG LÀM) + +## Checklist tổng cụm-1 +(ĐANG LÀM)