# 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
