diff --git a/README.md b/README.md index a9c438d..81d1a81 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,12 @@ Sistema web para controle de custos de entregas hospitalares da **Gade Hospitala --- -## 📋 CONTEXTO DO PROJETO (leia antes de tudo) +> 💡 **Navegação:** as seções abaixo abrem e fecham — clique no título de cada uma. + +--- + +
+📋 CONTEXTO DO PROJETO (leia antes de tudo) A **Gade Hospitalar** precisa controlar o custo de cada operação de entrega (UBS SUL, UBS LESTE, EMAD, STS, SAD, etc.). @@ -20,9 +25,12 @@ O banco **já existe** e é atualizado a cada 1 hora por outro sistema externo: O sistema novo cria suas próprias tabelas no mesmo PostgreSQL (schema separado ou prefixo) e lê a tabela existente apenas para exibir e consolidar entregas. +
+ --- -## 🏗️ Estado atual — O que já foi feito (Fase 1 ✅) +
+🏗️ Estado atual — O que já foi feito (Fase 1 ✅) ``` logistica-controle-custos/ @@ -70,9 +78,12 @@ logistica-controle-custos/ └── ..._create_auditoria_logs.rb ``` +
+ --- -## 🚀 Setup do zero (próximo dev) +
+🚀 Setup do zero (próximo dev) ### 1. Clone ```bash @@ -109,9 +120,12 @@ Login: admin@gade.com Senha: Gade@2026! ← ALTERE NO PRIMEIRO ACESSO ``` +
+ --- -## 🔧 Comandos do dia a dia +
+🔧 Comandos do dia a dia ```bash docker-compose exec app bundle exec rails db:migrate # nova migration @@ -120,9 +134,12 @@ docker-compose logs -f app # logs em tempo real docker-compose down # parar tudo ``` +
+ --- -## 🗺️ Fases de implementação +
+🗺️ Fases de implementação | Fase | Status | O que faz | |------|--------|-----------| @@ -137,9 +154,12 @@ docker-compose down # parar tudo **🎉 PROJETO: 8 de 8 fases implementadas.** +
+ --- -## 🔧 Análise de integração (11/06/2026) — Correções aplicadas +
+🔧 Análise de integração (11/06/2026) — Correções aplicadas As Fases 2/3 (commit `4724847`) foram desenvolvidas em paralelo às Fases 4-8 (commits `90ed705` e `8b3d4bc`), e a mesclagem gerou **conflitos que quebravam a aplicação**. Análise dos commits e correções: @@ -302,9 +322,12 @@ docker-compose exec app bundle exec whenever --update-crontab ⚠️ Altere as senhas padrão no primeiro acesso em produção. +
+ --- -## 🧪 Auditoria + Suíte de testes (15/06/2026) +
+🧪 Auditoria + Suíte de testes (15/06/2026) Revisão de código + criação da suíte RSpec (o projeto tinha `rspec-rails`/`factory_bot`/`capybara` no Gemfile, mas **nenhum teste** e **nenhum `spec/`**). @@ -355,9 +378,12 @@ docker-compose exec app bundle exec rspec > Os specs que dependem da tabela read-only `db_reem_simplerout_2026` stubam `Entrega` — o banco de teste não contém essa tabela externa. +
+ --- -## 🔧 Correções + funcionalidades (16/06/2026) +
+🔧 Correções + funcionalidades (16/06/2026) ### 🔴 Erros de runtime corrigidos (reportados em prints) - **Logout** dava `No route matches [GET] /auth/logout` — o link usava `method: :delete` (rails-ujs), ignorado pelo Turbo. Agora usa `data-turbo-method`. @@ -385,9 +411,12 @@ docker-compose exec app bundle exec rake reem:diagnostico docker-compose exec app bundle exec rake reem:diagnostico INICIO=2026-02-01 FIM=2026-06-30 ``` +
+ --- -## 🔧 Correções + funcionalidades (16/06/2026 — sessão 2) +
+🔧 Correções + funcionalidades (16/06/2026 — sessão 2) ### 🔴 Bugs corrigidos - **Dashboard zerado por filtro de conta:** `DB_EXISTING_ACCOUNT_ID` é uma **lista separada por vírgula**, não um trecho de SQL. Valor errado (ex.: `account_id IN ('95907', '')`) zerava tudo. Use `95907,` (vírgula no fim) para incluir também registros com conta vazia/NULL. O scope `Entrega.da_conta_gade` agora inclui `NULL` quando há token vazio na lista. @@ -412,9 +441,12 @@ docker-compose exec app bundle exec rake reem:diagnostico INICIO=2026-02-01 FIM= docker-compose exec app bundle exec rails db:migrate ``` +
+ --- -## 🗄️ Banco existente — referência rápida +
+🗄️ Banco existente — referência rápida | Campo | Uso | |-------|-----| @@ -430,9 +462,12 @@ docker-compose exec app bundle exec rails db:migrate **Regra de pagamento:** `status = 'completed'` AND `checkout IS NOT NULL` +
+ --- -## 🎨 Design — padrão da marca +
+🎨 Design — padrão da marca | Elemento | Cor | Hex | |----------|-----|-----| @@ -447,9 +482,12 @@ docker-compose exec app bundle exec rails db:migrate - Botões mínimo 48px altura (acessibilidade touch) - Tema escuro como padrão +
+ --- -## 👥 Perfis de acesso +
+👥 Perfis de acesso | Perfil | Login | Acesso | |--------|-------|--------| @@ -458,10 +496,12 @@ docker-compose exec app bundle exec rails db:migrate | Operador | email + senha | Consolidações (criar + validar) | | Motorista | PIN 4 dígitos ou QR | Painel pessoal + baixar próprio PDF | +
+ --- - -## 🩺 Correção (11/06): container caía mostrando ajuda do "rails new" +
+🩺 Correção (11/06): container caía mostrando ajuda do "rails new" **Sintoma:** `docker-compose up` subia e o log mostrava o help do `rails new` em loop. **Causa:** o repositório tinha os arquivos da aplicação (models/controllers/views) mas **não tinha o esqueleto de boot do Rails** — sem `config/application.rb` e `config.ru`, o comando `rails s` não reconhece a pasta como um app Rails e cai no modo "criar app novo". @@ -506,15 +546,23 @@ docker-compose logs -f app # deve mostrar "Listening on http://0.0.0.0:3000" # Acesse http://SEU_IP:3000 → admin@gade.com / Gade@2026! ``` -## 🔐 Segurança +
+ +--- + +
+🔐 Segurança - **NUNCA** versione `.env`, `config/master.key` ou qualquer arquivo com senha - Repositório **PRIVADO** em git.xenserver.com.br - Use sempre `ENV['VARIAVEL']` no código Ruby +
+ --- -## 🆕 Atualização 17/06/2026 — Pagamentos, Operações, Dashboard financeiro e UI +
+🆕 Atualização 17/06/2026 — Pagamentos, Operações, Dashboard financeiro e UI Conjunto de melhorias para deixar o sistema pronto para entrega final. @@ -592,9 +640,12 @@ Conjunto de melhorias para deixar o sistema pronto para entrega final. ``` Aplicar com: `docker-compose exec app bundle exec rails db:migrate` +
+ --- -## 🔧 Correções — Holerite PDF (18/06/2026) +
+🔧 Correções — Holerite PDF (18/06/2026) ### 🔴 Bugs corrigidos - **500 ao gerar holerite** (`gerar_pdf_holerite`): `Prawn::Errors::IncompatibleStringEncoding` @@ -636,9 +687,12 @@ Aplicar com: `docker-compose exec app bundle exec rails db:migrate` - **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 +
+🆕 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 = @@ -692,3 +746,49 @@ 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). + +
+ +--- + +
+🆕 Atualização 22/06/2026 — Pilar Extraordinária, Perfil Externo, Falhadas, Relatórios e Segurança QR + +### 🆕 Funcionalidades +- **Pilar "Entrega Extraordinária"** — preço coringa para entregas fora do planejamento. + - Novo valor `extraordinaria` no `enum tipo` de `ConsolidacaoEntrega` (soma positiva, como Bônus). Sem migration de enum (coluna `integer`). + - Aparece em **todas** as telas dos pilares: wizard (passo 1), validação, revisão, nota avulsa, holerite, PDFs e composição do dashboard. + - **Preço padrão configurável** em *Configurações* (`preco_extraordinaria`) **e** **valor customizável por entrega**: ao marcar "Extra" no wizard abre um prompt já preenchido com o padrão (`valor_classificacao` no controller + `pedirValor()` no Stimulus). +- **Card "Consolidado / Pago"** no topo do dashboard (total consolidado + total já pago do período; reusa `@fin_custo_total` / `@fin_pago`). +- **Entregas falhadas no dashboard** — o card "Total Entregas" agora separa `entregues · pendentes · falhadas`. + - Novo `Entrega::STATUS_FALHA` + scope `falhadas`; o scope `pendentes` foi ajustado para não sobrepor (nem `completed` nem falha). +- **Relatórios financeiros em PDF (admin):** + - Por **consolidação** — `Pdf::RelatorioFinanceiroConsolidacaoPdf` (botão "📊 Relatório financeiro" na tela da consolidação). + - Por **período** — `Pdf::RelatorioFinanceiroPeriodoPdf` (botão "🖨️ Relatório" no dashboard, respeita o filtro de período/operação). +- **Novo perfil de usuário: "Externo (só dashboard)"** (`role: externo`). + - Login normal por e-mail/senha; enxerga **apenas o dashboard**. Bloqueado nas demais áreas pelas policies Pundit (`pode_consolidar?`/admin). Ideal para enviar a outras gerências visualizarem os indicadores. +- **Filtro de data re-estilizado** — calendário no tema escuro (flatpickr dark + acento laranja) e atalhos rápidos: **Hoje / 7 dias / Este mês / 30 dias**. + +### 🔴 Bugs corrigidos +- **Botão "Arquivar"** não funcionava em consolidação zerada / rascunho. `Consolidacao#arquivar!` e `#reativar!` passaram a usar `update_columns` (pulam validações e o callback de recálculo) — arquivar é soft-delete administrativo e deve sempre funcionar. `turbo_confirm` movido para o `
` (mais confiável). +- **Caixa do filtro de data** mostrava uma data solta em vez do período. Causa: o flatpickr recebia datas em ISO (`YYYY-MM-DD`) com `dateFormat: 'd/m/Y'`. Corrigido passando objetos `Date` + separador `" até "`; seleção de **um único dia** agora aplica; re-inicialização em `turbo:load`. +- **Moeda sem separador de milhar** — padronizado **`R$ 1.234,56`** (milhar `.`, decimais `,`) em: helper `moeda` (`number_to_currency`), PDFs (`base_pdf`), `Configuracao#valor_formatado`, mensagens do `NotificacaoService` e tooltips/JS do dashboard e do wizard. +- **R$ "quebrado" no painel do motorista** (celular) — os valores grandes quebravam "R$" e o número em linhas separadas. Adicionado `whitespace-nowrap` + fonte responsiva (`text-4xl sm:text-5xl`) nos cards. + +### 🔐 Segurança +- **QR Code do holerite não loga mais direto.** Antes, ler o QR (`/motorista/acesso/:token`) autenticava o motorista sem PIN. Agora o QR apenas **identifica** o motorista e leva à tela de PIN; ele precisa digitar o **PIN de 4 dígitos** para entrar — e o PIN tem que ser **do mesmo motorista do QR** (impede usar o QR de outra pessoa). A tela saúda pelo nome quando vem do QR. + +### 🆕 Migration adicionada (rodar `db:migrate`) +```bash +docker-compose exec app bundle exec rails db:migrate +``` +- `20260622000001_add_preco_extraordinaria_configuracao` — cria a config `preco_extraordinaria` (padrão `R$ 25,00`) em bancos já existentes (idempotente; não sobrescreve valor já definido). + +### ⚠️ A confirmar +- Validar o valor real do status de falha gravado pelo SimpleRoute e ajustar `Entrega::STATUS_FALHA` se necessário (hoje `%w[failed]`): + ```bash + docker-compose exec app bundle exec rails runner "puts Entrega.da_conta_gade.distinct.pluck(:status).inspect" + ``` + +
+