Correção Read.me e Atualização do mesmo
This commit is contained in:
136
README.md
136
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.
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary><strong>📋 CONTEXTO DO PROJETO (leia antes de tudo)</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Estado atual — O que já foi feito (Fase 1 ✅)
|
||||
<details>
|
||||
<summary><strong>🏗️ Estado atual — O que já foi feito (Fase 1 ✅)</strong></summary>
|
||||
|
||||
```
|
||||
logistica-controle-custos/
|
||||
@@ -70,9 +78,12 @@ logistica-controle-custos/
|
||||
└── ..._create_auditoria_logs.rb
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Setup do zero (próximo dev)
|
||||
<details>
|
||||
<summary><strong>🚀 Setup do zero (próximo dev)</strong></summary>
|
||||
|
||||
### 1. Clone
|
||||
```bash
|
||||
@@ -109,9 +120,12 @@ Login: admin@gade.com
|
||||
Senha: Gade@2026! ← ALTERE NO PRIMEIRO ACESSO
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Comandos do dia a dia
|
||||
<details>
|
||||
<summary><strong>🔧 Comandos do dia a dia</strong></summary>
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Fases de implementação
|
||||
<details>
|
||||
<summary><strong>🗺️ Fases de implementação</strong></summary>
|
||||
|
||||
| Fase | Status | O que faz |
|
||||
|------|--------|-----------|
|
||||
@@ -137,9 +154,12 @@ docker-compose down # parar tudo
|
||||
|
||||
**🎉 PROJETO: 8 de 8 fases implementadas.**
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Análise de integração (11/06/2026) — Correções aplicadas
|
||||
<details>
|
||||
<summary><strong>🔧 Análise de integração (11/06/2026) — Correções aplicadas</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Auditoria + Suíte de testes (15/06/2026)
|
||||
<details>
|
||||
<summary><strong>🧪 Auditoria + Suíte de testes (15/06/2026)</strong></summary>
|
||||
|
||||
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.
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Correções + funcionalidades (16/06/2026)
|
||||
<details>
|
||||
<summary><strong>🔧 Correções + funcionalidades (16/06/2026)</strong></summary>
|
||||
|
||||
### 🔴 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
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Correções + funcionalidades (16/06/2026 — sessão 2)
|
||||
<details>
|
||||
<summary><strong>🔧 Correções + funcionalidades (16/06/2026 — sessão 2)</strong></summary>
|
||||
|
||||
### 🔴 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
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Banco existente — referência rápida
|
||||
<details>
|
||||
<summary><strong>🗄️ Banco existente — referência rápida</strong></summary>
|
||||
|
||||
| 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`
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Design — padrão da marca
|
||||
<details>
|
||||
<summary><strong>🎨 Design — padrão da marca</strong></summary>
|
||||
|
||||
| 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
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 👥 Perfis de acesso
|
||||
<details>
|
||||
<summary><strong>👥 Perfis de acesso</strong></summary>
|
||||
|
||||
| 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 |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 🩺 Correção (11/06): container caía mostrando ajuda do "rails new"
|
||||
<details>
|
||||
<summary><strong>🩺 Correção (11/06): container caía mostrando ajuda do "rails new"</strong></summary>
|
||||
|
||||
**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
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary><strong>🔐 Segurança</strong></summary>
|
||||
|
||||
- **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
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🆕 Atualização 17/06/2026 — Pagamentos, Operações, Dashboard financeiro e UI
|
||||
<details>
|
||||
<summary><strong>🆕 Atualização 17/06/2026 — Pagamentos, Operações, Dashboard financeiro e UI</strong></summary>
|
||||
|
||||
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`
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Correções — Holerite PDF (18/06/2026)
|
||||
<details>
|
||||
<summary><strong>🔧 Correções — Holerite PDF (18/06/2026)</strong></summary>
|
||||
|
||||
### 🔴 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.
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🆕 Atualização 19/06/2026 — Apontamento manual / Nota avulsa
|
||||
<details>
|
||||
<summary><strong>🆕 Atualização 19/06/2026 — Apontamento manual / Nota avulsa</strong></summary>
|
||||
|
||||
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).
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details open>
|
||||
<summary><strong>🆕 Atualização 22/06/2026 — Pilar Extraordinária, Perfil Externo, Falhadas, Relatórios e Segurança QR</strong></summary>
|
||||
|
||||
### 🆕 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 `<form>` (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"
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user