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( 'audit_logs', { 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( 'data_connections', { 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( 'fin_accounts', { 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( 'fin_ap', { 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( 'fin_ar', { 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( 'fin_budgets', { 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( 'fin_customers', { 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( 'fin_forecasts', { 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( 'fin_transactions', { 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( 'fin_vendors', { 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( 'hr_applicants', { 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( 'hr_attendance', { 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( 'hr_employees', { 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( 'hr_payroll', { 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( 'hr_positions', { 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( 'hr_reqs', { 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( 'ops_incidents', { 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( 'ops_inventory', { 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( 'ops_lines', { 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( 'ops_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( 'ops_plants', { 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( 'ops_production_log', { 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( 'ops_shipments', { 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( 'organizations', { 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( 'audit_logs', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'audit_logs', 'userId', { type: Sequelize.DataTypes.UUID, references: { model: 'users', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'audit_logs', 'action', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'audit_logs', 'entity', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'audit_logs', 'entity_id', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'audit_logs', 'diff_json', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'type', { type: Sequelize.DataTypes.ENUM, values: ['Snowflake', 'BigQuery', 'Redshift', 'Postgres'], }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'config_json', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Active', 'Inactive'], }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'last_sync_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'code', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'type', { type: Sequelize.DataTypes.ENUM, values: ['asset', 'liability', 'equity', 'revenue', 'expense'], }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'parentId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_accounts', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'is_active', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'bill_no', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'vendorId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_vendors', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'due_date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Pending', 'Paid', 'Overdue'], }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'invoice_no', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'customerId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_customers', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'due_date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Pending', 'Paid', 'Overdue'], }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'fiscal_year', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'cost_center', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_accounts', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'month', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'fin_customers', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_customers', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_customers', 'segment', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_customers', 'country', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'fiscal_year', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'cost_center', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_accounts', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'month', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'accountId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_accounts', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'tx_ts', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'amount', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'currency', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'fx_rate', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'cost_center', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'project_code', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'vendorId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_vendors', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'customerId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_customers', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'memo', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'source', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_vendors', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_vendors', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_vendors', 'tax_id', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'fin_vendors', 'country', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'reqId', { type: Sequelize.DataTypes.UUID, references: { model: 'hr_reqs', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'stage', { type: Sequelize.DataTypes.ENUM, values: ['Applied', 'Interview', 'Offer', 'Hired'], }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'source', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'offer_extended_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'offer_accepted_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_attendance', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_attendance', 'employeeId', { type: Sequelize.DataTypes.UUID, references: { model: 'hr_employees', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_attendance', 'date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_attendance', 'hours_worked', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'hr_attendance', 'leave_type', { type: Sequelize.DataTypes.ENUM, values: ['Sick', 'Vacation', 'Unpaid'], }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'employee_no', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'email', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'managerId', { type: Sequelize.DataTypes.UUID, references: { model: 'hr_employees', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'department', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'grade', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'hire_date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'termination_date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Active', 'Inactive'], }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'employeeId', { type: Sequelize.DataTypes.UUID, references: { model: 'hr_employees', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'period', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'base_pay', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'bonus', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'overtime_hours', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'currency', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'title', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'department', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'level', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Open', 'Closed'], }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'positionId', { type: Sequelize.DataTypes.UUID, references: { model: 'hr_positions', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'opened_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'filled_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Open', 'Closed', 'OnHold'], }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'recruiter', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'priority', { type: Sequelize.DataTypes.ENUM, values: ['High', 'Medium', 'Low'], }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'plantId', { type: Sequelize.DataTypes.UUID, references: { model: 'ops_plants', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'lineId', { type: Sequelize.DataTypes.UUID, references: { model: 'ops_lines', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'occurred_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'category', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'severity', { type: Sequelize.DataTypes.ENUM, values: ['Low', 'Medium', 'High'], }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'duration_min', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'root_cause', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'sku', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'on_hand', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'on_order', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'safety_stock', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'unit_cost', { type: Sequelize.DataTypes.DECIMAL, }, { transaction }, ); await queryInterface.addColumn( 'ops_lines', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_lines', 'plantId', { type: Sequelize.DataTypes.UUID, references: { model: 'ops_plants', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_lines', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'order_no', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'customerId', { type: Sequelize.DataTypes.UUID, references: { model: 'fin_customers', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'due_date', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'qty', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'status', { type: Sequelize.DataTypes.ENUM, values: ['Pending', 'Completed', 'Cancelled'], }, { transaction }, ); await queryInterface.addColumn( 'ops_plants', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_plants', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_plants', 'location', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_plants', 'timezone', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'lineId', { type: Sequelize.DataTypes.UUID, references: { model: 'ops_lines', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'ts', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'units_produced', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'planned_units', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'downtime_min', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'defects', { type: Sequelize.DataTypes.INTEGER, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'orgId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'order_no', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'shipped_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'carrier', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'delivered_at', { type: Sequelize.DataTypes.DATE, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'status', { type: Sequelize.DataTypes.ENUM, values: ['InTransit', 'Delivered', 'Delayed'], }, { transaction }, ); await queryInterface.addColumn( 'permissions', 'name', { type: Sequelize.DataTypes.TEXT, }, { 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( 'users', 'app_roleId', { type: Sequelize.DataTypes.UUID, references: { model: 'roles', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'organizations', 'name', { type: Sequelize.DataTypes.TEXT, }, { transaction }, ); await queryInterface.addColumn( 'roles', 'globalAccess', { type: Sequelize.DataTypes.BOOLEAN, defaultValue: false, allowNull: false, }, { transaction }, ); await queryInterface.addColumn( 'users', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'audit_logs', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'data_connections', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_accounts', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_ap', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_ar', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_budgets', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_customers', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_forecasts', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_transactions', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'fin_vendors', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_applicants', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_attendance', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_employees', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_payroll', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_positions', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'hr_reqs', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_incidents', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_inventory', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_lines', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_orders', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_plants', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_production_log', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { transaction }, ); await queryInterface.addColumn( 'ops_shipments', 'organizationsId', { type: Sequelize.DataTypes.UUID, references: { model: 'organizations', key: 'id', }, }, { 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('ops_shipments', 'organizationsId', { transaction, }); await queryInterface.removeColumn( 'ops_production_log', 'organizationsId', { transaction }, ); await queryInterface.removeColumn('ops_plants', 'organizationsId', { transaction, }); await queryInterface.removeColumn('ops_orders', 'organizationsId', { transaction, }); await queryInterface.removeColumn('ops_lines', 'organizationsId', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'organizationsId', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'organizationsId', { transaction, }); await queryInterface.removeColumn('hr_reqs', 'organizationsId', { transaction, }); await queryInterface.removeColumn('hr_positions', 'organizationsId', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'organizationsId', { transaction, }); await queryInterface.removeColumn('hr_employees', 'organizationsId', { transaction, }); await queryInterface.removeColumn('hr_attendance', 'organizationsId', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_vendors', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_customers', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_ar', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_ap', 'organizationsId', { transaction, }); await queryInterface.removeColumn('fin_accounts', 'organizationsId', { transaction, }); await queryInterface.removeColumn('data_connections', 'organizationsId', { transaction, }); await queryInterface.removeColumn('audit_logs', 'organizationsId', { transaction, }); await queryInterface.removeColumn('users', 'organizationsId', { transaction, }); await queryInterface.removeColumn('roles', 'globalAccess', { transaction, }); await queryInterface.removeColumn('organizations', 'name', { transaction, }); await queryInterface.removeColumn('users', 'app_roleId', { transaction }); await queryInterface.removeColumn('roles', 'role_customization', { transaction, }); await queryInterface.removeColumn('roles', 'name', { transaction }); await queryInterface.removeColumn('permissions', 'name', { transaction }); await queryInterface.removeColumn('ops_shipments', 'status', { transaction, }); await queryInterface.removeColumn('ops_shipments', 'delivered_at', { transaction, }); await queryInterface.removeColumn('ops_shipments', 'carrier', { transaction, }); await queryInterface.removeColumn('ops_shipments', 'shipped_at', { transaction, }); await queryInterface.removeColumn('ops_shipments', 'order_no', { transaction, }); await queryInterface.removeColumn('ops_shipments', 'orgId', { transaction, }); await queryInterface.removeColumn('ops_production_log', 'defects', { transaction, }); await queryInterface.removeColumn('ops_production_log', 'downtime_min', { transaction, }); await queryInterface.removeColumn('ops_production_log', 'planned_units', { transaction, }); await queryInterface.removeColumn( 'ops_production_log', 'units_produced', { transaction }, ); await queryInterface.removeColumn('ops_production_log', 'ts', { transaction, }); await queryInterface.removeColumn('ops_production_log', 'lineId', { transaction, }); await queryInterface.removeColumn('ops_production_log', 'orgId', { transaction, }); await queryInterface.removeColumn('ops_plants', 'timezone', { transaction, }); await queryInterface.removeColumn('ops_plants', 'location', { transaction, }); await queryInterface.removeColumn('ops_plants', 'name', { transaction }); await queryInterface.removeColumn('ops_plants', 'orgId', { transaction }); await queryInterface.removeColumn('ops_orders', 'status', { transaction, }); await queryInterface.removeColumn('ops_orders', 'qty', { transaction }); await queryInterface.removeColumn('ops_orders', 'due_date', { transaction, }); await queryInterface.removeColumn('ops_orders', 'customerId', { transaction, }); await queryInterface.removeColumn('ops_orders', 'order_no', { transaction, }); await queryInterface.removeColumn('ops_orders', 'orgId', { transaction }); await queryInterface.removeColumn('ops_lines', 'name', { transaction }); await queryInterface.removeColumn('ops_lines', 'plantId', { transaction, }); await queryInterface.removeColumn('ops_lines', 'orgId', { transaction }); await queryInterface.removeColumn('ops_inventory', 'unit_cost', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'safety_stock', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'on_order', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'on_hand', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'location', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'sku', { transaction, }); await queryInterface.removeColumn('ops_inventory', 'orgId', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'root_cause', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'duration_min', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'severity', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'category', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'occurred_at', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'lineId', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'plantId', { transaction, }); await queryInterface.removeColumn('ops_incidents', 'orgId', { transaction, }); await queryInterface.removeColumn('hr_reqs', 'priority', { transaction }); await queryInterface.removeColumn('hr_reqs', 'recruiter', { transaction, }); await queryInterface.removeColumn('hr_reqs', 'status', { transaction }); await queryInterface.removeColumn('hr_reqs', 'filled_at', { transaction, }); await queryInterface.removeColumn('hr_reqs', 'opened_at', { transaction, }); await queryInterface.removeColumn('hr_reqs', 'positionId', { transaction, }); await queryInterface.removeColumn('hr_reqs', 'orgId', { transaction }); await queryInterface.removeColumn('hr_positions', 'status', { transaction, }); await queryInterface.removeColumn('hr_positions', 'location', { transaction, }); await queryInterface.removeColumn('hr_positions', 'level', { transaction, }); await queryInterface.removeColumn('hr_positions', 'department', { transaction, }); await queryInterface.removeColumn('hr_positions', 'title', { transaction, }); await queryInterface.removeColumn('hr_positions', 'orgId', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'currency', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'overtime_hours', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'bonus', { transaction }); await queryInterface.removeColumn('hr_payroll', 'base_pay', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'period', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'employeeId', { transaction, }); await queryInterface.removeColumn('hr_payroll', 'orgId', { transaction }); await queryInterface.removeColumn('hr_employees', 'status', { transaction, }); await queryInterface.removeColumn('hr_employees', 'termination_date', { transaction, }); await queryInterface.removeColumn('hr_employees', 'hire_date', { transaction, }); await queryInterface.removeColumn('hr_employees', 'grade', { transaction, }); await queryInterface.removeColumn('hr_employees', 'location', { transaction, }); await queryInterface.removeColumn('hr_employees', 'department', { transaction, }); await queryInterface.removeColumn('hr_employees', 'managerId', { transaction, }); await queryInterface.removeColumn('hr_employees', 'email', { transaction, }); await queryInterface.removeColumn('hr_employees', 'name', { transaction, }); await queryInterface.removeColumn('hr_employees', 'employee_no', { transaction, }); await queryInterface.removeColumn('hr_employees', 'orgId', { transaction, }); await queryInterface.removeColumn('hr_attendance', 'leave_type', { transaction, }); await queryInterface.removeColumn('hr_attendance', 'hours_worked', { transaction, }); await queryInterface.removeColumn('hr_attendance', 'date', { transaction, }); await queryInterface.removeColumn('hr_attendance', 'employeeId', { transaction, }); await queryInterface.removeColumn('hr_attendance', 'orgId', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'offer_accepted_at', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'offer_extended_at', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'source', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'stage', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'name', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'reqId', { transaction, }); await queryInterface.removeColumn('hr_applicants', 'orgId', { transaction, }); await queryInterface.removeColumn('fin_vendors', 'country', { transaction, }); await queryInterface.removeColumn('fin_vendors', 'tax_id', { transaction, }); await queryInterface.removeColumn('fin_vendors', 'name', { transaction }); await queryInterface.removeColumn('fin_vendors', 'orgId', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'source', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'memo', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'customerId', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'vendorId', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'project_code', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'cost_center', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'fx_rate', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'currency', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'amount', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'tx_ts', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'accountId', { transaction, }); await queryInterface.removeColumn('fin_transactions', 'orgId', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'amount', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'month', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'accountId', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'cost_center', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'fiscal_year', { transaction, }); await queryInterface.removeColumn('fin_forecasts', 'orgId', { transaction, }); await queryInterface.removeColumn('fin_customers', 'country', { transaction, }); await queryInterface.removeColumn('fin_customers', 'segment', { transaction, }); await queryInterface.removeColumn('fin_customers', 'name', { transaction, }); await queryInterface.removeColumn('fin_customers', 'orgId', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'amount', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'month', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'accountId', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'cost_center', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'fiscal_year', { transaction, }); await queryInterface.removeColumn('fin_budgets', 'orgId', { transaction, }); await queryInterface.removeColumn('fin_ar', 'status', { transaction }); await queryInterface.removeColumn('fin_ar', 'amount', { transaction }); await queryInterface.removeColumn('fin_ar', 'due_date', { transaction }); await queryInterface.removeColumn('fin_ar', 'customerId', { transaction, }); await queryInterface.removeColumn('fin_ar', 'invoice_no', { transaction, }); await queryInterface.removeColumn('fin_ar', 'orgId', { transaction }); await queryInterface.removeColumn('fin_ap', 'status', { transaction }); await queryInterface.removeColumn('fin_ap', 'amount', { transaction }); await queryInterface.removeColumn('fin_ap', 'due_date', { transaction }); await queryInterface.removeColumn('fin_ap', 'vendorId', { transaction }); await queryInterface.removeColumn('fin_ap', 'bill_no', { transaction }); await queryInterface.removeColumn('fin_ap', 'orgId', { transaction }); await queryInterface.removeColumn('fin_accounts', 'is_active', { transaction, }); await queryInterface.removeColumn('fin_accounts', 'parentId', { transaction, }); await queryInterface.removeColumn('fin_accounts', 'type', { transaction, }); await queryInterface.removeColumn('fin_accounts', 'name', { transaction, }); await queryInterface.removeColumn('fin_accounts', 'code', { transaction, }); await queryInterface.removeColumn('fin_accounts', 'orgId', { transaction, }); await queryInterface.removeColumn('data_connections', 'last_sync_at', { transaction, }); await queryInterface.removeColumn('data_connections', 'status', { transaction, }); await queryInterface.removeColumn('data_connections', 'config_json', { transaction, }); await queryInterface.removeColumn('data_connections', 'name', { transaction, }); await queryInterface.removeColumn('data_connections', 'type', { transaction, }); await queryInterface.removeColumn('data_connections', 'orgId', { transaction, }); await queryInterface.removeColumn('audit_logs', 'diff_json', { transaction, }); await queryInterface.removeColumn('audit_logs', 'entity_id', { transaction, }); await queryInterface.removeColumn('audit_logs', 'entity', { transaction, }); await queryInterface.removeColumn('audit_logs', 'action', { transaction, }); await queryInterface.removeColumn('audit_logs', 'userId', { transaction, }); await queryInterface.removeColumn('audit_logs', 'orgId', { 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('organizations', { transaction }); await queryInterface.dropTable('permissions', { transaction }); await queryInterface.dropTable('roles', { transaction }); await queryInterface.dropTable('ops_shipments', { transaction }); await queryInterface.dropTable('ops_production_log', { transaction }); await queryInterface.dropTable('ops_plants', { transaction }); await queryInterface.dropTable('ops_orders', { transaction }); await queryInterface.dropTable('ops_lines', { transaction }); await queryInterface.dropTable('ops_inventory', { transaction }); await queryInterface.dropTable('ops_incidents', { transaction }); await queryInterface.dropTable('hr_reqs', { transaction }); await queryInterface.dropTable('hr_positions', { transaction }); await queryInterface.dropTable('hr_payroll', { transaction }); await queryInterface.dropTable('hr_employees', { transaction }); await queryInterface.dropTable('hr_attendance', { transaction }); await queryInterface.dropTable('hr_applicants', { transaction }); await queryInterface.dropTable('fin_vendors', { transaction }); await queryInterface.dropTable('fin_transactions', { transaction }); await queryInterface.dropTable('fin_forecasts', { transaction }); await queryInterface.dropTable('fin_customers', { transaction }); await queryInterface.dropTable('fin_budgets', { transaction }); await queryInterface.dropTable('fin_ar', { transaction }); await queryInterface.dropTable('fin_ap', { transaction }); await queryInterface.dropTable('fin_accounts', { transaction }); await queryInterface.dropTable('data_connections', { transaction }); await queryInterface.dropTable('audit_logs', { transaction }); await queryInterface.dropTable('users', { transaction }); await transaction.commit(); } catch (err) { await transaction.rollback(); throw err; } }, };