Files
solution-erp/.claude/workflows/runs/2026-07-31-S164-4gd-khkk-fanout/draft-yeu-cau-owner.md
2026-07-31 11:12:05 +07:00

11 KiB
Raw Blame History

DRAFT YÊU CẦU OWNER — Chuỗi 4 GĐ theo SOL-CCM-SP-002 (Bước 0, em-main tổng hợp @S164 2026-07-31)

Nguồn: anh dạy 6 nhịp hội thoại + 3 hình prod + 2 bổ sung cuối. Verbatim lời chốt giữ nguyên trong ngoặc kép. File này = nguồn PIN cho mọi bước sau (fable invest/review + fan-out Opus) — đọc từ đây, không từ trí nhớ.

0. Lời chốt verbatim của anh (thứ tự thời gian)

  1. "Khi Duyệt NCC -> ra 1 hạng mục gói thầu bự -> Bổ xuống hạng mục duyệt hợp đồng nhỏ hơn"
  2. "Chú ý hạng mục hợp đồng -> Nó khác với loại hợp đồng tức 5 form trong folder FORM nhé, hạng mục có thể là trọn gói, tổ đội, hợp đồng nguyên tắc"
  3. "Thực tế chỗ ký kết hợp đồng nó là duyệt hạng mục... duyệt NCC -> nó là cha của các hạng mục còn lại -> Các hạng mục còn lại duyệt xong thì -> Đưa vào loại hợp đồng gì"
  4. "ý tao đang nói là GĐ 2 thôi, còn GĐ 3 là bàn về điều khoản nhiều hơn, GĐ 3 ko bàn công việc hạng mục nữa"
  5. "chỗ ký nháy đó là ký trên bảng cứng đó, thật ra nguyên nhóm này là nguyên nhóm các loại HĐ của SOLUTION" + "nó tương tự quy trình duyệt NCC"
  6. Hình 1 (eOffice sidebar): fan-out KẾ HOẠCH KÝ KẾT HĐ "ra các loại mục A1, A2 (kèm chú thích ngắn)"
  7. Hình 2 (Admin): "Ẩn hết đi bên Admin nhé, chỉ còn cái Quy trình duyệt (Mới) thôi" + "Thêm các chỗ duyệt đó trong mục duyệt NCC mới giống Duyệt NCC"; trả lời 2 câu: (1) "Vậy chừa lại User cũng đc" (2) "Theo nhóm duyệt đi, cùng 1 nhóm duyệt"
  8. Hình 3 (cây toàn trình): 3 GĐ sau đang "Chưa có dữ liệu" → "Thêm các sub folder con ở đây" + "chú ý giao diện slider bar, nên giống nhau nhé"
  9. 🔴 "Chú ý giống nhau nhé, chỉ khác về form, đừng chế thêm gì, lấy 1 khung sliderbar của duyệt NCC thôi"
  10. "yêu cầu là dry-run luôn" + "Tạo luôn các cái master data danh mục hợp đồng luôn nhé"

1. Model nghiệp vụ 4 GĐ (CHỐT)

Tên Trả lời câu hỏi Nội dung
GĐ1 Duyệt NCC (PE) mua của ai Phiếu PE = CHA, chốt gói thầu bự + NCC thắng. ĐÃ CHẠY PROD (41 phiếu, 38 gói, 11 dự án)
GĐ2 Kế hoạch ký kết HĐ (KHKK) mua gì, ai ký, bao nhiêu DUYỆT HẠNG MỤC: bổ PE cha → N hạng-mục con; mỗi hạng mục gắn 1 dòng danh mục SP-002 ⇒ suy người ký + nhóm duyệt; duyệt số trạm-by-trạm
GĐ3 Duyệt Hợp đồng ràng buộc thế nào ĐIỀU KHOẢN — "không bàn công việc hạng mục nữa". Hạng mục đã duyệt → "đưa vào loại HĐ gì" (chọn khuôn) → soạn/đàm phán terms
GĐ4 Hợp đồng cứng giấy trắng mực đen 1-MỐC (đã chốt S161): form điền đủ → duyệt nếu có → upload bản cứng. Ký nháy = MỰC trên bản cứng — app in khối ký đúng pattern, không chạy ô nháy như workflow ảo

3 trục ĐỘC LẬP (cấm trộn): hạng-mục công-việc (instance GĐ2) ⟂ loại-HĐ SOLUTION (dòng danh mục SP-002 — quyết ai ký + nhóm duyệt) ⟂ khuôn-form (5 file FORM\SOL-CCM-FO-002: .02 trọn-gói NC+VT · .03 trọn-gói NC+TB · .05 giao-khoán · .06 mua-bán · .07 đặt-hàng; hệ thống có 7 ContractType gồm 06/07 Nguyên tắc NCC/DV). ⚠️ Chữ "loại HĐ" trong hội thoại mang 2 nghĩa — đặt tên field tách bạch.

2. 8 NHÓM DUYỆT (nén từ SP-002 — "cùng 1 nhóm duyệt" lời anh)

