From 69f4fbfd7df0c20fdd83d9e48fddc269e5b6c4fa Mon Sep 17 00:00:00 2001 From: GUILHERME Date: Fri, 25 Sep 2026 10:55:51 -0300 Subject: [PATCH] =?UTF-8?q?feat(debitos):=20exibe=20valores=20atualizados?= =?UTF-8?q?=20no=20extrato=20de=20d=C3=A9bitos=20e=20ajusta=20cabe=C3=A7al?= =?UTF-8?q?ho=20de=20pagamentos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ExtratoDebitosPortal: adiciona formatPeriodoRef/labelEstadoConta para o extrato em PDF (mantido junto com temDebitoSelecionado já mesclado) - debitos.vue: separa lançado/atualizado/multa/juros/desconto na tabela e nos totalizadores, em vez de só principal/multa/juros - pagamentos.vue: cabeçalho do accordion passa a mostrar o número da conta tributo junto da descrição Co-Authored-By: Claude Sonnet 5 --- src/composables/useExtratoDebitosPortal.js | 90 ++++++++++++++++++---- src/pages/portal/debitos.vue | 30 ++++++-- src/pages/portal/pagamentos.vue | 2 +- 3 files changed, 97 insertions(+), 25 deletions(-) diff --git a/src/composables/useExtratoDebitosPortal.js b/src/composables/useExtratoDebitosPortal.js index 94f357f..16bab39 100644 --- a/src/composables/useExtratoDebitosPortal.js +++ b/src/composables/useExtratoDebitosPortal.js @@ -36,17 +36,33 @@ export function useExtratoDebitosPortal() { ) ) + function formatPeriodoRef(date) { + if (!date) return '-' + const d = new Date(date) + if (isNaN(d.getTime())) return '-' + return `${String(d.getMonth() + 1).padStart(2, '0')}/${d.getFullYear()}` + } + + function labelEstadoConta(codigo) { + if (codigo === null || codigo === undefined) return 'Todos' + const opt = opcoesEstadoConta.find(o => o.value === Number(codigo)) + return opt?.label ?? 'Todos' + } + const totalizadores = computed(() => { - let principal = 0, multa = 0, juros = 0, valorTotal = 0 + let lancado = 0, atualizado = 0, multa = 0, juros = 0, desconto = 0, valorTotal = 0 resultados.value.forEach(t => { - t.selecionados?.forEach(d => { - principal += d.valorAtulPrincipal ?? d.valorPrincipal ?? 0 + const lista = t.selecionados?.length > 0 ? t.selecionados : t.debitos || [] + lista.forEach(d => { + lancado += d.valorPrincipal ?? 0 + atualizado += d.valorAtulPrincipal ?? d.valorPrincipal ?? 0 multa += d.valorAtulMulta ?? d.valorMulta ?? 0 juros += d.valorAtulJuros ?? d.valorJuros ?? 0 + desconto += d.valorAtulCorrecao ?? d.valorCorrecao ?? 0 valorTotal += d.valorTotal ?? 0 }) }) - return { principal, multa, juros, valorTotal } + return { lancado, atualizado, multa, juros, desconto, valorTotal } }) function mapearDebitos(dados) { @@ -115,19 +131,61 @@ export function useExtratoDebitosPortal() { } function montarDtoExtrato(usarSelecionados) { + const lista = resultados.value.filter(t => + usarSelecionados ? t.selecionados?.length > 0 : t.debitos?.length > 0 + ) + const params = montarParametrosTributoConta(lista) return { - listaDebitos: resultados.value - .filter(t => (usarSelecionados ? t.selecionados?.length > 0 : t.debitos?.length > 0)) - .map(t => ({ - idTributo: t.idTributo, - identificador: t.identificador, - descricaoTributo: t.descricaoTributo, - siglaTributo: t.siglaTributo, - descricaoContaTributo: t.descricaoContaTributo, - idContaTributo: t.idContaTributo, - totalPagamentos: t.totalPagamentos, - debitos: (usarSelecionados ? t.selecionados : t.debitos).map(mapDebitoPayload), - })), + listaDebitos: lista.map(t => ({ + idTributo: t.idTributo, + identificador: t.identificador, + descricaoTributo: t.descricaoTributo, + siglaTributo: t.siglaTributo, + descricaoContaTributo: t.descricaoContaTributo, + idContaTributo: t.idContaTributo, + totalPagamentos: t.totalPagamentos, + debitos: (usarSelecionados ? t.selecionados : t.debitos).map(mapDebitoPayload), + })), + codTributo: params.codTributo, + descricaoTributo: params.descricaoTributo, + codContaTributo: params.codContaTributo, + descricaoContaTributo: params.descricaoContaTributo, + periodoInicio: formatPeriodoRef(filtro.value.periodoIni), + periodoFim: formatPeriodoRef(filtro.value.periodoFim), + inscricaoMunicipal: '-', + estadoConta: labelEstadoConta(filtro.value.estadoConta), + } + } + + function montarParametrosTributoConta(lista) { + if (!lista?.length) { + return { + codTributo: '-', + descricaoTributo: '-', + codContaTributo: '-', + descricaoContaTributo: '-', + } + } + const chaves = new Map() + for (const item of lista) { + const key = `${item.idTributo ?? ''}_${item.idContaTributo ?? ''}` + if (!chaves.has(key)) chaves.set(key, item) + } + if (chaves.size === 1) { + const t = [...chaves.values()][0] + return { + codTributo: t.idTributo != null ? String(t.idTributo) : (t.identificador ?? '-'), + descricaoTributo: t.descricaoTributo || '-', + codContaTributo: t.idContaTributo != null ? String(t.idContaTributo) : '-', + descricaoContaTributo: t.descricaoContaTributo || '-', + } + } + const tributos = [...new Set(lista.map(t => t.descricaoTributo).filter(Boolean))] + return { + codTributo: 'Diversos', + descricaoTributo: tributos.length ? tributos.join(', ') : 'Diversos tributos', + codContaTributo: '-', + descricaoContaTributo: '-', } } diff --git a/src/pages/portal/debitos.vue b/src/pages/portal/debitos.vue index 68bb853..33622a7 100644 --- a/src/pages/portal/debitos.vue +++ b/src/pages/portal/debitos.vue @@ -124,14 +124,20 @@ function getSegundoNome(texto) { - + - - + + - - + + + + + + + +