From d37237ead27e5608fc6f460a438df2feea1498f5f94061999e887f455343b5fc Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 10 Jun 2026 17:45:59 -0300 Subject: [PATCH] =?UTF-8?q?Altera=C3=A7=C3=A3o=20de=20alguns=20arquivos=20?= =?UTF-8?q?para=20retirar=20do=20yaml=20o=20container=20Postgres=20pois=20?= =?UTF-8?q?ja=20tem=20um?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 24 +++-- README.md | 222 +++++++++++++++++++++++++++++++++------------ docker-compose.yml | 25 +---- setup_git.sh | 13 ++- 4 files changed, 181 insertions(+), 103 deletions(-) mode change 100755 => 100644 setup_git.sh diff --git a/.env.example b/.env.example index 49cdcba..f109ba6 100644 --- a/.env.example +++ b/.env.example @@ -6,38 +6,36 @@ # Ambiente Rails RAILS_ENV=development -# Banco de dados principal (novo sistema) -DATABASE_URL=postgresql://postgres:senha_segura@db:5432/logistica_db -DB_HOST=db +# ── Banco de dados (seu PostgreSQL já existente) ───────────── +# Aponte DB_HOST para o IP ou hostname do seu servidor PostgreSQL +DATABASE_URL=postgresql://postgres:senha_segura@SEU_IP:5432/logistica_db +DB_HOST=SEU_IP # ex: 192.168.1.100 ou db.gade.com.br DB_PORT=5432 -DB_NAME=logistica_db +DB_NAME=logistica_db # nome do banco NOVO que o sistema vai criar DB_USER=postgres DB_PASSWORD=senha_segura -# Banco de dados existente (Gade Hospitalar — APENAS LEITURA) -# Se estiver em servidor separado, altere DB_HOST acima para o IP correto +# ── Tabela existente (apenas leitura — NÃO modificar) ──────── DB_EXISTING_TABLE=db_reem_simplerout_2026 DB_EXISTING_SCHEMA=public DB_EXISTING_ACCOUNT_ID=95907 -# Rails Security — gere com: bundle exec rails secret +# ── Rails Security ──────────────────────────────────────────── +# Gere com: docker-compose exec app bundle exec rails secret SECRET_KEY_BASE=gere_com_rails_secret_e_cole_aqui -# Devise — gere com: bundle exec rails secret -DEVISE_SECRET_KEY=gere_com_rails_secret_e_cole_aqui - -# Twilio — WhatsApp (opcional, Fase 8) +# ── Twilio — WhatsApp (opcional, Fase 8) ───────────────────── TWILIO_ACCOUNT_SID= TWILIO_AUTH_TOKEN= TWILIO_WHATSAPP_FROM=whatsapp:+14155238886 -# E-mail (opcional, Fase 8) +# ── E-mail (opcional, Fase 8) ──────────────────────────────── SMTP_ADDRESS=smtp.gmail.com SMTP_PORT=587 SMTP_USERNAME= SMTP_PASSWORD= SMTP_DOMAIN=gade.com.br -# App +# ── App ─────────────────────────────────────────────────────── APP_HOST=localhost:3000 APP_NAME=Gade Logística diff --git a/README.md b/README.md index 2317cea..b960793 100644 --- a/README.md +++ b/README.md @@ -2,29 +2,94 @@ Sistema web para controle de custos de entregas hospitalares da **Gade Hospitalar**. -**Stack:** Ruby on Rails 7+ · PostgreSQL 15 · Docker · Tailwind CSS · Hotwire +**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 --- -## 🚀 Setup rápido (Docker) +## 📋 CONTEXTO DO PROJETO (leia antes de tudo) -### 1. Clone o repositório +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 ```bash -git clone https://git.xenserver.com.br/[USUARIO]/logistica-controle-custos.git +git clone https://git.xenserver.com.br/Cludio-code/logistica-controle-custos.git cd logistica-controle-custos ``` -### 2. Configure o ambiente +### 2. Configure o .env ```bash cp .env.example .env -# Edite .env com suas credenciais reais -nano .env +nano .env # preencha DB_HOST, DB_PASSWORD, etc. ``` ### 3. Gere o SECRET_KEY_BASE ```bash -docker run --rm ruby:3.2.2-slim bundle exec rails secret -# Cole o valor gerado no .env → 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 @@ -32,7 +97,7 @@ docker run --rm ruby:3.2.2-slim bundle exec rails secret docker-compose up -d ``` -### 5. Crie o banco e rode as migrations +### 5. Banco + seeds ```bash docker-compose exec app bundle exec rails db:create db:migrate db:seed ``` @@ -41,73 +106,110 @@ docker-compose exec app bundle exec rails db:create db:migrate db:seed ``` http://localhost:3000 Login: admin@gade.com -Senha: Gade@2026! ← ALTERE NO PRIMEIRO ACESSO +Senha: Gade@2026! ← ALTERE NO PRIMEIRO ACESSO ``` --- -## ⚠️ Banco de dados existente - -A tabela `public.db_reem_simplerout_2026` **já existe** no PostgreSQL da Gade Hospitalar -e é atualizada automaticamente a cada 1 hora por outro sistema. - -**NUNCA execute:** `DROP TABLE`, `TRUNCATE`, `DELETE` ou migrations nessa tabela. - -Se o banco existente estiver em servidor separado, configure `DB_HOST` no `.env` -apontando para o IP/hostname correto. - ---- - -## 🔧 Comandos úteis +## 🔧 Comandos do dia a dia ```bash -# Rodar migrations -docker-compose exec app bundle exec rails db:migrate - -# Rodar seeds -docker-compose exec app bundle exec rails db:seed - -# Console Rails -docker-compose exec app bundle exec rails console - -# Logs da app -docker-compose logs -f app - -# Parar containers -docker-compose down +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 +## 🗺️ Fases de implementação -| Fase | Status | Descrição | -|------|--------|-----------| -| 1 | ✅ | Setup + Docker + Git + Models + Migrations | -| 2 | ⏳ | Auth (Devise/Pundit) + Perfis + Configurações | -| 3 | ⏳ | Dashboard com métricas e gráficos | -| 4 | ⏳ | Job de atualização automática (1h) + Auditoria | -| 5 | ⏳ | Consolidação — wizard Passo 1 | -| 6 | ⏳ | Validação de entregas + toggles + ações em massa | -| 7 | ⏳ | Geração de PDFs (relatório + holerite) | -| 8 | ⏳ | Painel motorista + notificações + finalização | +| Fase | Status | O que fazer | +|------|--------|-------------| +| **1** | ✅ **CONCLUÍDA** | Setup + Docker + Models + Migrations + Seeds + Layout base | +| **2** | ⏳ Próxima | Login por role + PIN motorista + CRUD usuários + pilares de preço + sidebar | +| **3** | ⏳ | Dashboard: cards grandes laranja/preto/branco + gráfico Chart.js + cálculo ao vivo | +| **4** | ⏳ | 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) +``` --- -## 🔐 Segurança +## 🗄️ Banco existente — referência rápida -- **NUNCA** versione o arquivo `.env` -- **NUNCA** commite `config/master.key` ou credenciais -- Repositório deve ser marcado como **PRIVADO** -- Use `ENV['VARIAVEL']` no código — nunca hardcode senhas +| 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 | Acesso | -|--------|--------| -| Admin | Tudo | -| Gerente | Dashboard + Consolidações + PDFs | -| Operador | Consolidações (criar + validar) | -| Motorista | Painel pessoal + baixar próprio PDF | +| 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 diff --git a/docker-compose.yml b/docker-compose.yml index cc45d49..bd66a5e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,30 +20,9 @@ services: volumes: - ".:/app" - "bundle_cache:/usr/local/bundle" - depends_on: - db: - condition: service_healthy command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -b 0.0.0.0" - - db: - image: postgres:15-alpine - environment: - POSTGRES_DB: ${DB_NAME} - POSTGRES_USER: ${DB_USER} - POSTGRES_PASSWORD: ${DB_PASSWORD} - volumes: - - "pg_data:/var/lib/postgresql/data" - ports: - - "5432:5432" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] - interval: 5s - timeout: 5s - retries: 5 - # NOTA: Se o banco existente (db_reem_simplerout_2026) estiver em servidor - # separado, remova este serviço e configure DB_HOST no .env apontando para - # o IP/hostname correto do servidor PostgreSQL existente. + # O banco PostgreSQL já existe externamente. + # Configure DB_HOST no .env com o IP/hostname do seu servidor PostgreSQL. volumes: - pg_data: bundle_cache: diff --git a/setup_git.sh b/setup_git.sh old mode 100755 new mode 100644 index 418e65a..ce14220 --- a/setup_git.sh +++ b/setup_git.sh @@ -19,11 +19,6 @@ echo "" git config user.name "Cludio-code" git config user.email "claudio@gade.com.br" -# Inicializa o repositório -git init -b main -git add . -git commit -m "🚀 Fase 1 — Setup inicial: Rails + Docker + Models + Migrations + Seeds" - # Configura remote SEM credenciais na URL git remote add origin "${REMOTE}" 2>/dev/null || git remote set-url origin "${REMOTE}" @@ -31,9 +26,13 @@ git remote add origin "${REMOTE}" 2>/dev/null || git remote set-url origin "${RE git config credential.helper 'cache --timeout=14400' echo "" -echo "✅ Repositório configurado!" +echo "✅ Remote configurado: ${REMOTE}" echo "" -echo "▶️ Agora execute para subir o código:" +echo "▶️ Quando estiver pronto, faça o commit e push manualmente:" +echo "" +echo " git init -b main" +echo " git add ." +echo " git commit -m 'Fase 1 — Setup inicial'" echo " git push -u origin main" echo "" echo " Quando solicitado, digite:"