Sistema de Gestão de Carregamento Documentação Técnica – Agosto/2026

v1.0 – Produção

📋 Visão Geral

Este projeto consiste em um sistema web completo para gestão e visualização dos registros de carregamento da empresa Brado, baseado em dados reais do mês de Agosto de 2026. O sistema foi desenvolvido sob demanda para oferecer um dashboard administrativo interativo, com filtros dinâmicos, indicadores de performance (KPIs), gráficos de barras e pizza, e uma tabela de registros com funcionalidades de CRUD (criar, ler, atualizar, excluir). Além disso, permite a geração de relatórios em PDF e PNG com o resumo do período selecionado.

O projeto foi executado seguindo uma metodologia ágil baseada em sprints, com entregas incrementais e revisão constante do cliente. O resultado final é uma aplicação responsiva, minimalista e de alto padrão profissional, alinhada à identidade visual da marca Brado.

🎯 Objetivo: Fornecer uma ferramenta de análise e gestão de carregamentos, que permita acompanhar a evolução diária, identificar padrões e gerar relatórios para a tomada de decisão.

⚙️ Stack Tecnológico

A escolha das ferramentas foi orientada por produtividade, escalabilidade e facilidade de manutenção. Abaixo estão as principais tecnologias utilizadas:

Next.js 14

Framework Full‑Stack (App Router), com renderização híbrida.

React 18

Biblioteca para construção de interfaces interativas.

Tailwind CSS

Estilização utilitária, rápida e responsiva.

Shadcn UI

Componentes pré‑construídos e personalizáveis (Cards, Select, Popover, Dialog, Calendar).

Recharts

Gráficos de barras, linhas e pizza, leves e flexíveis.

TanStack Table

Gerenciamento avançado de tabelas (ordenação, paginação, filtragem).

Prisma ORM

Camada de acesso ao banco de dados com tipagem segura.

PostgreSQL

Banco de dados relacional utilizado em produção (Vercel Postgres).

dom-to-image-more

Captura de elementos DOM para geração de imagens nos relatórios.

jsPDF

Geração de documentos PDF a partir de imagens.

Vercel

Plataforma de deploy e hospedagem com integração contínua.

date-fns

Formatação e manipulação de datas.

🏗️ Arquitetura do Sistema

O sistema segue uma arquitetura Full‑Stack baseada em Next.js com separação clara entre frontend e backend através de API Routes. O acesso ao banco de dados é realizado via Prisma ORM, que oferece segurança tipada e facilidade de migração. O frontend é composto por componentes reutilizáveis, organizados em uma estrutura de pastas modular.

Estrutura de Pastas

sistema-brado-2026/
├── app/                    # Next.js App Router
│   ├── api/                # Endpoints da API
│   │   ├── registros/      # CRUD de carregamentos
│   │   ├── stats/          # Estatísticas para KPIs e gráficos
│   │   ├── filtros/        # Opções dinâmicas para os filtros
│   │   └── relatorio/      # Dados completos para relatórios
│   ├── layout.tsx          # Layout global
│   └── page.tsx            # Página principal (dashboard)
├── components/             # Componentes reutilizáveis
│   ├── Header.tsx
│   ├── Filters.tsx
│   ├── KpiCards.tsx
│   ├── Charts.tsx
│   ├── DataTable.tsx
│   ├── CrudModal.tsx
│   └── RelatorioPreview.tsx
├── lib/                    # Utilitários
│   └── prisma.ts           # Singleton do PrismaClient
├── prisma/                 # Configuração do Prisma
│   ├── schema.prisma       # Definição do modelo de dados
│   ├── migrations/         # Histórico de migrações
│   └── seed.ts             # Script para popular o banco
├── .env                    # Variáveis de ambiente (local)
├── .env.local              # (gerado pelo Vercel CLI)
├── .env.development.local  # (gerado pelo Vercel CLI)
└── package.json            # Dependências e scripts
            

🗄️ Modelo de Dados

O esquema do banco de dados foi definido no arquivo schema.prisma e contempla as 10 colunas da planilha original, além de três campos adicionais (linha, trem, prefixo_chegada) que foram solicitados posteriormente para os filtros.

Schema Prisma

