Atualização READ.me
This commit is contained in:
75
README.md
75
README.md
@@ -1414,3 +1414,78 @@ visitas por tipo de material.
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><strong>🆕 Atualização 13/07/2026 — Planilha da Operação (página + Excel do cliente), dashboard e correções</strong></summary>
|
||||||
|
|
||||||
|
### 📋 Planilha da Operação — página própria (`/dashboard/operacoes/planilha`)
|
||||||
|
Tabela **espelho da planilha da operação** (uma linha por NF) para pesquisar e acompanhar
|
||||||
|
ocorrências/status, acessada pelo botão **"📋 Planilha da operação"** no Dashboard de Operações
|
||||||
|
(o botão leva junto o contexto atual: operação/modo Global, período e cross-filters ativos).
|
||||||
|
- Colunas: Data, NF, Destinatário (endereço no tooltip), Unidade STS, Motorista, Veículo,
|
||||||
|
**Resultado** (badge Entregue/Falha/Pendente), **Ocorrência** (motivo do insucesso) e status
|
||||||
|
gade (RECORRENTE/NOVO). No modo Global aparece também a coluna Operação.
|
||||||
|
- **Busca textual server-side** (param `q`, qualquer campo) + **paginação server-side**
|
||||||
|
(param `pg`, 15/página, janela `« 1 … 7 8 9 … 42 »`) — aguenta as milhares de linhas do Global.
|
||||||
|
- Alternância 🏥 Operação / 🌐 Global, seletor de operação (auto-submit) e chips removíveis dos
|
||||||
|
filtros herdados. Reusa as linhas do `Analytics::OperacaoMetricas` (novo método `#buscar`) —
|
||||||
|
**nenhuma query nova**.
|
||||||
|
- Arquivos: rota `operacoes_planilha`, action `planilha` + `montar_tabela_espelho`
|
||||||
|
(`OperacoesDashboardController`), views `planilha.html.erb` + `_espelho.html.erb`.
|
||||||
|
|
||||||
|
### ⬇️ Download do Excel do cliente — planilha Entregas preenchida
|
||||||
|
Botão **"⬇️ Baixar Excel preenchido"** na página da planilha: gera o `.xlsx` no formato do modelo
|
||||||
|
**"Entregas SUDESTE MM.AAAA_FINAL"** com as **3 abas, 1:1** — automatiza o preenchimento que era
|
||||||
|
feito manualmente para entregar ao cliente.
|
||||||
|
- **RESUMO** — mês, Total Previsto/Realizado/Performance e os quadros **EMAD** e **UBS** por
|
||||||
|
coordenadoria (CRS fixas do modelo) com **motivos de "Não Entregue"** (Óbito, Responsável
|
||||||
|
Ausente, Endereço não localizado, Recusa, Paciente não reside, Outros) classificados a partir
|
||||||
|
da `observation` do rastreio; linhas Total e Performance %.
|
||||||
|
- **ENTREGAS** — colunas A–V da própria tabela `gade_entregas_*` (ordem física de importação =
|
||||||
|
ordem da planilha original) + **W–Z preenchidas pelo rastreio**: STATUS, ENTREGA (Sim/Não),
|
||||||
|
DATA OCORRÊNCIA (data real do checkout) e OCORRÊNCIA — último status de cada NF (mesma CTE
|
||||||
|
`ROW_NUMBER` dos painéis).
|
||||||
|
- **SimpliRoute** — dump cru do rastreio com as **46 colunas exatas** do export original
|
||||||
|
(todas as visitas das NFs da operação, incluindo repetidas).
|
||||||
|
- **Estilo idêntico ao modelo** (cores extraídas do `styles.xml` do próprio arquivo): cabeçalho
|
||||||
|
ENTREGAS azul `1155CC` (A–T) + vermelho `C00000` (U–Z), quadros do RESUMO em
|
||||||
|
`002060`/`0070C0`/`C00000`/`A5A5A5`, status verde/laranja/azul, títulos 16pt, performance em
|
||||||
|
itálico %, cabeçalhos mesclados. Validado offline com caxlsx + LibreOffice.
|
||||||
|
- Arquivos: `Analytics::PlanilhaEntregas` (dados) + `Analytics::PlanilhaEntregasXlsx` (binário,
|
||||||
|
caxlsx), rota `operacoes_planilha_baixar`, action `baixar_planilha`.
|
||||||
|
- ⚠️ **Ressalvas:** nomes de coluna das tabelas `gade_entregas_*`/rastreio foram deduzidos com
|
||||||
|
fallback seguro (coluna inexistente sai **vazia**, sem quebrar o layout) — conferir o primeiro
|
||||||
|
download real e ajustar `COLUNAS_GADE`/`RASTREIO_COLUNAS` se algo sair em branco. Os 2
|
||||||
|
**gráficos embutidos** do RESUMO não são replicados. "Conferência Documentos" é controle
|
||||||
|
manual (sai "A iniciar").
|
||||||
|
|
||||||
|
### 📊 Dashboard financeiro
|
||||||
|
- **Paginação nas tabelas de pagamentos** ("realizados" e "pendentes"): 10 linhas/página com
|
||||||
|
abas e contador ("1–10 de 47"), client-side (função genérica `paginarTabela`); some com ≤10 itens.
|
||||||
|
- **Novo gráfico "Pagamentos por dia"** abaixo da "Evolução do custo": barras verdes com o valor
|
||||||
|
pago por data de pagamento (`pago_em`) + linha tracejada do **acumulado** — o fluxo de caixa,
|
||||||
|
que não existia em nenhuma tela (`build_grafico_pagamentos`). Quando não há pagamento no
|
||||||
|
período mostra estado vazio (💸 + valor aguardando pagamento) em vez de gráfico zerado.
|
||||||
|
> Iterações descartadas no caminho: "Entregas por dia" (redundante — valor = qtd × preço fixo)
|
||||||
|
> e "Resultado por dia" (já existe na tela de Operações).
|
||||||
|
- O card dos gráficos virou `flex-col` e preenche toda a altura ao lado do ranking de motoristas
|
||||||
|
(sumiu o vazio embaixo da linha).
|
||||||
|
|
||||||
|
### 🔴 Correções
|
||||||
|
- **"Rodapé quebrado" no celular:** era uma **barra de rolagem horizontal** (laranja) colada no
|
||||||
|
rodapé — a legenda dos gráficos não quebrava linha e estourava ~37px a largura em telas
|
||||||
|
<~430px. ✅ Cabeçalhos/legendas dos gráficos com `flex-wrap` + **`overflow-x-hidden` no
|
||||||
|
`<body>`** (rede de segurança; tabelas largas continuam rolando nos próprios contêineres
|
||||||
|
`overflow-x-auto`).
|
||||||
|
|
||||||
|
### 📌 Padrões (reforçados)
|
||||||
|
- Tabelas externas sempre read-only, nome de tabela via whitelist + `quote_table_name`, colunas
|
||||||
|
em whitelist fixa com fallback NULL (padrão `OperacaoMetricas`/`PlanilhaCarga`).
|
||||||
|
- Excel com `caxlsx` (mesmo padrão da planilha de carga SimpliRoute): serviço de linhas +
|
||||||
|
serviço de binário + `send_data` no controller.
|
||||||
|
|
||||||
|
> **Sem migration.** Deploy normal; em produção reiniciar o Puma após o deploy.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user