diff --git a/docs/identidade-visual/identidade-visual.md b/docs/identidade-visual/identidade-visual.md index 1705a5d..b438d3f 100644 --- a/docs/identidade-visual/identidade-visual.md +++ b/docs/identidade-visual/identidade-visual.md @@ -12,7 +12,7 @@ Duas identidades visuais coexistem **de propósito** hoje: o logo cursivo "D De - `logo.png` — original, texto **preto**. Serve como fonte pra gerar as outras variantes e é usada diretamente no recibo do Indicador de Desempenho (`indicadores/recibo.py`, `LOGO_PATH`, redimensionada/recomprimida em memória pra impressão — ver `portal_api/indicadores/CLAUDE.md`). - `logo-branco.png` — usada no cabeçalho do PDF de Simulação de Custo de Contratação (`custo_contratacao/pdf.py`, banner marrom escuro, ver `portal_api/custo_contratacao/CLAUDE.md`) — até uma rodada anterior também era usada no `sidebar__brand` dos 13 shells, migrada pra marca "P.I.D." (ver abaixo; a UI do Portal e os documentos gerados usam fontes de logo independentes agora). Mesmo D colorido de `logo.png`, mas com o texto recolorido pra branco; gerada programaticamente a partir de `logo.png` (script Python com Pillow: qualquer pixel opaco quase-neutro/escuro — `max(r,g,b) < 70` e `spread(r,g,b) < 12` — virou branco; o D nunca entra nesse filtro porque mesmo na sombra mais escura do degradê ele mantém um matiz quente nitidamente não-neutro). Se o logo oficial mudar, regerar `logo-branco.png` a partir do novo `logo.png` com o mesmo filtro, não editar à mão. -- `logo-branco-relatorio.png` — cópia de `logo-branco.png` só redimensionada (480 px de largura, 40 KB, Pillow LANCZOS), usada no cabeçalho do relatório da Conciliação de Fornecedores (`conciliacao-fornecedores-relatorio.html`): o original, com 6250 px, pesava mais que o PDF impresso inteiro. Se `logo-branco.png` mudar, regerar esta a partir dele. +- `logo-branco-relatorio.png` — cópia de `logo-branco.png` só redimensionada (480 px de largura, 40 KB, Pillow LANCZOS), usada no cabeçalho do relatório do Relatório Contábil (via `_logo_relatorio_data_uri()` em views.py): o original, com 6250 px, pesava mais que o PDF impresso inteiro. Se `logo-branco.png` mudar, regerar esta a partir dele. Foi criada para o relatório da Conciliação de Fornecedores, que desde 2026-10-02 (rodada 72 em `portal_api/conciliacao_fornecedores/CHANGELOG.md`) é uma aba do Portal, sem logo do escritório, por ser de uso interno do contador. - `logo-mono.png` — versão totalmente monocromática (D **e** texto em branco/cinza claro). Não usada em nenhum consumidor hoje; existe como variante alternativa (útil se algum dia precisar de um logo "chapado" sem o dourado do D). **Marca nova "P.I.D."**: diff --git a/portal_api/conciliacao_fornecedores/CHANGELOG.md b/portal_api/conciliacao_fornecedores/CHANGELOG.md index d09b12f..97853d6 100644 --- a/portal_api/conciliacao_fornecedores/CHANGELOG.md +++ b/portal_api/conciliacao_fornecedores/CHANGELOG.md @@ -328,3 +328,241 @@ Pedido do usuário: o arquivo anexado ficava em `media/conciliacao_fornecedores/ - Antes, a pedido do usuário, as conciliações #22 (2017) e #23 (1751) foram excluídas para refazer os testes, e os arquivos de `media/conciliacao_fornecedores/` apagados; depois o usuário disse que não precisava excluir, e o único versionado no git foi restaurado (os demais têm cópia em `Projetos\Conciliação`). A conciliação #24 (2017), criada pelo usuário durante a mudança, ficou intacta (o arquivo dela também foi apagado, sem impacto). Mexe em models.py/views.py e migração: exige reiniciar o `runserver`. + +### Rodada 60 — Colunas do histórico enxugadas (2026-10-02) + +Pedido do usuário: na tabela do histórico de conciliações, deixar só a quantidade de fornecedores e a de contas com alerta alto, sem a data-base, e mostrar quem mexeu por último em vez de quem criou. + +- Coluna "Conciliados" removida (`conciliacao-fornecedores.html` e `renderHistorico()` em `conciliacao-fornecedores.js`). +- Coluna "Divergentes" renomeada para "Críticos" (mesmo valor: `resumo.por_status.divergente`). Só o rótulo dessa coluna mudou; o chip "Divergentes" do detalhe, o status `divergente` e o relatório continuam com o nome antigo. +- Coluna "Data-base" removida (a data-base continua no detalhe e no relatório). +- "Criado por" virou "Última atualização": nome e data/hora de `ultima_atualizacao` (última atualização do razão, já no payload); sem atualização, a criação (`criado_por_nome`/`criado_em`). Só a atualização do razão conta; vincular, desfazer ou validar não muda essa coluna. + +Só HTML/JS: não exige reiniciar o `runserver`. + +### Rodada 61 — Cards do detalhe e situação "Divergente" vira "Crítico" (2026-10-02) + +Pedido do usuário: cards que digam o que falta fazer, em vez de somas que não pedem ação. + +- Card 1, "Títulos em aberto" (soma de `total_em_aberto`) → **"Pagamentos a vincular"**: soma de `total_nao_vinculado` e quantidade de fornecedores; clicável, filtra pelo alerta `pagamento_sem_titulo`. A etiqueta "com pagamento não vinculado" saiu (duplicava o card). +- Card 2, "Em aberto há mais de 3 meses": o valor passa a ser a **quantidade de fornecedores pendentes de validação** na aba própria (antes, a soma de `total_vencido`), com "X de Y validado(s)" abaixo. +- Card 3, "Pagamentos sem título" (soma de `total_excedente`) → **"Críticos pendentes"**: contas com status `divergente` e `validada` falso; clicável, aplica o filtro do chip "Críticos" (as validadas já ficam escondidas por padrão). +- Barra de validação: o trilho (parte que falta) ganhou fundo verde translúcido e contorno, e a barra passou de 8 para 10px. +- Rótulo da situação `divergente`: "Divergente" → **"Crítico"** no JS (`PID_CONC_STATUS`, etiqueta da linha e chip "Críticos"), no XLSX (`_CONCILIACAO_ROTULO_STATUS` em views.py) e no relatório (`ROTULO_STATUS` e o risco "Conta em situação Crítico validada sem observação" em `relatorio.py`; textos do template). Chave interna sem mudança. + +Mexe em views.py/relatorio.py: exige reiniciar o `runserver`. + +### Rodada 62 — Cabeçalho do detalhe (2026-10-02) + +Pedido do usuário, no cabeçalho da empresa do detalhe (`renderCabecalho()`): + +- "EMPRESA XXXX" (`.conc-empresa__codigo`) no mesmo tamanho do nome (1,05rem; era 0,75rem). +- "Data-base" removida do cabeçalho (continua no relatório e no XLSX). +- "Processado por" e "Razão atualizado por" viraram uma só "Última atualização": quem atualizou o razão por último e quando; sem atualização, quem criou (mesma regra da coluna da lista, rodada 60). + +Só JS/CSS: não exige reiniciar o `runserver`. + +### Rodada 63 — Detalhe da validação no balão da barra (2026-10-02) + +Pedido do usuário: o texto "N ainda para revisar · X% concluído" saiu de baixo da barra de validação e passou a aparecer no balão do Portal ao passar o mouse na barra (`data-conc-tooltip` + `data-conc-tooltip-sempre` em `.conc-progresso__barra`, sem `title` nativo). + +Só JS: não exige reiniciar o `runserver`. + +### Rodada 64 — Um balão para cada parte da barra de validação (2026-10-02) + +Pedido do usuário: a parte preenchida mostra o que foi concluído e a parte vazia, o que falta. + +- `.conc-progresso__barra` virou `flex` com dois filhos: `.conc-progresso__feito` (largura = %, balão "N validado(s) · X% concluído") e `.conc-progresso__falta` (`flex: 1`, transparente sobre o trilho, balão "N ainda para revisar · Y% pendente", Y = 100 − X para os dois somarem 100). Cada parte só é desenhada se tiver quantidade. +- Destaque da parte sob o mouse (pedido do usuário na sequência): a preenchida clareia (`#3fcf8e`) e o trilho apaga; a que falta fica num verde mais forte com tracejado diagonal (`repeating-linear-gradient`; o verde liso ficava igual ao verde apagado da preenchida, e o dourado testado no meio foi descartado pelo usuário) e a preenchida fica com `opacity: 0.45`. Só CSS, via `:hover`/`:has()`. +- Balão da barra mais caprichado (pedido do usuário): variante `.conc-tooltip--rico`, ativada por `data-conc-tooltip-titulo` (+ `-valor` e `-cor`) em `pidConcMostraTooltip()`: marcador de cor (liso para "Concluído", tracejado para "Pendente"), título em caixa alta, percentual em destaque à direita, "N de M fornecedores validados / ainda para revisar" abaixo, centrado na parte da barra com uma seta (`--conc-tooltip-seta`, calculada no JS; vira para cima se o balão abrir abaixo). Os demais balões da tela não mudam. +- Card "Em aberto há mais de 3 meses" (pedido do usuário, entre as opções sugeridas): o valor passa a ser a **soma dos títulos antigos dos fornecedores ainda sem revisão** (`total_vencido` das contas com `vencidos_validados` falso), com "ainda sem revisão · N fornecedor(es) a revisar · X de Y validado(s)" abaixo. Antes (rodada 61) era só a contagem de fornecedores. Na sequência, o usuário pediu o **saldo total em aberto** (soma de `total_vencido` de todos, revisados ou não), e o detalhe ficou "N fornecedor(es) a revisar · X de Y validado(s)". Por fim, o usuário esclareceu que queria o **saldo em aberto sem o recorte de 3 meses**: o card virou "Títulos em aberto" (soma de `total_em_aberto` e quantos fornecedores; "disponíveis para vincular os pagamentos", par do primeiro card), sem clique (o atalho para a aba dos títulos antigos saiu; ela continua pela aba). +- Tracejado da parte que falta (na barra e no marcador do balão) em vermelho (`--danger-rgb`), pedido do usuário; na sequência, o fundo verde saiu (na barra, o trilho fica transparente enquanto o mouse está na parte que falta; o marcador ganhou contorno vermelho): só o tracejado. + +Só JS/CSS: não exige reiniciar o `runserver`. + +### Rodada 65 — Chips da lista por validação (2026-10-02) + +Pedido do usuário: os chips por situação (Todos/Críticos/Atenção/Conciliados/Validados) confundiam, porque misturavam situação calculada com validação. + +- Chips novos (`PID_CONC_GRUPOS`, `data-conc-grupo`, `?grupo=` na URL; o antigo `?status=` é ignorado): **Pendentes** (padrão, não validadas), **Parcial** (validadas com vínculo `parcial` com `diferenca` > 0, ou seja, saldo a pagar que segue para os próximos meses), **Saldo em aberto** (validadas, sem parcial em aberto, `saldo_final` ≠ 0), **Conciliados** (validadas, sem parcial em aberto, `saldo_final` = 0) e **Validados** (todas as validadas). Parcial/Saldo em aberto/Conciliados dividem as validadas sem sobra. Interpretação da implementação: os três exigem conta validada (o pedido só diz "validados" no Saldo em aberto) e uma validada com saldo devedor (negativo) cai em "Saldo em aberto"; confirmar se o usuário disser o contrário. +- Toggle "Mostrar validadas" removido (o chip Pendentes faz o papel). +- Card "Críticos pendentes" virou um filtro de card como os outros (`filtroAlerta = "criticos_pendentes"`, com a faixa "Filtrando por"); filtro de card/etiqueta passa a valer sobre todas as contas, validadas ou não, para a lista bater com o número do card. O rótulo do filtro `pagamento_sem_titulo` virou "Pagamentos a vincular" (nome do card). +- Coluna "Validado": data e hora da validação abaixo do checkbox (`.conc-validado-data`, coluna de 90 para 130px), e a ordenação dela passou a ser por `validada_em`. +- Ordem padrão por chip (`sortPadrao()`): Pendentes por situação (críticos primeiro); os chips de validadas da validação mais recente para a mais antiga. Trocar de chip volta à ordem padrão dele. + +Só HTML/JS/CSS: não exige reiniciar o `runserver`. + +### Rodada 66 — Sai a coluna "Em aberto > 3 meses" da tabela de fornecedores (2026-10-02) + +Pedido do usuário: o valor já é revisado na aba "Em aberto há mais de 3 meses". Coluna removida do thead e de `montarLinhasConta()`, com a chave de ordenação `total_vencido` (um `?ordem=total_vencido` antigo na URL é ignorado); `colspan` da linha expandida e das mensagens de 8 para 7. A aba própria continua com a coluna dela. + +Só HTML/JS: não exige reiniciar o `runserver`. + +### Rodada 67 — Sai "Saldo inicial", "Saldo residual" vira "Saldo final" (2026-10-02) + +Pedido do usuário, na tabela de fornecedores: coluna "Saldo inicial" removida (thead, `montarLinhasConta()` e a chave de ordenação `saldo_inicial`) e "Saldo residual" renomeada para "Saldo final" (mesmo valor, `saldo_final`, e mesma chave de ordenação). `colspan` de 7 para 6. Só a tabela da tela: XLSX e relatório não mudam. + +Só HTML/JS: não exige reiniciar o `runserver`. + +### Rodada 68 — Situação "Parcial" (2026-10-02) + +Pedido do usuário: conta sem alerta, mas com saldo de pagamento parcial ainda a pagar (vínculo manual que segue para o mês seguinte), aparecia como "Conciliada"; deve ser "Parcial". + +- `alertas.py`: `STATUS_PARCIAL = "parcial"`, entre `atencao` e `conciliada`: sem alerta e com algum vínculo `parcial` de `diferenca` > 0. Crítico e Atenção continuam prevalecendo. +- Rótulo "Parcial" em `_CONCILIACAO_ROTULO_STATUS` (views.py: payload, XLSX e `resumo.por_status`) e `ROTULO_STATUS` (`relatorio.py`); na tela, `PID_CONC_STATUS.parcial` (rank 2, etiqueta azul `.status-pill--parcial`); no relatório, `.cfr-pill--parcial` (roxo claro) e "N parciais" no card de situação. +- Efeitos: Parcial não recebe validação automática (só `conciliada`; na prática já não recebia, porque vínculo parcial é manual); no relatório, Parcial validada não entra em "contas validadas com pendência" e a ordem do anexo passou a ser crítica, atenção, parcial, conciliada. +- Na data da mudança, 4 contas (todas da conciliação #24, nenhuma validada) tinham vínculo parcial em aberto, entre elas a ROZINI (5449166), o caso do usuário. O `resumo` gravado de cada conciliação é recalculado ao abri-la. + +Mexe em alertas.py/views.py/relatorio.py: exige reiniciar o `runserver`. + +Na primeira subida, o usuário teve `KeyError: 'parcial'` em `_conciliacao_calcula_resumo()`: o servidor recarregou no meio das edições (alertas.py novo, views.py antigo, sem "Parcial" em `_CONCILIACAO_ROTULO_STATUS`). Resolvido só reiniciando; com o código final, a conciliação #24 calcula 226 conciliadas, 3 parciais, 30 em atenção e 1 crítica. + +- Detalhe do vínculo (botão "i", `pidConcAbreDetalheVinculo()`), pedido do usuário na sequência: pagamento parcial com saldo mostra **"Saldo a pagar R$ X"** em destaque dourado (`.conc-vinculo-detalhe__saldo`, à direita dos totais, a partir de `vinculo.diferenca`), no lugar da frase "Créditos R$ X maiores que os débitos (em aberto)". Os demais vínculos continuam com a frase de diferença. + +### Rodada 69 — Linha vinculada do razão mais resumida (2026-10-02) + +Pedido do usuário, na linha de lançamento já vinculado do razão expandido: "Vinculado #10" virou só **"#10"**, e o nome do tipo ("Valor exato", "Pagamento parcial"...) virou a **proporção créditos:débitos** do vínculo ("1:1", "4:1" = 4 créditos para 1 débito; contada sobre `conta.lancamentos` por `vinculo_id`, saldo anterior incluído), seguida de "automático"/"manual" como antes. O nome do tipo e a proporção por extenso ficam no balão (`data-conc-tooltip`). O modal do "i" e o bloco de pagamentos parciais não mudam. + +Só JS: não exige reiniciar o `runserver`. + +### Rodada 70 — Colunas "Saldo" e "Em aberto" do razão expandido (2026-10-02) + +Pedido do usuário, em `linhaRazaoHtml()`: + +- **Em aberto**: só a linha "Saldo a pagar do vínculo #N" (saldo de pagamento parcial, para validação posterior) mostra valor. O lançamento sem vínculo passou a mostrar "—" (antes repetia o próprio valor); o valor em aberto dele continua no fato/sugestão da coluna Situação, nos totais e na lista separada de não conciliados (`linhaLancamentoHtml()`, sem mudança). +- **Saldo** (do Questor): "—" nas linhas de vínculo fechado; continua no lançamento sem vínculo e nas linhas de vínculo `parcial` com saldo a pagar. + +Só JS: não exige reiniciar o `runserver`. + +### Rodada 71 — Relatório como terceira aba do detalhe (2026-10-02) + +Pedido do usuário: o relatório de análise fazer parte da própria tela, como uma terceira aba ("Relatório", depois de "Conciliação" e "Em aberto há mais de 3 meses"). + +- Escolha da implementação: o mesmo HTML do relatório num `