# Session 2026-04-21 10:45 — Phase 0 Scaffold complete **Dev:** Claude (Opus 4.7) **Duration:** ~45 phút **Commit:** `25dad7f` ## Làm được ### Scaffold - Root `SOLUTION_ERP/` + toàn bộ cấu trúc thư mục - `.NET 10` solution + 4 project Clean Arch (Domain / Application / Infrastructure / Api) - NuGet packages: MediatR, FluentValidation, AutoMapper, EF Core SqlServer, Identity, JWT Bearer, Swashbuckle, Serilog - 2 React + Vite + TS apps: `fe-admin` (8082), `fe-user` (8080), proxy `/api → :5443`, Node `>=20`, `.nvmrc=20` - Root config: `.gitignore`, `global.json` (SDK 10.0.104), `docker-compose.yml` (SQL Server 2022), `README.md` ### Domain analysis - Parse 8 form HĐ → `docs/forms-spec.md`: - 5 form parsed OK (FO-002.01, .04, .05, .07, RG-001) - 3 file `.doc` (FO-002.02, .03, .06) không unzip được → TODO Phase 2 convert qua Word COM / LibreOffice - Extract **regex mã HĐ** từ RG-001: `{Project}/{Type}/SOL&{Partner}/{Seq}` + 5 biến thể cho PO/framework - Parse QUY_TRINH → `docs/workflow-contract.md`: - **9 phase state machine** (DangChon → DangSoanThao → DangGopY → DangDamPhan → DangInKy → DangKiemTraCCM → DangTrinhKy → DangDongDau → DaPhatHanh + TuChoi) - **Role × Phase matrix** 9 role × 9 phase - SLA mỗi phase (tổng ~19 ngày) - Mermaid state diagram + notification triggers + data model implication ### Docs - `CLAUDE.md` (root pointer) - `docs/CLAUDE.md` (full context: tech stack + project layout + conventions) - `docs/STATUS.md` (snapshot) - `docs/PROJECT-MAP.md` (module map + API namespace + FE screens + flow chính) - `docs/changelog/migration-todos.md` (roadmap 5 phase, ~100 atomic task) ### Skills (3 placeholder) - `contract-workflow` (sẽ expand Phase 3) - `form-engine` (sẽ expand Phase 2) - `permission-matrix` (sẽ expand Phase 1) ## Quyết định kiến trúc đã chốt | # | Item | Chốt | Lý do | |---|---|---|---| | 1 | Backend | Clean Architecture + CQRS + MediatR + EF migrations | Theo DH_Y_DUOC — dự án mới nên làm đúng bài | | 2 | DB | SQL Server 2022 | Consistent với NamGroup + DHYD, user chốt | | 3 | FE | 2 app React 19 + Vite 8 + TS (auto-scaffold) | Vite latest; nếu cần downgrade về React 18 thì làm Phase 1 đầu | | 4 | Deploy | Windows Server + IIS | User chốt, không Docker | | 5 | Lang UI | 100% tiếng Việt (code + table name = English) | User chốt | | 6 | AI service | BỎ luôn | User chốt, không Python | | 7 | Team | Solo (user + Claude) | Không skill Copilot collaboration | | 8 | Node | local `>=20`, CI pin `20.x` | Bài học NamGroup (CI fail với Node mới) | ## Handoff cho session tiếp theo **Phase 1 start:** backend foundation + auth + permission + CRUD master + FE layout + login page. **Đọc trước khi code:** 1. [docs/STATUS.md](../../STATUS.md) — snapshot 2. [docs/workflow-contract.md](../../workflow-contract.md) — 9 phase (ảnh hưởng Domain model) 3. [docs/forms-spec.md](../../forms-spec.md) — RG-001 code format 4. [docs/changelog/migration-todos.md](../migration-todos.md) section **Phase 1** **Blocker:** - ⏳ Chờ user cấp URL Gitea → push remote **Không ngầm giả định:** - React 19 vs 18: scaffold ra 19, nếu muốn 18 thì phải downgrade sớm - Aspose.Words (phí) vs OpenXml (free) cho Phase 2 — chưa quyết - SignalR cho real-time notification Phase 3 — optional, chưa quyết