[CLAUDE] Domain+Infra: Migration 16 — 2-stage dept approval + smart reject schema
Chunk A của feature 2-stage department approval (Phase 9). 3 ràng buộc gộp
1 migration để rollback atomic.
Schema changes:
1. Smart reject (3 ALTER):
- Contracts.RejectedFromPhase int NULL
- PurchaseEvaluations.RejectedFromPhase int NULL
- Budgets.RejectedFromPhase int NULL
Lưu phase nguồn khi reject để Drafter trình lại quay về đúng phase
(skip phase trung gian đã duyệt) thay vì đi tuần tự từ DangSoanThao.
2. Bypass per-user (1 ALTER):
- Users.CanBypassReview bit NOT NULL DEFAULT 0
Khi true → NV được duyệt thay TPB (skip Stage Review, đẩy thẳng
Stage Confirm). Audit qua DepartmentApproval.IsBypassed=true.
3. 2-stage dept approval (3 CREATE TABLE):
- ContractDepartmentApprovals
- PurchaseEvaluationDepartmentApprovals
- BudgetDepartmentApprovals
Schema (chung):
- Id, *Id FK Cascade, PhaseAtApproval int, DepartmentId FK
- Stage enum (1=Review NV, 2=Confirm TPB)
- ApproverUserId, ApproverRoleSnapshot, Comment, ApprovedAt
- IsBypassed bit (mark NV bypass)
- AuditableEntity (CreatedAt/By/UpdatedAt/By/IsDeleted/...)
Indexes:
- UNIQUE (TargetId, PhaseAtApproval, DepartmentId, Stage)
- Single: TargetId, DepartmentId, ApproverUserId
Files:
- Domain: 4 entity update (Contract/PE/Budget/User add field) + 1 enum mới
ApprovalStage + 3 entity DepartmentApproval mới
- Infrastructure: 3 EntityConfiguration update + 1 file mới
DepartmentApprovalsConfiguration với 3 config classes
- IApplicationDbContext: thêm 3 DbSet
- ApplicationDbContext: thêm 3 DbSet
- Migration 16: 3 file (.cs + Designer.cs + Snapshot.cs) — 3-file rule
Verify:
- Build pass (2 warning DocxRenderer cũ, không liên quan)
- 77 unit test pass (54 Domain + 23 Infra) — Domain policy chưa update,
test pass nguyên không regression
Note: KHÔNG khác PurchaseEvaluationDepartmentOpinion (Migration 15) —
Opinion là sign-off block "Ý kiến 4 phòng ban" trên header phiếu.
DepartmentApproval mới là 2-stage approval workflow per phase.
Tổng sau Migration 16: 55 bảng (52+3), 16 migration. Chunk B-E sẽ implement
Application + FE + Tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>