From b77fc0122c4e913c3257f281f88fc6bbcd4bc103e20ecb69dc709929183da362 Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 10 Jun 2026 23:31:20 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20README=20-=20Fase=202?= =?UTF-8?q?=20e=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projeto-Reem-Custo | 1 + README.md | 187 +++++++++++++++++++++++++++++---------------- 2 files changed, 123 insertions(+), 65 deletions(-) create mode 160000 Projeto-Reem-Custo diff --git a/Projeto-Reem-Custo b/Projeto-Reem-Custo new file mode 160000 index 0000000..8e66a97 --- /dev/null +++ b/Projeto-Reem-Custo @@ -0,0 +1 @@ +Subproject commit 8e66a9718d468cf6abd9ce9901eae28a4e9ad99e4778ed81c16c22e0c8f65d44 diff --git a/README.md b/README.md index 52bc076..bb3ae29 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ 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 +**Stack:** Ruby on Rails 7+ · PostgreSQL 15 · Docker · Tailwind CSS · Hotwire (Turbo + Stimulus) +**Repositório:** --- @@ -13,6 +13,7 @@ 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. @@ -22,13 +23,13 @@ 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 -``` +```text 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) +├── docker-compose.yml # app (postgres externo via .env) ├── tailwind.config.js # Paleta preto #0a0a0a / laranja #f97316 / branco ├── .env.example # Template de variáveis — copiar para .env ├── .gitignore # Protege .env, master.key, credenciais @@ -39,27 +40,44 @@ logistica-controle-custos/ │ ├── app/ │ ├── models/ -│ │ ├── entrega.rb # ⚠️ READ-ONLY — tabela existente db_reem_simplerout_2026 +│ │ ├── entrega.rb # ⚠️ READ-ONLY — tabela db_reem_simplerout_2026 │ │ ├── user.rb # Devise + roles (admin/gerente/operador/motorista) + PIN -│ │ ├── configuracao.rb # Preços configuráveis (entrega, retirada, bonus, desconto) +│ │ ├── configuracao.rb # Preços configuráveis + mapa_de_precos() │ │ ├── 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 +│ │ └── auditoria_log.rb # Log de ações críticas + .registrar() │ │ │ ├── controllers/ -│ │ └── application_controller.rb # Auth + Pundit + tema +│ │ ├── application_controller.rb # Auth + Pundit + tema +│ │ ├── users/sessions_controller.rb # PIN login + redirect por role +│ │ ├── dashboard_controller.rb # Cálculos ao vivo (Fase 3) +│ │ ├── usuarios_controller.rb # CRUD usuários +│ │ ├── configuracoes_controller.rb # Preços + toggle tema +│ │ └── motorista_controller.rb # Painel do motorista +│ │ │ ├── policies/ -│ │ └── application_policy.rb # Base Pundit +│ │ ├── application_policy.rb # Base Pundit + helpers admin?/gerente?/operador? +│ │ ├── user_policy.rb # Admin vê tudo; gerente não vê admins +│ │ └── configuracao_policy.rb # Apenas admin edita preços +│ │ │ ├── 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 +│ │ └── application_helper.rb # moeda(), nav_link_to(), badge_status(), badge_role(), progress_bar() +│ │ +│ └── views/ +│ ├── devise/sessions/new.html.erb # Login com teclado PIN + abas E-mail/PIN +│ ├── layouts/ +│ │ ├── application.html.erb # Layout dark/light + sidebar responsiva +│ │ └── _sidebar.html.erb # Navegação condicional por role +│ ├── dashboard/index.html.erb # Cards grandes + Chart.js + ranking +│ ├── usuarios/ # index, new, edit, _form +│ ├── configuracoes/ # index (cards de preço), edit +│ ├── motorista/index.html.erb # Painel simplificado do motorista +│ └── shared/_flash.html.erb │ └── db/ - ├── seeds.rb # Admin: admin@gade.com / Gade@2026! + configs de preço + ├── seeds.rb # Admin/Gerente/Operador + 3 motoristas com PIN └── migrate/ ├── ..._create_users.rb ├── ..._create_configuracoes.rb @@ -67,7 +85,8 @@ logistica-controle-custos/ ├── ..._create_consolidacao_motoristas.rb ├── ..._create_consolidacao_entregas.rb ├── ..._create_historico_estimados.rb - └── ..._create_auditoria_logs.rb + ├── ..._create_auditoria_logs.rb + └── ..._add_fase2_fields_to_users.rb # PIN + ativo + trackable + lockable ``` --- @@ -75,35 +94,41 @@ logistica-controle-custos/ ## 🚀 Setup do zero (próximo dev) ### 1. Clone + ```bash -git clone https://git.xenserver.com.br/Cludio-code/logistica-controle-custos.git -cd logistica-controle-custos +git clone https://git.xenserver.com.br/victor/Reem-Notas.git +cd Reem-Notas ``` ### 2. Configure o .env + ```bash cp .env.example .env nano .env # preencha DB_HOST, DB_PASSWORD, etc. ``` ### 3. Gere o SECRET_KEY_BASE + ```bash 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 + ```bash docker-compose up -d ``` ### 5. Banco + seeds + ```bash docker-compose exec app bundle exec rails db:create db:migrate db:seed ``` ### 6. Acesse -``` + +```text http://localhost:3000 Login: admin@gade.com Senha: Gade@2026! ← ALTERE NO PRIMEIRO ACESSO @@ -124,6 +149,7 @@ docker-compose down # parar tudo ## 🗺️ Fases de implementação +<<<<<<< HEAD | Fase | Status | O que fazer | |------|--------|-------------| | **1** | ✅ **CONCLUÍDA** | Setup + Docker + Models + Migrations + Seeds + Layout base | @@ -134,46 +160,87 @@ docker-compose down # parar tudo | **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 | +======= +| Fase | Status | O que foi feito / 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 + toggle tema + Pundit | +| **3** | ✅ **CONCLUÍDA** | Dashboard: cards laranja/preto/branco + gráfico Chart.js + ranking motoristas + cálculo ao vivo | +| **4** | ⏳ Próxima | Job Whenever (1h) + HistoricoEstimado + UI de 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 | +>>>>>>> 63b7f4d (Atualização README - Fase 2 e 3) -### ▶️ Para continuar da Fase 2 +--- + +## 👥 Perfis de acesso + +| Perfil | Login | Acesso | Vai para | +| --------- | ------------------- | ----------------------------------- | --------------- | +| Admin | email + senha | Tudo | `/dashboard` | +| Gerente | email + senha | Dashboard + Consolidações + PDFs | `/dashboard` | +| Operador | email + senha | Consolidações (criar + validar) | `/dashboard` | +| Motorista | PIN 4 dígitos | Painel pessoal + baixar próprio PDF | `/motorista` | + +### Credenciais de teste (seeds) + +| Usuário | Login | Senha / PIN | +| ---------------- | ------------------ | ------------ | +| Admin | admin@gade.com | Gade@2026! | +| Gerente | gerente@gade.com | Gade@2026! | +| Operador | operador@gade.com | Gade@2026! | +| Motorista João | PIN | 1234 | +| Motorista Maria | PIN | 5678 | +| Motorista Carlos | PIN | 9012 | + +> ⚠️ **Altere todas as senhas no primeiro acesso em produção.** + +--- + +### ▶️ Para continuar da Fase 4 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. +```text +Execute a FASE 4 do Sistema de Controle de Custos Logística da Gade Hospitalar. -CHECKPOINT FASE 1 (concluída): +CHECKPOINT FASES 1-3 (concluídas): - 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, +- Models: Entrega (read-only), User (Devise + roles + PIN), 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 +- Devise com login por e-mail (admin/gerente/operador) e PIN 4 dígitos (motorista) +- Pundit: UserPolicy, ConfiguracaoPolicy, ApplicationPolicy +- Dashboard com Chart.js: cards KPI, gráfico diário, ranking motoristas, grid locais +- CRUD de usuários com toggle ativo/inativo e formulário dinâmico por role +- Configurações de preço (entrega, retirada, bonus, desconto) com cards editáveis +- Toggle tema claro/escuro salvo na sessão +- Sidebar responsiva (desktop fixa + drawer mobile) com navegação por role +- Seeds: admin/gerente/operador com e-mail + 3 motoristas com PIN -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) +FASE 4 deve implementar: +1. Job com Whenever: rodar a cada 1h para calcular e salvar HistoricoEstimado +2. Modelo HistoricoEstimado: snapshot do valor estimado por motorista por hora +3. Controller + view de AuditoriaLog: tabela paginada com filtro por usuário/ação +4. Indicador visual no Dashboard mostrando "última atualização" do histórico +5. Rake task manual: rails historico:calcular (para rodar fora do cron) ``` --- ## 🗄️ 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.) | +| 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` @@ -182,29 +249,18 @@ FASE 2 deve implementar: ## 🎨 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` | +| 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 | +- Tema escuro como padrão (toggle disponível no header) --- @@ -213,3 +269,4 @@ FASE 2 deve implementar: - **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 +- Todas as actions protegidas por Pundit (`authorize` obrigatório)