diff --git a/src-tauri/src/plugins/printer.rs b/src-tauri/src/plugins/printer.rs
index 55dedaf..ac469d4 100644
--- a/src-tauri/src/plugins/printer.rs
+++ b/src-tauri/src/plugins/printer.rs
@@ -82,9 +82,14 @@ pub struct ReciboData {
pub operador: String,
pub turno: String,
pub saldo_troco: f64,
+ /// Valor contado no fechamento (dinheiro + cartões + receber)
pub fechamento: f64,
+ /// Saldo esperado = total operações − sangrias − despesas
pub saldo_esperado: f64,
+ /// Diferença = fechamento − saldo_esperado
pub diferenca: f64,
+ /// Soma de todas operações creditadas (crédito + débito + alimentação + voucher + pixcnpj)
+ pub total_operado: f64,
// Totais de cartões
pub credito: f64,
pub debito: f64,
@@ -275,10 +280,11 @@ impl ReciboData {
// ── DIFERENÇA ──
out.extend(escpos::line_bold("DIFERENCA"));
- let diff_str = if self.diferenca >= 0.0 {
- format!("+{}", self.fmt_money(self.diferenca))
+ let diff = self.fechamento - self.saldo_esperado;
+ let diff_str = if diff >= 0.0 {
+ format!("+{}", self.fmt_money(diff))
} else {
- self.fmt_money(self.diferenca)
+ self.fmt_money(diff)
};
out.extend(escpos::title(&diff_str));
diff --git a/src/index.html b/src/index.html
index 9b3bfd3..0ee7348 100644
--- a/src/index.html
+++ b/src/index.html
@@ -1232,7 +1232,7 @@ async function tauriEnviar() {
// ─── Print Preview Window ──────────────────────────────────────────────────
function buildPrintHTML(data) {
const fmt = v => 'R$ ' + (v || 0).toFixed(2).replace('.', ',');
- const diferenca = (data.fechamento || 0) - (data.saldo_esperado || 0);
+ const diferenca = (data.fechamento || 0) - (data.total_operado || 0);
const diffStr = diferenca >= 0 ? `+${fmt(diferenca)}` : fmt(diferenca);
const diffColor = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d');
@@ -1307,7 +1307,7 @@ function buildPrintHTML(data) {
ENTRADAS
Saldo Troco:${fmt(data.saldo_troco)}
-Fechamento:${fmt(data.fechamento)}
+Fechamento:${fmt(data.total_operado || 0)}
Saldo Esperado:${fmt(data.saldo_esperado)}
${rows ? `DETALHES
` : ''}
@@ -1424,6 +1424,8 @@ async function tauriRecibo() {
const fechamentoCounted = parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber'));
const saldoEsp = parseNum(val('f-saldo-esperado'));
const sysTroco = parseNum(val('sys-troco'));
+ // total_operado = soma de todas operações creditadas (não é o fechamento contado)
+ const totalOperado = cartCred + cartDeb + cartAli + cartPix + pixCnpjTotal;
const data = {
uuid: estado.uuid,
id_local: estado.id_local,
@@ -1435,6 +1437,7 @@ async function tauriRecibo() {
saldo_esperado: saldoEsp,
fechamento: fechamentoCounted,
diferenca: fechamentoCounted - saldoEsp,
+ total_operado: totalOperado,
// Flat totals for ReciboData struct (Rust) — must be numbers
credito: cartCred,
debito: cartDeb,
@@ -1499,7 +1502,7 @@ function openConfirmModal() {
const pixcnpj = estado.pixcnpj.reduce((s,r) => s+(parseNum(r.valor||0)||0), 0);
const fechamento = parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber'));
const saldoEsp = parseNum(val('f-saldo-esperado'));
- const diferenca = (parseNum(val('sys-troco')) || 0) - saldoEsp;
+ const diferenca = fechamento - saldoEsp;
const diffClass = diferenca === 0 ? '#2e7d32' : (diferenca > 0 ? '#e65100' : '#c0272d');
document.getElementById('confirm-summary').innerHTML =
`📅 Data: ${estado.data} 👤 Operador: ${operador} ⏰ Turno: ${turno} 🏪 Loja: ${loja}
@@ -1539,12 +1542,14 @@ document.getElementById('confirm-print').addEventListener('click', async () => {
const cancelTotal = estado.cancelamentos.reduce((s,r) => s+(parseNum(r.valor||0)||0), 0);
const fechamentoCounted = parseNum(val('f-fech-dinheiro')) + parseNum(val('f-fech-cartoes')) + parseNum(val('f-fech-receber'));
const saldoEsp = parseNum(val('f-saldo-esperado'));
+ const totalOperado = cartCred + cartDeb + cartAli + cartPix + (estado.pixcnpj.reduce((s,r) => s+(parseNum(r.valor||0)||0), 0));
const data = {
loja: estado.loja, data: estado.data, operador: estado.operador, turno: estado.turno,
saldo_troco: parseNum(val('sys-troco')) || 0,
saldo_esperado: saldoEsp,
fechamento: fechamentoCounted,
diferenca: fechamentoCounted - saldoEsp,
+ total_operado: totalOperado,
despesas: estado.despesas.map(r => ({ desc: r.desc||'', obs: r.obs||'', valor: r.valor||0 })),
sangrias: estado.sangrias.map(r => ({ hora: r.hora||'', retirada: parseNum(r.retirada)||0, gerente: r.gerente||'' })),
pixcnpj: estado.pixcnpj.map(r => ({ nome: r.nome||'', valor: r.valor||0 })),