Skip to content

Commit

Permalink
Feat(Script p/corregisr formacionesPosgrado.matriculacion)
Browse files Browse the repository at this point in the history
  • Loading branch information
JuanIRamirez committed May 22, 2023
1 parent 8c1f101 commit b66a2ed
Show file tree
Hide file tree
Showing 2 changed files with 236 additions and 13 deletions.
35 changes: 22 additions & 13 deletions core/tm/schemas/profesional.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,27 @@ const matriculacionSchema = new mongoose.Schema({
revalidacionNumero: Number
});

const NuevaMatriculacionSchema = new mongoose.Schema({
fechaAlta: { type: Date, required: true },
matriculaNumero: { type: Number, required: false },
/* Sacar 'inicio', 'fin' y 'notificacionVencimiento' de este esquema una vez actualizada la colección. */
inicio: Date,
fin: Date,
notificacionVencimiento: { type: Boolean, required: false },
/* */
baja: {
motivo: { type: String, required: false },
fecha: { type: String, required: false }
},
periodos: [{
notificacionVencimiento: { type: Boolean, required: false },
inicio: Date,
fin: Date,
revalidacionNumero: Number,
revalida: { type: Boolean, default: false }
}]
});

export const ProfesionalBaseSchema = new mongoose.Schema({
documento: { type: String, required: true },
sexo: { type: String, required: false },
Expand Down Expand Up @@ -88,19 +109,7 @@ ProfesionalSchema.add({
modalidad: { type: ObjSIISASchema, required: false },
establecimiento: { type: ObjSIISASchema, required: false },
},
matriculacion: [{
matriculaNumero: { type: Number, required: false },
libro: { type: String, required: false },
folio: { type: String, required: false },
inicio: Date,
baja: {
motivo: { type: String, required: false },
fecha: { type: String, required: false }
},
notificacionVencimiento: { type: Boolean, required: false },
fin: Date,
revalidacionNumero: Number
}],
matriculacion: [NuevaMatriculacionSchema],
fechasDeAltas: [{ fecha: { type: Date, required: false } }],
matriculado: { type: Boolean, default: false },
revalida: { type: Boolean, default: false },
Expand Down
214 changes: 214 additions & 0 deletions scripts/MAT-119.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
import { Profesional } from '../core/tm/schemas/profesional';
import { SIISAObject, SIISAEspecialidad } from 'core/tm/schemas/siisa';
import * as moment from 'moment';

async function run(done) {

interface Iperiodos {
notificacionVencimiento: Boolean;
inicio: Date;
fin: Date;
revalidacionNumero: Number;
revalida: Boolean;
};

interface Imatriculacion {
fechaAlta: Date;
matriculaNumero: Number;
baja: {
motivo: String;
fecha: Date;
};
periodos: Iperiodos[];
};

interface IformacionPosgrado {
profesion: SIISAObject;
institucionFormadora: SIISAObject;
especialidad: SIISAEspecialidad;
fechaIngreso: Date;
fechaEgreso: Date;
tituloFileId: String;
observacion: String;
certificacion: {
fecha: Date;
modalidad: SIISAObject;
establecimiento: SIISAObject;
};
matriculacion: Imatriculacion[];
matriculado: Boolean;
revalida: Boolean;
papelesVerificados: Boolean;
fechaDeVencimiento: Date;
exportadoSisa: Boolean;
tieneVencimiento: Boolean;
notas: [String];
};

const TotProf = await Profesional.aggregate([{ $count: 'Cant' }]);
let totalProf: Number;
for (const cp of TotProf) {
totalProf = cp.Cant;
}

const actualizar = true;
const diasAño = 365.25;
const añosRevalida = 5 + 1;

const profesionalMatriculado = Profesional.find(
{ 'formacionPosgrado.matriculacion': { $ne: null } }
).cursor({ batchSize: 100 });

let cantProf = 0;
let cantProfaAct = 0;
let cantProfUp = 0;
let upProf: boolean;

for await (const profesional of profesionalMatriculado) {

const profesionalId = profesional.id;
const formacionPosgrado = profesional.formacionPosgrado;

upProf = false;

for (let i = 0; i < formacionPosgrado.length; i++) {

const profMatriculacion = formacionPosgrado[i].matriculacion;
const fechasDeAltas = formacionPosgrado[i].fechasDeAltas;
const fechasAlta: Date[] = [];
const periodos = [[]];

if (fechasDeAltas) {
for (const fechasdealtas of fechasDeAltas) {
fechasAlta.push(fechasdealtas.fecha ? moment(fechasdealtas.fecha).toDate() : null);
}
}

let cantMatriculas = 0;
let contMatriculas = 0;
let nuevaCantMatriculas = 0;

const inicio: Date[] = [];
const fin: Date[] = [];
const matriculaNumero: number[] = [];
const bajaFecha: Date[] = [];
const bajaMotivo: String[] = [];
const notificacionVencimiento: boolean[] = [];

for (const matriculacion of profMatriculacion) {

if (matriculacion.periodos.length === 0) {

matriculaNumero.push(matriculacion.matriculaNumero);

if (matriculacion.inicio) {
inicio.push(matriculacion.inicio);
} else {
inicio.push(fechasAlta[cantMatriculas]);
}

fin.push(matriculacion.fin ? moment(matriculacion.fin).toDate() : null);
bajaFecha.push(matriculacion.baja.fecha ? moment(matriculacion.baja.fecha).toDate() : null);
bajaMotivo.push(matriculacion.baja.motivo);
notificacionVencimiento.push(matriculacion.notificacionVencimiento ? matriculacion.notificacionVencimiento : false);

let años = 0;
let revalida = false;

if (cantMatriculas > 0) {
if (fechasAlta.length > 1) {
años = moment(fechasAlta[cantMatriculas]).diff(fechasAlta[cantMatriculas - 1], 'days') / diasAño;
} else {
años = moment(inicio[cantMatriculas]).diff(fechasAlta[cantMatriculas - 1], 'days') / diasAño;
}
if (años <= añosRevalida) {
revalida = true;
}
}

if (años <= añosRevalida) {
if (cantMatriculas === 0) {
periodos.push([]);
} else {
contMatriculas++;
}
} else {
matriculaNumero.push(matriculacion.matriculaNumero);
periodos.push([]);
contMatriculas = 0;
nuevaCantMatriculas++;
}

periodos[nuevaCantMatriculas].push(
{
notificacionVencimiento: notificacionVencimiento[cantMatriculas],
inicio: inicio[cantMatriculas],
fin: fin[cantMatriculas],
revalidacionNumero: contMatriculas,
revalida
}
);
cantMatriculas++;
}
}

const nuevaMatriculacion: Imatriculacion[] = [];

if (cantMatriculas > 0) {
for (let mat = 0; mat <= nuevaCantMatriculas; mat++) {
nuevaMatriculacion.push(
{
matriculaNumero: matriculaNumero[mat],
fechaAlta: fechasAlta[mat] ? fechasAlta[mat] : inicio[mat],
baja:
{
fecha: bajaFecha[mat],
motivo: bajaMotivo[mat]
},
periodos: periodos[mat]
}
);
}

const nuevaFormacionPosgrado: IformacionPosgrado = {
profesion: formacionPosgrado[i].profesion,
institucionFormadora: formacionPosgrado[i].institucionFormadora,
especialidad: formacionPosgrado[i].especialidad,
fechaIngreso: formacionPosgrado[i].fechaIngreso,
fechaEgreso: formacionPosgrado[i].fechaEgreso,
tituloFileId: formacionPosgrado[i].tituloFileId,
observacion: formacionPosgrado[i].observacion,
certificacion: {
fecha: formacionPosgrado[i].certificacion.fecha,
modalidad: formacionPosgrado[i].certificacion.modalidad,
establecimiento: formacionPosgrado[i].certificacion.establecimiento,
},
matriculacion: nuevaMatriculacion,
matriculado: formacionPosgrado[i].matriculado,
revalida: formacionPosgrado[i].revalida,
papelesVerificados: formacionPosgrado[i].papelesVerificados,
fechaDeVencimiento: formacionPosgrado[i].fechaDeVencimiento,
exportadoSisa: formacionPosgrado[i].exportadoSisa,
tieneVencimiento: formacionPosgrado[i].tieneVencimiento,
notas: formacionPosgrado[i].notas,
};

formacionPosgrado[i] = nuevaFormacionPosgrado;
upProf = true;

}
}

if (upProf) {
cantProfaAct++;
if (actualizar) {
await Profesional.findByIdAndUpdate(profesionalId, { $set: { formacionPosgrado } });
cantProfUp++;
}
}
cantProf++;
}
done();
}

export = run;

0 comments on commit b66a2ed

Please sign in to comment.