diff --git a/README.md b/README.md index 4bd433c..b84f4c8 100644 --- a/README.md +++ b/README.md @@ -1489,3 +1489,62 @@ feito manualmente para entregar ao cliente. +--- + +
+🆕 Atualização 15/07/2026 — Entrega de Termo Especial (novo card de preço + lançamento com dois tipos) + +O negócio passou a diferenciar **termo normal** e **termo especial**, cada um com seu preço. +O modal de lançamento agora permite informar **quantos termos de cada tipo** o motorista +entregou, num único envio. + +### 🆕 Funcionalidades +- **Novo card de preço "📋 Entrega de Termo Especial"** em **Admin → Configurações** + (chave `preco_termo_especial`, moeda). Criado com **R$ 0,00** — definir o valor real no + card antes de usar. O card aparece automático (a view itera todas as configs). +- **Novo pilar `tipo: termo_especial`** (enum 6, cor **ciano**, label "Entrega de Termo + Especial") — mesmo comportamento do termo normal: lote numa linha (`quantidade` × preço), + `manual: true`, `tracking_id` sintético `TERMO-`. +- **Modal "📄 Entrega de termo" com dois steppers** lado a lado — "📄 Termo Normal" + (inicia em 1) e "📋 Termo Especial" (inicia em 0), cada um exibindo seu preço unitário. + Um clique em "Adicionar termos ✓" lança os dois lotes de uma vez (exige ao menos 1 termo + no total; mínimo 0 em cada stepper). +- **Exibição em todas as telas**: linha "Termo Especial" no painel 📊 Resumo do Passo 2, + card próprio no Revisar, badge ciano "Entrega de Termo Especial ×N" nos apontamentos + manuais (show) e nos PDFs (extrato, relatório do motorista e financeiro — automático, + iteram `TIPO_CORES`). + +### ⚙️ Como funciona (técnico) +- **Migration** (rodar `db:migrate`): `20260715000001_add_preco_termo_especial_configuracao` + — cria a config `preco_termo_especial` (idempotente) + seed correspondente. +- `Configuracao`: chave nova em `CHAVES`/`CHAVES_MOEDA`/`LABELS`/`ICONES`/`mapa_de_precos` + + helper `preco_termo_especial`. +- `Consolidacao#adicionar_termos!` ganhou o parâmetro **`tipo:`** (default `'termo'`, + validado em `termo`/`termo_especial`); o preço vem de + `ConsolidacaoEntrega.valor_para(tipo)`. +- `ConsolidacaoEntregasController#apontar_termo` lê `quantidade` (normal) + + `quantidade_especial` e cria **um lote por tipo** dentro de uma transação, auditando as + duas quantidades. `contar_manuais` soma a `quantidade` dos **dois** tipos de termo; os + agregados `group(:tipo).sum(:quantidade)` já funcionavam sem mudança. +- Stimulus: `apontamento_termo_controller.js` com targets `quantidade`/`quantidadeEspecial` + e ações `maisEspecial`/`menosEspecial`; `validacao_controller.js` com target opcional + `qtdTermoEspecial`. + +### 📂 Arquivos +``` +db/migrate/20260715000001_add_preco_termo_especial_configuracao.rb (nova) +app/models/configuracao.rb · consolidacao.rb · consolidacao_entrega.rb +app/controllers/consolidacao_entregas_controller.rb +app/javascript/controllers/apontamento_termo_controller.js · validacao_controller.js +app/views/consolidacao_entregas/validar.html.erb · revisar.html.erb +app/views/consolidacoes/show.html.erb +app/services/pdf/relatorio_motorista_pdf.rb +db/seeds.rb · spec/models/configuracao_spec.rb +``` + +```bash +docker-compose exec app bundle exec rails db:migrate +``` + +
+