[CLAUDE] Phase4: Report MVP + Docs Consolidation (rules, architecture, schema-diagram)
Backend Report: - Application/Reports/Dtos/DashboardStatsDto: 5 KPI + PhaseCount + SupplierCount + ProjectCount + MonthlyValue - Application/Reports/Queries/GetDashboardStats handler: total/active/overdue/published this month/totalValueActive + byPhase + top 5 NCC/du an + 12 thang monthly (fill zero khi thang empty) - Application/Reports/Services/IContractExcelExporter interface - Infrastructure/Reports/ContractExcelExporter: ClosedXML workbook 10 cot, header style bold+blue, number format #,##0, formula SUM, auto-fit, freeze header - Application/Reports/Commands/ExportContractsToExcelCommand: filter phase/supplier/project/date range - Api/Controllers/ReportsController: GET /reports/dashboard, GET /reports/contracts/export - DI register IContractExcelExporter (Scoped) Frontend fe-admin: - types/reports.ts: DashboardStats type - components/BarChart.tsx: generic horizontal bar chart — chi Tailwind, khong thu vien ngoai - pages/DashboardPage.tsx REWRITE: 5 KPI card (FileText/TrendingUp/AlertTriangle/CheckCircle2/Coins) + by-phase bar + monthly 12-month chart + top 5 NCC + top 5 du an + skeleton loader - pages/ReportsPage.tsx MOI: filter phase/fromDate/toDate → export Excel button - Route /reports vao App.tsx E2E verified: - GET /api/reports/dashboard → 200 voi day du KPI + monthly fill 12 thang - GET /api/reports/contracts/export → 200 xlsx 7229 bytes (Microsoft Excel 2007+) Docs consolidation (theo yeu cau user): - docs/rules.md MOI: 9 section coding conventions (ngon ngu UI/code/DB/docs, BE Clean Arch, CQRS+MediatR, Validation FluentValidation, Error handling, Async, Entity rules, DI, Package pinning, FE React/TS erasableSyntaxOnly, path alias, TanStack Query, Permission guard, Toast+error, DB convention, Git commit format, Docs structure, Testing, Security) - docs/architecture.md MOI: layered overview ASCII art, request lifecycle (1 POST/api/contracts qua 10 step), workflow state machine 9 phase, permission model, data flow sequence diagram 4 actor (Drafter/Manager/CCM/BOD/HRA), deployment architecture Phase 5, skill library, non-functional table - docs/database/schema-diagram.md MOI: full ERD 19 table mermaid + data flow diagram + vong doi 1 HD (create → 7 transition → gen ma → publish) + index strategy table + relationship cardinality + soft delete behavior + SQL queries (inbox/dashboard/gen ma) + migration history - docs/gotchas.md UPDATE: 17 → 26 pitfalls, them section "Claude Code harness quirks" (Edit File not read, DI build pass nhung runtime fail) + "Contract workflow" (ma HD gen 2 lan, BE-FE NEXT_PHASES sync, race condition) + "Permission matrix" (cache real-time, MenuKey typo) - docs/STATUS.md: Phase 4 MVP done, docs entry points section liet ke het, next Phase 5 Production - docs/HANDOFF.md: phase table them Phase 4 row, file tree update voi Reports, test points day du, git state commit 7 - docs/changelog/migration-todos.md: tick Phase 4 MVP items + them iteration 2 list - docs/changelog/sessions/2026-04-21-1430-phase4-report.md: session log voi thong so cumulative (BE 3100 LOC, 30 docs) - CLAUDE.md root: update Tai lieu quan trong section them rules.md, architecture.md, schema-diagram.md, .claude/skills (13 links now) Bug fix: - TS unused import ContractPhaseLabel trong DashboardPage - DI thieu register IContractExcelExporter — build pass but runtime would fail (added) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -158,13 +158,25 @@
|
||||
|
||||
## Phase 4 — Reporting + Polish (T10-11)
|
||||
|
||||
- [ ] Dashboard admin: số HĐ theo phase, top NCC, top dự án, tổng giá trị theo tháng
|
||||
- [ ] Excel export theo bộ lọc (dùng EPPlus)
|
||||
- [ ] Report: HĐ quá hạn SLA bao nhiêu lần theo phase/role
|
||||
- [ ] UX polish: skeleton loader, empty state, error boundary có recovery button
|
||||
### MVP xong (iteration 1)
|
||||
|
||||
- [x] Dashboard admin: 5 KPI (total/active/overdue/published this month/total value) + by phase + top 5 NCC + top 5 dự án + 12 tháng
|
||||
- [x] Excel export HĐ theo filter (phase/supplier/project/date range) qua ClosedXML
|
||||
- [x] BE `GetDashboardStatsQuery` + `ExportContractsToExcelCommand` + ReportsController
|
||||
- [x] FE `DashboardPage` rewrite với `BarChart` tự build (Tailwind only, không thư viện ngoài)
|
||||
- [x] FE `ReportsPage` filter + export
|
||||
- [x] Docs consolidation: `rules.md` + `architecture.md` + `database/schema-diagram.md` + gotchas update
|
||||
|
||||
### Iteration 2 (polish — optional)
|
||||
|
||||
- [ ] SLA overdue report (by role / phase, export Excel)
|
||||
- [ ] Contract audit log export (từng HĐ ra PDF)
|
||||
- [ ] Dashboard user-specific (HĐ của tôi / role của tôi)
|
||||
- [ ] Chart library recharts (nếu cần chart phức tạp)
|
||||
- [ ] UX polish: skeleton loader cho mọi list, empty state có action, error boundary recovery
|
||||
- [ ] Accessibility: keyboard nav, focus trap modal, aria labels
|
||||
- [ ] Dark mode (optional, nếu rảnh)
|
||||
- [ ] Performance: index DB cho query hot (SupplierId, ProjectId, Phase)
|
||||
- [ ] Dark mode
|
||||
- [ ] Performance: explicit index DB cho query hot đã identify
|
||||
- [ ] Tài liệu user guide: quy trình tạo HĐ + duyệt
|
||||
- [ ] UAT với 5-10 HĐ dữ liệu thật từ bộ phận Cung ứng
|
||||
|
||||
|
||||
122
docs/changelog/sessions/2026-04-21-1430-phase4-report.md
Normal file
122
docs/changelog/sessions/2026-04-21-1430-phase4-report.md
Normal file
@ -0,0 +1,122 @@
|
||||
# Session 2026-04-21 14:30 — Phase 4 Report MVP + Docs Consolidation
|
||||
|
||||
**Dev:** Claude (Opus 4.7)
|
||||
**Duration:** ~1h
|
||||
**Base commit:** `7e957a7`
|
||||
|
||||
## Làm được
|
||||
|
||||
### Chunk K — BE Dashboard + Excel export
|
||||
|
||||
- `Application/Reports/Dtos/DashboardStatsDto.cs`: DashboardStats + PhaseCount + SupplierCount + ProjectCount + MonthlyValue
|
||||
- `Application/Reports/Queries/GetDashboardStats` Handler:
|
||||
- Counts: Total / Active (not final) / Overdue (SlaDeadline < now) / PublishedThisMonth
|
||||
- TotalValueActive: SUM GiaTri của active contracts
|
||||
- ByPhase: group theo phase
|
||||
- TopSuppliers, TopProjects: top 5 theo count + sum value
|
||||
- MonthlyValue: fill 12 tháng liên tục (kể cả tháng rỗng)
|
||||
- `Application/Reports/Services/IContractExcelExporter`
|
||||
- `Infrastructure/Reports/ContractExcelExporter`:
|
||||
- ClosedXML workbook 10 cột (STT, Mã HĐ, Tên, Loại, Phase, NCC, Dự án, Giá trị, SLA, Ngày tạo)
|
||||
- Header style (bold + background blue)
|
||||
- Number format `#,##0` cho cột giá trị
|
||||
- Formula SUM tổng cuối bảng
|
||||
- Auto-fit columns + freeze header row
|
||||
- `Application/Reports/Commands/ExportContractsToExcelCommand` (filter phase/supplier/project/date range)
|
||||
- `Api/Controllers/ReportsController`: GET `/api/reports/dashboard`, GET `/api/reports/contracts/export`
|
||||
- DI register IContractExcelExporter (Scoped)
|
||||
|
||||
### Chunk L — FE admin Dashboard + Reports
|
||||
|
||||
- `types/reports.ts`: DashboardStats type
|
||||
- `components/BarChart.tsx`: generic horizontal bar chart — chỉ Tailwind, không thư viện ngoài (tránh bloat bundle)
|
||||
- `pages/DashboardPage.tsx` rewrite:
|
||||
- 5 StatCard KPI: Tổng HĐ, Đang xử lý, Quá hạn SLA, Phát hành tháng, Tổng giá trị
|
||||
- Section By Phase (bar với PhaseBadge)
|
||||
- Section Monthly Value 12 tháng (BarChart)
|
||||
- Section Top 5 NCC + Top 5 dự án
|
||||
- Skeleton loader khi loading
|
||||
- Money formatter (tỷ / tr / số thường)
|
||||
- `pages/ReportsPage.tsx` MỚI: form filter (phase / from / to) → export Excel button
|
||||
- Route `/reports` added vào App.tsx
|
||||
|
||||
### Docs Consolidation (theo yêu cầu user)
|
||||
|
||||
- `docs/rules.md` MỚI: 9 section coding conventions (ngôn ngữ, BE Clean Arch, CQRS, validation, error, async, entity, DI, packages, FE React/TS, database, git, docs)
|
||||
- `docs/architecture.md` MỚI: layered diagram, request lifecycle, workflow state machine, permission model, data flow sequence, deployment, non-functional
|
||||
- `docs/database/schema-diagram.md` MỚI: ERD full 19 tables với mermaid, data flow diagram, lifecycle 1 HĐ, index strategy, relationship cardinality, soft delete behavior, SQL queries điển hình, migration history
|
||||
- `docs/gotchas.md` UPDATE: thêm 7 pitfalls mới (20-26: Claude Code harness, DI register, Contract workflow, Permission)
|
||||
- Session log này
|
||||
|
||||
## E2E verified
|
||||
|
||||
```bash
|
||||
GET /api/reports/dashboard → 200
|
||||
totalContracts: 1, activeContracts: 0, overdueContracts: 0,
|
||||
publishedThisMonth: 1, totalValueActive: 0,
|
||||
byPhase: [{phase:9, count:1}],
|
||||
topSuppliers: [{supplierName:"Cong ty PVL Test", count:1, totalValue:150M}],
|
||||
topProjects: [...],
|
||||
monthlyValue: [12 rows, fill 0 if empty month]
|
||||
|
||||
GET /api/reports/contracts/export → HTTP 200, file xlsx 7229 bytes
|
||||
Microsoft Excel 2007+ OK
|
||||
|
||||
TS check fe-admin: pass
|
||||
```
|
||||
|
||||
## Bug gặp + fix
|
||||
|
||||
| Bug | Fix |
|
||||
|---|---|
|
||||
| Edit tool "File not read" sau system-reminder | Read lại + Write full |
|
||||
| TS unused import ContractPhaseLabel | Remove unused import |
|
||||
| DI thiếu register IContractExcelExporter | Add `services.AddScoped<IContractExcelExporter, ContractExcelExporter>()` |
|
||||
|
||||
## Handoff session sau
|
||||
|
||||
### Phase 4 iteration 2 (polish)
|
||||
|
||||
- [ ] SLA overdue report (by role / phase, export Excel)
|
||||
- [ ] Contract audit log export (từng HĐ ra PDF)
|
||||
- [ ] Dashboard user-specific (HĐ tôi / role tôi)
|
||||
- [ ] Chart library đơn giản (recharts hoặc tiếp tục Tailwind)
|
||||
|
||||
### Phase 5 — Production (T12-13)
|
||||
|
||||
- [ ] CI/CD Gitea Actions `.gitea/workflows/deploy.yml`
|
||||
- [ ] IIS setup script + runbook
|
||||
- [ ] HTTPS cert (win-acme)
|
||||
- [ ] Rate limit middleware
|
||||
- [ ] Security audit OWASP top 10
|
||||
- [ ] Backup SQL runbook
|
||||
|
||||
### Phase 3 iteration 2 (vẫn còn thiếu)
|
||||
|
||||
- [ ] SlaExpiryJob BackgroundService auto-approve
|
||||
- [ ] Email + in-app notification
|
||||
- [ ] Upload attachment endpoint + FE
|
||||
- [ ] RowVersion concurrency
|
||||
- [ ] Render HĐ docx khi tạo
|
||||
|
||||
### Phase 2 iteration 2 (vẫn còn)
|
||||
|
||||
- [ ] Convert 3 file .doc
|
||||
- [ ] Field spec JSON + form builder
|
||||
- [ ] {{#loop}} block
|
||||
- [ ] PDF convert
|
||||
|
||||
### Blocker
|
||||
|
||||
- ⏳ Gitea remote URL (vẫn chờ — sẽ quyết Phase 5)
|
||||
|
||||
## Thông số cumulative
|
||||
|
||||
| | Phase 2 | Phase 3 | **Phase 4 MVP** |
|
||||
|---|---:|---:|---:|
|
||||
| BE LOC | ~1900 | ~2700 | **~3100** |
|
||||
| DB tables | 14 | 19 | 19 (không thêm table mới) |
|
||||
| API endpoints | ~23 | ~31 | **~33** |
|
||||
| FE pages | 9+5 | 14 | **16** (+Reports, +Dashboard rewrite) |
|
||||
| Docs files | 24 | 26 | **30** (+rules, architecture, schema-diagram) |
|
||||
| Commits | 5 | 6 | **7** (sắp) |
|
||||
Reference in New Issue
Block a user