namespace Admin.NET.Plugin.AiDOP.ChatBI; public sealed class ChatBIAskInput { public string? Question { get; set; } public string? Entry { get; set; } public string? ModuleCode { get; set; } public long FactoryId { get; set; } = 1; public Dictionary? Filters { get; set; } } public sealed class ChatBIAnswerOutput { public string Source { get; set; } = "local"; public string Intent { get; set; } = string.Empty; public string FocusMetricCode { get; set; } = string.Empty; public string Summary { get; set; } = string.Empty; public string AnswerText { get; set; } = string.Empty; public string ContextTitle { get; set; } = string.Empty; public List Sections { get; set; } = new(); public List Metrics { get; set; } = new(); public List Suggestions { get; set; } = new(); public List Actions { get; set; } = new(); public bool IsFallback { get; set; } } public sealed class ChatBIAnswerSection { public string Title { get; set; } = string.Empty; public string Content { get; set; } = string.Empty; public string Tone { get; set; } = string.Empty; } public sealed class ChatBIMetricCard { public long Id { get; set; } public long? ParentId { get; set; } public string ModuleCode { get; set; } = string.Empty; public string MetricCode { get; set; } = string.Empty; public string MetricName { get; set; } = string.Empty; public int MetricLevel { get; set; } public decimal? CurrentValue { get; set; } public decimal? TargetValue { get; set; } public string Unit { get; set; } = string.Empty; public string StatusColor { get; set; } = string.Empty; public string GapLabel { get; set; } = string.Empty; public string Department { get; set; } = string.Empty; public string TrendFlag { get; set; } = string.Empty; } public sealed class ChatBIAction { public string Label { get; set; } = string.Empty; public string Url { get; set; } = string.Empty; }