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
- Use o Ruby do
.ruby-version(4.0.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 viaProcfile.dev). Usebin/setup --resetpara recriar o banco. - Para subir sem reinstalar tudo, use
bin/devdiretamente.
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.