# Nhóm (menu label + chú thích ngắn) Gồm danh mục Chuỗi duyệt (trạm-by-trạm) Ký chính
1 A1 · Thiết bị, máy móc, vật tư phụ A1 ×5 TBP.CCM → NV.CCM → TBP.EQU → NV.EQU TP.CCM
2 A2-A3 · Hạ tầng & DV hỗ trợ thi công A2 ×1 + A3 ×9 TBP.CCM → PD/PM → SM → QS TP.CCM
3 A4 · Hoạt động văn phòng A4 ×5 TBP.CCM → TPB/TBP → TBP/NV.PB TP.CCM
4 B1 · Vật tư B1 ×23 TBP.PRO → NV.PRO TP.PRO
5 B2 · Thầu phụ xây dựng B2 ×14 dòng (đánh số tới 13, trùng số "7" ×2) TP.CCM → TBP.PRO → PD/PM/SM → QS TP.PRO
6 B3 · Thầu phụ MEP B3 ×15 TP.CCM → TBP.PRO → PD/PM/SM → MEP SM TP.PRO
7 C · BCH công trường C1 ×6 + C2 ×3 + C3 ×4 TP.CCM → SM → QS PD/PM
8 CEO · Chưa ủy quyền fallback mọi HĐ chưa UQ TP.CCM → TP.PRO CEO

Tổng danh mục ~85 dòng (đếm từ ảnh trang 5-9; số chính xác PHẢI extract từ file gốc D:\Dropbox\CONG_VIEC\SOLUTION\QUY_TRINH\SOL-CCM-SP-002... bằng office-document khi build). Vai trò: site = PD·PM·SM·MEP-SM·QS (BCH) · văn-phòng generic = TPB/TBP + NV.PB · thiết-bị = TBP.EQU/NV.EQU · CCM = TP>TBP>NV · PRO = TP>TBP>NV. NĐUQ = ngưỡng giá trị ủy quyền (trang chưa gửi — invest chốt cách lưu: threshold trên nhóm? trên workflow như CeoApprovalThreshold Mig 53?).

3. SCOPE — 5 mảnh