model Carregamento {
  id                String   @id @default(cuid())
  n_veiculo         Int      @map("n_veiculo")
  data_carregamento DateTime @map("data_carregamento")
  nome_motorista    String   @map("nome_motorista")
  destino           String
  conjunto          String
  placa_cavalo      String   @map("placa_cavalo")
  placa_carreta     String   @map("placa_carreta")
  container         String
  data_entrega      DateTime @map("data_entrega")
  dias_carregado    Int      @map("dias_carregado")
  linha             String
  trem              String
  prefixo_chegada   String   @map("prefixo_chegada")

  @@map("carregamentos")
}
            

O banco de dados utilizado em desenvolvimento foi SQLite (arquivo dev.db), e em produção foi migrado para Vercel Postgres (PostgreSQL), mantendo a compatibilidade através do Prisma.

🔗 Relacionamento: O modelo possui um único campo de identificação (id) e não apresenta chaves estrangeiras, pois trata-se de uma tabela de registros históricos independentes.

🚀 Desenvolvimento – Sprints

O projeto foi desenvolvido em 4 sprints, cada um com entregas funcionais e validadas pelo cliente. Abaixo, o detalhamento de cada etapa.

Sprint 1 Backend & Modelo de Dados
  • Sub‑tarefa 1.1: Criação do projeto Next.js com TypeScript e Tailwind.
  • Sub‑tarefa 1.2: Configuração do Prisma ORM com SQLite (ambiente local).
  • Sub‑tarefa 1.3: Definição do schema Carregamento baseado na planilha.
  • Sub‑tarefa 1.4: Criação dos endpoints da API:
    • GET /api/registros – listagem com filtros por data, linha, prefixo, trem.
    • POST /api/registros – criação de novo registro (protegido por senha mestra).
    • PUT /api/registros/:id – atualização (protegido).
    • DELETE /api/registros/:id – exclusão (protegido).
    • GET /api/stats – KPIs e dados para gráficos.
    • GET /api/filtros – opções dinâmicas para os filtros (anos, linhas, etc.).
  • Sub‑tarefa 1.5: Implementação da autenticação via contrasseña mestra (header x-admin-secret) para operações de escrita.

Resultado: API funcional conectada ao banco SQLite, pronta para o frontend.

Sprint 2 Interface Administrativa (Dashboard)
  • Sub‑tarefa 2.1: Configuração do Shadcn UI e Tailwind para estilização rápida.
  • Sub‑tarefa 2.2: Criação do Header com logo e título.
  • Sub‑tarefa 2.3: Desenvolvimento do componente de Filtros com:
    • Selects para Mês, Ano, Linha, Prefixo, Trem.
    • Date Pickers (De e Até) com ícone de calendário e formato dd/MM/aaaa.
    • Botão Limpar Filtros.
  • Sub‑tarefa 2.4: Implementação das KPI Cards (5 indicadores) com cores personalizadas.
  • Sub‑tarefa 2.5: Integração dos filtros com a API – ao alterar um filtro, o dashboard é atualizado automaticamente.

Resultado: Dashboard visualmente idêntico à Imagem 4, com filtros funcionais e atualização em tempo real.

Sprint 3 Gráficos, Tabela e CRUD
  • Sub‑tarefa 3.1: Criação dos gráficos com Recharts:
    • Gráfico 1 – Barras agrupadas: quantidade de veículos por categoria (LS vs RODOTREM) por dia.
    • Gráfico 2 – Barras empilhadas: percentual de cada categoria por dia.
    • Gráfico 3 – Pizza: média de dias carregados por conjunto.
    • Gráfico 4 – Linha: evolução total dos dias carregados com tooltip de percentual.
  • Sub‑tarefa 3.2: Desenvolvimento da tabela interativa com TanStack Table:
    • 10 colunas correspondentes à planilha original.
    • Ordenação, paginação e scroll horizontal.
    • Ações de Editar e Excluir (protegidas por senha).
  • Sub‑tarefa 3.3: Implementação do modal de CRUD (CrudModal) com formulário para criação/edição, incluindo campo para senha mestra.
  • Sub‑tarefa 3.4: População da base de dados com seed – 67 registros reais, incluindo correções e novos dados fornecidos.

Resultado: Sistema com dados reais, gráficos dinâmicos e tabela totalmente interativa.

