13 KiB
run — S157 · "KẾ HOẠCH KÝ KẾT HỢP ĐỒNG" — khúc CÒN THIẾU giữa Duyệt NCC và HĐ NTP/NCC
run-id:
2026-07-28-S157-ke-hoach-ky-ket-hd· mở 2026-07-28 (phiên-LOGIC L7, window 4) Lệnh anh (verbatim): "Nhớ cái quy trình còn thiếu hôm qua ko? Cái spec cũ còn hôm qua./fable-realInvest điều tra quy trình chỗ còn thiếu. Quy trình còn thiếu giữa Duyệt NCC - Kế hoạch ký kết Hợp đồng (Còn thiếu) - Hợp đồng NTP/NCC. Sau đó cho/fable-clonereview lại thêm 1 lần cái spec đó → Ra cái spec mới đầy đủ chi tiết nhất, bao gồm cách làm. Chia wave rõ ràng. Cho tao cái plan đó và Wave chạy thế nào luôn nhé." Anh chỉ nguồn:D:\Dropbox\CONG_VIEC\SOLUTION\có 2 folder FORM (8 file) + QUY_TRINH (1 file). Anh chốt cùng ngày: "chỗ hợp đồng cứ từ từ nhé" ⇒ lỗ hổng an ninh HĐ KHÔNG nằm trong run này.
0. Nguồn — 2 tài liệu gốc, LẦN ĐẦU đưa vào vòng điều tra
Wave S156 hôm qua chỉ có PDF sơ đồ. Run này bổ sung 2 tài liệu ISO gốc của công ty — đây là delta nguồn quan trọng nhất so với hôm qua.
| Nguồn | Trích ra | Vai trò |
|---|---|---|
QUY_TRINH\QT TRINH KY HOP DONG TP-NCC.docx |
src-QT-TRINH-KY-HD.txt (14.425 B · 38 para · 2 bảng) |
Quy trình ISO 9 bước trình ký HĐ TP/NCC/Tổ đội — chuẩn đang áp dụng |
FORM\SOL-CCM-FO-002.01.v01 Bang kiem tra hop dong.docx |
src-FO-002.01-bang-kiem-tra-HD.txt (21.287 B · bảng 40r×13c) |
Tờ "Chấp thuận Hợp đồng" — vật mang chữ ký qua từng trạm (bản giấy của workflow) |
7 form còn lại trong FORM\ |
(chưa trích — 6 mẫu HĐ + RG-001 mã HĐ) | Đã có bản parse ở docs/forms-spec.md (Phase 0) |
| PDF sơ đồ 21 bước | runs/2026-07-27-S156-bch-post-ceo-flow/run.md |
Nguồn hôm qua, GIỮ NGUYÊN |
1. 🔴 GROUNDING LEAD ĐO TRƯỚC KHI PHÓNG — phát hiện lật khung vấn đề
1.1 Quy trình ISO 9 bước (trích src-QT-TRINH-KY-HD.txt bảng 2)
| # | Bước ISO | Trách nhiệm | SLA |
|---|---|---|---|
| 1 | Lựa chọn NTP/NCC | PB/BCH CT | — (trỏ SOL-PRO-SP-001 Quy trình Cung ứng) |
| 2 | Soạn thảo hợp đồng | QS/NV.PB · TBP/TPB | 07 ngày |
| 3 | Góp ý nội dung | PD/PM/PRO/CCM/FIN/ACT | 07 ngày |
| 4 | Đàm phán, thương thảo | QS/NV.PB · TBP/TPB · PD/PM | 07 ngày |
| 5 | In hợp đồng (NTP in 2 mặt, ký, đóng dấu → PD/PM/TPB ký nháy + ký cover FO-002.01) | QS/NV.PB | 07 ngày |
| 6 | Kiểm tra (CCM ký nháy từng HĐ + ký cover) | CCM | 03 ngày |
| 7 | Duyệt (xem xét + ký duyệt HĐ) | BOD / NĐUQ | 01 ngày |
| 8 | Đóng dấu hợp đồng | HRA / ISO | — |
| 9 | Phát hành + Lưu trữ (scan gửi CCM · gửi bản gốc NTP · lưu Server Filing System) | PB/BCH CT · CCM | — |
1.2 🔴 PHÁT HIỆN A — 9 bước ISO ↔ 9 giá trị ContractPhase 1-9 KHỚP 1:1 ĐÚNG THỨ TỰ
Lead tự đọc src/Backend/SolutionErp.Domain/Contracts/ContractPhase.cs (28 dòng, đọc TRỌN):
| # ISO | Bước ISO | ContractPhase |
Trạng thái enum |
|---|---|---|---|
| 1 | Lựa chọn NTP/NCC | DangChon = 1 |
[LEGACY] |
| 2 | Soạn thảo HĐ | DangSoanThao = 2 |
🟢 SỐNG (Nháp) |
| 3 | Góp ý nội dung | DangGopY = 3 |
[LEGACY] |
| 4 | Đàm phán | DangDamPhan = 4 |
[LEGACY] |
| 5 | In hợp đồng / ký nháy | DangInKy = 5 |
[LEGACY] |
| 6 | Kiểm tra CCM | DangKiemTraCCM = 6 |
[LEGACY] |
| 7 | Duyệt BOD/NĐUQ | DangTrinhKy = 7 |
[LEGACY] |
| 8 | Đóng dấu | DangDongDau = 8 |
[LEGACY] |
| 9 | Phát hành + lưu trữ | DaPhatHanh = 9 |
🟢 SỐNG (terminal) |
⇒ 7 phase [LEGACY] KHÔNG phải rác kiến trúc — chúng là quy trình ISO được mã-hoá CỨNG.
Post-Mig 21 / Session 17 thay bằng ChoDuyet = 10 + con-trỏ CurrentWorkflowStepIndex chạy trên
workflow V2 admin-config — tức chuyển từ mã-hoá cứng 9 bước sang cấu-hình-được N bước.
🔑 Hệ quả lên verdict hôm qua: verdict LAI (b.13→21 tái dùng V2) KHÔNG đổi, nhưng lý do
mạnh hơn hẳn: V2 sinh ra CHÍNH ĐỂ biểu diễn quy trình ISO này dưới dạng cấu hình. Hôm qua invest chỉ
lập luận được "phase bị gỡ = trạm của b.13→21"; nay có tài liệu ISO gốc chứng minh vì sao 9 trạm
đó tồn tại. Đây là chứng cứ mới, không phải diễn giải lại.
1.3 🔴 PHÁT HIỆN B — khoảng trống nằm ĐÚNG giữa ISO-1 và ISO-2, và ISO doc KHÔNG có nó
Quy trình ISO đi thẳng bước 1 (Lựa chọn NTP/NCC) → bước 2 (Soạn thảo HĐ), KHÔNG có bước trung gian.
Sơ đồ PDF (bản 14/2026, mới hơn) chèn b.7→12 đúng vào chỗ đó:
ISO-1 Lựa chọn NTP/NCC ≡ PE "Duyệt NCC" (PE.DaDuyet=7, PDF b.1→6) 🟢 ĐÃ CÓ
└───────────── ⬛ KHOẢNG TRỐNG = "KẾ HOẠCH KÝ KẾT HỢP ĐỒNG" ⬛ ─────────────┐
PDF b.7→12: mail giao BCH · duyệt mẫu+shopdrawing với TVGS · │ 🔴 THIẾU
tổng hợp hồ sơ + so sánh giá → đề xuất GIÁ TRỊ ký HĐ · │ CẢ Ở
PMH kiểm tra → CCM kiểm tra → CEO ký / CCM đóng dấu approval │ DOC LẪN
┌─────────────────────────────────────────────────────────────────────────────┘ CODE
ISO-2 Soạn thảo HĐ ≡ Contract `DangSoanThao=2` (PDF b.13) 🟢 ĐÃ CÓ
⇒ "Còn thiếu" theo nghĩa MẠNH: thiếu ở CẢ HAI tầng — không có trong quy trình ISO đang ban hành, và không có trong code. Không phải "code chưa làm theo doc"; là doc cũng chưa có. 🔴 ⇒ spec ra từ run này vừa là spec phần mềm, vừa là đề xuất bổ sung quy trình ISO cho anh duyệt.
1.4 Đối chiếu SLA — 2 nguồn, 2 độ mịn (cần hoà giải, KHÔNG tự chọn)
| Nguồn | SLA ghi | Ghi chú |
|---|---|---|
| ISO doc | 07 · 07 · 07 · 07 · 03 · 01 ngày (bước 2→7) | tổng ≈ 32 ngày cho khúc soạn→duyệt |
| PDF sơ đồ | 10-14 ngày (b.1→4) · 3 ngày (BCH gửi full info) · 7-10 ngày (b.13→18) |
mịn hơn ở khúc BCH |
| Code hiện tại | AddDays(7) hardcode |
lỗ L3 hôm qua — thụt lùi so V1, lỗ toàn-V2 (cả PE) |
1.5 Tờ FO-002.01 = bản giấy của workflow duyệt
Bảng 40r×13c, các khối ký theo phòng: PHÒNG BAN/DỰ ÁN (ĐỀ XUẤT) → PHÒNG CUNG ỨNG (điều khoản HĐ ·
điều khoản thanh toán · rủi ro pháp lý) → … mỗi khối có Họ tên + Ngày + cột Ý KIẾN.
⇒ Ánh xạ thẳng sang ApprovalWorkflowStep (Phòng) × ApprovalWorkflowLevel (Cấp) + LevelOpinions
đã có sẵn ở V2 — cần invest xác nhận độ khớp, đừng để lead tự kết luận.
1.6 Nợ mang sang từ S156 — invest MỚI phải hấp thụ, không lặp lại
6 việc sửa bản invest cũ (runs/2026-07-27-S156-bch-post-ceo-flow/review-synthesis.md §G):
- Claim SAI: "hardcoded policy fallback" → thật là
ConflictException:115-116⇒ HĐ sinh từ phiếu KẸT CỨNGChoDuyet, hỏng CỨNG. Gốc lỗi: invest tin skill-doc hơn ĐĨA. - Siết biên: vùng phase-đã-gỡ là b.14→19, KHÔNG phải b.13→21.
- Thiếu Q vai người TRÌNH —
ContractWorkflowService.cs:70-79đòiDrafter|DeptManager, PMH mangProcurement⇒ 403 ở b.13/b.17. - Cảnh báo lỗ hổng reject = việc RIÊNG, anh đã chốt "cứ từ từ" ⇒ NGOÀI scope run này.
- Q5 thiếu phương án (d)
skipToFinal+AllowApproverSkipToFinal :322— ĐÃ WIRE, 0 code BE. - Q2 phải viết lại theo 2 TRỤC + 3 số đo cùng đơn vị (số bảng mới · LOC BE · LOC FE) lấy từ twin thật trong repo, không ước cảm tính.
1.7 🔴 OWNER CHỐT TRONG CỬA (2026-07-28, anh trả lời trực tiếp báo-cáo grounding)
Lead trình 2 điểm ở §1.5 và §1.4; anh chốt cả hai. Đây là quyết định owner, không phải suy luận lead.
(O-1) Cấu trúc trình ký — GIỐNG, khác duy nhất ở NỘI DUNG
anh (verbatim): "Đúng chính xác, cấu trúc trình ký giống, chỉ khác nội dụng thôi."
⇒ Trả lời cho §1.5 (form FO-002.01 ↔ ApprovalWorkflowStep × Level × LevelOpinions).
🔑 Hệ quả kiến-trúc — MẠNH, chốt trước cả khi invest trả bài:
- Phiếu "Kế hoạch ký kết Hợp đồng" TÁI DÙNG khung duyệt V2 đang chạy (Quy trình > Bước=Phòng > Cấp=NV
cụ thể, OR-of-N cùng cấp,
LevelOpinionsUPSERT khi duyệt) — giống hệt PE và Contract V2 đang làm. - Cái DỰNG MỚI = NỘI DUNG phiếu (các trường của "kế hoạch ký kết": căn cứ b.8-9 + so sánh giá + giá trị đề xuất), KHÔNG phải cơ-chế duyệt.
- 🔻 Q2 hôm qua (kiến trúc khúc 8-12, reviewer chấm
THIEU-PHUONG-AN+ thiên-vị) gần như TỰ ĐÓNG: tranh luận 3 phương án hôm qua xoay quanh "có dựng cơ-chế duyệt riêng không". Anh vừa trả lời: không dựng cơ-chế mới, dùng lại khung. ⇒ option-space thu về chỉ còn trục NỘI DUNG (phiếu riêng ⟂ mở rộng PE ⟂ entity con của Contract). Invest vẫn phải trình 3 số đo cho trục còn lại, nhưng KHÔNG cần bàn lại trục cơ-chế. - Đây cũng là đối chứng ngoài-code cho verdict
LAI: khung V2 gánh được vì bản GIẤY vốn cùng hình dạng.
(O-2) SLA — THAM KHẢO thôi, không phải ràng buộc
anh (verbatim): "Cái này để tham khảo thôi, ko vấn đề j, đa số là trễ."
⇒ Trả lời cho §1.4 (ISO 07/07/07/07/03/01 vs PDF 3 + 7-10 vs code hardcode AddDays(7)).
🔑 Hệ quả:
- KHÔNG dựng SLA-engine, KHÔNG auto-approve-on-timeout, KHÔNG cảnh báo chặn. SLA = hiển thị tham khảo.
- Không cần hoà giải 2 nguồn số ⇒ gỡ một câu hỏi khỏi bộ câu hỏi trình anh.
- 🔸 Lỗ L3 (
AddDays(7)hardcode, hôm qua xếp "thụt lùi so V1, lỗ toàn-V2") TỤT ƯU TIÊN — vẫn là số hiển thị sai, nhưng không gây hại vận-hành vì không ai enforce theo nó. Ghi nhận, đừng nhét vào wave thi công của run này. - 🔴 Đừng đọc quá lời anh: anh nói SLA không quan trọng, KHÔNG nói bỏ hiển thị deadline. Giữ hiển thị.
2. taskList snapshot
Wave 1 — /fable-real invest (SINGLE deep-pass, engine-đắt Fable, KHÔNG fan-out)
[1] investigator-codebase (Fable, effort max)
→ §A quy trình chi tiết khúc CÒN THIẾU (đối chiếu 3 nguồn: ISO doc · PDF · FO-002.01)
→ §B cách wire vào codebase (entity · migration · CQRS · controller · FE 2-app · menu/permission)
→ §C chia WAVE thi công + checklist ĐO ĐƯỢC từng wave
→ §D 6 việc sửa của review cũ đã hấp thụ thế nào (từng cái, đối chiếu ĐĨA không tin doc)
propose-only; spec-file do LEAD ghi sau khi verify (H21 ① honest-note c)
Wave 2 — /fable-clone reviewer ensemble (đóng gói C2: ≤3 file/lane · ép khung rỗng lượt 1-2 · trần 25)
(4 lăng kính — label neo tại đây vì panel ephemeral; nội dung chốt sau khi đọc output wave 1)
Wave 3 — lead synthesize → spec-ke-hoach-ky-ket-hd-28-07-2026.md + PLAN WAVE thi công trình anh
3. Stages
- S0 — lead trích 2 tài liệu gốc (
src-QT-TRINH-KY-HD.txt14.425 B ·src-FO-002.01-*.txt21.287 B) - S1 — lead grounding: đọc TRỌN
ContractPhase.cs→ phát hiện A (9 ISO ↔ 9 enum khớp 1:1) + phát hiện B (khoảng trống nằm giữa ISO-1 và ISO-2, thiếu ở CẢ doc lẫn code) - S2 — scaffold run-folder +
run.md(file này) - S3 —
/fable-real investigator-codebasedeep-pass - S4 — lead verify output S3 trên ĐĨA (byte + đối chiếu claim load-bearing)
- S5 —
/fable-clone reviewerensemble review - S6 — lead refute + synthesize → spec cuối + plan wave → trình anh
🔴 Luật của run này (vết S156): CẤM điền sẵn kết-quả cho stage chưa chạy. Byte-count · verdict · TOTAL chỉ được ghi SAU khi đo thật. Mọi stage chưa chạy giữ
[ ].