This commit is contained in:
Lizandro Guarnizo
2026-04-16 21:24:01 -05:00
parent c8bef9d9c4
commit 50b7f7f8ca
2 changed files with 35 additions and 14 deletions
+16 -10
View File
@@ -77,6 +77,7 @@ $filas = $db->fetchAll(
COALESCE(d.seguro_nombre,'') AS seguro_nombre,
d.estado AS dom_estado,
COALESCE(d.valor_domicilio, 0) AS valor_domicilio,
COALESCE(d.valor_copago, 0) AS valor_copago,
d.pago_estado,
COALESCE(d.pago_modo,'') AS pago_modo,
COALESCE(d.pago_monto, 0) AS pago_monto,
@@ -109,16 +110,21 @@ unset($f);
// Resumen financiero — sumar desde parcialidades cuando existen
$resumen = [
'total' => count($filas),
'pagados' => 0,
'pendientes' => 0,
'exentos' => 0,
'monto_total' => 0.0,
'por_modo' => [],
'total' => count($filas),
'pagados' => 0,
'pendientes' => 0,
'exentos' => 0,
'monto_total' => 0.0,
'total_valor_dom' => 0.0, // suma valor_domicilio esperado
'total_valor_copago' => 0.0, // suma valor_copago esperado
'por_modo' => [],
];
foreach ($filas as $f) {
$est = $f['pago_estado'] ?? 'pendiente';
// Acumular valores esperados (siempre, no solo pagados)
$resumen['total_valor_dom'] += (float)($f['valor_domicilio'] ?? 0);
$resumen['total_valor_copago'] += (float)($f['valor_copago'] ?? 0);
if ($est === 'pagado') {
$resumen['pagados']++;
if (!empty($f['pagos_detalle'])) {
@@ -126,15 +132,15 @@ foreach ($filas as $f) {
foreach ($f['pagos_detalle'] as $p) {
$monto = (float)$p['monto'];
$key = $p['modo'] ?: 'sin_registrar';
$resumen['monto_total'] += $monto;
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
$resumen['monto_total'] += $monto;
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
}
} else {
// Fallback registro legacy
$monto = (float)$f['pago_monto'];
$key = $f['pago_modo'] ?: 'sin_registrar';
$resumen['monto_total'] += $monto;
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
$resumen['monto_total'] += $monto;
$resumen['por_modo'][$key] = ($resumen['por_modo'][$key] ?? 0.0) + $monto;
}
} elseif ($est === 'exento') {
$resumen['exentos']++;
+19 -4
View File
@@ -177,6 +177,7 @@ if ($tipo) {
d.tipo_cliente, COALESCE(d.seguro_nombre,'') AS seguro,
d.estado AS dom_estado,
COALESCE(d.valor_domicilio,0) AS valor_domicilio,
COALESCE(d.valor_copago,0) AS valor_copago,
COALESCE(d.pago_estado,'pendiente') AS pago_estado,
COALESCE(d.pago_modo,'') AS pago_modo,
COALESCE(d.pago_monto,0) AS pago_monto,
@@ -193,7 +194,7 @@ if ($tipo) {
$headers = [
'ID','Fecha programada','Fecha pago','Paciente','Documento',
'Enfermero/a','Tipo cliente','Seguro','Estado domicilio',
'Valor domicilio','Estado pago','Modo pago','Monto recibido','Notas pago',
'Valor domicilio','Valor copago','Estado pago','Modo pago','Monto recibido','Notas pago',
];
break;
@@ -769,11 +770,22 @@ async function cargarReportePagos() {
const modosEl = document.getElementById('pr-modos');
const MODO_LABEL = { efectivo:'Efectivo', transferencia:'Transferencia', otro:'Otro', sin_registrar:'Sin modo' };
const modos = Object.entries(rs.por_modo || {});
modosEl.innerHTML = modos.length
// Badges por método de pago + desglose domicilio/copago esperados
let modosHtml = modos.length
? modos.map(([k, v]) =>
`<span class="badge bg-secondary">${esc(MODO_LABEL[k] || k)}: ${fmtMoney(v)}</span>`
).join('')
: '';
if (rs.total_valor_dom || rs.total_valor_copago) {
modosHtml += `<span class="badge" style="background:#0d6efd20;color:#0d6efd;border:1px solid #0d6efd">
Domicilio esperado: ${fmtMoney(rs.total_valor_dom || 0)}
</span>
<span class="badge" style="background:#19875420;color:#198754;border:1px solid #198754">
Copago esperado: ${fmtMoney(rs.total_valor_copago || 0)}
</span>`;
}
modosEl.innerHTML = modosHtml;
document.getElementById('pago-resumen').style.display = '';
// Tabla de detalle
@@ -796,7 +808,8 @@ async function cargarReportePagos() {
<th>Documento</th>
<th>Enfermero/a</th>
<th>Tipo cliente</th>
<th class="text-end">Valor domicilio</th>
<th class="text-end">Val. domicilio</th>
<th class="text-end">Val. copago</th>
<th class="text-center">Estado pago</th>
<th class="text-center">Modo pago</th>
<th class="text-end">Monto recibido</th>
@@ -835,7 +848,8 @@ async function cargarReportePagos() {
<td class="text-muted">${esc(f.numero_documento || '—')}</td>
<td class="text-nowrap">${esc(f.enfermera)}</td>
<td class="small">${cliente}</td>
<td class="text-end">${fmtMoney(f.valor_domicilio)}</td>
<td class="text-end">${parseFloat(f.valor_domicilio||0) > 0 ? fmtMoney(f.valor_domicilio) : '<span class="text-muted">—</span>'}</td>
<td class="text-end">${parseFloat(f.valor_copago||0) > 0 ? fmtMoney(f.valor_copago) : '<span class="text-muted">—</span>'}</td>
<td class="text-center">
<span class="badge bg-${PAGO_BADGE[pagoEst] || 'secondary'}">${esc(pagoEst)}</span>
</td>
@@ -855,6 +869,7 @@ async function cargarReportePagos() {
<tr>
<td colspan="6" class="ps-3">Total</td>
<td class="text-end">${fmtMoney(d.filas.reduce((s,f) => s + parseFloat(f.valor_domicilio||0), 0))}</td>
<td class="text-end">${fmtMoney(d.filas.reduce((s,f) => s + parseFloat(f.valor_copago||0), 0))}</td>
<td></td><td></td>
<td class="text-end text-success">${fmtMoney(rs.monto_total)}</td>
<td colspan="3"></td>