namespace MarketingDAL.DTO.Persona; /// /// MarketMind AI master data — a buyer Persona (MPERSONA), attached to a Segment and optionally /// specialized to one ICP. Parent of NDPHypothesis and EmotionalDriver rows. /// public class PersonaDTO { #region Persona public int PersonaId { get; set; } public string PersonaCode { get; set; } = string.Empty; public string PersonaName { get; set; } = string.Empty; public int SegmentId { get; set; } public string? SegmentCode { get; set; } public string? SegmentName { get; set; } /// /// Optional FK to MICP. Per CLAUDE-DB-SCHEMA.md's "optional FK" convention this is never NULL /// in the DB — it defaults to -1 ("not applicable") when a Persona is defined at the Segment /// level without a specific ICP, the same sentinel convention LeadDTO uses for OUId/PartyId/etc. /// (deliberately NOT a nullable int, despite the brief's "nullable FK" wording, to match this /// repo's real DDL convention rather than introduce a NULLable optional-FK column). /// public int ICPId { get; set; } = -1; public string? ICPCode { get; set; } public string? ICPName { get; set; } public string? Demographics { get; set; } public string? RoleContext { get; set; } /// Free text — e.g. "Decision Maker" / "Influencer" / "User". Not enumerated: real-world /// job titles and buying-committee roles vary too much for a fixed enum. public string? DecisionAuthority { get; set; } public string? PainPoints { get; set; } public string? Motivations { get; set; } #endregion #region Base public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } public string? CreatedByName { get; set; } public int ModifiedById { get; set; } public DateTime ModifiedOn { get; set; } public string? ModifiedByName { get; set; } #endregion #region Standard public short SortOrder { get; set; } public byte Status { get; set; } public short Version { get; set; } public int TenantId { get; set; } #endregion }