- .NET 10 Clean Architecture: Domain/Application/Infrastructure/Api (4 project) - 2 React + Vite + TS app: fe-admin (:8082), fe-user (:8080) voi proxy /api - Node engines >=20, .nvmrc = 20 cho CI (bai hoc NamGroup) - SQL Server 2022 qua docker-compose (dev) - Parse 8 FORM -> docs/forms-spec.md (catalog + ma HD format RG-001) - Parse QUY_TRINH -> docs/workflow-contract.md (9 phase state machine + role matrix) - docs: CLAUDE.md, STATUS.md, PROJECT-MAP.md, migration-todos.md (roadmap 5 phase) - .claude/skills: 3 placeholder (contract-workflow, form-engine, permission-matrix) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
155 lines
6.9 KiB
Markdown
155 lines
6.9 KiB
Markdown
# PROJECT-MAP — Bản đồ toàn cảnh
|
||
|
||
> Đọc file này nếu cần deep context (~15 phút). Nếu chỉ cần snapshot → đọc [`STATUS.md`](STATUS.md).
|
||
|
||
## Module map
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ SOLUTION_ERP │
|
||
└─────────────────────────────────────────────────────────────────┘
|
||
|
||
╔════════════════╗ ╔════════════════╗ ╔════════════════╗
|
||
║ IDENTITY ║ ║ DANH MỤC ║ ║ QUẢN LÝ HĐ ║
|
||
║ (Phase 1) ║ ║ (Phase 1) ║ ║ (Phase 1-3) ║
|
||
╠════════════════╣ ╠════════════════╣ ╠════════════════╣
|
||
║ User ║ ║ Supplier ║ ║ Contract ║
|
||
║ Role ║ ║ Project ║ ║ ContractType ║
|
||
║ Permission ║ ║ Department ║ ║ ContractForm ║
|
||
║ MenuKey ║ ║ ContractClause ║ ║ Approval ║
|
||
║ AuditLog ║ ║ (điều kiện ║ ║ Comment ║
|
||
║ ║ ║ chung - 002.04)║ ║ Attachment ║
|
||
╚════════════════╝ ╚════════════════╝ ║ AuditTrail ║
|
||
╚════════════════╝
|
||
|
||
╔════════════════╗ ╔════════════════╗ ╔════════════════╗
|
||
║ FORM ENGINE ║ ║ WORKFLOW ║ ║ BÁO CÁO ║
|
||
║ (Phase 2) ║ ║ (Phase 3) ║ ║ (Phase 4) ║
|
||
╠════════════════╣ ╠════════════════╣ ╠════════════════╣
|
||
║ Template ║ ║ StateMachine ║ ║ Dashboard ║
|
||
║ Renderer ║ ║ Transition ║ ║ ExcelExport ║
|
||
║ (DOCX/XLSX) ║ ║ SlaTimer ║ ║ FilterQuery ║
|
||
║ Field mapping ║ ║ Notification ║ ║ ║
|
||
║ PO gen (F.07) ║ ║ CodeGenerator ║ ║ ║
|
||
║ ║ ║ (RG-001) ║ ║ ║
|
||
╚════════════════╝ ╚════════════════╝ ╚════════════════╝
|
||
```
|
||
|
||
## Domain entities chính (dự kiến)
|
||
|
||
```
|
||
User ────< Role ────< Permission (Role × MenuKey × CRUD)
|
||
User ────< AuditLog
|
||
|
||
Supplier (NCC)
|
||
Project (Dự án)
|
||
Department (Phòng ban)
|
||
|
||
Contract
|
||
├── Type: HĐTP | HĐGK | NCC | HĐDV | HĐ Mua bán | ...
|
||
├── Phase (9 state — xem workflow-contract.md)
|
||
├── Supplier, Project, Drafter
|
||
├── MaHopDong (gen theo RG-001)
|
||
├── Approvals[] (audit ai ký phase nào)
|
||
├── Comments[] (thread góp ý Phase 3 của workflow)
|
||
├── Attachments[] (scan bản gốc, file export)
|
||
└── TemplateData (JSON — field đã điền khi render form)
|
||
|
||
ContractTemplate (ánh xạ Type → File mẫu FO-002.xx)
|
||
ContractClause (điều khoản chung FO-002.04 — rich text)
|
||
PurchaseOrder (có thể đính với Contract hoặc standalone)
|
||
```
|
||
|
||
## API namespace dự kiến
|
||
|
||
```
|
||
/api/auth — login, refresh, logout, register (admin gate)
|
||
/api/users — CRUD user, assign role, reset password
|
||
/api/roles — CRUD role, permission matrix
|
||
/api/menus — menu tree + permission resolution
|
||
|
||
/api/suppliers — CRUD NCC
|
||
/api/projects — CRUD dự án
|
||
/api/departments — CRUD phòng ban
|
||
|
||
/api/contracts — CRUD + query by phase/project/supplier
|
||
/api/contracts/{id}/transitions — state machine action
|
||
/api/contracts/{id}/comments — thread góp ý
|
||
/api/contracts/{id}/attachments — upload/download
|
||
|
||
/api/forms — template catalog
|
||
/api/forms/{id}/render — render template → docx/xlsx (Phase 2)
|
||
|
||
/api/reports/dashboard — KPI tổng hợp
|
||
/api/reports/export — Excel download
|
||
```
|
||
|
||
## FE screens dự kiến
|
||
|
||
### fe-admin (:8082) — cho Admin + Role quản lý
|
||
|
||
- `/login`
|
||
- `/dashboard` — KPI system
|
||
- `/master/users` + `/master/roles` + `/master/permissions`
|
||
- `/master/suppliers` + `/master/projects` + `/master/departments`
|
||
- `/master/contract-templates` + `/master/contract-clauses`
|
||
- `/contracts` — danh sách toàn bộ, filter phase/dự án
|
||
- `/contracts/{id}` — detail + approval panel + audit log
|
||
- `/reports` + `/system/audit-log`
|
||
|
||
### fe-user (:8080) — cho Drafter, TBP, PD/PM, BOD, CCM, ...
|
||
|
||
- `/login`
|
||
- `/inbox` — HĐ đang chờ tôi xử lý (filter theo role × phase)
|
||
- `/contracts/new` — chọn template + điền form + submit
|
||
- `/contracts/{id}` — detail, comment, approve/reject
|
||
- `/my-contracts` — HĐ tôi đã tạo/tham gia
|
||
|
||
## Flow chính (Phase 3 — trình ký HĐ end-to-end)
|
||
|
||
```
|
||
Drafter (QS/NV.PB)
|
||
├─ [POST /api/contracts] tạo draft + chọn template
|
||
├─ [POST /api/forms/{id}/render] fill + preview
|
||
├─ [POST /api/contracts/{id}/transitions] DangSoanThao → DangGopY
|
||
│
|
||
PD/PM/PRO/CCM/FIN/ACT (song song)
|
||
└─ [POST /api/contracts/{id}/comments] góp ý
|
||
|
||
Drafter
|
||
├─ [PATCH /api/contracts/{id}] revise
|
||
├─ [POST /api/contracts/{id}/transitions] DangGopY → DangDamPhan → DangInKy
|
||
│
|
||
NTP/NCC/TĐ (external — Drafter update thay)
|
||
└─ upload scan có chữ ký đối tác
|
||
|
||
Drafter
|
||
└─ [POST /api/contracts/{id}/transitions] → DangKiemTraCCM
|
||
|
||
CCM
|
||
└─ [POST /api/contracts/{id}/transitions] → DangTrinhKy
|
||
|
||
BOD/NĐUQ
|
||
└─ [POST /api/contracts/{id}/transitions] → DangDongDau (GEN mã HĐ ở đây!)
|
||
|
||
HRA
|
||
└─ [POST /api/contracts/{id}/transitions] → DaPhatHanh (upload scan có dấu)
|
||
```
|
||
|
||
## External dependencies
|
||
|
||
- **SQL Server** — chính thức, dev có thể LocalDB hoặc Docker (`docker-compose.yml`)
|
||
- **IIS** — deploy target (Windows Server 2019+)
|
||
- **Gitea** — git remote (URL chờ user cấp)
|
||
- **Aspose.Words / DocumentFormat.OpenXml** — render .docx (Phase 2, quyết định khi đó)
|
||
- **EPPlus hoặc ClosedXML** — render .xlsx (Phase 2)
|
||
|
||
## Non-goals (KHÔNG làm)
|
||
|
||
- ❌ Python AI service (user đã quyết gác vô thời hạn)
|
||
- ❌ Mobile app
|
||
- ❌ Multi-tenant (1 instance / 1 công ty)
|
||
- ❌ Tích hợp e-signature (Phase 6+ nếu có)
|
||
- ❌ Tích hợp SAP/Bravo ERP (Phase 6+ nếu có)
|
||
- ❌ Public API / external webhooks
|