fix(auditoria completa): bloqueos de Mi Dia, cobranza (saldos y fechas), captura (departamento y rol), contactos (privacidad), cotizador (QR) y validaciones de API

This commit is contained in:
2026-09-21 07:18:39 +00:00
parent 75956a709f
commit 5e9b2ac456
16 changed files with 259 additions and 71 deletions

View File

@@ -249,13 +249,12 @@ async function escribir(planesLeidos) {
p.montoPagado = Math.min(p.monto, p.montoPagado + ap.monto)
}
// Si el maestro registra pagos por encima del plan declarado (filas con
// MESES/MENSUALIDAD vacíos pero grid lleno), el total del plan es lo pagado.
const totalPagadoAcumulado = pagosProg.reduce((a, p) => a + p.montoPagado, 0) +
// Invariante del módulo: Σ montos de TODOS los pagos del plan == engancheTotal
// (incluidos los standalone, que antes quedaban fuera y generaban saldo
// fantasma: el plan mostraba 100% pagado y saldo pendiente a la vez).
const totalProgramado = pagosProg.reduce((a, p) => a + p.monto, 0) +
standalone.reduce((a, s) => a + s.monto, 0)
if (totalPagadoAcumulado > plan.engancheTotal) {
plan.engancheTotal = Math.round(totalPagadoAcumulado * 100) / 100
}
plan.engancheTotal = Math.round(totalProgramado * 100) / 100
const creado = await prisma.planPago.create({ data: plan })