Files
Reem-Notas/README.md
2026-06-10 20:14:59 -03:00

7.9 KiB

🚛 Gade Logística — Sistema de Controle de Custos

Sistema web para controle de custos de entregas hospitalares da Gade Hospitalar.

Stack: Ruby on Rails 7+ · PostgreSQL 15 · Docker · Tailwind CSS · Hotwire (Turbo + Stimulus) Repositório: https://git.xenserver.com.br/Cludio-code/logistica-controle-custos


📋 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.).

O banco já existe e é atualizado a cada 1 hora por outro sistema externo:

  • Tabela: public.db_reem_simplerout_2026
  • Account: Gade Hospitalar (account_id: 95907)
  • NUNCA fazer DROP TABLE, TRUNCATE, DELETE ou migration nessa tabela.

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 )

logistica-controle-custos/
├── Gemfile                          # Todas as gems (Devise, Pundit, Prawn, Whenever, Tailwind…)
├── Dockerfile                       # Ruby 3.2.2-slim
├── docker-compose.yml               # app + db (postgres:15)
├── tailwind.config.js               # Paleta preto #0a0a0a / laranja #f97316 / branco
├── .env.example                     # Template de variáveis — copiar para .env
├── .gitignore                       # Protege .env, master.key, credenciais
│
├── config/
│   ├── database.yml                 # 100% via ENV — nunca hardcode
│   └── routes.rb                    # Rotas completas para todas as 8 fases
│
├── app/
│   ├── models/
│   │   ├── entrega.rb               # ⚠️ READ-ONLY — tabela existente db_reem_simplerout_2026
│   │   ├── user.rb                  # Devise + roles (admin/gerente/operador/motorista) + PIN
│   │   ├── configuracao.rb          # Preços configuráveis (entrega, retirada, bonus, desconto)
│   │   ├── consolidacao.rb          # Soft delete, enum status, cálculo de progresso
│   │   ├── consolidacao_motorista.rb
│   │   ├── consolidacao_entrega.rb  # Enum tipo: normal/retirada/bonus/desconto
│   │   ├── historico_estimado.rb    # Job 1h + cálculo ao vivo
│   │   └── auditoria_log.rb         # Log de ações críticas
│   │
│   ├── controllers/
│   │   └── application_controller.rb  # Auth + Pundit + tema
│   ├── policies/
│   │   └── application_policy.rb    # Base Pundit
│   ├── helpers/
│   │   └── application_helper.rb    # nav_link_to, moeda(), badge_status(), progress_bar()
│   └── views/layouts/
│       ├── application.html.erb     # Layout base dark theme laranja/preto/branco
│       └── _navbar.html.erb         # Sidebar responsiva com hamburguer mobile
│
└── db/
    ├── seeds.rb                     # Admin: admin@gade.com / Gade@2026!  + configs de preço
    └── migrate/
        ├── ..._create_users.rb
        ├── ..._create_configuracoes.rb
        ├── ..._create_consolidacoes.rb
        ├── ..._create_consolidacao_motoristas.rb
        ├── ..._create_consolidacao_entregas.rb
        ├── ..._create_historico_estimados.rb
        └── ..._create_auditoria_logs.rb

🚀 Setup do zero (próximo dev)

1. Clone

git clone https://git.xenserver.com.br/Cludio-code/logistica-controle-custos.git
cd logistica-controle-custos

2. Configure o .env

cp .env.example .env
nano .env   # preencha DB_HOST, DB_PASSWORD, etc.

3. Gere o SECRET_KEY_BASE

docker run --rm ruby:3.2.2-slim bash -c "gem install rails --no-doc -q && rails secret"
# Cole o resultado no .env → SECRET_KEY_BASE=...

4. Suba os containers

docker-compose up -d

5. Banco + seeds

docker-compose exec app bundle exec rails db:create db:migrate db:seed

6. Acesse

http://localhost:3000
Login: admin@gade.com
Senha: Gade@2026!   ← ALTERE NO PRIMEIRO ACESSO

🔧 Comandos do dia a dia

docker-compose exec app bundle exec rails db:migrate   # nova migration
docker-compose exec app bundle exec rails console      # console Rails
docker-compose logs -f app                             # logs em tempo real
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 CONCLUÍDA Login por role + PIN motorista + CRUD usuários + pilares de preço + sidebar
3 CONCLUÍDA Dashboard: cards grandes laranja/preto/branco + gráfico Chart.js + cálculo ao vivo
4 Próxima Job Whenever (1h) + HistoricoEstimado + AuditoriaLog
5 Nova Consolidação + Wizard Passo 1 (selecionar motorista)
6 Toggle switches coloridos + ações em massa + barra de progresso (Stimulus)
7 PDFs com Prawn: relatório individual + holerite com QR code
8 Painel motorista + notificações WhatsApp/email + responsividade final

▶️ Para continuar da Fase 2

Cole este contexto no início da conversa com o Claude:

Execute a FASE 2 do Sistema de Controle de Custos Logística da Gade Hospitalar.

CHECKPOINT FASE 1 (concluída):
- Rails 7+ com Docker, PostgreSQL 15, Tailwind (preto #0a0a0a / laranja #f97316)
- Models criados: Entrega (read-only, tabela db_reem_simplerout_2026), User (Devise + roles),
  Configuracao, Consolidacao, ConsolidacaoMotorista, ConsolidacaoEntrega,
  HistoricoEstimado, AuditoriaLog
- 7 migrations criadas (ainda não rodadas — rodar com db:migrate)
- Seeds: admin@gade.com / Gade@2026! + preços padrão
- Layout base dark com sidebar responsiva (laranja/preto/branco)
- Rotas completas em config/routes.rb

FASE 2 deve implementar:
1. Login Devise com redirecionamento por role (admin/gerente/operador → /dashboard, motorista → /motorista)
2. Login por PIN de 4 dígitos para motoristas
3. Tela de Configurações: CRUD de usuários com roles
4. CRUD de Pilares de Preço (entrega, retirada, bonus, desconto) com máscara R$
5. Toggle tema claro/escuro no header
6. Validar permissões com Pundit (operador não vê config, motorista não vê admin)

🗄️ Banco existente — referência rápida

Campo Uso
tracking_id PK lógico da entrega
reference_id Número da NF
planned_date Data da entrega (filtro principal)
driver Nome do motorista
status 'completed' = entrega paga
checkin NULL = motorista não registrou chegada
route_id UUID da operação (UBS SUL, EMAD, etc.)
contact_name Nome do local (UBS SACOMA, EMAD VELEIROS…)

Regra de pagamento: status = 'completed' AND checkin IS NOT NULL


🎨 Design — padrão da marca

Elemento Cor Hex
Fundo Preto #0a0a0a
Cards Cinza escuro #1a1a1a
Destaque / botões Laranja #f97316
Textos Branco #ffffff
Sucesso Verde #22c55e
Erro/desconto Vermelho #ef4444
  • Fonte mínima 16px desktop / 18px mobile
  • Botões mínimo 48px altura (acessibilidade touch)
  • Tema escuro como padrão

👥 Perfis de acesso

Perfil Login Acesso
Admin email + senha Tudo
Gerente email + senha Dashboard + Consolidações + PDFs
Operador email + senha Consolidações (criar + validar)
Motorista PIN 4 dígitos ou QR Painel pessoal + baixar próprio PDF

🔐 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