38404-vm/backend/src/db/migrations/1770991163768.js
2026-02-13 14:00:47 +00:00

5501 lines
175 KiB
JavaScript

module.exports = {
/**
* @param {QueryInterface} queryInterface
* @param {Sequelize} Sequelize
* @returns {Promise<void>}
*/
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<void>}
*/
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;
}
}
};