emr-types
Version:
Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation
226 lines • 7.71 kB
JavaScript
// ============================================================================
// 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