Pure docs work — 0 thay đổi code/test. 77 test vẫn pass (Domain 54 + Infra 23). 3 skill refresh stale (audit định kỳ §6.4 + §9.4 phát hiện): - form-engine: "Phase 2 MVP missing PDF + form builder" → "Tier 3 feature-complete" + bỏ section duplicate "Gen mã HĐ chưa implement" (đã DONE Phase 3+6) - permission-matrix: 12 menu cũ → ~60 menu key (Bg_*/Pe_*/PeWf_*/Catalogs) + inheritance roots 4 group + Budgets KHÔNG inherit (gotcha #35) - ef-core-migration: "24 DbSet" → "52 bảng (15 migration)" 2 rule mới chốt: - rules.md §6.4 — Audit + compact MD định kỳ (cadence + checklist + anti-pattern) Triết lý: KHÔNG rewrite toàn bộ. Compact + patch drift. Cron solution-erp-skill-audit-monthly mở rộng scope (skill + doc drift combined) - rules.md §9.4 mở rộng cross-ref §6.4 Update STATUS Session 7+ priority + HANDOFF cảnh báo session 7 + migration-todos Phase 9 Session 6 done sub. Cron 2026-05-01 fire mai → combined audit theo checklist §6.4 + §9.4. Session log đầy đủ: docs/changelog/sessions/2026-04-30-chot-session-6-md-audit-compact.md Commit MD-only → CI skip (path filter gotcha #41). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
145 lines
9.0 KiB
Markdown
145 lines
9.0 KiB
Markdown
# Migration To-dos — Atomic Roadmap
|
||
|
||
> Tick `[x]` khi xong. Phase 0-8 đã DONE — collapsed. Detail xem session
|
||
> logs trong `docs/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.vn` E2E 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 hardcoded `BudgetPolicy.Default`
|
||
|
||
## ✅ Phase 8 — Budget FE + PE/HD integration (Session 5 done)
|
||
|
||
### A. FE Budget pages — done ✅
|
||
|
||
- [x] `fe-admin/src/types/budget.ts` (BudgetPhase 5-state enum + DTO types)
|
||
- [x] `fe-admin/src/pages/budgets/BudgetsListPage.tsx` (3-panel `[340px_1fr_360px]` + filter Phase/Năm + ?phase=Pending alias + readOnly mode + BudgetDetailPage fullpage mobile)
|
||
- [x] `fe-admin/src/pages/budgets/BudgetCreatePage.tsx` (form Header — Tên/Năm/Dự án/Phòng ban/Mô tả)
|
||
- [x] `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)
|
||
- [x] `fe-admin/src/components/budgets/BudgetWorkflowPanel.tsx` (Panel 3 timeline activePhases + nextPhases buttons + Dialog comment + Approvals/Changelog)
|
||
- [x] Mirror tất cả sang `fe-user/`
|
||
- [x] App.tsx routes `/budgets`, `/budgets/new`, `/budgets/:id` cả 2 app
|
||
- [x] Menu resolver `Bg_*` (Bg_List → `/budgets`, Bg_Pending → `/budgets?phase=Pending`, Bg_Create → `/budgets/new`)
|
||
|
||
### B. PE/Contract → Budget integration — done ✅
|
||
|
||
- [x] **PE form** + Select "Ngân sách" filter Phase=DaDuyet, ProjectId match, BE validate
|
||
- [x] **Contract form** (Header + Edit) tương tự, EditForm read-only link card khi !isDraft
|
||
- [x] 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)
|
||
- [x] PE Detail UI restructure 4 section đánh số match form spec PHIẾU TRÌNH KÝ
|
||
- [x] BE: BudgetSummaryDto shared + Create/Update PE+Contract commands + BudgetId? + GetQueries load Budget
|
||
- [x] CreateContractFromEvaluation carry forward pe.BudgetId → contract.BudgetId
|
||
|
||
### C. PE Workflow Designer admin UI — done ✅
|
||
|
||
- [x] BE `PeWorkflowAdminFeatures.cs` ~250 LOC mirror Contract pattern
|
||
- [x] BE `PeWorkflowsController` 2 endpoint reuse policy `Workflows.*`
|
||
- [x] FE `PeWorkflowsPage.tsx` ~500 LOC + designer dialog (clone/edit/+Role/+User)
|
||
- [x] App.tsx route `/system/pe-workflows/:typeCode`
|
||
|
||
### D. Ý kiến 4 phòng ban — done ✅
|
||
|
||
- [x] Migration 15 `AddPurchaseEvaluationDepartmentOpinions` (UNIQUE PEId+Kind)
|
||
- [x] Domain entity + enum `PeDepartmentKind` (PheDuyet/Ccm/MuaHang/SmPm)
|
||
- [x] BE Upsert (sign=true → set SignedAt+UserId, sign=false giữ chữ ký cũ) + Delete + 2 endpoint
|
||
- [x] FE Section "5. Ý kiến 4 phòng ban (sign-off)" 2x2 grid OpinionBox
|
||
|
||
### E. Tests Phase 1-2-3mini + CI optimize — done ✅
|
||
|
||
- [x] **Phase 1** — `tests/SolutionErp.Domain.Tests/` (xUnit + FluentAssertions 7.2): 54 test policy state machine (Contract WF + PE WF + Budget) + Registry + FromDefinition versioned + UserKindApprover
|
||
- [x] **Phase 2** — `tests/SolutionErp.Infrastructure.Tests/` (EF SQLite + TestApplicationDbContext override `nvarchar(max) → TEXT`): 17 test code generator format + sequence + year boundary + persistence verify
|
||
- [x] **Phase 3 mini** — `tests/.../Application/PeWorkflowAdminTests.cs`: 6 test CreatePeWorkflowDefinitionCommand versioning (auto-increment + deactivate cũ + EvaluationType independence + steps/approvers persistence)
|
||
- [x] CI gate `.gitea/workflows/deploy.yml` — 2 step `dotnet test` trước build, fail → no deploy
|
||
- [x] **Total 77 test pass / ~3s**
|
||
- [x] **CI manual checkout bypass github.com** — fix gotcha #39 (act_runner TCP timeout 21s)
|
||
- [x] **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)
|
||
|
||
### ✅ Session 6 done (2026-04-30 — pure docs work)
|
||
|
||
- [x] **MD audit + compact** — STATUS -27%, HANDOFF -32%, migration-todos -35%, archive 51 row Phase 0-7 cũ
|
||
- [x] **3 skill refresh** — `form-engine` Phase 2 MVP → Tier 3 feature-complete, `permission-matrix` 12 menu → ~60 + inheritance roots, `ef-core-migration` 24 DbSet → 52 bảng
|
||
- [x] **Rule mới rules.md §7** — Khi nào viết test (timing rule 5-row table)
|
||
- [x] **Rule mới rules.md §6.4** — Audit + compact MD định kỳ (cadence + checklist + anti-pattern)
|
||
- [x] **rules.md §9.4** — Mở rộng skill audit cross-ref §6.4
|
||
|
||
### 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` + template `PE-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.vn` sau 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.
|
||
|
||
- [x] **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
|