From 6eb08b6bd42d73aad0c1837c94b681872eb87ca7 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 4 Jul 2026 14:35:39 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20cancelamentos=20=E2=80=94=20sempre=20rec?= =?UTF-8?q?alcular=20da=20array=20em=20buildReportHTML/buildPrintHTML/buil?= =?UTF-8?q?dConfirmHTML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.html | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/index.html b/src/index.html index 3740db3..1339780 100644 --- a/src/index.html +++ b/src/index.html @@ -1323,12 +1323,13 @@ function buildConfirmHTML(data) { // Relatório completo — mesmo layout do PDF const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ','); const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ','); + // Cancelamentos: SEMPRE recalcular da array — nunca usar o campo escalar + const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : []; + const cancelamentosCalc = cancelamentos_arr.reduce((s, r) => s + (r.valor || 0), 0); // Diferença = Total Sistema - Saldo Esperado - Cancelamentos // ⚠️ buildReciboData retorna snake_case (sys_total, total_cancelamentos) - // Sempre recalcula para garantir consistência — ignora data.diferenca const sysTotalCalc = (data.sys_total || data.sysTotal || 0); const saldoEsperadoCalc = (data.saldo_esperado || 0); - const cancelamentosCalc = (data.total_cancelamentos || data.cancelamentos || 0); const diferenca = sysTotalCalc - saldoEsperadoCalc - cancelamentosCalc; const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca); const diffOk = diferenca === 0; @@ -1493,16 +1494,21 @@ ${data.observacoes ? `
${data.observacoes}
` : ''} function buildPrintHTML(data) { const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ','); const fmtNeg = v => (v < 0 ? '-' : '') + 'R$ ' + Math.abs(v || 0).toFixed(2).replace('.', ','); + // Cancelamentos: SEMPRE recalcular da array — nunca usar o campo escalar + const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : []; + const cancelamentosCalc = cancelamentos_arr.reduce((s, r) => s + (r.valor || 0), 0); // Diferença = Total Sistema - Saldo Esperado - Cancelamentos // ⚠️ buildReciboData retorna snake_case (sys_total, total_cancelamentos) const sysTotalCalc = (data.sys_total || data.sysTotal || 0); const saldoEsperadoCalc = (data.saldo_esperado || 0); - const cancelamentosCalc = (data.total_cancelamentos || data.cancelamentos || 0); const diferenca = sysTotalCalc - saldoEsperadoCalc - cancelamentosCalc; const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca); const diffColor = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d'); - // Arrays — support both array-of-objects and flat totals + const cartCred_arr = Array.isArray(data.cartoes_credito) ? data.cartoes_credito : []; + const cartDeb_arr = Array.isArray(data.cartoes_debito) ? data.cartoes_debito : []; + const cartAli_arr = Array.isArray(data.cartoes_alimentacao) ? data.cartoes_alimentacao : []; + const cartPix_arr = Array.isArray(data.cartoes_pix) ? data.cartoes_pix : []; const sangrias_arr = Array.isArray(data.sangrias_arr) ? data.sangrias_arr : []; const despesas_arr = Array.isArray(data.despesas_arr) ? data.despesas_arr : []; const pixcnpj_arr = Array.isArray(data.pixcnpj_arr) ? data.pixcnpj_arr : []; @@ -1511,10 +1517,7 @@ function buildPrintHTML(data) { const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : []; // Cartoes arrays from estado - const cartCred_arr = Array.isArray(data.cartoes_credito) ? data.cartoes_credito : []; - const cartDeb_arr = Array.isArray(data.cartoes_debito) ? data.cartoes_debito : []; - const cartAli_arr = Array.isArray(data.cartoes_alimentacao) ? data.cartoes_alimentacao : []; - const cartPix_arr = Array.isArray(data.cartoes_pix) ? data.cartoes_pix : []; + // (cartCred_arr etc. already declared above) // Flat totals const totalSangrias = sangrias_arr.reduce((s,r) => s+(r.retirada||0)+(r.valor||0), 0); @@ -1728,15 +1731,15 @@ function buildReportHTML(data) { const vales = data.vales || 0; const receber = data.areceber || 0; const pixcnpj = data.pixcnpj || 0; - const cancelamentos = data.cancelamentos || 0; + // Cancelamentos: SEMPRE recalcular da array — nunca usar o campo escalar (pode estar corrompido de bug anterior) + const cancelamentos_arr = Array.isArray(data.cancelamentos_arr) ? data.cancelamentos_arr : []; + const cancelamentosCalc = cancelamentos_arr.reduce((s, r) => s + (r.valor || 0), 0); const fechamento = data.fechamento || 0; const sysTotal = data.sys_total || 0; const saldoEsp = data.saldo_esperado || 0; // Diferença = Total Sistema - Saldo Esperado - Cancelamentos - // Sempre recalcula para garantir consistência const sysTotalCalc = (data.sys_total || data.sysTotal || 0); const saldoEspCalc = (data.saldo_esperado || 0); - const cancelamentosCalc = (data.total_cancelamentos || data.cancelamentos || 0); const diferenca = sysTotalCalc - saldoEspCalc - cancelamentosCalc; const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmtNeg(diferenca); const diffColor = diferenca === 0 ? '#2e7d32' : '#c0272d';