From e631e8448a6dd23c7a1bf0cf0b38c7f43fa527d7aea6e4063467f47f5f4687bc Mon Sep 17 00:00:00 2001 From: victor Date: Tue, 21 Jul 2026 00:05:08 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20Read.me=20'21/07/2026'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/README.md b/README.md index b84f4c8..8f66115 100644 --- a/README.md +++ b/README.md @@ -1548,3 +1548,93 @@ docker-compose exec app bundle exec rails db:migrate +--- + +
+🎨 Atualização 20/07/2026 — Ícones da marca (emoji → SVG laranja) + galeria de fotos no Editar Lançamento + +Três frentes num dia: (1) troca de **todos os ícones** do sistema, que eram emojis, por +ícones SVG chapados no laranja da marca; (2) **galeria com todas as fotos** do lançamento na +tela de Editar Lançamento; (3) investigação (com veredito) sobre **por que não dá para +editar as fotos** pela API do SimpliRoute. **Sem migration.** + +### 🎨 1. Ícones — emoji → SVG da marca +Os ícones eram **emojis** (📊 📋 👥 ⚙️ …), que davam aparência "genérica de IA" e mudavam de +forma/cor conforme o sistema operacional. Agora são **SVG chapados**, na cor laranja da marca +(`#f97316`), consistentes em qualquer navegador. + +- **Sprite próprio** em `public/icons.svg` — subconjunto do **Bootstrap Icons** (licença MIT), + arquivo único (~33 KB), servido localmente (sem CDN externo). +- **Helper `icone(nome, …)`** em `app/helpers/application_helper.rb`: mapa de nomes semânticos + em pt-BR (`:caminhao`, `:consolidacoes`, `:dinheiro`, …) → símbolo do sprite. Trocar um ícone + é mudar uma linha. Usa `fill="currentColor"` → a cor vem da classe CSS. +- **Helper `rotulo(nome, texto, …)`** para `link_to`/`button_to` (que recebem o rótulo como + argumento, onde não cabe ERB). `nav_link_to` ganhou a opção `icon:`. +- **~260 emojis substituídos em ~33 arquivos** (views, `_navbar`, layout, popups do mapa Leaflet + e HTML montado em JS na tela de Editar Lançamento). +- **Ícones de status mantêm cor semântica** (sucesso verde, alerta amarelo, erro vermelho) — + só os de navegação/ação viraram laranja. +- **E-mails** (`consolidacao_mailer`) ficaram sem os emojis decorativos: sprite via `` + não funciona em cliente de e-mail. +- **Ajuste fino (mesma data):** ícones **+20%** (padrão `1.05em`→`1.25em`), **espaçamento** + ícone↔texto (parâmetro `espaco:` com `mr-1`, desligado nos ícones sozinhos/centralizados) e + **correção de contraste** — ícone laranja sobre fundo laranja ficava invisível (botão + "Relatório" do dashboard e os ícones das telas de recuperar/redefinir senha → herdam preto). + +### 🖼️ 2. Editar Lançamento — galeria com TODAS as fotos +Antes a tela mostrava só **uma** foto genérica. Descobrimos (testando a API real) que as fotos +reais do motorista **não** estão no array `pictures`, e sim em **`extra_field_values`**, em +campos nomeados: **`foto_nf`** (Nota Fiscal), **`foto_prova_visita`** (Prova da visita, presente +até em insucesso), **`foto_relatorio2`** (Relatório) e **`foto_termo`** (Termo, quase sempre vazio). + +- Novo método **`SimpliRoute::Client#detalhe_visita`** → `GET /v1/plans/visits/{id}/detail/` + (fonte de fotos mais completa; best-effort, cai para a visita se falhar). +- **`fotos_do_lancamento`** no controller reúne **todas as fontes** — fachada (rastreio), + `extra_field_values`, `pictures[]` e `signature` — numa lista **etiquetada** (tipo + origem) e + **deduplicada por URL**. +- **Galeria** com a 1ª foto em destaque + grade, cada uma com etiqueta colorida por categoria, + e **visualizador (lightbox)** que amplia e navega (setas do teclado / Esc / link p/ tamanho real). + +### 🚫 3. Por que NÃO dá para editar as fotos (limitação do SimpliRoute) +Investigamos todos os caminhos de escrita contra a API real. **A limitação é do SimpliRoute:** + +| Caminho | Resultado | +|---|---| +| `PATCH`/`PUT` em `extra_field_values` (todos os formatos) | **HTTP 500** — o servidor deles quebra | +| Editar outros campos (`status`, `notes`) por `PATCH` | Funciona (200) — o bloqueio é **só** das fotos | +| Suspeita de "plano expirado" | Descartada — visita **ativa (de hoje)** dá o mesmo 500 | +| `GET /v1/plans/visits/{id}/detail/` | Somente leitura | +| Checkout mobile `POST /v1/mobile/visit/{id}/checkout/` | **403** — exige token de **motorista**; e refaz o checkout inteiro (hora/GPS/assinatura) | +| Webhook | Canal de **saída** apenas — não escreve de volta | + +- **Webhook existente descoberto:** a conta (Gade Hospitalar) tem um webhook `visit_checkout_detailed` + apontando para um **Google Apps Script** (`script.google.com/…/exec`) — recebe os dados de cada + entrega finalizada (inclui as URLs das fotos). É **inbound**, não serve para editar. +- **Conclusão:** não há caminho administrativo (nem por API, nem pelo painel web do SimpliRoute) + para corrigir uma foto após o envio do motorista. Só liberando escrita em `extra_field_values` + (pela API) ou uma opção de substituir imagem no painel deles. +- **Ferramenta de diagnóstico:** `bin/sondar_fotos_simpliroute --visita [--testar-escrita]` — + mostra as fotos de todas as fontes e testa (com segurança, mirando campo vazio e restaurando) se + a escrita é aceita. Roda no servidor: `docker compose exec app bin/sondar_fotos_simpliroute …`. + +> ⚠️ **Token do SimpliRoute:** é de **produção** e tem escrita. Se for compartilhado (chat/e-mail), +> **rotacione** depois em `app2.simpliroute.com`. + +### 📂 Arquivos +``` +public/icons.svg (novo — sprite Bootstrap Icons, MIT) +bin/sondar_fotos_simpliroute (novo — sondagem da API de fotos) +app/helpers/application_helper.rb (icone / rotulo / nav_link_to) +app/services/simpli_route/client.rb (detalhe_visita) +app/controllers/admin/edicao_lancamentos_controller.rb (fotos_do_lancamento) +app/views/admin/edicao_lancamentos/show.html.erb (galeria + lightbox) +app/views/layouts/_navbar.html.erb · _sidebar.html.erb · application.html.erb +app/javascript/controllers/validacao_controller.js (chip usa SVG, não emoji) ++ ~30 views com emojis substituídos (consolidacoes, dashboard, operacoes_dashboard, devise, …) +``` + +> **Sem migration e sem gem nova** — só views, helpers, JS e um asset estático. +> Em produção, o `public/icons.svg` precisa ir junto no deploy. + +
+