using ClinicalInsightsPro.API.Models; namespace ClinicalInsightsPro.API.DTOs; /// /// Everything the dashboard's Chart tab needs in ONE payload. /// /// The demographic fields at the top are the patient header; the five lists /// below are the chart panels. dashboard.js reads chart.conditions.length, /// chart.allergies.length, etc. — so these lists must ALWAYS be non-null, /// even when empty. That is why each one is initialised to an empty list /// instead of being left null. /// public class PatientChartDto { // ---- Patient header (shown above the chart panels) ---- public string PatientId { get; set; } = string.Empty; public string FullName { get; set; } = string.Empty; public int Age { get; set; } public string MedicalRecordNumber { get; set; } = string.Empty; public string IdentifierSystem { get; set; } = string.Empty; public string IdentifierValue { get; set; } = string.Empty; public string NameUse { get; set; } = string.Empty; public string? Prefix { get; set; } public string GivenName { get; set; } = string.Empty; public string FamilyName { get; set; } = string.Empty; public string TelecomSystem { get; set; } = "phone"; public string TelecomUse { get; set; } = "work"; public string TelecomValue { get; set; } = string.Empty; public string Gender { get; set; } = string.Empty; // Stored on Patient (not a FHIR field) so the dashboard can show them. public string? BloodGroup { get; set; } public string? Email { get; set; } public DateTime BirthDate { get; set; } public string AddressUse { get; set; } = "home"; public string AddressType { get; set; } = "both"; public string? AddressLine { get; set; } public string City { get; set; } = string.Empty; public string State { get; set; } = string.Empty; public string PostalCode { get; set; } = string.Empty; public string? MaritalStatusSystem { get; set; } public string? MaritalStatusCode { get; set; } public string? MaritalStatusDisplay { get; set; } public string? ContactNameUse { get; set; } public string? ContactPrefix { get; set; } public string? ContactTelecomSystem { get; set; } public string? ContactTelecomUse { get; set; } public string? ContactTelecomValue { get; set; } public string? ContactAddressUse { get; set; } public string? ContactAddressType { get; set; } public string? ContactAddressLine { get; set; } public string? ContactCity { get; set; } public string? ContactState { get; set; } public string? ContactPostalCode { get; set; } public string? ContactGender { get; set; } public string? ContactOrganizationId { get; set; } public DateTime? ContactPeriodStart { get; set; } public DateTime? ContactPeriodEnd { get; set; } public string? ManagingOrganizationId { get; set; } public string? PhotoContentType { get; set; } public string? PhotoUrl { get; set; } public string? PhotoTitle { get; set; } public string? GeneralPractitionerId { get; set; } // ---- Chart panels ---- public List Conditions { get; set; } = new(); public List Allergies { get; set; } = new(); public List Medications { get; set; } = new(); public List Observations { get; set; } = new(); public List Encounters { get; set; } = new(); } // Each chart row DTO mirrors the columns that actually exist on the matching // entity — no invented "substance"/"dosage"/"value" fields, so what the UI // shows is exactly what is stored in PostgreSQL. public class ChartConditionDto { public string Id { get; set; } = string.Empty; public string Code { get; set; } = string.Empty; public string Display { get; set; } = string.Empty; public string ClinicalStatus { get; set; } = string.Empty; public string VerificationStatus { get; set; } = string.Empty; public string Severity { get; set; } = string.Empty; public DateTime? OnsetDate { get; set; } public DateTime? AbatementDate { get; set; } public DateTime? RecordedDate { get; set; } } public class ChartAllergyDto { public string Id { get; set; } = string.Empty; public string Type { get; set; } = string.Empty; public string ClinicalStatus { get; set; } = string.Empty; public string VerificationStatus { get; set; } = string.Empty; public string? Criticality { get; set; } public string? RecorderPractitionerId { get; set; } } public class ChartMedicationDto { public string Id { get; set; } = string.Empty; public string MedicationCode { get; set; } = string.Empty; public string? MedicationDisplay { get; set; } public string Status { get; set; } = string.Empty; public string Intent { get; set; } = string.Empty; public string? Priority { get; set; } } public class ChartObservationDto { public string Id { get; set; } = string.Empty; public string Code { get; set; } = string.Empty; public string? Display { get; set; } public string Status { get; set; } = string.Empty; public string? CategoryDisplay { get; set; } public string? InterpretationCode { get; set; } public string? InterpretationDisplay { get; set; } public DateTimeOffset? EffectiveDate { get; set; } public string? NoteText { get; set; } } public class ChartEncounterDto { public string Id { get; set; } = string.Empty; public string Status { get; set; } = string.Empty; public string ClassCode { get; set; } = string.Empty; public string ClassDisplay { get; set; } = string.Empty; public string? TypeDisplay { get; set; } public string? ServiceTypeDisplay { get; set; } public DateTime PeriodStart { get; set; } public DateTime PeriodEnd { get; set; } } public class PatientSummaryDto { public string Id { get; set; } = string.Empty; public string FullName { get; set; } = string.Empty; public int Age { get; set; } public string Gender { get; set; } = string.Empty; public string MedicalRecordNumber { get; set; } = string.Empty; }