(i) Master data danh mục hợp đồng (yêu cầu 10): bảng catalog "Danh mục HĐ SOLUTION" (~85 dòng: mã nhóm A1…C3 + tên VN/EN + nhóm-duyệt 1-8 + người-ký + chuỗi nháy) + seed code-first idempotent (khuôn SeedRealMasterDataAsync Mig 48; luật #84 code-first-seeder + #75 gate wipe + #76 config-example). Admin CRUD được (quy trình có version v01→v02).

(ii) eOffice sidebar: root KẾ HOẠCH KÝ KẾT HĐ fan-out 8 mục nhóm-duyệt (bảng trên, kèm chú thích ngắn) — mỗi mục = đúng bộ 6 leaf khuôn Duyệt NCC (Luồng duyệt / Danh sách / Thao tác / Đang duyệt / Đã duyệt / Đã xóa).

(iii) Cây toàn trình mirror sidebar: dưới từng gói thầu — folder "Kế hoạch Hợp đồng" mở 8 sub-folder đúng bộ nhóm; folder "Duyệt Hợp đồng" + "Hợp đồng cứng" mở sub-folder theo 7 loại HĐ khớp sidebar sẵn có. Thay dòng "Chưa có dữ liệu ở giai đoạn này". Sidebar ↔ cây = MỘT bộ nhóm, hai mặt hiển thị.

(iv) Admin: ẨN mục nghiệp vụ cũ (Tổng quan, DUYỆT NCC, KẾ HOẠCH KÝ KẾT HĐ, NHÂN SỰ, VĂN PHÒNG SỐ, CÁ NHÂN, Duyệt hợp đồng, HỢP ĐỒNG CỨNG, Biểu mẫu, Báo cáo, DANH MỤC) + 2 mục quy trình cũ (Quy trình Duyệt NCC · Quy trình HĐ) — CHỪA khối HỆ THỐNG (Người dùng · Vai trò · Phân quyền · Menu eOffice) + "Quy trình duyệt (Mới)" += 8 designer nhóm-duyệt (khuôn y Duyệt NCC (Mới): Bước—Phòng—Cấp, versioned + archived history). Ẩn ≠ xóa (revert được). Map vai → user thật từ đội hình sống QT-DN-V2-001: B1-PRO C1 = Bích Phượng·Văn Duy·Kim Long·Binh Le Thanh, C2 = Thủy Trà · B2-CCM C1 = Nữ Nguyên·Xuân Lưu·Đăng Trưởng/Văn Binh, C2 = Phan Văn Chương · B3-BGĐ = Nguyễn Văn Trường (⚠️ verify bản LIVE không phải archived trước khi wire).

(v) DRY-RUN E2E (yêu cầu 10): sau build — chạy thử toàn trình trên prod/UAT: PE đã duyệt (vd PE/2026/A/049 gói 14 Mat PVC, vải địa) → tạo phiếu KHKK hạng mục theo nhóm → duyệt qua trạm → đưa vào loại HĐ → (GĐ3/GĐ4 tới đâu nghiệm thu tới đó). Bằng chứng: screenshot + phiếu thật + cây hiện đúng sub-folder.

4. 🔴 RÀNG BUỘC KHUÔN (lời 9 — luật sắt cho MỌI wave)

"GIỐNG NHAU — CHỈ KHÁC FORM — ĐỪNG CHẾ THÊM." MỘT khung = khung Duyệt NCC: (a) sidebar mục con + 6 leaf; (b) cây gói → folder GĐ → sub-folder nhóm → card phiếu (badge trạng thái + mã + ngày + người); (c) layout 3 cột (cây trái · danh sách giữa · panel chi tiết phải). Thứ KHÁC duy nhất = FORM phiếu (ruột panel phải per GĐ). CẤM chế layout/khái niệm UI mới. = luật cookie-cutter mirror (PE→Contract→KHKK ở BE) chốt cho tầng UI: nhân khung, đổi form.

5. Nền kỹ thuật hiện có (ground-truth để invest soi, KHÔNG đập dựng)

  • KHKK Mig 69 (S161): 7 bảng ContractSigningPlans + ~Approvals/~Attachments/~Changelogs/~DossierItems/~LevelOpinions/~Lines🔍 soi ContractSigningPlanLines = hạng mục tới đâu trước khi thêm bảng. CRUD + Dossier 15 policy (W2) · duyệt V2 3-trạm test-before (W3) · đường-ống HĐ V2 (W6) · bản-cứng 1-mốc (W7).
  • Workflow V2: ApprovalWorkflows/Steps/Levels + ApplicableType + IsUserSelectable + Designer — PE/Contract/KHKK cùng nền. Header GĐ2 prod: "Chốt giá per-NCC trúng thầu + căn cứ hồ sơ trước khi ký hợp đồng".
  • Cây 4-folder S162: PipelineStageFolders + PipelineTreePanel + usePipelineStages ×2 app (SHA-mirror, bfc7b79 + e5123ff).
  • Menu-key: KeHoachKyKet root sinh policy (KHÔNG menu-row) + 7 MenuItem Khkk_G1/WfView/List/Create/Pending/Approved/Deleted seed DbInitializer.cs:1780-1787; KHKK KHÔNG inherit — grant từng leaf (DbInitializer.cs:2107, seeder chạy SAU revoke để THẮNG #84).
  • 🔴 Gotchas phải né: #85 gate FE dùng ĐÚNG key policy endpoint (không OR key con) · #82 menu-hiện ≠ API-mở (grep controller authz) · #84 sửa quyền = code-first seeder (KHÔNG SQL tay) · #75/#76 seed gate + config · #63/#64 EF scaffold RenameColumn + Design-DB · #57-EXT filtered-unique.
  • Test: 590 PASS (45D+545I) baseline; bug-fix = test-before; mig mới = 3-file rule.

6. Treo — INVEST PHẢI CHỐT trong spec (đừng để lửng)

  1. 🔴 Cardinality "đưa vào loại HĐ": N hạng-mục-đã-duyệt → 1 HĐ (gộp) hay 1-1? (anh chưa trả lời 2 lần hỏi — bảng 3.5 nhiều dòng gợi ý gộp; invest đề phương án + để slot owner-gate nếu cần).
  2. Phiếu KHKK per NHÓM hay per HẠNG-MỤC? (menu theo nhóm; 1 phiếu chứa N hạng mục cùng nhóm? — soi Lines hiện có).
  3. 8 workflow nhóm map vào ApplicableType thế nào (8 type mới? 1 type + 8 workflow pinned?).
  4. Vai trò catalog (TBP.CCM, QS…) lưu ở đâu — map user thật (đội hình QT-DN-V2-001) vs role-placeholder.
  5. NĐUQ ngưỡng tiền: field trên nhóm/workflow (tiền lệ CeoApprovalThreshold Mig 53).
  6. Mục "1. Kế hoạch ký kết HĐ (NCC-TP)" cũ (đã có phiếu?) → migrate/giữ/ẩn thế nào khi fan-out 8 nhóm.
  7. Admin ẩn = IsVisible menu hay bỏ render sidebar (2 app khác nhau — admin sidebar là code tĩnh hay menu-tree?).
  8. Danh mục B2 trùng số "7" ×2 + A4 ô "TPB/TBP" dấu "/" nghĩa OR? — extract file gốc chốt.

7. Choreography (lệnh anh — "Bước 0→3 + fan-out")

  • B0 (file này) em-main draft
  • B1 /fable-real investspec-tổng-quát các wave/fable-clone review spec đó
  • B2 per cụm 3 wave: /fable-real invest sâu → spec-chi-tiết + checklist/fable-clone review
  • B3 /fable-real review chốt spec cuối 1 lần
  • B4 fan-out Opus 5 MAX làm, bám sát spec-chi-tiết + checklist (HMW marker ON; worker-tier-pin S124)
  • Xen kẽ: em-main verify + WAL từng nấc; run-trace folder này (H10); dry-run E2E là wave cuối bắt buộc (scope v).