diff --git a/.Net Capstone Project/PatientChartDto.cs b/.Net Capstone Project/PatientChartDto.cs new file mode 100644 index 0000000..b30d173 --- /dev/null +++ b/.Net Capstone Project/PatientChartDto.cs @@ -0,0 +1,193 @@ +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; +}