[CLAUDE] Docs: CLAUDE.md — Node/CI pin khai đúng cơ-chế (ghost-wire .nvmrc, gotcha #92) [skip ci]

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-08-13 02:06:35 +07:00
parent 23a7a66870
commit 3529772605

View File

@ -55,7 +55,7 @@ Kiến trúc: **.NET 10 Clean Architecture + 2 React FE (admin + user) + SQL Ser
- shadcn/ui copy-paste, **duplicate giữa 2 app là CÓ CHỦ ĐÍCH** (mỗi app UX riêng)
- Auth context: `solution-erp-admin-token` / `solution-erp-user-token``localStorage`
- TanStack Query cho data fetching
- **Node pin `>=20`** trong `engines`; CI pin `20.x` qua `.nvmrc` (bài học NamGroup KHÔNG dùng Node latest trên CI)
- **Node pin `>=20`** trong `engines`; 🔴 **CI KHÔNG pin Node**`.nvmrc`=`20` CÓ ở `fe-admin/` + `fe-user/` nhưng `.gitea/workflows/deploy.yml` **0 hit** `setup-node`/`node-version` (gọi thẳng `C:\Program Files\nodejs\`) ⇒ **không tầng nào đọc `.nvmrc`** = ghost-wire class-2; CI dùng bản Node cài trên runner. Cây phụ-thuộc nay đã khoá bằng `npm ci` + lockfile-committed (gotcha #92), node/npm thì **chưa** (bài học NamGroup vẫn đứng: KHÔNG dùng Node latest trên CI)
- UI **100% tiếng Việt**
### Database conventions
@ -72,7 +72,7 @@ Kiến trúc: **.NET 10 Clean Architecture + 2 React FE (admin + user) + SQL Ser
| Module | Namespace | Migration | Trạng thái |
|---|---|---|---|
| Contract (HĐ) — **+ Duyệt HĐ GĐ3 (YC-023/024/025, S187-S188)** | `Domain/Contracts/` | 1-11 · **0-mig @S188** | Feature-complete (7 ContractType × 9 phase) — **+GĐ3 "Duyệt Hợp đồng" kế thừa KHKK**: 7 quy trình duyệt V2 **per-LOẠI-HĐ** `HD-{TP,GK,NCC,DV,MB,NT-NCC,NT-DV}` seed sao khuôn KHKK (nhà mã = `Domain/Contracts/ContractApprovalWorkflowFamily.cs`) + 7 key Designer `AwV2_Hd*` by-construction · guard 4-cửa nhà chung `Application/Contracts/ContractWorkflowGuards.cs` (**khoá cứng theo loại** — pin sai họ ⇒ 409) · Đ2 guard đúng-trạm V2 (V1 legacy giữ nguyên — lỗ #82/S156 còn treo CHỦ-ĐÍCH cho V1) · DTO nguồn-gốc KHKK (reverse-join `ContractSigningPlanLines`) + cây workflow thô khuôn KHKK · FE card Nguồn-gốc + panel duyệt **2 nút** mirror `KhkkWorkflowPanel` + Designer type-3 family-slice. 🔴 W8 authz-diện-rộng **HOÃN** theo owner (82) · W9 admin-visibility **HỦY** theo (85) |
| Contract (HĐ) — **+ Duyệt HĐ GĐ3 (YC-023/024/025, S187-S188) + finalize-runtime (YC-030, S190)** | `Domain/Contracts/` | 1-11 · **73** (`AddContractEndedByLevelFinalize` @S190 `69860362`) | Feature-complete (7 ContractType × 9 phase) — **+GĐ3 "Duyệt Hợp đồng" kế thừa KHKK**: 7 quy trình duyệt V2 **per-LOẠI-HĐ** `HD-{TP,GK,NCC,DV,MB,NT-NCC,NT-DV}` seed sao khuôn KHKK (nhà mã = `Domain/Contracts/ContractApprovalWorkflowFamily.cs`) + 7 key Designer `AwV2_Hd*` by-construction · guard 4-cửa nhà chung `Application/Contracts/ContractWorkflowGuards.cs` (**khoá cứng theo loại** — pin sai họ ⇒ 409) · Đ2 guard đúng-trạm V2 (V1 legacy giữ nguyên — lỗ #82/S156 còn treo CHỦ-ĐÍCH cho V1) · DTO nguồn-gốc KHKK (reverse-join `ContractSigningPlanLines`) + cây workflow thô khuôn KHKK · FE card Nguồn-gốc + panel duyệt **2 nút** mirror `KhkkWorkflowPanel` + Designer type-3 family-slice. 🔴 W8 authz-diện-rộng **HOÃN** theo owner (82) · W9 admin-visibility **HỦY** theo (85) |
| PurchaseEvaluation (Duyệt NCC tiền-HĐ) | `Domain/PurchaseEvaluations/` | 12,13,15,49,50,52-61,65-68 | Feature-complete — +Hạng mục (Mig 49) +ngân sách per-gói-thầu role PRO/CCM (Mig 50) +Link hồ sơ NAS (Mig 52) +cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng (Mig 53) +giá đề xuất PRO/CCM + CCM-note (Mig 54/55) +PRO-split + ghi-chú-giá (Mig 56/57) +multi-winner liên-danh + level-finalize + NS-kỳ-CCM (Mig 58/59) +**`EndedByLevelFinalize` runtime-flag + backfill-fix (Mig 60/61, S97 — gotcha #78/#79)** +multi-NCC per-hạng-mục (Mig 65, S114 — gotcha #81) +duyệt-khoảng giá MinMax (Mig 66, S117) +**freeze NS phiếu DaDuyet snapshot 11-cột + display-gate `budgetFrozen` (Mig 67, S133 — gotcha #81-EXT indirect-assignment)** +**lũy kế TẠM TÍNH vs CHÍNH XÁC (S134, 0-mig — `ComputePendingAsync` complementary [ChoDuyet-winner vào tạm-tính, nháp list-only] + sub-dòng amber matrix + banner màn duyệt + D4 audit-note changelog)** +**nút XÓA phiếu ở màn duyệt (Mig 68, S157/S162 — `AllowApproverDelete`, AddColumn no new table)**. Export PDF pending |
| **ContractSigningPlans (Kế hoạch Ký kết HĐ — KHKK)** | `Domain/ContractSigningPlans/` | **69, 71, 72** | Feature-complete — **Mig 69 `AddContractSigningPlans` (S161, 7 bảng, 89→96)**: CRUD + Dossier 15 policy (W2) · duyệt V2 3-trạm test-before RED→GREEN (W3) · đường-ống HĐ V2 (W6) · bản-cứng **1-MỐC** theo owner *(form điền đủ → duyệt nếu có → upload bản cứng = xong)* (W7) · cây 4-folder GĐ ×2 app (S162) · **chuỗi K SP-002 @S164-S167 (Mig 71 nhóm-duyệt N1-N8 + Line hạng-mục + 8 workflow nhóm + bridge KHKK→HĐ hội-2-khóa K7 `aaed699`)**. 🔴 Gate quyền dùng **đúng key policy của endpoint** (`KeHoachKyKet`), KHÔNG OR key con — gotcha **#85** |
| ~~Budget (Ngân sách dự án)~~ | — | 14 → **Mig 50 DROP** | ⚠️ **REMOVED S61** — module Budget cũ XÓA, thay bằng PE-budget-per-gói-thầu (`PeWorkItemBudgets`). FE pages/types/menu `Bg_*` gỡ hết |
@ -145,7 +145,7 @@ Quy tắc:
| [`docs/workflow-contract.md`](docs/workflow-contract.md) | State machine 9 phase HĐ + role matrix |
| [`docs/forms-spec.md`](docs/forms-spec.md) | Catalog 8 form + quy định mã HĐ RG-001 |
| [`docs/database/database-guide.md`](docs/database/database-guide.md) | DB conventions + migration workflow + cheatsheet |
| [`docs/database/schema-diagram.md`](docs/database/schema-diagram.md) | ⭐ ERD + luồng DB + data flow (số bảng → [`docs/STATUS.md`](docs/STATUS.md)) (+ §11 PE + §12 ~~Budget~~ DROP + §13 PEDeptOpinions + §14 Contract V2 LevelOpinions; §16+ Mig 32-62 pending) |
| [`docs/database/schema-diagram.md`](docs/database/schema-diagram.md) | ⭐ ERD + luồng DB + data flow (số bảng → [`docs/STATUS.md`](docs/STATUS.md)) (+ §11 PE + §12 ~~Budget~~ DROP + §13 PEDeptOpinions + §14 Contract V2 LevelOpinions; §16+ Mig 32-73 pending) |
| [`docs/flows/README.md`](docs/flows/README.md) | Index 6 flow (auth, permission, contract, form, SLA) |
| [`docs/gotchas.md`](docs/gotchas.md) | ⭐ Bẫy đã gặp (số hiện tại → [`docs/STATUS.md`](docs/STATUS.md)) — đọc trước khi debug tương tự |
| [`.claude/skills/`](.claude/skills/README.md) | 6 skill: contract-workflow, form-engine, permission-matrix, dependency-audit-erp, ef-core-migration, iis-deploy-runbook |