UNPKG

emr-types

Version:

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

473 lines 20 kB
/** * User Role Enums * * Predefined user roles for EMR system */ /** * System User Roles * * Core roles for EMR system functionality */ export var UserRole; (function (UserRole) { // System Administration UserRole["SYSTEM_ADMIN"] = "system_admin"; UserRole["TENANT_ADMIN"] = "tenant_admin"; UserRole["SUPER_ADMIN"] = "super_admin"; // Medical Staff UserRole["DOCTOR"] = "doctor"; UserRole["NURSE"] = "nurse"; UserRole["SPECIALIST"] = "specialist"; UserRole["RESIDENT"] = "resident"; UserRole["INTERN"] = "intern"; // Support Staff UserRole["RECEPTIONIST"] = "receptionist"; UserRole["MEDICAL_ASSISTANT"] = "medical_assistant"; UserRole["LAB_TECHNICIAN"] = "lab_technician"; UserRole["PHARMACIST"] = "pharmacist"; // Administrative Staff UserRole["ADMINISTRATOR"] = "administrator"; UserRole["BILLING_SPECIALIST"] = "billing_specialist"; UserRole["IT_SUPPORT"] = "it_support"; UserRole["HR_MANAGER"] = "hr_manager"; // Patient Roles UserRole["PATIENT"] = "patient"; UserRole["GUARDIAN"] = "guardian"; UserRole["FAMILY_MEMBER"] = "family_member"; // External Roles UserRole["CONSULTANT"] = "consultant"; UserRole["VENDOR"] = "vendor"; UserRole["INSURANCE_PROVIDER"] = "insurance_provider"; })(UserRole || (UserRole = {})); /** * User Role Categories */ export var UserRoleCategory; (function (UserRoleCategory) { UserRoleCategory["SYSTEM"] = "system"; UserRoleCategory["MEDICAL"] = "medical"; UserRoleCategory["SUPPORT"] = "support"; UserRoleCategory["ADMINISTRATIVE"] = "administrative"; UserRoleCategory["PATIENT"] = "patient"; UserRoleCategory["EXTERNAL"] = "external"; })(UserRoleCategory || (UserRoleCategory = {})); /** * User Role Priority Levels */ export var UserRolePriority; (function (UserRolePriority) { UserRolePriority["CRITICAL"] = "critical"; UserRolePriority["HIGH"] = "high"; UserRolePriority["MEDIUM"] = "medium"; UserRolePriority["LOW"] = "low"; UserRolePriority["MINIMAL"] = "minimal"; })(UserRolePriority || (UserRolePriority = {})); /** * User Role Permissions */ export var UserPermission; (function (UserPermission) { // System Permissions UserPermission["SYSTEM_ACCESS"] = "system_access"; UserPermission["TENANT_MANAGEMENT"] = "tenant_management"; UserPermission["USER_MANAGEMENT"] = "user_management"; UserPermission["ROLE_MANAGEMENT"] = "role_management"; // Patient Management UserPermission["PATIENT_READ"] = "patient_read"; UserPermission["PATIENT_CREATE"] = "patient_create"; UserPermission["PATIENT_UPDATE"] = "patient_update"; UserPermission["PATIENT_DELETE"] = "patient_delete"; UserPermission["PATIENT_SEARCH"] = "patient_search"; // Medical Records UserPermission["MEDICAL_RECORD_READ"] = "medical_record_read"; UserPermission["MEDICAL_RECORD_CREATE"] = "medical_record_create"; UserPermission["MEDICAL_RECORD_UPDATE"] = "medical_record_update"; UserPermission["MEDICAL_RECORD_DELETE"] = "medical_record_delete"; // Appointments UserPermission["APPOINTMENT_READ"] = "appointment_read"; UserPermission["APPOINTMENT_CREATE"] = "appointment_create"; UserPermission["APPOINTMENT_UPDATE"] = "appointment_update"; UserPermission["APPOINTMENT_DELETE"] = "appointment_delete"; UserPermission["APPOINTMENT_SCHEDULE"] = "appointment_schedule"; // Billing UserPermission["BILLING_READ"] = "billing_read"; UserPermission["BILLING_CREATE"] = "billing_create"; UserPermission["BILLING_UPDATE"] = "billing_update"; UserPermission["BILLING_DELETE"] = "billing_delete"; // Reports UserPermission["REPORT_READ"] = "report_read"; UserPermission["REPORT_CREATE"] = "report_create"; UserPermission["REPORT_EXPORT"] = "report_export"; // Settings UserPermission["SETTINGS_READ"] = "settings_read"; UserPermission["SETTINGS_UPDATE"] = "settings_update"; // Audit UserPermission["AUDIT_READ"] = "audit_read"; UserPermission["AUDIT_EXPORT"] = "audit_export"; })(UserPermission || (UserPermission = {})); /** * User Role Utilities */ export const UserRoleUtils = { /** * Get role category */ getCategory(role) { const roleCategories = { // System roles [UserRole.SYSTEM_ADMIN]: UserRoleCategory.SYSTEM, [UserRole.TENANT_ADMIN]: UserRoleCategory.SYSTEM, [UserRole.SUPER_ADMIN]: UserRoleCategory.SYSTEM, // Medical roles [UserRole.DOCTOR]: UserRoleCategory.MEDICAL, [UserRole.NURSE]: UserRoleCategory.MEDICAL, [UserRole.SPECIALIST]: UserRoleCategory.MEDICAL, [UserRole.RESIDENT]: UserRoleCategory.MEDICAL, [UserRole.INTERN]: UserRoleCategory.MEDICAL, // Support roles [UserRole.RECEPTIONIST]: UserRoleCategory.SUPPORT, [UserRole.MEDICAL_ASSISTANT]: UserRoleCategory.SUPPORT, [UserRole.LAB_TECHNICIAN]: UserRoleCategory.SUPPORT, [UserRole.PHARMACIST]: UserRoleCategory.SUPPORT, // Administrative roles [UserRole.ADMINISTRATOR]: UserRoleCategory.ADMINISTRATIVE, [UserRole.BILLING_SPECIALIST]: UserRoleCategory.ADMINISTRATIVE, [UserRole.IT_SUPPORT]: UserRoleCategory.ADMINISTRATIVE, [UserRole.HR_MANAGER]: UserRoleCategory.ADMINISTRATIVE, // Patient roles [UserRole.PATIENT]: UserRoleCategory.PATIENT, [UserRole.GUARDIAN]: UserRoleCategory.PATIENT, [UserRole.FAMILY_MEMBER]: UserRoleCategory.PATIENT, // External roles [UserRole.CONSULTANT]: UserRoleCategory.EXTERNAL, [UserRole.VENDOR]: UserRoleCategory.EXTERNAL, [UserRole.INSURANCE_PROVIDER]: UserRoleCategory.EXTERNAL }; return roleCategories[role]; }, /** * Get role priority */ getPriority(role) { const rolePriorities = { // Critical roles [UserRole.SYSTEM_ADMIN]: UserRolePriority.CRITICAL, [UserRole.SUPER_ADMIN]: UserRolePriority.CRITICAL, // High priority roles [UserRole.TENANT_ADMIN]: UserRolePriority.HIGH, [UserRole.DOCTOR]: UserRolePriority.HIGH, [UserRole.SPECIALIST]: UserRolePriority.HIGH, // Medium priority roles [UserRole.NURSE]: UserRolePriority.MEDIUM, [UserRole.RESIDENT]: UserRolePriority.MEDIUM, [UserRole.ADMINISTRATOR]: UserRolePriority.MEDIUM, [UserRole.PHARMACIST]: UserRolePriority.MEDIUM, // Low priority roles [UserRole.RECEPTIONIST]: UserRolePriority.LOW, [UserRole.MEDICAL_ASSISTANT]: UserRolePriority.LOW, [UserRole.LAB_TECHNICIAN]: UserRolePriority.LOW, [UserRole.BILLING_SPECIALIST]: UserRolePriority.LOW, [UserRole.IT_SUPPORT]: UserRolePriority.LOW, [UserRole.HR_MANAGER]: UserRolePriority.LOW, [UserRole.INTERN]: UserRolePriority.LOW, // Minimal priority roles [UserRole.PATIENT]: UserRolePriority.MINIMAL, [UserRole.GUARDIAN]: UserRolePriority.MINIMAL, [UserRole.FAMILY_MEMBER]: UserRolePriority.MINIMAL, [UserRole.CONSULTANT]: UserRolePriority.MINIMAL, [UserRole.VENDOR]: UserRolePriority.MINIMAL, [UserRole.INSURANCE_PROVIDER]: UserRolePriority.MINIMAL }; return rolePriorities[role]; }, /** * Get default permissions for role */ getDefaultPermissions(role) { const rolePermissions = { [UserRole.SYSTEM_ADMIN]: [ UserPermission.SYSTEM_ACCESS, UserPermission.TENANT_MANAGEMENT, UserPermission.USER_MANAGEMENT, UserPermission.ROLE_MANAGEMENT, UserPermission.AUDIT_READ, UserPermission.AUDIT_EXPORT ], [UserRole.TENANT_ADMIN]: [ UserPermission.USER_MANAGEMENT, UserPermission.ROLE_MANAGEMENT, UserPermission.PATIENT_READ, UserPermission.PATIENT_CREATE, UserPermission.PATIENT_UPDATE, UserPermission.PATIENT_DELETE, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE, UserPermission.MEDICAL_RECORD_UPDATE, UserPermission.MEDICAL_RECORD_DELETE, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE, UserPermission.APPOINTMENT_DELETE, UserPermission.APPOINTMENT_SCHEDULE, UserPermission.BILLING_READ, UserPermission.BILLING_CREATE, UserPermission.BILLING_UPDATE, UserPermission.BILLING_DELETE, UserPermission.REPORT_READ, UserPermission.REPORT_CREATE, UserPermission.REPORT_EXPORT, UserPermission.SETTINGS_READ, UserPermission.SETTINGS_UPDATE, UserPermission.AUDIT_READ ], [UserRole.SUPER_ADMIN]: [ UserPermission.SYSTEM_ACCESS, UserPermission.TENANT_MANAGEMENT, UserPermission.USER_MANAGEMENT, UserPermission.ROLE_MANAGEMENT, UserPermission.AUDIT_READ, UserPermission.AUDIT_EXPORT ], [UserRole.DOCTOR]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE, UserPermission.MEDICAL_RECORD_UPDATE, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE, UserPermission.APPOINTMENT_SCHEDULE, UserPermission.REPORT_READ, UserPermission.REPORT_CREATE ], [UserRole.NURSE]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE, UserPermission.MEDICAL_RECORD_UPDATE, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE ], [UserRole.SPECIALIST]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE, UserPermission.MEDICAL_RECORD_UPDATE, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE, UserPermission.APPOINTMENT_SCHEDULE, UserPermission.REPORT_READ, UserPermission.REPORT_CREATE ], [UserRole.RESIDENT]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE, UserPermission.MEDICAL_RECORD_UPDATE, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE ], [UserRole.INTERN]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.APPOINTMENT_READ ], [UserRole.RECEPTIONIST]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_CREATE, UserPermission.PATIENT_UPDATE, UserPermission.PATIENT_SEARCH, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE, UserPermission.APPOINTMENT_SCHEDULE ], [UserRole.MEDICAL_ASSISTANT]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE ], [UserRole.LAB_TECHNICIAN]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE ], [UserRole.PHARMACIST]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ, UserPermission.MEDICAL_RECORD_CREATE ], [UserRole.ADMINISTRATOR]: [ UserPermission.USER_MANAGEMENT, UserPermission.PATIENT_READ, UserPermission.PATIENT_CREATE, UserPermission.PATIENT_UPDATE, UserPermission.PATIENT_DELETE, UserPermission.PATIENT_SEARCH, UserPermission.APPOINTMENT_READ, UserPermission.APPOINTMENT_CREATE, UserPermission.APPOINTMENT_UPDATE, UserPermission.APPOINTMENT_DELETE, UserPermission.APPOINTMENT_SCHEDULE, UserPermission.BILLING_READ, UserPermission.BILLING_CREATE, UserPermission.BILLING_UPDATE, UserPermission.BILLING_DELETE, UserPermission.REPORT_READ, UserPermission.REPORT_CREATE, UserPermission.REPORT_EXPORT, UserPermission.SETTINGS_READ, UserPermission.SETTINGS_UPDATE ], [UserRole.BILLING_SPECIALIST]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.BILLING_READ, UserPermission.BILLING_CREATE, UserPermission.BILLING_UPDATE, UserPermission.BILLING_DELETE, UserPermission.REPORT_READ, UserPermission.REPORT_CREATE ], [UserRole.IT_SUPPORT]: [ UserPermission.SETTINGS_READ, UserPermission.SETTINGS_UPDATE ], [UserRole.HR_MANAGER]: [ UserPermission.USER_MANAGEMENT, UserPermission.ROLE_MANAGEMENT, UserPermission.REPORT_READ, UserPermission.REPORT_CREATE ], [UserRole.PATIENT]: [ UserPermission.PATIENT_READ ], [UserRole.GUARDIAN]: [ UserPermission.PATIENT_READ ], [UserRole.FAMILY_MEMBER]: [ UserPermission.PATIENT_READ ], [UserRole.CONSULTANT]: [ UserPermission.PATIENT_READ, UserPermission.PATIENT_SEARCH, UserPermission.MEDICAL_RECORD_READ ], [UserRole.VENDOR]: [ UserPermission.PATIENT_READ ], [UserRole.INSURANCE_PROVIDER]: [ UserPermission.PATIENT_READ, UserPermission.BILLING_READ ] }; return rolePermissions[role] || []; }, /** * Check if role is system role */ isSystemRole(role) { return this.getCategory(role) === UserRoleCategory.SYSTEM; }, /** * Check if role is medical role */ isMedicalRole(role) { return this.getCategory(role) === UserRoleCategory.MEDICAL; }, /** * Check if role is administrative role */ isAdministrativeRole(role) { return this.getCategory(role) === UserRoleCategory.ADMINISTRATIVE; }, /** * Check if role is patient role */ isPatientRole(role) { return this.getCategory(role) === UserRoleCategory.PATIENT; }, /** * Check if role has high priority */ isHighPriority(role) { const priority = this.getPriority(role); return priority === UserRolePriority.CRITICAL || priority === UserRolePriority.HIGH; }, /** * Get role display name */ getDisplayName(role) { const displayNames = { [UserRole.SYSTEM_ADMIN]: 'System Administrator', [UserRole.TENANT_ADMIN]: 'Tenant Administrator', [UserRole.SUPER_ADMIN]: 'Super Administrator', [UserRole.DOCTOR]: 'Doctor', [UserRole.NURSE]: 'Nurse', [UserRole.SPECIALIST]: 'Specialist', [UserRole.RESIDENT]: 'Resident', [UserRole.INTERN]: 'Intern', [UserRole.RECEPTIONIST]: 'Receptionist', [UserRole.MEDICAL_ASSISTANT]: 'Medical Assistant', [UserRole.LAB_TECHNICIAN]: 'Lab Technician', [UserRole.PHARMACIST]: 'Pharmacist', [UserRole.ADMINISTRATOR]: 'Administrator', [UserRole.BILLING_SPECIALIST]: 'Billing Specialist', [UserRole.IT_SUPPORT]: 'IT Support', [UserRole.HR_MANAGER]: 'HR Manager', [UserRole.PATIENT]: 'Patient', [UserRole.GUARDIAN]: 'Guardian', [UserRole.FAMILY_MEMBER]: 'Family Member', [UserRole.CONSULTANT]: 'Consultant', [UserRole.VENDOR]: 'Vendor', [UserRole.INSURANCE_PROVIDER]: 'Insurance Provider' }; return displayNames[role] || role; }, /** * Get role description */ getDescription(role) { const descriptions = { [UserRole.SYSTEM_ADMIN]: 'Full system access and administration capabilities', [UserRole.TENANT_ADMIN]: 'Tenant-level administration and management', [UserRole.SUPER_ADMIN]: 'Super administrator with all privileges', [UserRole.DOCTOR]: 'Medical doctor with patient care responsibilities', [UserRole.NURSE]: 'Registered nurse with patient care duties', [UserRole.SPECIALIST]: 'Medical specialist in specific fields', [UserRole.RESIDENT]: 'Medical resident in training', [UserRole.INTERN]: 'Medical intern in training', [UserRole.RECEPTIONIST]: 'Front desk and patient coordination', [UserRole.MEDICAL_ASSISTANT]: 'Assists medical staff with patient care', [UserRole.LAB_TECHNICIAN]: 'Laboratory testing and analysis', [UserRole.PHARMACIST]: 'Medication dispensing and consultation', [UserRole.ADMINISTRATOR]: 'General administrative duties', [UserRole.BILLING_SPECIALIST]: 'Medical billing and insurance', [UserRole.IT_SUPPORT]: 'Technical support and maintenance', [UserRole.HR_MANAGER]: 'Human resources management', [UserRole.PATIENT]: 'Patient with limited access to own records', [UserRole.GUARDIAN]: 'Legal guardian for patient', [UserRole.FAMILY_MEMBER]: 'Family member with patient access', [UserRole.CONSULTANT]: 'External medical consultant', [UserRole.VENDOR]: 'External vendor or supplier', [UserRole.INSURANCE_PROVIDER]: 'Insurance company representative' }; return descriptions[role] || 'No description available'; } }; //# sourceMappingURL=UserRole.js.map