portal_publico/portal_api/custo_contratacao/CHANGELOG.md

4.4 KiB

Changelog — Simulação de Custo de Contratação

Histórico específico desta aplicação, extraído de plano.md.

Formato: uma entrada por rodada, ### Rodada N — Título; quando a rodada não tem número registrado, ### Título só. A numeração de rodada não é global — cada aplicação conta as próprias, e o mesmo número designa trabalhos diferentes em arquivos diferentes. Ao citar uma rodada, sempre nomear o arquivo. Ver o topo de plano.md.

Rodada 37 — Simulação de Custo de Contratação (Geradoc)

Pedido (2026-08-11): substituir a planilha manual de custo de contratação (projects/planilha de custo/*.xlsx) por um formulário no Portal que gera um PDF pronto pra enviar ao cliente — primeira aplicação de "Geradoc" a sair do estado de placeholder.

Decisões confirmadas com o usuário: v1 cobre só Empregado CLT (as outras 4 modalidades do pedido original — Simples Nacional, Regime Normal, Pró-labore, Empregado Doméstico — ficam para quando houver planilha de referência equivalente); cálculo pontual, sem persistência (devolve o PDF direto, nada salva no banco); corrigido um gap real da planilha original (dedução por dependente não somava à base do IRRF quando usava desconto real de INSS); e as tabelas de INSS/IRRF, que nasceram hardcoded, viraram um cadastro editável (ParametroFiscalCustoContratacao, singleton) na mesma rodada em que a redução de IRRF da Lei 15.270/2025 (vigente desde jan/2026) foi implementada, já que ambas mudam por lei/todo ano. PDF gerado via reportlab (adicionado ao requirements.txt), com cabeçalho nas cores reais da marca (dourado/marrom amostrados de logo.png), não o roxo do tema do Portal. Migração 0023_parametrofiscalcustocontratacao. Detalhe técnico completo no CLAUDE.md desta pasta.

Rodada 38 — Revisão de interface (30/09/2026): validação, tabelas fiscais e formulário no celular

Correções de interface apontadas pela revisão de interface de 30/09/2026, só no frontend (custo-contratacao.js/.css/.html); nada mudou no cálculo nem no backend.

  • Tabelas fiscais sem valor inválido gravado como 0: parseValorBrEstrito() aceita só número no formato brasileiro ("1.234,56" ou "1234,56"); campo inválido fica marcado em vermelho (.is-invalido), o cursor vai ao primeiro deles e nada é salvo. Antes um valor inválido virava 0 sem aviso e era gravado para todos os usuários.
  • Tabelas fiscais com milhar e coeficiente com vírgula: os inputs das faixas e dos parâmetros passam a ser preenchidos com separador de milhar ("7.350,00", formataValorBrMilhar), compatível com parseValorBrEstrito ao salvar. O coeficiente B da Lei 15.270/2025 aparece com vírgula ("0,133145"); o salvar continua aceitando vírgula ou ponto. formataValorBr (sem milhar) continua sendo a usada no payload da simulação.
  • Falha ao carregar as tabelas fiscais: mensagem com próximo passo ("Recarregue a página; se persistir, contate a Inovação.") e "Salvar tabelas" desabilitado até a carga terminar com sucesso, para não gravar tabelas vazias.
  • Validação do formulário: item de "Outros itens"/"Outros benefícios"/"Outros descontos" com valor e sem nome bloqueia o envio (antes era descartado do cálculo sem aviso) e leva o cursor ao nome; salário contratual, % de INSS Empregador e % de FGTS em branco também levam o cursor ao campo, em vez de só mostrar a mensagem no rodapé.
  • Gerar PDF: a aba é aberta no clique, antes do fetch (senão o bloqueador de pop-up costuma barrar), recebe o PDF quando ele chega e o blob é revogado depois; os botões mostram "Gerando…"/"Salvando…" e ficam travados até terminar.
  • Limpar: pede confirmação (pidConfirm, perigoso) só quando há algo preenchido no formulário ou alguma linha incluída nos itens.
  • Campos e layout: campos monetários e percentuais com inputmode="decimal" (inclusive as faixas criadas pelo JS); placeholder do coeficiente B "Ex.: 0,133145…"; linhas de 2 e 3 colunas do formulário e do painel fiscal viram uma coluna em tela de celular (até 640px, com escopo só no conteúdo da Simulação, sem afetar os modais comuns do shell); tabular-nums nos inputs das faixas.

Ficaram sem inputmode="decimal" de propósito os campos que aceitam valor ou percentual ("Adicional Art. 62" e os três descontos, ex.: "40%"): em teclado virtual de celular esse modo pode não oferecer o "%".