182 lines
13 KiB
Markdown
182 lines
13 KiB
Markdown
# 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-real` Invest đ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-clone` review 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):
|
||
1. Claim SAI: *"hardcoded policy fallback"* → thật là **`ConflictException` `:115-116`** ⇒ HĐ sinh từ phiếu
|
||
**KẸT CỨNG `ChoDuyet`**, hỏng CỨNG. **Gốc lỗi: invest tin skill-doc hơn ĐĨA.**
|
||
2. Siết biên: vùng phase-đã-gỡ là **b.14→19**, KHÔNG phải b.13→21.
|
||
3. Thiếu Q vai người TRÌNH — `ContractWorkflowService.cs:70-79` đòi `Drafter|DeptManager`, PMH mang
|
||
`Procurement` ⇒ **403** ở b.13/b.17.
|
||
4. Cảnh báo lỗ hổng reject = **việc RIÊNG**, anh đã chốt *"cứ từ từ"* ⇒ **NGOÀI scope run này**.
|
||
5. Q5 thiếu phương án **(d) `skipToFinal` + `AllowApproverSkipToFinal :322`** — ĐÃ WIRE, 0 code BE.
|
||
6. **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, `LevelOpinions` UPSERT 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
|
||
|
||
- [x] S0 — lead trích 2 tài liệu gốc (`src-QT-TRINH-KY-HD.txt` 14.425 B · `src-FO-002.01-*.txt` 21.287 B)
|
||
- [x] 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)
|
||
- [x] S2 — scaffold run-folder + `run.md` (file này)
|
||
- [ ] S3 — `/fable-real investigator-codebase` deep-pass
|
||
- [ ] S4 — lead verify output S3 trên ĐĨA (byte + đối chiếu claim load-bearing)
|
||
- [ ] S5 — `/fable-clone reviewer` ensemble 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ữ `[ ]`.
|