pqhuy1987 ecd5f7e9d9 [CLAUDE] Domain+Infra: Migration 17 — manual budget fields cho PE + HĐ
Chunk 1/5 — DB schema + Domain layer cho fallback "user nhập số tiền ngân sách
tay khi chưa link Budget entity" (UAT request 2026-05-07). Áp cho cả PE + HĐ
(mirror logic per user Q3 chốt).

Migration 17 `AddManualBudgetFieldsToPeAndContract` — 4 ALTER:
  - PurchaseEvaluations.BudgetManualName  nvarchar(200) NULL
  - PurchaseEvaluations.BudgetManualAmount decimal(18,2) NULL
  - Contracts.BudgetManualName            nvarchar(200) NULL
  - Contracts.BudgetManualAmount          decimal(18,2) NULL

Validation Q2: cả 2 cùng null OK (PE/HĐ chưa có ngân sách gì cả). KHÔNG XOR
với BudgetId — tạm thời cho phép cả 2 cùng có (BE prefer BudgetId nếu set vì
có Phase=DaDuyet guarantee, manual chỉ là fallback hiển thị/note).

Files:
  ~ Domain/PurchaseEvaluations/PurchaseEvaluation.cs — 2 property mới
  ~ Domain/Contracts/Contract.cs — 2 property mới
  ~ Infrastructure/Persistence/Configurations/PurchaseEvaluationConfiguration.cs
    — HasMaxLength(200) + HasPrecision(18,2)
  ~ Infrastructure/Persistence/Configurations/ContractConfiguration.cs — same
  + Migration 17 .cs + .Designer.cs (3-file rule per ef-core-migration skill)
  ~ ApplicationDbContextModelSnapshot.cs (auto-overwrite)

Verify:
  - dotnet ef migrations add → 3 file gen sạch (4 AddColumn Up + 4 DropColumn Down)
  - dotnet ef database update → applied LocalDB OK
  - dotnet test SolutionErp.slnx → 83 pass (54 Domain + 29 Infra) — không regression

Next: Chunk 2 App CQRS Create/Update commands + DTO + AutoMapper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 12:30:59 +07:00

SOLUTION_ERP

Hệ thống quản lý Hợp đồng Nhà cung cấp / Thầu phụ / Tổ đội cho Công ty TNHH Xây dựng Solutions.

📘 AI context: CLAUDE.md (pointer) → docs/CLAUDE.md (full)

Quick start (dev)

Yêu cầu: .NET 10 SDK, Node 20+, SQL Server (local hoặc qua Docker).

# 1. DB — chạy SQL Server qua Docker (nếu chưa có local)
docker compose up -d

# 2. Backend — migration + run Api (port 5443)
dotnet ef database update --project src/Backend/SolutionErp.Infrastructure --startup-project src/Backend/SolutionErp.Api
dotnet run --project src/Backend/SolutionErp.Api

# 3. Frontend admin (port 8082) — terminal mới
cd fe-admin
npm install
npm run dev

# 4. Frontend user (port 8080) — terminal mới
cd fe-user
npm install
npm run dev

Admin mặc định (sẽ seed sau Phase 1): admin@solutionerp.local / Admin@123456

Architecture

fe-admin (:8082)          fe-user (:8080)
       │                        │
       └────── /api proxy ──────┘
                  ▼
         SolutionErp.Api (:5443)
                  │
   ┌──────────────┼──────────────┐
   ▼              ▼              ▼
 Application   Domain      Infrastructure ── SQL Server

Tech stack

  • Backend: .NET 10 + Clean Architecture + CQRS (MediatR) + FluentValidation + AutoMapper + EF Core + ASP.NET Identity + JWT
  • Frontend: React 18 + Vite + TypeScript + Tailwind + shadcn/ui + TanStack Query
  • DB: SQL Server 2022
  • Deploy: Windows Server + IIS

Roadmap

Phase Tuần Focus
0 Draft T1 Scaffold, parse FORM + QUY_TRINH
1 Alpha Core T2-4 Auth, Permission, CRUD master
2 Form Engine T5-6 Render template docx/xlsx
3 Workflow T7-9 State machine 9 phase
4 Report + Polish T10-11 Dashboard + Excel export
5 Production T12-13 CI/CD IIS, UAT, go-live

Chi tiết ở docs/changelog/migration-todos.md.

License

Proprietary — Công ty TNHH Xây dựng Solutions.

Description
H? th?ng qu?n l� H?p d?ng NCC/Th?u ph?/T? d?i � .NET 10 Clean Arch + 2 React FE
Readme 8.6 MiB
Languages
C# 55%
TypeScript 42.7%
PowerShell 1.3%
JavaScript 0.3%
CSS 0.3%
Other 0.3%