using SolutionErp.Domain.Common;

namespace SolutionErp.Domain.Master.Catalogs;

// [K1 — S164, Mig 70] Master data "Danh mục Hợp đồng" theo quy trình SOL-CCM-SP-002.v01
// (bảng 5.1 A1..C3 + mục 5.2 CEO = 86 dòng). Mỗi dòng = 1 loại hạng mục hợp đồng,
// gắn 1 trong 8 NHÓM DUYỆT (N1..N8) quyết định workflow KHKK nào áp cho phiếu.
//
// Vai ký lưu dạng TEXT (SignerRole + InitialsChain) — 2 TẦNG cố ý (QĐ-4 spec S164):
//   TEXT ở đây = chuỗi in trên khối ký giai đoạn 4 (bản cứng)
//   ⟂ ApprovalWorkflowLevel.ApproverUserId = NGƯỜI THẬT duyệt trên hệ thống.
// Limitation đã khai: TEXT KHÔNG ràng buộc máy với người-duyệt-thật.
public class ContractCatalogEntry : AuditableEntity
{
    public string Code { get; set; } = "";              // Mã dòng danh mục ("A1-01" … "CEO-01") — UNIQUE filtered [IsDeleted]=0
    public string TenVi { get; set; } = "";             // Tên tiếng Việt
    public string? TenEn { get; set; }                  // Tên tiếng Anh
    public string GroupCode { get; set; } = "";         // Section SP-002: A1..A4, B1..B3, C1..C3, CEO
    public int ApprovalGroup { get; set; }              // 1..8 → nhóm duyệt N1..N8 (validator range, không CHECK constraint)
    public string SignerRole { get; set; } = "";        // Vai KÝ CHÍNH dạng TEXT (TP.CCM / TP.PRO / PD-PM / CEO)
    public string? InitialsChain { get; set; }          // Chuỗi ký nháy Ô1→Ô4 ("TBP.CCM → NV.CCM → TBP.EQU → NV.EQU"), bỏ N/A
    public string? NduqNote { get; set; }               // Tham khảo Nghị định ủy quyền (OG-3) — seed null, nhập tay sau
    public bool IsActive { get; set; } = true;          // Ẩn khỏi picker mà không cần xoá
    public int SortOrder { get; set; }                  // Thứ tự trong section (= STT trên bảng gốc)
}
