121 lines
4.5 KiB
TypeScript
121 lines
4.5 KiB
TypeScript
import 'dotenv/config';
|
|
import db from '../src/database/models/index.js';
|
|
|
|
type SlaDefault = {
|
|
stage: string;
|
|
role: string;
|
|
tat: number;
|
|
unit: 'hours' | 'days';
|
|
};
|
|
|
|
const defaults: SlaDefault[] = [
|
|
// ONBOARDING
|
|
{ stage: 'ASM Review', role: 'ASM', tat: 2, unit: 'days' },
|
|
{ stage: 'ZM Review', role: 'DD-ZM', tat: 3, unit: 'days' },
|
|
{ stage: 'Level 1 Interview', role: 'RBM, DD-ZM', tat: 2, unit: 'days' },
|
|
{ stage: 'Level 2 Interview', role: 'DD-Lead, ZBH', tat: 3, unit: 'days' },
|
|
{ stage: 'Level 3 Interview', role: 'NBH, DD-Head', tat: 5, unit: 'days' },
|
|
{ stage: 'FDD Verification', role: 'FDD', tat: 10, unit: 'days' },
|
|
{ stage: 'Finance Verification', role: 'Finance', tat: 7, unit: 'days' },
|
|
{ stage: 'LOI Approval', role: 'NBH', tat: 5, unit: 'days' },
|
|
{ stage: 'LOA Approval', role: 'NBH', tat: 5, unit: 'days' },
|
|
|
|
// RESIGNATION
|
|
{ stage: 'Resignation ASM Review', role: 'ASM', tat: 2, unit: 'days' },
|
|
{ stage: 'Resignation Evaluation', role: 'RBM, DD-ZM', tat: 3, unit: 'days' },
|
|
{ stage: 'Resignation ZBH Review', role: 'ZBH', tat: 3, unit: 'days' },
|
|
{ stage: 'Resignation Lead Review', role: 'DD-Lead', tat: 5, unit: 'days' },
|
|
{ stage: 'Resignation NBH Approval', role: 'NBH', tat: 5, unit: 'days' },
|
|
{ stage: 'Resignation Legal Letter', role: 'Legal', tat: 7, unit: 'days' },
|
|
|
|
// TERMINATION
|
|
{ stage: 'Termination ASM Review', role: 'ASM', tat: 2, unit: 'days' },
|
|
{ stage: 'Termination Evaluation', role: 'RBM, DD-ZM', tat: 3, unit: 'days' },
|
|
{ stage: 'Termination ZBH Review', role: 'ZBH', tat: 3, unit: 'days' },
|
|
{ stage: 'Termination Lead Review', role: 'DD-Lead', tat: 5, unit: 'days' },
|
|
{ stage: 'Termination Legal Verification', role: 'Legal', tat: 7, unit: 'days' },
|
|
{ stage: 'Termination NBH Evaluation', role: 'NBH', tat: 5, unit: 'days' },
|
|
{ stage: 'Termination CEO Approval', role: 'CEO', tat: 7, unit: 'days' },
|
|
|
|
// RELOCATION
|
|
{ stage: 'Relocation ASM Review', role: 'ASM', tat: 2, unit: 'days' },
|
|
{ stage: 'Relocation ZM Review', role: 'DD-ZM', tat: 3, unit: 'days' },
|
|
{ stage: 'Relocation RBM Review', role: 'RBM', tat: 3, unit: 'days' },
|
|
{ stage: 'Relocation ZBH Review', role: 'ZBH', tat: 3, unit: 'days' },
|
|
{ stage: 'Relocation Lead Review', role: 'DD-Lead', tat: 5, unit: 'days' },
|
|
|
|
// CONSTITUTIONAL CHANGE
|
|
{ stage: 'Constitution Legal Review', role: 'Legal', tat: 7, unit: 'days' },
|
|
{ stage: 'Constitution Lead Review', role: 'DD-Lead', tat: 5, unit: 'days' },
|
|
{ stage: 'Constitution NBH Approval', role: 'NBH', tat: 5, unit: 'days' },
|
|
];
|
|
|
|
async function seedSlaConfigs() {
|
|
const { sequelize, SLAConfiguration, SLAReminder, SLAEscalationConfig } = db as any;
|
|
await sequelize.authenticate();
|
|
console.log('Database connected.');
|
|
|
|
const transaction = await sequelize.transaction();
|
|
|
|
try {
|
|
for (const item of defaults) {
|
|
const [config, created] = await SLAConfiguration.findOrCreate({
|
|
where: { activityName: item.stage },
|
|
defaults: {
|
|
activityName: item.stage,
|
|
ownerRole: item.role,
|
|
tatHours: item.tat,
|
|
tatUnit: item.unit,
|
|
isActive: true,
|
|
},
|
|
transaction,
|
|
});
|
|
|
|
if (!created) {
|
|
await config.update(
|
|
{
|
|
ownerRole: item.role,
|
|
tatHours: item.tat,
|
|
tatUnit: item.unit,
|
|
},
|
|
{ transaction }
|
|
);
|
|
}
|
|
|
|
await SLAReminder.destroy({ where: { slaConfigId: config.id }, transaction });
|
|
await SLAEscalationConfig.destroy({ where: { slaConfigId: config.id }, transaction });
|
|
|
|
await SLAReminder.bulkCreate(
|
|
[
|
|
{ slaConfigId: config.id, timeValue: 1, timeUnit: 'days', isEnabled: true },
|
|
{ slaConfigId: config.id, timeValue: 4, timeUnit: 'hours', isEnabled: true },
|
|
],
|
|
{ transaction }
|
|
);
|
|
|
|
await SLAEscalationConfig.bulkCreate(
|
|
[
|
|
{ slaConfigId: config.id, level: 1, timeValue: 4, timeUnit: 'hours', notifyRole: 'ZBH' },
|
|
{ slaConfigId: config.id, level: 2, timeValue: 12, timeUnit: 'hours', notifyRole: 'DD Lead' },
|
|
{ slaConfigId: config.id, level: 3, timeValue: 24, timeUnit: 'hours', notifyRole: 'NBH' },
|
|
],
|
|
{ transaction }
|
|
);
|
|
}
|
|
|
|
await transaction.commit();
|
|
console.log(`SLA configurations seeded successfully. Total stages: ${defaults.length}`);
|
|
} catch (error) {
|
|
await transaction.rollback();
|
|
console.error('SLA seed failed:', error);
|
|
throw error;
|
|
} finally {
|
|
await sequelize.close();
|
|
}
|
|
}
|
|
|
|
seedSlaConfigs().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|