Atualização Read.me

This commit is contained in:
2026-06-19 23:41:59 -03:00
parent 66794b817f
commit e23ca0f10d

View File

@@ -635,3 +635,60 @@ Aplicar com: `docker-compose exec app bundle exec rails db:migrate`
### 📌 Padrão (novo)
- **PDFs com Prawn**: usar **sempre** a fonte TTF registrada no `BasePdf` (DejaVu, UTF-8). Nunca
contar com a fonte embutida — ela quebra em qualquer caractere fora do Windows-1252.
---
## 🆕 Atualização 19/06/2026 — Apontamento manual / Nota avulsa
Permite incluir numa consolidação uma **entrega que chegou por fora** (ex.: nota que entrou
depois e não está no banco mensal das operações). O usuário digita o **número da nota (NF =
`reference_id`)**, o sistema busca os dados direto na `db_reem_simplerout_2026` (atualizada a cada
hora pela SimpleRoute) e adiciona a entrega ao fechamento do motorista.
> A tabela externa continua **read-only** — o apontamento só **lê** dela (`Entrega.por_nf`,
> sem filtro de período, restrito à conta Gade via `da_conta_gade`).
### 🆕 Funcionalidades
- **Apontamento dentro de uma consolidação existente** (wizard Passo 1): botão **" Apontamento
manual"** → modal busca a NF → confere os dados (motorista/veículo/data) → escolhe **um ou
vários pilares** (Normal/Retirada/Bônus/Desconto) → adiciona.
- **"Nota avulsa"** (tela de Consolidações): botão **" Nota avulsa"** → busca a NF → ao
prosseguir **cria já a consolidação** (nome `Avulsa nf<NF>`, período = data da entrega → fim do
mês, motorista vindo do `driver` da entrega) com o apontamento, e abre a tela da consolidação.
- **Múltiplas classificações** por apontamento: cria um pilar (`ConsolidacaoEntrega`) por tipo
escolhido, somando os valores (mesmo modelo multi-pilar das entregas normais).
- **Motorista automático**: vem do `driver` da entrega; se ainda não estiver na consolidação, é
incluído.
- **Gestão na tela da consolidação (show)**: seção **" Apontamentos manuais"** lista NF,
motorista, pilares e valor, com botão de **remover** (a nota inteira). Na revisão (Passo 3) os
apontamentos aparecem com o selo **" Apontamento"** e botão de remover (por pilar).
### ⚙️ Como funciona (técnico)
- Coluna **`manual` (boolean, default false)** em `consolidacao_entregas` distingue apontamento de
entrega elegível do período. `Consolidacao#classificadas_count` ignora os `manual: true` para
**não estourar a barra de progresso** nem o gate de finalização (`>= 100%`).
- Lógica centralizada em **`Consolidacao#adicionar_apontamento!(entrega, tipos, user)`** e
**`Consolidacao#recalcular_motorista!`** — reusadas pelos dois fluxos (wizard e avulsa). Preço por
pilar via `ConsolidacaoEntrega.valor_para(tipo)` (fonte única). Dados da entrega via
`Entrega#resumo_apontamento`.
- Rotas novas:
- `consolidacoes` (coleção): `GET buscar_nf` (JSON), `POST avulsa`.
- `consolidacao_entregas` (coleção): `GET buscar_nf`, `POST apontar`, `DELETE remover_apontamento`
(aceita `?id=` para um pilar ou `?tracking_id=&motorista=` para a nota toda).
- Stimulus: `apontamento_controller.js` (modal do wizard) e `nota_avulsa_controller.js` (modal da
index). ⚠️ Identificador do Stimulus segue o nome do arquivo em **dash-case**: `nota_avulsa_controller.js`
`data-controller="nota-avulsa"` / `data-action="nota-avulsa#..."` (e o elemento da ação precisa
estar **dentro** da `div` do controller).
### 🆕 Migration adicionada (rodar `db:migrate`)
```
20260619000001_add_manual_to_consolidacao_entregas.rb
```
```bash
docker-compose exec app bundle exec rails db:migrate
```
### 🧪 Testes
- `spec/models/consolidacao_spec.rb`: `classificadas_count` ignora apontamentos manuais e
`adicionar_apontamento!` (multi-tipo, idempotente, inclui o motorista e soma o valor).