STATUS.md (-52 dòng, -27%): archive 51 row Recently Done Phase 0-7 cũ
→ changelog/recently-done-archive-2026-04.md (file mới)
Giữ 12 row mới nhất Phase 8/Session 5 + pointer archive.
HANDOFF.md (-147 dòng, -32%): bỏ 3 section duplicate
- Versioned workflow quick ref → cross-ref workflow-contract.md §7bis
- File đang active (90 dòng tree) → cross-ref PROJECT-MAP.md
- Git state snapshot stale → cross-ref `git log --oneline -10`
migration-todos.md (-74 dòng, -35%): collapse Phase 6 iter 1+2 + Phase 7
done parts thành 4 dòng paragraph. Giữ Phase 8/9 active + skill audit.
Quy tắc compact (rules.md §6 implicit):
- Recently Done > 30 row → archive cũ vào changelog/recently-done-archive-{YYYY-MM}.md
- Phase done >= 1 tháng → collapse thành 1 paragraph + cross-ref session log
- Section duplicate file khác → cross-ref thay vì copy
Commit MD-only → CI skip (path filter gotcha #41).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.4 KiB
8.4 KiB
Migration To-dos — Atomic Roadmap
Tick
[x]khi xong. Phase 0-8 đã DONE — collapsed. Detail xem session logs trongdocs/changelog/sessions/. Active work: Phase 9 (UAT + Ops + carry over PE PDF export + Tests Phase 3-5).
✅ Phase 0-5 + Tier 3 — Done (2026-04-21..22)
| Phase | Focus | Trạng thái |
|---|---|---|
| 0 Draft | Scaffold .NET 10 + 2 Vite + parse FORM/QT + docs | ✅ |
| 1 Alpha Core | Auth + 12 role + Permission Matrix + 3 master CRUD + Contract draft | ✅ |
| 2 Form Engine | OpenXml + ClosedXML render + LibreOffice PDF + DynamicForm | ✅ |
| 3 Workflow | State machine 9 phase + RG-001 code gen + SLA job + attachments + SignalR realtime | ✅ |
| 4 Reporting | Dashboard KPI + Excel export + MyDashboard role-aware + brand identity #1F7DC1 | ✅ |
| 5 Production | CI/CD Gitea Actions + 3 IIS site + Let's Encrypt + Security headers + Users CRUD | ✅ |
| Tier 3 | Versioned workflow + 3-panel layout + 4-bảng overhaul + 4 master catalogs + 16 demo users + RolesPage CRUD + 7 demo HĐ varied | ✅ |
Detail chi tiết: docs/changelog/sessions/2026-04-21-*.md + 2026-04-22-0300-tier3-feature-complete.md + 2026-04-23-*.md.
✅ Phase 6-7 — PE Module + Budget BE — Done (2026-04-23..28)
- Phase 6 iter 1+2: Module Duyệt NCC tiền-HĐ — Migration 12+13, 10 bảng PE + WorkflowDefinitions, 2 type A/B, 17 endpoint, FE 3-panel cả 2 app, kế thừa HĐ qua
CreateContractFromEvaluationCommand. UX polish iter 2 (flat layout, per-NCC attachments, readOnly mode Duyệt). Demo seed 4 phiếu varied + 7 role × 9 Pe_* permission defaults. - Domain rebrand: 3 sub
.huypham.vn→.solutions.com.vnE2E live HTTPS (cert + CORS + FE bundle). - Phase 7 — Budget BE: Migration 14, 4 bảng Budgets + workflow simple 3-step hardcoded
BudgetPolicy.Default, 11 endpoint, link nullable Contract.BudgetId/PE.BudgetId. FE chưa làm (Phase 8 done). - Phase 7 — 14 demo Solutions users: PRO 5 + CCM 7 + ISO 1 + CEO 1, total 30 user (16 sample + 14 thật).
Session logs: 2026-04-23-2300-purchase-evaluations.md · 2026-04-24-chot-session-3-pe-polish.md · 2026-04-28-chot-session-4-budget.md.
3 task PE feature gap (Workflow Designer / Ý kiến 4 PB / Export PDF) → đã đóng 2/3 ở Phase 8 §C+D. Export PDF carry over Phase 9.
Pending migrations (chưa cần đến)
AddPePaymentTermFields— nếu chốt UX tách field (JSON → 6 column riêng)AddBudgetCodeSequences— atomic SERIALIZABLE khi chốt format MaNganSach (hiện Random.Shared)AddBudgetVersionedWorkflow— nếu user cần admin config UI thay hardcodedBudgetPolicy.Default
✅ Phase 8 — Budget FE + PE/HD integration (Session 5 done)
A. FE Budget pages — done ✅
fe-admin/src/types/budget.ts(BudgetPhase 5-state enum + DTO types)fe-admin/src/pages/budgets/BudgetsListPage.tsx(3-panel[340px_1fr_360px]+ filter Phase/Năm + ?phase=Pending alias + readOnly mode + BudgetDetailPage fullpage mobile)fe-admin/src/pages/budgets/BudgetCreatePage.tsx(form Header — Tên/Năm/Dự án/Phòng ban/Mô tả)fe-admin/src/components/budgets/BudgetDetailTabs.tsx(Section Thông tin Header + Section Hạng mục table CRUD inline auto-compute ThanhTien=KL×ĐG)fe-admin/src/components/budgets/BudgetWorkflowPanel.tsx(Panel 3 timeline activePhases + nextPhases buttons + Dialog comment + Approvals/Changelog)- Mirror tất cả sang
fe-user/ - App.tsx routes
/budgets,/budgets/new,/budgets/:idcả 2 app - Menu resolver
Bg_*(Bg_List →/budgets, Bg_Pending →/budgets?phase=Pending, Bg_Create →/budgets/new)
B. PE/Contract → Budget integration — done ✅
- PE form + Select "Ngân sách" filter Phase=DaDuyet, ProjectId match, BE validate
- Contract form (Header + Edit) tương tự, EditForm read-only link card khi !isDraft
- PE Detail Hạng mục thêm cột "NS link · Δ" — match per-row qua
groupCode|itemCode+ footer aggregate (xanh dưới / đỏ vượt / xám khớp) - PE Detail UI restructure 4 section đánh số match form spec PHIẾU TRÌNH KÝ
- BE: BudgetSummaryDto shared + Create/Update PE+Contract commands + BudgetId? + GetQueries load Budget
- CreateContractFromEvaluation carry forward pe.BudgetId → contract.BudgetId
C. PE Workflow Designer admin UI — done ✅
- BE
PeWorkflowAdminFeatures.cs~250 LOC mirror Contract pattern - BE
PeWorkflowsController2 endpoint reuse policyWorkflows.* - FE
PeWorkflowsPage.tsx~500 LOC + designer dialog (clone/edit/+Role/+User) - App.tsx route
/system/pe-workflows/:typeCode
D. Ý kiến 4 phòng ban — done ✅
- Migration 15
AddPurchaseEvaluationDepartmentOpinions(UNIQUE PEId+Kind) - Domain entity + enum
PeDepartmentKind(PheDuyet/Ccm/MuaHang/SmPm) - BE Upsert (sign=true → set SignedAt+UserId, sign=false giữ chữ ký cũ) + Delete + 2 endpoint
- FE Section "5. Ý kiến 4 phòng ban (sign-off)" 2x2 grid OpinionBox
E. Tests Phase 1-2-3mini + CI optimize — done ✅
- Phase 1 —
tests/SolutionErp.Domain.Tests/(xUnit + FluentAssertions 7.2): 54 test policy state machine (Contract WF + PE WF + Budget) + Registry + FromDefinition versioned + UserKindApprover - Phase 2 —
tests/SolutionErp.Infrastructure.Tests/(EF SQLite + TestApplicationDbContext overridenvarchar(max) → TEXT): 17 test code generator format + sequence + year boundary + persistence verify - Phase 3 mini —
tests/.../Application/PeWorkflowAdminTests.cs: 6 test CreatePeWorkflowDefinitionCommand versioning (auto-increment + deactivate cũ + EvaluationType independence + steps/approvers persistence) - CI gate
.gitea/workflows/deploy.yml— 2 stepdotnet testtrước build, fail → no deploy - Total 77 test pass / ~3s
- CI manual checkout bypass github.com — fix gotcha #39 (act_runner TCP timeout 21s)
- CI path filter docs-only skip — gotcha #41 (paths-ignore behavior)
- Tests Phase 3 full — Opinion Upsert + Budget link validation (cần Identity UserManager setup helper)
- npm junction cache CI optimize (rollback ở
a21790d— gotcha #40 chưa debug)
📝 Phase 9 — UAT + Ops + carry over (Session 6+ active)
A. Hard blockers (chờ user / ops)
- UAT thật 1 tuần với 2-3 user (30 demo: 16 sample + 14 Solutions thật)
- SMTP config → Email outbox (BLOCKED chờ user cấp host/user/pass)
- Rotate credentials (admin + 30 demo + SA + vrapp + JWT secret + Gitea runner token)
- Schedule SQL backup daily Task Scheduler
B. PE feature gap còn lại
- Export phiếu PDF/Excel —
IDocumentConverter+ templatePE-TrinhDuyet.docx(user pending — không quan trọng lắm)
C. Optional polish (làm khi UAT phát sinh)
- Budget MaNganSach atomic sequence + migration
AddBudgetCodeSequences - Budget versioned workflow + migration
AddBudgetVersionedWorkflow - Payment terms PE tách field (JSON → 6 column)
- Auto-map PE Details → Contract Details khi gen HĐ
- Matrix Quotes bulk paste từ Excel
- fe-user Inbox thêm section "Phiếu Duyệt NCC chờ tôi"
D. Tests Phase 3-5 (làm khi gặp bug recurring để justify ROI)
- Phase 3 — Application handler tests (CQRS + EF InMemory) ~15 test
- Phase 4 — API smoke tests (WebApplicationFactory) ~7 test
- Phase 5 — FE Vitest cho lib utility (queryMatches, fmtMoney) ~10 test
E. Ops chưa xong
- Remove binding cũ
.huypham.vnsau verify stable - win-acme scheduled task fix unhealthy (cert expire 2026-06-18)
🔁 Skill governance (recurring)
Quy tắc: docs/rules.md §9. Audit định kỳ mỗi đầu tháng — workflow §9.4.
- Setup ban đầu — 6 skill (3 domain + 3 ops), rules §9 ←
661f859 - Audit 2026-05-01 — log
docs/changelog/skill-audit-2026-05.md - Audit 2026-06-01
- Audit 2026-07-01
Cron task solution-erp-skill-audit-monthly fire 9:00 AM ngày 1 mỗi tháng.
📦 Post-launch (Phase 10+ — future)
- Email outbox (MailKit + SMTP) — blocked chờ SMTP config
- E-signature integration (VNPT CA hoặc FPT CA)
- Tích hợp Bravo / SAP ERP import NCC
- Mobile app (React Native?) cho BOD duyệt ngoài giờ
- AI: gợi ý điền form dựa HĐ cũ, OCR scan HĐ đối tác
- Multi-tenant nếu có công ty thứ 2