Correções de integração Fases 2/3 ↔ 4-8 + Auditoria UI + README final

This commit is contained in:
2026-06-11 18:48:44 -03:00
parent 8b3d4bc87f
commit 3b07e72d6e
19 changed files with 879 additions and 37 deletions

110
README.md
View File

@@ -124,16 +124,60 @@ docker-compose down # parar tudo
## 🗺️ Fases de implementação
| Fase | Status | O que fazer |
|------|--------|-------------|
| **1** | ✅ **CONCLUÍDA** | Setup + Docker + Models + Migrations + Seeds + Layout base |
| **2** | ⏳ Pendente | Login por role + CRUD usuários + pilares de preço + toggle tema |
| **3** | ⏳ Pendente | Dashboard: cards grandes laranja/preto/branco + gráfico Chart.js + cálculo ao vivo |
| **4** | ✅ **CONCLUÍDA** | Job Whenever (1h) + HistoricoEstimado + AuditoriaLog + API métricas |
| **5** | ✅ **CONCLUÍDA** | Nova Consolidação + filtros + Wizard Passo 1 (selecionar motorista) |
| **6** | ✅ **CONCLUÍDA** | Toggles coloridos + ações em massa + barra progresso + Wizard Passos 2 e 3 (Stimulus) |
| **7** | ✅ **CONCLUÍDA** | PDFs Prawn: relatório individual + holerite com QR code + modal preview |
| **8** | ✅ **CONCLUÍDA** | Painel motorista + login PIN/QR + notificações WhatsApp/email |
| Fase | Status | O que faz |
|------|--------|-----------|
| **1** | ✅ Concluída | Setup + Docker + Models + Migrations + Seeds + Layout base |
| **2** | ✅ Concluída *(corrigida)* | Login e-mail/PIN + CRUD usuários + pilares de preço + toggle tema |
| **3** | ✅ Concluída *(corrigida)* | Dashboard: cards + gráfico Chart.js + ranking motoristas + navegação por mês |
| **4** | ✅ Concluída | Job Whenever (1h) + HistoricoEstimado + AuditoriaLog + API métricas |
| **5** | ✅ Concluída | Nova Consolidação + filtros + Wizard Passo 1 |
| **6** | ✅ Concluída | Toggles coloridos + ações em massa + Wizard Passos 2 e 3 (Stimulus) |
| **7** | ✅ Concluída | PDFs Prawn: relatório + holerite com QR code + modal preview |
| **8** | ✅ Concluída | Painel motorista + login PIN/QR + notificações WhatsApp/email |
**🎉 PROJETO: 8 de 8 fases implementadas.**
---
## 🔧 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:
### 🔴 Problemas críticos encontrados e corrigidos
**1. Migration da Fase 2 quebrada** (`20260610_add_fase2_fields_to_users.rb`)
- Timestamp curto (8 dígitos) fazia ela rodar ANTES da `create_users` → erro "table does not exist"
- Adicionava coluna `ativo` que já existia → erro de coluna duplicada
- Criava `pin_acesso` duplicando o `pin_code` existente
-**Corrigida:** reescrita como `20260101000010_add_devise_trackable_to_users.rb` — só trackable/lockable, timestamp correto
**2. Campo de PIN inconsistente** — Fase 2 usava `pin_acesso`, o model e as Fases 7/8 usam `pin_code`. PINs cadastrados no CRUD não funcionariam no login.
-**Corrigido:** padronizado `pin_code` em todos os arquivos
**3. Campo de nome inconsistente** — CRUD de usuários usava `:name`, o schema usa `nome` → o CRUD quebrava ao salvar.
-**Corrigido:** padronizado `nome`
**4. Controllers fora do namespace** — As rotas esperam `Admin::UsuariosController` e `Admin::ConfiguracoesController`, mas os controllers foram criados na raiz → `/admin/usuarios` dava "uninitialized constant" e os controllers ficavam inacessíveis.
-**Corrigido:** movidos para `app/controllers/admin/` + views para `app/views/admin/` + paths atualizados (`admin_usuarios_path` etc.)
**5. Dashboard (Fase 3) chamava métodos inexistentes**`Entrega.do_mes` e `Configuracao.mapa_de_precos` foram sobrescritos pelo commit das Fases 4-6 → **a raiz do site quebrava** (root = dashboard#index).
-**Corrigido:** scope `do_mes` e método `mapa_de_precos` restaurados nos models, junto com `tipo_label`/`icone` usados pelas views de configurações
**6. AuditoriaLog com 2 assinaturas** — Fase 2 chamava `registrar(user, 'acao', ip)` posicional; o model usa keyword args → `ArgumentError` em login PIN, CRUD de usuários e configurações.
-**Corrigido:** todas as chamadas convertidas para a assinatura do model
**7. Rotas/controllers ausentes**
- `Admin::AuditoriaLogsController` tinha rota mas não existia → ✅ criado com view de listagem e filtros
- `toggle_tema` e `toggle_ativo` existiam nos controllers mas sem rota → ✅ rotas adicionadas
- Controller de configurações usava campo `tipo` que não existe (schema usa `chave`) → ✅ corrigido
### 🟡 Duplicações removidas (arquivos órfãos)
- `app/controllers/motorista_controller.rb` + `app/views/motorista/index.html.erb` — a rota `/motorista` usa `Motorista::DashboardController` (Fase 8)
- `app/views/layouts/_sidebar.html.erb` — o layout renderiza `_navbar.html.erb`
- Seeds dos 3 motoristas de teste (João/1234, Maria/5678, Carlos/9012) restaurados — tinham sido sobrescritos
### ⚠️ Observação sobre login PIN duplicado
Existem **dois fluxos de login por PIN** funcionais: a aba PIN na tela Devise (`/auth/login`, Fase 2) e a tela dedicada (`/motorista/login`, Fase 8 — usada pelo QR Code do holerite). Ambos usam `pin_code` e funcionam; recomenda-se manter os dois (a tela dedicada é melhor para mobile) ou unificar futuramente.
### 📂 Arquivos das Fases 4, 5 e 6
@@ -228,33 +272,35 @@ config/routes.rb # ATUALIZADO: /motorista/log
6. Logout → `/motorista/login` → entrar com PIN do motorista
7. Conferir cards de valores → baixar próprio holerite → sair
### ▶️ Para continuar (faltam apenas Fases 2 e 3)
### ▶️ Próximos passos (deploy)
Cole este contexto no início da conversa com o Claude:
O projeto está completo. Para colocar em produção:
```bash
# 1. Configurar .env com credenciais reais (DB_HOST do PostgreSQL existente)
cp .env.example .env && nano .env
# 2. Subir e migrar
docker-compose up -d --build
docker-compose exec app bundle exec rails db:create db:migrate db:seed
# 3. Ativar o cron do job de 1h
docker-compose exec app bundle exec whenever --update-crontab
# 4. Testar o fluxo end-to-end (seção de teste acima)
```
Continue o Sistema de Controle de Custos Logística da Gade Hospitalar.
CHECKPOINT — FASES 1, 4, 5, 6, 7 e 8 CONCLUÍDAS:
- Rails 7+ com Docker, PostgreSQL externo, Tailwind (preto #0a0a0a / laranja #f97316)
- Models: Entrega (read-only db_reem_simplerout_2026), User (Devise+roles+pin_code
+login_token), Configuracao, Consolidacao (+route_ids), ConsolidacaoMotorista,
ConsolidacaoEntrega, HistoricoEstimado, AuditoriaLog — 9 migrations
- Fase 4: Whenever (1h) + job + rake historico:atualizar + API /api/v1/dashboard/metricas
- Fase 5: ConsolidacoesController (filtros, multi-select) + Wizard Passo 1
- Fase 6: validar/classificar/classificar_em_massa/revisar + toggles + Stimulus
- Fase 7: PDFs Prawn (Pdf::RelatorioMotoristaPdf, Pdf::HoleritePdf com QR code)
+ modal preview em consolidacoes/show
- Fase 8: login motorista por PIN (/motorista/login) e QR (/motorista/acesso/:token)
+ painel motorista (2 cards + holerites) + NotificacaoService (Twilio/ActionMailer)
**Credenciais de teste (seeds):**
FALTAM SOMENTE:
- FASE 2: tela de login Devise estilizada + CRUD usuários (admin/usuarios) +
CRUD pilares de preço (admin/configuracoes) + tela auditoria + toggle tema claro/escuro
- FASE 3: DashboardController + view com cards grandes (valor estimado, entregas
do dia/mês, motoristas ativos) + gráfico Chart.js do historico_estimados
Consulte o README.md do repositório para a lista completa de arquivos.
```
| Usuário | Login | Senha/PIN |
|---------|-------|-----------|
| Admin | admin@gade.com | Gade@2026! |
| Gerente | gerente@gade.com | Gade@2026! |
| Motorista João Silva | PIN | 1234 |
| Motorista Maria Santos | PIN | 5678 |
| Motorista Carlos Souza | PIN | 9012 |
⚠️ Altere as senhas padrão no primeiro acesso em produção.
---