Sprint 4 Relatórios e Deploy
  • Sub‑tarefa 4.1: Criação do componente RelatorioPreview que renderiza uma versão limpa do dashboard para exportação.
  • Sub‑tarefa 4.2: Implementação do download de relatórios:
    • PNG: captura com dom-to-image-more.
    • PDF: geração com jsPDF, dividindo o conteúdo em múltiplas páginas automaticamente.
  • Sub‑tarefa 4.3: Ajustes de responsividade e layout para diferentes dispositivos.
  • Sub‑tarefa 4.4: Migração do banco de dados para Vercel Postgres e deploy na Vercel.
  • Sub‑tarefa 4.5: Configuração das variáveis de ambiente (DATABASE_URL, ADMIN_SECRET) e redeploy automático via GitHub.

Resultado: Sistema 100% funcional em produção, com geração de relatórios e disponível online.

🧩 Metodologia: Cada sprint foi encerrado com uma demonstração ao cliente e validação das funcionalidades, garantindo que os requisitos fossem atendidos e que o sistema evoluísse de forma incremental e alinhada ao negócio.

Funcionalidades Entregues

🌐 Implantação (Deploy)

O sistema foi implantado na Vercel utilizando o plano gratuito. O processo de deploy é automatizado através da integração com o GitHub: cada push para a branch main dispara um novo build e deployment.

Etapas do Deploy

  1. Preparação: O repositório foi enviado para o GitHub com o código completo.
  2. Criação do projeto na Vercel: Utilizou-se o CLI da Vercel (vercel link) para vincular o repositório e criar o projeto sistema-brado-2026.
  3. Configuração da base de dados: Foi criada uma instância Prisma Postgres na Vercel, que forneceu a DATABASE_URL.
  4. Variáveis de ambiente: As variáveis DATABASE_URL e ADMIN_SECRET foram adicionadas no painel da Vercel (Settings → Environment Variables).
  5. Deploy: Executou-se vercel deploy --prod para o primeiro deploy.
  6. Migração e Seed: Localmente, com a DATABASE_URL apontando para o banco da Vercel, foram executados npx prisma migrate dev e npx tsx prisma/seed.ts para criar a tabela e popular os dados.
  7. Redeploy: Após a migração, um novo deploy foi realizado para garantir que a aplicação utilizasse a nova base de dados.
🔗 URL de produção: https://sistema-brado-2026-q7srnffp8.vercel.app (acesso público para visualização; edição requer senha mestra).

🔄 Como Reproduzir o Projeto

Para replicar este sistema em seu próprio ambiente, siga os passos abaixo. Este guia assume que você tem Node.js (versão 18 ou superior) e Git instalados.

1. Clonar o repositório

git clone https://github.com/FrankE2021/full_brado.git
cd full_brado
            

2. Instalar as dependências

npm install
            

3. Configurar o ambiente local

Crie um arquivo .env na raiz com o seguinte conteúdo:

DATABASE_URL="file:./dev.db"
ADMIN_SECRET="sua_senha_mestra"
            

4. Inicializar o banco de dados (SQLite)

npx prisma migrate dev --name init_carregamentos
            

5. Executar o seed (popula com dados de exemplo)

npx tsx prisma/seed.ts
            

Nota: Para usar o seed com os dados atualizados, certifique-se de que o arquivo prisma/seed.ts contenha os 67 registros.

6. Executar o servidor de desenvolvimento

npm run dev
            

Acesse http://localhost:3000 para visualizar o dashboard.

7. (Opcional) Deploy na Vercel

8. Estrutura adicional

Certifique-se de que os componentes da UI (Header, Filters, KpiCards, Charts, DataTable, CrudModal, RelatorioPreview) estejam presentes na pasta components/, e que as APIs estejam em app/api/.

💡 Dica: Para um ambiente de produção, recomenda-se utilizar PostgreSQL (Vercel Postgres) e garantir que a variável DATABASE_URL esteja corretamente configurada.

Considerações Finais

O sistema entregue atende a todos os requisitos iniciais: visualização, filtragem, CRUD, geração de relatórios e design responsivo. A combinação de Next.js, Prisma, PostgreSQL e um frontend moderno com Shadcn UI e Recharts resultou em uma ferramenta robusta, escalável e de fácil manutenção.

A documentação aqui presente serve como guia para futuras manutenções ou para a replicação do sistema em outros ambientes. Todo o código-fonte está disponível no GitHub e o sistema está em produção na Vercel.

Projeto concluído com sucesso – Agosto de 2026