UNPKG

emr-types

Version:

Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation

226 lines 7.71 kB
// ============================================================================ // PATIENT STATUS ENUM // ============================================================================ /** * Patient status enum representing the current status of a patient */ export var PatientStatus; (function (PatientStatus) { PatientStatus["ACTIVE"] = "active"; PatientStatus["INACTIVE"] = "inactive"; PatientStatus["PENDING"] = "pending"; PatientStatus["SUSPENDED"] = "suspended"; PatientStatus["DECEASED"] = "deceased"; PatientStatus["TRANSFERRED"] = "transferred"; PatientStatus["DISCHARGED"] = "discharged"; PatientStatus["ARCHIVED"] = "archived"; })(PatientStatus || (PatientStatus = {})); /** * Patient status categories for grouping and filtering */ export const PatientStatusCategories = { ACTIVE: [PatientStatus.ACTIVE], INACTIVE: [PatientStatus.INACTIVE, PatientStatus.SUSPENDED], PENDING: [PatientStatus.PENDING], TERMINATED: [PatientStatus.DECEASED, PatientStatus.TRANSFERRED, PatientStatus.DISCHARGED], ARCHIVED: [PatientStatus.ARCHIVED] }; /** * Patient status priority levels */ export var PatientStatusPriority; (function (PatientStatusPriority) { PatientStatusPriority["HIGH"] = "high"; PatientStatusPriority["MEDIUM"] = "medium"; PatientStatusPriority["LOW"] = "low"; })(PatientStatusPriority || (PatientStatusPriority = {})); /** * Patient status descriptions */ export const PatientStatusDescriptions = { [PatientStatus.ACTIVE]: 'Patient is currently active and receiving care', [PatientStatus.INACTIVE]: 'Patient is inactive but may return for care', [PatientStatus.PENDING]: 'Patient registration is pending approval', [PatientStatus.SUSPENDED]: 'Patient access is temporarily suspended', [PatientStatus.DECEASED]: 'Patient has passed away', [PatientStatus.TRANSFERRED]: 'Patient has been transferred to another facility', [PatientStatus.DISCHARGED]: 'Patient has been discharged from care', [PatientStatus.ARCHIVED]: 'Patient record has been archived' }; // ============================================================================ // PATIENT STATUS UTILITIES // ============================================================================ /** * Utility functions for PatientStatus */ export const PatientStatusUtils = { /** * Get the category of a patient status */ getCategory(status) { for (const [category, statuses] of Object.entries(PatientStatusCategories)) { if (statuses.includes(status)) { return category; } } return 'ACTIVE'; }, /** * Get the priority of a patient status */ getPriority(status) { switch (status) { case PatientStatus.ACTIVE: case PatientStatus.PENDING: return PatientStatusPriority.HIGH; case PatientStatus.INACTIVE: case PatientStatus.SUSPENDED: return PatientStatusPriority.MEDIUM; case PatientStatus.DECEASED: case PatientStatus.TRANSFERRED: case PatientStatus.DISCHARGED: case PatientStatus.ARCHIVED: return PatientStatusPriority.LOW; default: return PatientStatusPriority.MEDIUM; } }, /** * Check if a status is active */ isActive(status) { return PatientStatusCategories.ACTIVE.includes(status); }, /** * Check if a status is inactive */ isInactive(status) { return PatientStatusCategories.INACTIVE.includes(status); }, /** * Check if a status is pending */ isPending(status) { return PatientStatusCategories.PENDING.includes(status); }, /** * Check if a status is terminated */ isTerminated(status) { return PatientStatusCategories.TERMINATED.includes(status); }, /** * Check if a status is archived */ isArchived(status) { return PatientStatusCategories.ARCHIVED.includes(status); }, /** * Get the display name for a status */ getDisplayName(status) { return status.charAt(0).toUpperCase() + status.slice(1); }, /** * Get the description for a status */ getDescription(status) { return PatientStatusDescriptions[status] || 'No description available'; }, /** * Get all statuses in a category */ getStatusesInCategory(category) { return [...PatientStatusCategories[category]]; }, /** * Get all available statuses */ getAllStatuses() { return Object.values(PatientStatus); }, /** * Get statuses that allow patient access */ getAccessibleStatuses() { return [PatientStatus.ACTIVE, PatientStatus.PENDING]; }, /** * Get statuses that require attention */ getAttentionRequiredStatuses() { return [PatientStatus.PENDING, PatientStatus.SUSPENDED]; } }; // ============================================================================ // TYPE GUARDS // ============================================================================ /** * Type guard to check if a value is a valid PatientStatus */ export function isPatientStatus(value) { return typeof value === 'string' && Object.values(PatientStatus).includes(value); } /** * Type guard to check if a status is in a specific category */ export function isStatusInCategory(status, category) { return PatientStatusCategories[category].includes(status); } // ============================================================================ // CONSTANTS // ============================================================================ /** * Default patient status */ export const DEFAULT_PATIENT_STATUS = PatientStatus.PENDING; /** * Patient status transitions */ export const PATIENT_STATUS_TRANSITIONS = { [PatientStatus.PENDING]: [PatientStatus.ACTIVE, PatientStatus.SUSPENDED], [PatientStatus.ACTIVE]: [PatientStatus.INACTIVE, PatientStatus.SUSPENDED, PatientStatus.DECEASED, PatientStatus.TRANSFERRED, PatientStatus.DISCHARGED], [PatientStatus.INACTIVE]: [PatientStatus.ACTIVE, PatientStatus.SUSPENDED, PatientStatus.ARCHIVED], [PatientStatus.SUSPENDED]: [PatientStatus.ACTIVE, PatientStatus.INACTIVE, PatientStatus.ARCHIVED], [PatientStatus.DECEASED]: [PatientStatus.ARCHIVED], [PatientStatus.TRANSFERRED]: [PatientStatus.ARCHIVED], [PatientStatus.DISCHARGED]: [PatientStatus.ARCHIVED], [PatientStatus.ARCHIVED]: [] }; // ============================================================================ // EXAMPLES // ============================================================================ /** * Example usage of PatientStatus */ export const PatientStatusExamples = { /** * Check if status is active */ isActive: (status) => PatientStatusUtils.isActive(status), /** * Get status category */ getCategory: (status) => PatientStatusUtils.getCategory(status), /** * Get status priority */ getPriority: (status) => PatientStatusUtils.getPriority(status), /** * Get display name */ getDisplayName: (status) => PatientStatusUtils.getDisplayName(status), /** * Get description */ getDescription: (status) => PatientStatusUtils.getDescription(status), /** * Get accessible statuses */ getAccessibleStatuses: () => PatientStatusUtils.getAccessibleStatuses(), /** * Get attention required statuses */ getAttentionRequiredStatuses: () => PatientStatusUtils.getAttentionRequiredStatuses() }; //# sourceMappingURL=PatientStatus.js.map