Skip to content

Commit

Permalink
feat(rup: crear solicitudes en background)
Browse files Browse the repository at this point in the history
  • Loading branch information
liquid36 committed Oct 6, 2020
1 parent b65908b commit d622d1b
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ export class InternacionListadoComponent implements OnInit {
this.selectedPrestacion$ = this.mapaCamasService.selectedPrestacion.pipe(
map((prestacion) => {
this.puedeValidar = (prestacion.ejecucion && prestacion.ejecucion.registros[1] &&
prestacion.estados[prestacion.estados.length - 1].tipo !== 'validada' &&
prestacion.ejecucion.registros[1].valor.InformeEgreso.fechaEgreso &&
prestacion.ejecucion.registros[1].valor.InformeEgreso.tipoEgreso &&
prestacion.ejecucion.registros[1].valor.InformeEgreso.diagnosticoPrincipal);
prestacion.estados[prestacion.estados.length - 1].tipo !== 'validada' &&
prestacion.ejecucion.registros[1].valor.InformeEgreso.fechaEgreso &&
prestacion.ejecucion.registros[1].valor.InformeEgreso.tipoEgreso &&
prestacion.ejecucion.registros[1].valor.InformeEgreso.diagnosticoPrincipal);
this.puedeRomper = (prestacion.ejecucion && prestacion.ejecucion.registros[1] && prestacion.estados[prestacion.estados.length - 1].tipo === 'validada');
return prestacion;
})
Expand Down Expand Up @@ -150,7 +150,7 @@ export class InternacionListadoComponent implements OnInit {
if (egresoExiste && selectedPrestacion.estados[selectedPrestacion.estados.length - 1].tipo !== 'validada') {
if (egresoExiste.InformeEgreso.fechaEgreso && egresoExiste.InformeEgreso.tipoEgreso &&
egresoExiste.InformeEgreso.diagnosticoPrincipal) {
this.prestacionService.validarPrestacion(selectedPrestacion, []).subscribe(prestacion => {
this.prestacionService.validarPrestacion(selectedPrestacion).subscribe(prestacion => {
this.listadoInternacionService.setFechaHasta(fechaHasta);
this.mapaCamasService.selectPrestacion(prestacion);
this.verificarPrestacion(prestacion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,24 +302,9 @@ export class PrestacionValidacionComponent implements OnInit, OnDestroy {
return false;
} else {
let seCreoSolicitud = false;
// cargar los conceptos mas frecuentes por profesional y tipo de prestación
// Se copian los registros de la ejecución actual, para agregarle la frecuencia
let registros = this.prestacion.ejecucion.registros;
// filtramos los planes que deben generar prestaciones pendientes (Planes con conceptos turneales)

let seccionesRegistros = [...registros];
registros.forEach(registro => {
if (registro.hasSections) { // COLONO O EPICRISIS
registro.registros.forEach(seccion => {
if (seccion.isSection && !seccion.noIndex) {
seccionesRegistros = [...seccionesRegistros, ...seccion.registros];
}
});
}
});

let planes = seccionesRegistros.filter(r => r.esSolicitud);
this.servicioPrestacion.validarPrestacion(this.prestacion, planes).subscribe(prestacion => {
this.servicioPrestacion.validarPrestacion(this.prestacion).subscribe(prestacion => {
this.prestacion = prestacion;
let recorrerRegistros = registro => {
if (registro.relacionadoCon && registro.relacionadoCon.length > 0) {
Expand Down
93 changes: 1 addition & 92 deletions src/app/modules/rup/services/prestaciones.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -578,97 +578,7 @@ export class PrestacionesService {
return this.post(prestacion);
}

validarPrestacion(prestacion, planes): Observable<any> {
let planesCrear = undefined;
let planesAux = undefined;
let postRequest = [];

if (planes.length) {
planesCrear = [];
planesAux = [];
planes.forEach(plan => {
if (plan.semanticTag !== 'metadato fundacional') {
// verificamos si existe la prestacion creada anteriormente. Para no duplicar.
let existePrestacion = null;
if (this.cache[prestacion.paciente.id]) {
existePrestacion = this.cache[prestacion.paciente.id].find(p => (p.estados[p.estados.length - 1].tipo === 'pendiente' || p.estados[p.estados.length - 1].tipo === 'auditoria') && p.solicitud.prestacionOrigen === prestacion.id && p.solicitud.registros[0]._id === plan.id);
}
if (!existePrestacion && plan.valor && (plan.valor.solicitudPrestacion.organizacionDestino || plan.valor.solicitudPrestacion.autocitado)) {
if (!plan.valor.solicitudPrestacion.organizacionDestino) {
plan.valor.solicitudPrestacion.organizacionDestino = this.auth.organizacion;
}
planesAux.push(plan);
}
}
});
planesAux.forEach(plan => {
let reglas = this.servicioReglas.get({
organizacionOrigen: this.auth.organizacion.id,
prestacionOrigen: prestacion.solicitud.tipoPrestacion.conceptId,
prestacionDestino: plan.valor.solicitudPrestacion.prestacionSolicitada.conceptId,
organizacionDestino: plan.valor.solicitudPrestacion.organizacionDestino.id
});
postRequest.push(reglas);
});
}
if (postRequest && postRequest.length) {
return forkJoin(postRequest).pipe(
switchMap((reglas: any) => {
for (let i = 0; i < reglas.length; i++) {
const regla = reglas[i][0];
let prestacionOrigen;
let prestacionDestino;
if (regla) {
prestacionOrigen = regla.origen.prestaciones.find(p => p.prestacion.conceptId === prestacion.solicitud.tipoPrestacion.conceptId);
prestacionDestino = regla.destino.prestacion; // para utilizar los datos de la regla y no un sinonimo
} else {
prestacionOrigen = prestacion.solicitud.tipoPrestacion;
prestacionDestino = planesAux[i].valor.solicitudPrestacion.prestacionSolicitada; // para utilizar los datos de la regla y no un sinonimo
}
// creamos objeto de prestacion
let nuevaPrestacion = this.inicializarPrestacion(prestacion.paciente, prestacionDestino, 'validacion', 'ambulatorio');
// asignamos el tipoPrestacionOrigen a la solicitud
nuevaPrestacion.solicitud.tipoPrestacionOrigen = prestacionOrigen.prestacion ? prestacionOrigen.prestacion : prestacion.solicitud.tipoPrestacion;
if (prestacionOrigen.auditable) {
nuevaPrestacion['estados'] = [{
fecha: new Date(),
tipo: 'auditoria'
}];
}
// asignamos la prestacion de origen
nuevaPrestacion.solicitud.prestacionOrigen = prestacion.id;

// Asignamos organizacionOrigen y profesionalOrigen de la solicitud originada
nuevaPrestacion.solicitud.organizacionOrigen = prestacion.solicitud.organizacion;
nuevaPrestacion.solicitud.profesionalOrigen = prestacion.solicitud.profesional;

// Si se asignó una organización destino desde la prestación que origina la solicitud
if (planesAux[i].valor.solicitudPrestacion.organizacionDestino) {
nuevaPrestacion.solicitud.organizacion = planesAux[i].valor.solicitudPrestacion.organizacionDestino;
}
// Si se asignó un profesional destino desde la prestación que origina la solicitud
if (!planesAux[i].valor.solicitudPrestacion.autocitado) {
nuevaPrestacion.solicitud.profesional = {};
}
if (planesAux[i].valor.solicitudPrestacion.profesionalesDestino) {
nuevaPrestacion.solicitud.profesional = planesAux[i].valor.solicitudPrestacion.profesionalesDestino[0];
}

// agregamos los registros en la solicitud
nuevaPrestacion.solicitud.registros.push(planesAux[i]);

planesCrear.push(nuevaPrestacion);

}
return this.efectuarPatch(prestacion, planesCrear);
})
);
} else {
return this.efectuarPatch(prestacion, undefined);
}
}

private efectuarPatch(prestacion, planesCrear): Observable<any> {
validarPrestacion(prestacion): Observable<any> {
prestacion.ejecucion.registros.forEach(x => {
if (x.relacionadoCon && x.relacionadoCon.length) {
x.relacionadoCon.forEach(y => {
Expand All @@ -679,7 +589,6 @@ export class PrestacionesService {
let dto: any = {
op: 'estadoPush',
estado: { tipo: 'validada' },
...(planesCrear && planesCrear.length) && { planes: planesCrear },
registros: prestacion.ejecucion.registros,
registrarFrecuentes: true
};
Expand Down

0 comments on commit d622d1b

Please sign in to comment.