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>
4.7 KiB
4.7 KiB
STATUS — Snapshot hiện tại
Update rule: trước khi bắt đầu 1 task → ghi row vào
🔥 In Progress. Xong → chuyển sang✅ Recently Done.
Last updated: 2026-04-21 14:30
📍 Phase hiện tại: Phase 4 Report MVP (xong) — sẵn sàng Phase 5 Production hoặc polish iterations
🔥 In Progress
(không có)
✅ Recently Done (newest on top)
| Ngày | Ai | Task | Commit |
|---|---|---|---|
| 2026-04-21 | Claude | Phase 4 Report MVP + Docs Consolidation — BE Dashboard stats (5 KPI + by phase + top 5 NCC/dự án + 12 tháng) + Excel export qua ClosedXML. FE DashboardPage rewrite với BarChart tự build (không thư viện ngoài) + ReportsPage filter export. Docs: rules.md (coding conventions), architecture.md (layered + sequence), database/schema-diagram.md (ERD + data flow 19 table), gotchas.md update 26 pitfalls | (sắp commit) |
| 2026-04-21 | Claude | Phase 3 Workflow MVP — 9 phase state machine + code gen RG-001 + Inbox/Detail FE — E2E pass mã FLOCK 01/HĐGK/SOL&PVL2026/01 |
7e957a7 |
| 2026-04-21 | Claude | Phase 2 Form Engine MVP | 5113e4c |
| 2026-04-21 | Claude | Phase 1.2 — CRUD Master + Permission Matrix | 54d6c9b |
| 2026-04-21 | Claude | Docs addition — database-guide + flows | 49a5f57 |
| 2026-04-21 | Claude | Phase 1 foundation — Clean Arch + Identity + JWT + 2 FE | 702411f |
| 2026-04-21 | Claude | Phase 0 — scaffold + docs | 25dad7f |
Session logs: P0 · P1f · P1.2 · P2 · P3 · P4
Docs entry points:
rules.md— coding conventionsarchitecture.md— layered + data flow + deploymentdatabase/database-guide.md+database/schema-diagram.md— DB specgotchas.md— 26 pitfallsHANDOFF.md— brief 5 phútworkflow-contract.md— state machineforms-spec.md— 8 form catalogflows/— 6 flow diagram
🎯 Next up
Phase 5 — Production (T12-13, item lớn nhất còn lại)
- CI/CD Gitea Actions (
.gitea/workflows/deploy.yml) deploy IIS scripts/deploy-iis.ps1stop app pool → xcopy → start- Windows Server setup: IIS + URL Rewrite + ARR
- HTTPS cert via win-acme
appsettings.Production.json+ user secrets- Rate limiting middleware
- Security audit OWASP top 10
- Health check endpoint
/health - Serilog → file rolling daily retention 30d
- Runbook: restart, rollback, backup/restore
- UAT production 1 tuần
Polish iterations (optional — làm khi rảnh)
Phase 2 iter 2: convert 3 .doc, field spec JSON + form builder, {{#loop}}, PDF convert, upload template UI Phase 3 iter 2: SLA auto-approve job, email/in-app notification, attachment upload, RowVersion, render HĐ khi tạo Phase 4 iter 2: SLA overdue report, PDF HĐ export, dashboard user-specific
Quick wins
- FE Users management + Roles CRUD (test permission non-admin)
- Filter Inbox theo phase FE
- FE refresh token auto interceptor
📊 Thông số cumulative
| P0 | P1f | P1.2 | P2 | P3 | P4 | |
|---|---|---|---|---|---|---|
| BE LOC | 0 | ~400 | ~1500 | ~1900 | ~2700 | ~3100 |
| DB tables | 0 | 7 | 12 | 14 | 19 | 19 |
| API endpoints | 0 | 4 | ~20 | ~23 | ~31 | ~33 |
| FE pages | 0 | 2 | 6 | 7 | 14 | 16 |
| Docs | 10 | 13 | 14 | 24 | 26 | 30 |
| Commits | 1 | 2 | 3 | 5 | 6 | 7 (sắp) |
🚨 Blockers / risks
- ⏳ Gitea remote URL — user sẽ cấp khi vào Phase 5
- ⚠️ 3 file .doc chưa convert (Phase 2 carryover)
- ⚠️ SLA chỉ set deadline — không auto-approve (Phase 3.2)
- ⚠️ Không notification email/in-app (Phase 3.2)
- ⚠️ Permission chưa test non-admin user thật — cần FE Users mgmt
- ⚠️ FE refresh token — 401 chỉ redirect logout, chưa auto-refresh
Credentials + URLs
admin@solutionerp.local / Admin@123456
- API: http://localhost:5443 — Swagger
/swagger - Admin FE: http://localhost:8082 — Dashboard →
/dashboard(KPI mới),/contracts(list),/reports(export),/master/*(NCC/DA/PB),/forms,/system/permissions - User FE: http://localhost:8080 — Inbox →
/inbox,/contracts/new,/my-contracts