- STATUS.md: header Phase 7 + 3 row Recently Done (Budget BE / 14 users / Docs cleanup) + cumulative cột mới (51 tables / 14 mig / ~124 endpoints) - HANDOFF.md: TL;DR session 4 (2 milestone Budget BE + 14 users) + Cảnh báo session 5 + Priority 0 (FE Budget + PE/HD integration + PE feature gap) + Credentials 30 user - migration-todos.md: Phase 7 thêm section D Budget done + Phase 8 mới (FE Budget pages + integration) + pending migrations Budget - architecture.md: §10 Budget module mới (ERD + state machine + auto-recompute + integration roadmap) - database/schema-diagram.md: migration history rows 13+14 + §12 Budget ERD chi tiết - ef-core-migration SKILL: migration 14 entry + Phase 8 pending Budget refinement - CLAUDE.md root + docs: modules table thêm Budget row + scope Budget + count 51 bảng / 14 mig - Session log 2026-04-28-chot-session-4-budget.md (10+ section detailed) Stats: 51 tables (+4 Budget), 14 migrations (+AddBudgets), ~124 endpoints (+11 Budget), 30 demo user (16 sample + 14 Solutions thật), 38 gotchas, ~340 LOC Budget CQRS. FE Budget pages chưa làm — Priority 0 session 5. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.5 KiB
Migration To-dos — Atomic Roadmap
Tick
[x]khi xong. Phase 0-5 + Tier 3 + Phase 6 đã DONE — collapsed. Detail xem session logs trongdocs/changelog/sessions/. Active work: Phase 7 partial (Budget BE done, FE WIP) + Phase 8 (Budget refinement).
✅ 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 — Module Duyệt NCC (tiền-HĐ) — Done
Iter 1 (2026-04-23)
- Migration 12
AddPurchaseEvaluations— 10 bảng (Header/Suppliers/Details/Quotes/Approvals/Changelogs/Attachments/WorkflowDefinitions/Steps/StepApprovers) - Domain — 2 enum (Type A/B, Phase 7-state) + Policy record + Registry + FromDefinition builder
- Seed — 13 menu Pe_/PeWf_ + 2 WorkflowDefinition v01 (QT-DN-A 3-step, QT-DN-B 5-step)
- Application CQRS ~900 LOC — Create/Update/Transition/List/Inbox/Get/Delete + Supplier CRUD + Detail CRUD + Quote Upsert + SelectWinner + Changelog
- PurchaseEvaluationWorkflowService — policy guard + approval + notification + changelog
- PurchaseEvaluationsController — 17 endpoint REST
- FE 2 app — Types + PurchaseEvaluationsListPage 3-panel + Create page + PeDetailTabs + PeWorkflowPanel + Menu resolver Pe_*
- Kế thừa HĐ —
CreateContractFromEvaluationCommand(guard DaDuyet + SelectedSupplier + !ContractId) → Contract draft. FE CreateContractDialog pick ContractType. - Migration 13
AddPurchaseEvaluationCodeSequences— atomic MaPhieu sequencePE/{YYYY}/{A|B}/{Seq:D3} - Demo PE seed — 4 phiếu varied phase (A-001/A-002/A-003/B-001) + Pe_* permission defaults 7 role × 9 menu key
Session log: 2026-04-23-2300-purchase-evaluations.md + 2026-04-24-1030-pe-polish-demo-maphieu-perms.md.
Iter 2 — UX polish (2026-04-24)
- Rename menu "Phương Án" → "Giải pháp" + backfill DB (zero breaking change)
- Menu tree inheritance extend Pe_/PeWf_ (
GetMyMenuTreeQuery+ 4 root) - Accordion mutex Pe_* groups + sidebar w-72 + label nowrap
- NavLink active check query string (queryMatches helper) — fix 2 leaf cùng highlight
- PE detail flat layout: Panel 2 = 4 section (Thông tin/NCC/Hạng mục/Bảng so sánh), Panel 3 += Approvals + Changelog
- Upload file đính kèm per-NCC (SupplierAttachmentsCell) + Bảng so sánh tổng (GeneralAttachmentsSection, supplierRowId=null) + enum
ComparisonTable=4 - readOnly mode menu "Duyệt" (pendingMe=1) — hide Sửa/Xóa/Thêm/Edit/Upload/Delete, giữ download + transition + comment
- Contract: move Lịch sử điều chỉnh Panel 2 → Panel 3 (Chi tiết HĐ full-width)
- Demo email rebrand
@solutionerp.local→@solutions.com.vn+BackfillUserEmailDomainAsync(idempotent rename 4 field Email/NormalizedEmail/UserName/NormalizedUserName)
Session log: 2026-04-24-chot-session-3-pe-polish.md.
✅ Domain rebrand .huypham.vn → .solutions.com.vn (2026-04-24)
- 18 file repo (FE env + scripts + CI/CD + docs + skill + code comments)
scripts/migrate-domains.ps1(ASCII-only #30) — 3 IIS binding + 3 cert Let's Encrypt + auto HTTPS + redirect- CI/CD auto rebuild BE CORS + FE bundle VITE_API_BASE_URL
- E2E verified 3 domain live + preflight OK
Sub: api.solutions.com.vn · admin.solutions.com.vn · eoffice.solutions.com.vn. Old .huypham.vn vẫn fallback (chưa remove).
📝 Phase 7 — PE feature gap + Budget BE (Session 4 partial done)
A. PE feature gap (3 task MISSING — carry over session 5)
- PE Workflow admin designer UI
/system/pe-workflows/:typeCode- BE
Application/PurchaseEvaluations/PeWorkflowAdminFeatures.cs(mirrorWorkflowAdminFeatures.cs) Api/Controllers/PeWorkflowsController.cs- FE
fe-admin/src/pages/system/PeWorkflowsPage.tsx+PeWorkflowDesigner.tsx - Route
/system/pe-workflows/:typeCode(menu PeWf_* + resolver đã sẵn)
- BE
- Ý kiến 4 phòng ban (Phê duyệt / P.CCM / P.MuaHàng / SM-PM) ở tab Thông tin
- Option A: 4 text field + signoff date + UserId vào header
- Option B: dùng
PurchaseEvaluationApprovalsvới roleKind extra field - UX: 4 box sign-off như Excel mẫu
- Export phiếu PDF/Excel — tái dùng
IDocumentConverter+ templatePE-TrinhDuyet.docx
B. Optional polish
- Auto-map PE Details → Contract per-type Details khi gen HĐ (phức tạp vì 7 schema khác nhau)
- Payment terms tách field từ JSON → 6 column (Tạm ứng/TT tạm/Quyết toán/Bảo hành/Hạn mức/Đánh giá)
- Matrix Quotes bulk paste từ Excel
- fe-user Inbox thêm section "Phiếu Duyệt NCC chờ tôi"
C. Ops
- Remove binding cũ
.huypham.vnsau verify stable:ssh vietreport-vps ; cd C:\solution-erp\scripts ; .\migrate-domains.ps1 -RemoveOld -SkipCert - win-acme scheduled task fix unhealthy (cert expire 2026-06-18)
- UAT thật 1 tuần với 2-3 user (30 demo user — 16 sample + 14 Solutions thật)
- SMTP config → Email outbox
- Rotate credentials (admin + 30 demo + SA + vrapp + JWT)
- Schedule SQL backup Task Scheduler
D. Module Ngân sách (Budget) — Session 4 ✅ partial done
- Migration 14
AddBudgets— 4 bảng (Budgets/BudgetDetails/BudgetApprovals/BudgetChangelogs) + index BudgetId nullable trên Contract & PurchaseEvaluation - Domain —
Budget(Header) +BudgetDetail(flat row) +BudgetApproval+BudgetChangelog+ enumBudgetPhase5-state +BudgetEntityTypeHeader/Detail/Workflow BudgetPolicy.Defaulthardcoded simple 3-step (Drafter→CCM→CEO + Reject từ ChoCCM/ChoCEO về DangSoanThao)- Application CQRS ~340 LOC — Create + UpdateDraft + Transition + List + GetDetail + Delete (only DangSoanThao/TuChoi) + Detail CRUD (auto-recompute TongNganSach) + ListChangelogs
BudgetsController11 endpoint REST- Menu seed
Budgetsroot + 3 leaf (Bg_List/Bg_Create/Bg_Pending) order=27 icon Wallet - 14 demo user Solutions thật — PRO 5 + CCM 7 + ISO 1 + CEO 1 (pwd
User@123456)
Session log: 2026-04-28-chot-session-4-budget.md.
E. Pending migrations
AddPePaymentTermFields(nếu chốt UX tách field)AddPeDepartmentOpinions(nếu chọn Option A header columns)AddBudgetCodeSequences(nếu chốt format MaNganSach atomic — hiện Random.Shared)AddBudgetVersionedWorkflow(nếu user cần admin config UI thay vì hardcodedBudgetPolicy.Default)
📝 Phase 8 — Budget FE + integration (Session 5 active)
A. FE Budget pages — copy pattern PE
fe-admin/src/types/budget.ts(types + enum BudgetPhase + ApprovalDecision reuse)fe-admin/src/pages/budgets/BudgetsListPage.tsx(3-panel[320px_1fr_360px])fe-admin/src/pages/budgets/BudgetCreatePage.tsx(form Header)fe-admin/src/components/budgets/BudgetDetailTabs.tsx(Thông tin / Hạng mục)fe-admin/src/components/budgets/BudgetWorkflowPanel.tsx(Panel 3 timeline + transition + comment)- 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
- PE form thêm field
Ngân sáchselect Budget (filter Phase=DaDuyet, NamNganSach=current, ProjectId match) - Contract form tương tự — link sang Budget cho đối chiếu chi phí
- PE Detail tab thêm cột "So với ngân sách" — compute từ BudgetDetail tương ứng (match GroupCode + ItemCode)
C. Budget refinement (when needed)
- Budget MaNganSach atomic sequence — chốt format chính thức rồi thêm
AddBudgetCodeSequencesmigration +IBudgetCodeGeneratorSERIALIZABLE pattern (mirror Contract/PE) - Budget versioned workflow — admin config UI nếu Solutions cần custom step approver beyond default 3-step
🔁 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 9+ — 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