module.exports = { /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async up(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.createTable('users', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('roles', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('permissions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('departments', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('patients', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('patient_dossiers', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('tumor_cases', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('treatment_protocols', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('chemotherapy_orders', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('chemo_drug_items', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('radiotherapy_plans', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('radiotherapy_fractions', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('appointments', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('clinical_visits', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('lab_orders', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('lab_results', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('lab_result_items', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('imaging_orders', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('imaging_reports', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('adverse_events', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('medication_administrations', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.createTable('task_notes', { id: { type: Sequelize.DataTypes.UUID, defaultValue: Sequelize.DataTypes.UUIDV4, primaryKey: true, }, createdById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, updatedById: { type: Sequelize.DataTypes.UUID, references: { key: 'id', model: 'users', }, }, createdAt: { type: Sequelize.DataTypes.DATE }, updatedAt: { type: Sequelize.DataTypes.DATE }, deletedAt: { type: Sequelize.DataTypes.DATE }, importHash: { type: Sequelize.DataTypes.STRING(255), allowNull: true, unique: true, }, }, { transaction }); await queryInterface.addColumn( 'users', 'firstName', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'lastName', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'phoneNumber', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'disabled', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'users', 'password', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'emailVerified', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction } ); await queryInterface.addColumn( 'users', 'emailVerificationToken', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'emailVerificationTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'users', 'passwordResetToken', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'passwordResetTokenExpiresAt', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'users', 'provider', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'users', 'app_roleId', { type: Sequelize.DataTypes.UUID, references: { model: 'roles', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'roles', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'roles', 'role_customization', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'departments', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'departments', 'code', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'departments', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'departments', 'phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'departments', 'head_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'patients', 'medical_record_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'national_id', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'full_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'date_of_birth', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'patients', 'sex', { type: Sequelize.DataTypes.ENUM, values: ['male','female','other'], }, { transaction } ); await queryInterface.addColumn( 'patients', 'phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'address', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'emergency_contact_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'emergency_contact_phone', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patients', 'departmentId', { type: Sequelize.DataTypes.UUID, references: { model: 'departments', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'patients', 'status', { type: Sequelize.DataTypes.ENUM, values: ['active','inactive','deceased','transferred'], }, { transaction } ); await queryInterface.addColumn( 'patients', 'registration_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'chief_complaint', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'history_of_present_illness', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'past_medical_history', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'surgical_history', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'family_history', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'allergies', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'current_medications', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'patient_dossiers', 'last_updated_on', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'case_number', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'cancer_type', { type: Sequelize.DataTypes.ENUM, values: ['breast','lung','colorectal','prostate','cervical','ovarian','lymphoma','leukemia','head_and_neck','skin','gastric','pancreatic','liver','brain','other'], }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'primary_site', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'histology', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'biomarkers', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'stage_system', { type: Sequelize.DataTypes.ENUM, values: ['tnm','ann_arbor','figo','other'], }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'stage', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'diagnosis_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'intent', { type: Sequelize.DataTypes.ENUM, values: ['curative','adjuvant','neoadjuvant','palliative','supportive'], }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'status', { type: Sequelize.DataTypes.ENUM, values: ['new','on_treatment','follow_up','closed'], }, { transaction } ); await queryInterface.addColumn( 'tumor_cases', 'primary_oncologistId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'protocol_type', { type: Sequelize.DataTypes.ENUM, values: ['chemotherapy','radiotherapy','combined','immunotherapy','hormonal','targeted','supportive'], }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'description', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'planned_cycles', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'cycle_length_days', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'start_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'end_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'status', { type: Sequelize.DataTypes.ENUM, values: ['planned','active','completed','on_hold','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'treatment_protocols', 'prescribing_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'protocolId', { type: Sequelize.DataTypes.UUID, references: { model: 'treatment_protocols', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'cycle_number', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'day_in_cycle', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'planned_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'route', { type: Sequelize.DataTypes.ENUM, values: ['iv','po','sc','im','other'], }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'status', { type: Sequelize.DataTypes.ENUM, values: ['planned','verified','prepared','administered','held','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'pre_medications', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'chemotherapy_orders', 'responsible_nurseId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'chemo_orderId', { type: Sequelize.DataTypes.UUID, references: { model: 'chemotherapy_orders', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'drug_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'dose', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'dose_unit', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'calculated_bsa', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'dose_per_m2', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'diluent_volume_ml', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'chemo_drug_items', 'administration_instructions', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'protocolId', { type: Sequelize.DataTypes.UUID, references: { model: 'treatment_protocols', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'plan_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'site', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'total_dose_gy', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'fractions_planned', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'dose_per_fraction_gy', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'planning_ct_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'start_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'end_date', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'technique', { type: Sequelize.DataTypes.ENUM, values: ['3dcrt','imrt','vmat','sbrt','brachytherapy','other'], }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'status', { type: Sequelize.DataTypes.ENUM, values: ['planned','approved','active','completed','on_hold','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_plans', 'radiation_oncologistId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'radiotherapy_planId', { type: Sequelize.DataTypes.UUID, references: { model: 'radiotherapy_plans', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'fraction_number', { type: Sequelize.DataTypes.INTEGER, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'scheduled_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'delivered_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'delivered_dose_gy', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'status', { type: Sequelize.DataTypes.ENUM, values: ['scheduled','delivered','missed','cancelled','rescheduled'], }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'therapist_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'radiotherapy_fractions', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'appointment_type', { type: Sequelize.DataTypes.ENUM, values: ['consultation','follow_up','chemo_session','radio_fraction','lab_visit','imaging_visit','procedure','other'], }, { transaction } ); await queryInterface.addColumn( 'appointments', 'start_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'end_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'status', { type: Sequelize.DataTypes.ENUM, values: ['scheduled','checked_in','in_progress','completed','no_show','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'appointments', 'assigned_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'reason', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'appointments', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'appointmentId', { type: Sequelize.DataTypes.UUID, references: { model: 'appointments', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'visit_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'visit_type', { type: Sequelize.DataTypes.ENUM, values: ['initial','follow_up','toxicity_check','treatment_assessment','other'], }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'provider_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'subjective', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'objective', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'assessment', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'plan', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'weight_kg', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'height_cm', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'bsa_m2', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'clinical_visits', 'toxicity_notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'visitId', { type: Sequelize.DataTypes.UUID, references: { model: 'clinical_visits', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'ordered_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'priority', { type: Sequelize.DataTypes.ENUM, values: ['routine','urgent','stat'], }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'status', { type: Sequelize.DataTypes.ENUM, values: ['ordered','collected','in_lab','resulted','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'ordering_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'lab_orders', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_results', 'lab_orderId', { type: Sequelize.DataTypes.UUID, references: { model: 'lab_orders', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'lab_results', 'result_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'lab_results', 'panel_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_results', 'result_status', { type: Sequelize.DataTypes.ENUM, values: ['preliminary','final','amended'], }, { transaction } ); await queryInterface.addColumn( 'lab_results', 'summary', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'lab_resultId', { type: Sequelize.DataTypes.UUID, references: { model: 'lab_results', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'test_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'value_text', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'value_numeric', { type: Sequelize.DataTypes.DECIMAL, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'unit', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'reference_range', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'lab_result_items', 'flag', { type: Sequelize.DataTypes.ENUM, values: ['normal','low','high','critical','abnormal'], }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'visitId', { type: Sequelize.DataTypes.UUID, references: { model: 'clinical_visits', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'ordered_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'modality', { type: Sequelize.DataTypes.ENUM, values: ['ct','mri','pet_ct','xray','ultrasound','mammography','nuclear_medicine','other'], }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'body_part', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'priority', { type: Sequelize.DataTypes.ENUM, values: ['routine','urgent','stat'], }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'status', { type: Sequelize.DataTypes.ENUM, values: ['ordered','scheduled','performed','reported','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'ordering_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'imaging_orders', 'clinical_indication', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'imaging_orderId', { type: Sequelize.DataTypes.UUID, references: { model: 'imaging_orders', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'performed_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'reported_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'radiologist_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'report_status', { type: Sequelize.DataTypes.ENUM, values: ['preliminary','final','amended'], }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'findings', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'imaging_reports', 'impression', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'protocolId', { type: Sequelize.DataTypes.UUID, references: { model: 'treatment_protocols', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'event_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'category', { type: Sequelize.DataTypes.ENUM, values: ['hematologic','gastrointestinal','dermatologic','neurologic','cardiac','renal','hepatic','infectious','other'], }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'event_name', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'grade', { type: Sequelize.DataTypes.ENUM, values: ['1','2','3','4','5'], }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'seriousness', { type: Sequelize.DataTypes.ENUM, values: ['non_serious','serious'], }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'management', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'outcome', { type: Sequelize.DataTypes.ENUM, values: ['resolved','resolving','ongoing','worsened','fatal','unknown'], }, { transaction } ); await queryInterface.addColumn( 'adverse_events', 'notes', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'chemo_orderId', { type: Sequelize.DataTypes.UUID, references: { model: 'chemotherapy_orders', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'start_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'end_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'status', { type: Sequelize.DataTypes.ENUM, values: ['started','paused','completed','stopped','reaction'], }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'administered_by_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'medication_administrations', 'remarks', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'patientId', { type: Sequelize.DataTypes.UUID, references: { model: 'patients', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'tumor_caseId', { type: Sequelize.DataTypes.UUID, references: { model: 'tumor_cases', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'type', { type: Sequelize.DataTypes.ENUM, values: ['administrative','clinical','nursing','pharmacy','lab','radiology','other'], }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'priority', { type: Sequelize.DataTypes.ENUM, values: ['low','medium','high'], }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'status', { type: Sequelize.DataTypes.ENUM, values: ['open','in_progress','done','cancelled'], }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'assigned_userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'due_datetime', { type: Sequelize.DataTypes.DATE, }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'title_text', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await queryInterface.addColumn( 'task_notes', 'details', { type: Sequelize.DataTypes.TEXT, }, { transaction } ); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, /** * @param {QueryInterface} queryInterface * @param {Sequelize} Sequelize * @returns {Promise} */ async down(queryInterface, Sequelize) { /** * @type {Transaction} */ const transaction = await queryInterface.sequelize.transaction(); try { await queryInterface.removeColumn( 'task_notes', 'details', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'title_text', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'due_datetime', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'assigned_userId', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'status', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'priority', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'type', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'task_notes', 'patientId', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'remarks', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'administered_by_userId', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'status', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'end_datetime', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'start_datetime', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'chemo_orderId', { transaction } ); await queryInterface.removeColumn( 'medication_administrations', 'patientId', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'notes', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'outcome', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'management', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'seriousness', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'grade', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'event_name', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'category', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'event_datetime', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'protocolId', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'adverse_events', 'patientId', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'impression', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'findings', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'report_status', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'radiologist_userId', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'reported_datetime', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'performed_datetime', { transaction } ); await queryInterface.removeColumn( 'imaging_reports', 'imaging_orderId', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'clinical_indication', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'ordering_userId', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'status', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'priority', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'body_part', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'modality', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'ordered_datetime', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'visitId', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'imaging_orders', 'patientId', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'flag', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'reference_range', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'unit', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'value_numeric', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'value_text', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'test_name', { transaction } ); await queryInterface.removeColumn( 'lab_result_items', 'lab_resultId', { transaction } ); await queryInterface.removeColumn( 'lab_results', 'summary', { transaction } ); await queryInterface.removeColumn( 'lab_results', 'result_status', { transaction } ); await queryInterface.removeColumn( 'lab_results', 'panel_name', { transaction } ); await queryInterface.removeColumn( 'lab_results', 'result_datetime', { transaction } ); await queryInterface.removeColumn( 'lab_results', 'lab_orderId', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'notes', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'ordering_userId', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'status', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'priority', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'ordered_datetime', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'visitId', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'lab_orders', 'patientId', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'toxicity_notes', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'bsa_m2', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'height_cm', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'weight_kg', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'plan', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'assessment', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'objective', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'subjective', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'provider_userId', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'visit_type', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'visit_datetime', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'appointmentId', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'clinical_visits', 'patientId', { transaction } ); await queryInterface.removeColumn( 'appointments', 'notes', { transaction } ); await queryInterface.removeColumn( 'appointments', 'reason', { transaction } ); await queryInterface.removeColumn( 'appointments', 'location', { transaction } ); await queryInterface.removeColumn( 'appointments', 'assigned_userId', { transaction } ); await queryInterface.removeColumn( 'appointments', 'status', { transaction } ); await queryInterface.removeColumn( 'appointments', 'end_datetime', { transaction } ); await queryInterface.removeColumn( 'appointments', 'start_datetime', { transaction } ); await queryInterface.removeColumn( 'appointments', 'appointment_type', { transaction } ); await queryInterface.removeColumn( 'appointments', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'appointments', 'patientId', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'notes', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'therapist_userId', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'status', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'delivered_dose_gy', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'delivered_datetime', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'scheduled_datetime', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'fraction_number', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_fractions', 'radiotherapy_planId', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'radiation_oncologistId', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'status', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'technique', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'end_date', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'start_date', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'planning_ct_date', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'dose_per_fraction_gy', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'fractions_planned', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'total_dose_gy', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'site', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'plan_name', { transaction } ); await queryInterface.removeColumn( 'radiotherapy_plans', 'protocolId', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'administration_instructions', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'diluent_volume_ml', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'dose_per_m2', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'calculated_bsa', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'dose_unit', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'dose', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'drug_name', { transaction } ); await queryInterface.removeColumn( 'chemo_drug_items', 'chemo_orderId', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'responsible_nurseId', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'notes', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'pre_medications', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'status', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'route', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'planned_datetime', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'day_in_cycle', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'cycle_number', { transaction } ); await queryInterface.removeColumn( 'chemotherapy_orders', 'protocolId', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'prescribing_userId', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'status', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'end_date', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'start_date', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'cycle_length_days', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'planned_cycles', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'description', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'name', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'protocol_type', { transaction } ); await queryInterface.removeColumn( 'treatment_protocols', 'tumor_caseId', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'primary_oncologistId', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'status', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'intent', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'diagnosis_date', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'stage', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'stage_system', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'biomarkers', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'histology', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'primary_site', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'cancer_type', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'case_number', { transaction } ); await queryInterface.removeColumn( 'tumor_cases', 'patientId', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'last_updated_on', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'current_medications', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'allergies', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'family_history', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'surgical_history', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'past_medical_history', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'history_of_present_illness', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'chief_complaint', { transaction } ); await queryInterface.removeColumn( 'patient_dossiers', 'patientId', { transaction } ); await queryInterface.removeColumn( 'patients', 'registration_date', { transaction } ); await queryInterface.removeColumn( 'patients', 'status', { transaction } ); await queryInterface.removeColumn( 'patients', 'departmentId', { transaction } ); await queryInterface.removeColumn( 'patients', 'emergency_contact_phone', { transaction } ); await queryInterface.removeColumn( 'patients', 'emergency_contact_name', { transaction } ); await queryInterface.removeColumn( 'patients', 'address', { transaction } ); await queryInterface.removeColumn( 'patients', 'phone', { transaction } ); await queryInterface.removeColumn( 'patients', 'sex', { transaction } ); await queryInterface.removeColumn( 'patients', 'date_of_birth', { transaction } ); await queryInterface.removeColumn( 'patients', 'full_name', { transaction } ); await queryInterface.removeColumn( 'patients', 'national_id', { transaction } ); await queryInterface.removeColumn( 'patients', 'medical_record_number', { transaction } ); await queryInterface.removeColumn( 'departments', 'head_userId', { transaction } ); await queryInterface.removeColumn( 'departments', 'phone', { transaction } ); await queryInterface.removeColumn( 'departments', 'location', { transaction } ); await queryInterface.removeColumn( 'departments', 'code', { transaction } ); await queryInterface.removeColumn( 'departments', 'name', { transaction } ); await queryInterface.removeColumn( 'permissions', 'name', { transaction } ); await queryInterface.removeColumn( 'roles', 'role_customization', { transaction } ); await queryInterface.removeColumn( 'roles', 'name', { transaction } ); await queryInterface.removeColumn( 'users', 'app_roleId', { transaction } ); await queryInterface.removeColumn( 'users', 'provider', { transaction } ); await queryInterface.removeColumn( 'users', 'passwordResetTokenExpiresAt', { transaction } ); await queryInterface.removeColumn( 'users', 'passwordResetToken', { transaction } ); await queryInterface.removeColumn( 'users', 'emailVerificationTokenExpiresAt', { transaction } ); await queryInterface.removeColumn( 'users', 'emailVerificationToken', { transaction } ); await queryInterface.removeColumn( 'users', 'emailVerified', { transaction } ); await queryInterface.removeColumn( 'users', 'password', { transaction } ); await queryInterface.removeColumn( 'users', 'disabled', { transaction } ); await queryInterface.removeColumn( 'users', 'email', { transaction } ); await queryInterface.removeColumn( 'users', 'phoneNumber', { transaction } ); await queryInterface.removeColumn( 'users', 'lastName', { transaction } ); await queryInterface.removeColumn( 'users', 'firstName', { transaction } ); await queryInterface.dropTable('task_notes', { transaction }); await queryInterface.dropTable('medication_administrations', { transaction }); await queryInterface.dropTable('adverse_events', { transaction }); await queryInterface.dropTable('imaging_reports', { transaction }); await queryInterface.dropTable('imaging_orders', { transaction }); await queryInterface.dropTable('lab_result_items', { transaction }); await queryInterface.dropTable('lab_results', { transaction }); await queryInterface.dropTable('lab_orders', { transaction }); await queryInterface.dropTable('clinical_visits', { transaction }); await queryInterface.dropTable('appointments', { transaction }); await queryInterface.dropTable('radiotherapy_fractions', { transaction }); await queryInterface.dropTable('radiotherapy_plans', { transaction }); await queryInterface.dropTable('chemo_drug_items', { transaction }); await queryInterface.dropTable('chemotherapy_orders', { transaction }); await queryInterface.dropTable('treatment_protocols', { transaction }); await queryInterface.dropTable('tumor_cases', { transaction }); await queryInterface.dropTable('patient_dossiers', { transaction }); await queryInterface.dropTable('patients', { transaction }); await queryInterface.dropTable('departments', { transaction }); await queryInterface.dropTable('permissions', { transaction }); await queryInterface.dropTable('roles', { transaction }); await queryInterface.dropTable('users', { transaction }); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } } };