Pular para o conteúdo principal

Relatórios

Repositório: reports

Ferramenta para montar relatórios e integrar dados: conecta-se a bancos externos, executa consultas e gera o resultado como relatório, JSON ou CSV. É multiconta — uma mesma instância atende vários clientes, com os dados de cada um isolados.

Usuários, contas, contexto e permissões

Autenticação. Login por Devise (:database_authenticatable, :recoverable, :validatable). O onboarding é por convite (devise_invitable): não há auto-cadastro; um usuário existente convida o próximo. Há também JWT para acesso via API.

Contexto (conta). Cada User pertence a uma Account (conta), e é a conta que isola tudo: configurations, credentials, database_connections, data_sources, queries e reports pertencem a uma conta. O usuário só enxerga os dados da sua conta.

Troca de conta. Usuários com a flag can_switch_accounts (tipicamente suporte) podem trocar a conta ativa sem relogar — o current_account passa a usar a conta escolhida na sessão (session[:switched_account_id]).

Permissões e menus. Não há um sistema de papéis granular: o controle é por conta (cada um vê o que é da sua) mais a flag de troca de conta. O menu reflete os recursos da conta (conexões, fontes, consultas, relatórios).

Stack

  • Linguagem: Ruby 4.0.2
  • Framework: Rails 8.1
  • Banco: PostgreSQL
  • Autenticação: Devise + devise_invitable (convite) + JWT
  • Front-end: esbuild + Bootstrap + ApexCharts
  • Testes: Minitest (test/)

Como rodar localmente

  1. Use o Ruby do .ruby-version (4.0.2).
  2. Rode bin/setup — instala as dependências (bundle), prepara o banco (db:prepare) e já sobe o servidor de desenvolvimento (bin/dev, que roda Rails + esbuild via Procfile.dev). Use bin/setup --reset para recriar o banco.
  3. Para subir sem reinstalar tudo, use bin/dev diretamente.

Também há docker-compose.yml e Dockerfile.dev.

Variáveis de ambiente

Configuradas em .env:

  • Aplicação e banco: APP_HOST, DB_HOST, DB_NAME, DB_USERNAME, DB_PASSWORD.
  • Segurança: JWT_SECRET — assinatura dos tokens da API.
  • E-mail (convites e recuperação de senha): MAILER_SENDER, SMTP_ADDRESS, SMTP_PORT, SMTP_USER, SMTP_PASSWORD.
  • IA (opcional): OPEN_AI_TOKEN.

Padrões do projeto

Modelos centrais: account (conta), database_connection (conexão com banco externo), credential (credenciais de acesso), data_source (fonte de dados), query (consulta), report (relatório), configuration e user.

Um relatório é descrito por uma configuração (JSON): tipo de bloco, fonte de dados, colunas, renomeação, formatação e funções de agregação.

[
{
"tipo": "tabela",
"fonte_dados": "1",
"titulo": "Lista de pessoas",
"colunas": ["id", "name", "birthdate", "valor"],
"renomear_colunas": { "name": "Nome", "valor": "Custo diário" },
"formatar_colunas": { "birthdate": "data", "valor": "moeda" },
"funcoes": { "total_linhas": "sim", "somatorio": ["valor"], "media": ["valor"] }
}
]

A consulta é vinculada a uma conexão de banco e executada sob demanda; o resultado é disponibilizado por links (JSON/CSV) protegidos e pode ser embutido em relatórios com tabelas e gráficos.

BigPicture

Do dado ao relatório