Exportação de Relatórios
Visão Geral
O módulo de exportação de relatórios do RiskFlow permite gerar e baixar dados do sistema em diferentes formatos (PDF, Excel, CSV), facilitando a análise offline, compartilhamento de informações e integração com outros sistemas. Este módulo suporta a exportação de diversos tipos de relatórios, desde análises individuais até conjuntos completos de métricas e logs de auditoria.
Endpoints
1. Exportar Análise
Exporta os detalhes de uma análise específica em formato PDF.
GET /api/exportacao/analises/:id
Parâmetros de URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | uuid | Sim | ID da análise |
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| formato | string | Não | Formato de exportação (padrão: "pdf", opções: "pdf") |
| incluir_pareceres | boolean | Não | Se deve incluir pareceres detalhados (padrão: true) |
| incluir_historico | boolean | Não | Se deve incluir histórico de aprovações (padrão: true) |
| incluir_documentos | boolean | Não | Se deve incluir lista de documentos (padrão: true) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/exportacao/analises/550e8400-e29b-41d4-a716-446655440000?incluir_pareceres=true&incluir_historico=true' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--output analise.pdf
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const analiseId = '550e8400-e29b-41d4-a716-446655440000';
fetch(`http://localhost:3000/api/exportacao/analises/${analiseId}?incluir_pareceres=true&incluir_historico=true`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.blob())
.then(blob => {
// Criar URL para o blob
const url = window.URL.createObjectURL(blob);
// Criar link para download
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = `analise-${analiseId}.pdf`;
// Adicionar à página, clicar e remover
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
})
.catch(error => console.error('Erro ao exportar análise:', error));
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
const fs = require('fs');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
const analiseId = '550e8400-e29b-41d4-a716-446655440000';
axios({
method: 'GET',
url: `http://localhost:3000/api/exportacao/analises/${analiseId}`,
params: {
incluir_pareceres: true,
incluir_historico: true
},
headers: {
'x-api-key': token
},
responseType: 'stream'
})
.then(response => {
response.data.pipe(fs.createWriteStream(`analise-${analiseId}.pdf`));
console.log('Análise exportada com sucesso');
})
.catch(error => console.error('Erro ao exportar análise:', error));
Resposta de Sucesso
O endpoint retorna um arquivo PDF contendo os detalhes da análise.
2. Exportar Lista de Análises
Exporta uma lista de análises filtradas em formato Excel ou CSV.
GET /api/exportacao/analises
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| formato | string | Não | Formato de exportação (padrão: "excel", opções: "excel", "csv") |
| status | string | Não | Filtrar por status (ex: "PENDENTE", "EM_ANALISE", "APROVADO", "REPROVADO") |
| data_inicio | string (date-time) | Não | Data inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| data_fim | string (date-time) | Não | Data final para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| tipo_analise_id | uuid | Não | Filtrar por tipo de análise |
| nivel_alcada_id | uuid | Não | Filtrar por nível de alçada atual |
| responsavel_id | uuid | Não | Filtrar por responsável atual |
| colunas | string | Não | Lista de colunas a incluir, separadas por vírgula (ex: "codigo,cliente,valor,status") |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/exportacao/analises?formato=excel&status=APROVADO&data_inicio=2025-05-01T00:00:00Z&data_fim=2025-05-31T23:59:59Z' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--output analises_aprovadas.xlsx
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const params = new URLSearchParams({
formato: 'excel',
status: 'APROVADO',
data_inicio: '2025-05-01T00:00:00Z',
data_fim: '2025-05-31T23:59:59Z'
});
fetch(`http://localhost:3000/api/exportacao/analises?${params.toString()}`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'analises_aprovadas.xlsx';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
})
.catch(error => console.error('Erro ao exportar lista de análises:', error));
Resposta de Sucesso
O endpoint retorna um arquivo Excel (.xlsx) ou CSV (.csv) contendo a lista de análises filtradas.
3. Exportar Métricas
Exporta métricas do fluxo de aprovação em formato Excel, CSV ou PDF.
GET /api/exportacao/metricas
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| formato | string | Não | Formato de exportação (padrão: "excel", opções: "excel", "csv", "pdf") |
| tipo | string | Não | Tipo de métricas (ex: "tempo_medio", "taxa_aprovacao", "sla", "completo") |
| data_inicio | string (date-time) | Não | Data inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| data_fim | string (date-time) | Não | Data final para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| tipo_analise_id | uuid | Não | Filtrar por tipo de análise |
| nivel_alcada_id | uuid | Não | Filtrar por nível de alçada |
| incluir_graficos | boolean | Não | Se deve incluir gráficos no PDF (padrão: true, aplicável apenas para formato PDF) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/exportacao/metricas?formato=pdf&tipo=completo&data_inicio=2025-05-01T00:00:00Z&data_fim=2025-05-31T23:59:59Z&incluir_graficos=true' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--output metricas_maio.pdf
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
const fs = require('fs');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
axios({
method: 'GET',
url: 'http://localhost:3000/api/exportacao/metricas',
params: {
formato: 'excel',
tipo: 'completo',
data_inicio: '2025-05-01T00:00:00Z',
data_fim: '2025-05-31T23:59:59Z'
},
headers: {
'x-api-key': token
},
responseType: 'stream'
})
.then(response => {
response.data.pipe(fs.createWriteStream('metricas_maio.xlsx'));
console.log('Métricas exportadas com sucesso');
})
.catch(error => console.error('Erro ao exportar métricas:', error));
Resposta de Sucesso
O endpoint retorna um arquivo no formato solicitado (Excel, CSV ou PDF) contendo as métricas.
4. Exportar Métricas Avançadas
Exporta métricas avançadas (comparativas e preditivas) em formato Excel, CSV ou PDF.
GET /api/exportacao/metricas-avancadas
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| formato | string | Não | Formato de exportação (padrão: "excel", opções: "excel", "csv", "pdf") |
| tipo | string | Não | Tipo de métricas avançadas (ex: "comparativo", "preditivo", "completo") |
| periodo_atual_inicio | string (date-time) | Não | Data inicial do período atual (formato: YYYY-MM-DDThh:mm:ssZ) |
| periodo_atual_fim | string (date-time) | Não | Data final do período atual (formato: YYYY-MM-DDThh:mm:ssZ) |
| periodo_comparativo_inicio | string (date-time) | Não | Data inicial do período comparativo (formato: YYYY-MM-DDThh:mm:ssZ) |
| periodo_comparativo_fim | string (date-time) | Não | Data final do período comparativo (formato: YYYY-MM-DDThh:mm:ssZ) |
| tipo_comparacao | string | Não | Tipo de comparação (ex: "personalizado", "mes_anterior", "ano_anterior") |
| incluir_graficos | boolean | Não | Se deve incluir gráficos no PDF (padrão: true, aplicável apenas para formato PDF) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/exportacao/metricas-avancadas?formato=pdf&tipo=comparativo&tipo_comparacao=mes_anterior' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--output metricas_comparativas.pdf
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const params = new URLSearchParams({
formato: 'pdf',
tipo: 'comparativo',
tipo_comparacao: 'mes_anterior',
incluir_graficos: true
});
fetch(`http://localhost:3000/api/exportacao/metricas-avancadas?${params.toString()}`, {
method: 'GET',
headers: {
'x-api-key': token
}
})
.then(response => response.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'metricas_comparativas.pdf';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
})
.catch(error => console.error('Erro ao exportar métricas avançadas:', error));
Resposta de Sucesso
O endpoint retorna um arquivo no formato solicitado (Excel, CSV ou PDF) contendo as métricas avançadas.
5. Exportar Logs de Auditoria
Exporta logs de auditoria em formato Excel, CSV ou PDF.
GET /api/exportacao/auditoria
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| formato | string | Não | Formato de exportação (padrão: "excel", opções: "excel", "csv", "pdf") |
| entidade | string | Não | Filtrar por tipo de entidade (ex: "analise", "usuario") |
| entidade_id | uuid | Não | Filtrar por ID da entidade |
| operacao | string | Não | Filtrar por tipo de operação (ex: "criar", "atualizar", "excluir") |
| usuario_id | uuid | Não | Filtrar por ID do usuário que realizou a operação |
| data_inicio | string (date-time) | Não | Data inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| data_fim | string (date-time) | Não | Data final para filtro (formato: YYYY-MM-DDThh:mm:ssZ) |
| nivel | string | Não | Filtrar por nível de severidade (info, alerta, erro, critico) |
| incluir_detalhes | boolean | Não | Se deve incluir detalhes completos das operações (padrão: false) |
Exemplo de Requisição (cURL)
curl -X GET \
'http://localhost:3000/api/exportacao/auditoria?formato=excel&entidade=analise&data_inicio=2025-05-01T00:00:00Z&data_fim=2025-05-31T23:59:59Z' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--output auditoria_analises.xlsx
Exemplo de Requisição (Node.js - Axios)
const axios = require('axios');
const fs = require('fs');
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...';
axios({
method: 'GET',
url: 'http://localhost:3000/api/exportacao/auditoria',
params: {
formato: 'excel',
entidade: 'analise',
data_inicio: '2025-05-01T00:00:00Z',
data_fim: '2025-05-31T23:59:59Z'
},
headers: {
'x-api-key': token
},
responseType: 'stream'
})
.then(response => {
response.data.pipe(fs.createWriteStream('auditoria_analises.xlsx'));
console.log('Logs de auditoria exportados com sucesso');
})
.catch(error => console.error('Erro ao exportar logs de auditoria:', error));
Resposta de Sucesso
O endpoint retorna um arquivo no formato solicitado (Excel, CSV ou PDF) contendo os logs de auditoria.
6. Exportar Relatório Personalizado
Exporta um relatório personalizado com base em uma configuração predefinida ou parâmetros específicos.
POST /api/exportacao/relatorios-personalizados
Corpo da Requisição
{
"nome": "Relatório de Desempenho Mensal",
"formato": "pdf",
"secoes": [
{
"tipo": "metricas",
"subtipo": "tempo_medio",
"titulo": "Tempo Médio de Aprovação",
"incluir_graficos": true
},
{
"tipo": "metricas",
"subtipo": "taxa_aprovacao",
"titulo": "Taxa de Aprovação por Nível",
"incluir_graficos": true
},
{
"tipo": "analises",
"filtros": {
"status": "PENDENTE",
"sla": "PROXIMO_VENCIMENTO"
},
"titulo": "Análises Próximas do Vencimento",
"incluir_graficos": false
},
{
"tipo": "auditoria",
"filtros": {
"nivel": ["erro", "critico"]
},
"titulo": "Eventos Críticos",
"incluir_graficos": false
}
],
"filtros_globais": {
"data_inicio": "2025-05-01T00:00:00Z",
"data_fim": "2025-05-31T23:59:59Z"
},
"cabecalho": {
"titulo": "Relatório de Desempenho - Maio/2025",
"subtitulo": "Departamento de Crédito",
"incluir_logo": true
},
"rodape": {
"incluir_numeracao": true,
"texto_personalizado": "Confidencial - Uso Interno"
}
}
Exemplo de Requisição (cURL)
curl -X POST \
'http://localhost:3000/api/exportacao/relatorios-personalizados' \
-H 'Content-Type: application/json' \
-H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
-d '{
"nome": "Relatório de Desempenho Mensal",
"formato": "pdf",
"secoes": [
{
"tipo": "metricas",
"subtipo": "tempo_medio",
"titulo": "Tempo Médio de Aprovação",
"incluir_graficos": true
},
{
"tipo": "metricas",
"subtipo": "taxa_aprovacao",
"titulo": "Taxa de Aprovação por Nível",
"incluir_graficos": true
},
{
"tipo": "analises",
"filtros": {
"status": "PENDENTE",
"sla": "PROXIMO_VENCIMENTO"
},
"titulo": "Análises Próximas do Vencimento",
"incluir_graficos": false
}
],
"filtros_globais": {
"data_inicio": "2025-05-01T00:00:00Z",
"data_fim": "2025-05-31T23:59:59Z"
},
"cabecalho": {
"titulo": "Relatório de Desempenho - Maio/2025",
"subtitulo": "Departamento de Crédito",
"incluir_logo": true
},
"rodape": {
"incluir_numeracao": true,
"texto_personalizado": "Confidencial - Uso Interno"
}
}' \
--output relatorio_personalizado.pdf
Exemplo de Requisição (JavaScript - Fetch API)
const token = localStorage.getItem('token');
const relatorioConfig = {
nome: "Relatório de Desempenho Mensal",
formato: "pdf",
secoes: [
{
tipo: "metricas",
subtipo: "tempo_medio",
titulo: "Tempo Médio de Aprovação",
incluir_graficos: true
},
{
tipo: "metricas",
subtipo: "taxa_aprovacao",
titulo: "Taxa de Aprovação por Nível",
incluir_graficos: true
},
{
tipo: "analises",
filtros: {
status: "PENDENTE",
sla: "PROXIMO_VENCIMENTO"
},
titulo: "Análises Próximas do Vencimento",
incluir_graficos: false
}
],
filtros_globais: {
data_inicio: "2025-05-01T00:00:00Z",
data_fim: "2025-05-31T23:59:59Z"
},
cabecalho: {
titulo: "Relatório de Desempenho - Maio/2025",
subtitulo: "Departamento de Crédito",
incluir_logo: true
},
rodape: {
incluir_numeracao: true,
texto_personalizado: "Confidencial - Uso Interno"
}
};
fetch('http://localhost:3000/api/exportacao/relatorios-personalizados', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': token
},
body: JSON.stringify(relatorioConfig)
})
.then(response => response.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'relatorio_personalizado.pdf';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
})
.catch(error => console.error('Erro ao gerar relatório personalizado:', error));
Resposta de Sucesso
O endpoint retorna um arquivo no formato solicitado (geralmente PDF) contendo o relatório personalizado.
Bibliotecas Utilizadas
O sistema utiliza várias bibliotecas para gerar os diferentes formatos de exportação:
Para PDF
// Exemplo de geração de PDF usando PDFKit
const PDFDocument = require('pdfkit');
const fs = require('fs');
function gerarRelatorioPDF(dados, opcoes) {
return new Promise((resolve, reject) => {
try {
// Criar um novo documento PDF
const doc = new PDFDocument({
margins: { top: 50, bottom: 50, left: 50, right: 50 },
size: 'A4'
});
// Stream para armazenar o PDF
const buffers = [];
doc.on('data', buffers.push.bind(buffers));
doc.on('end', () => {
const pdfData = Buffer.concat(buffers);
resolve(pdfData);
});
// Adicionar cabeçalho
if (opcoes.cabecalho) {
doc.fontSize(18).text(opcoes.cabecalho.titulo, { align: 'center' });
if (opcoes.cabecalho.subtitulo) {
doc.fontSize(14).text(opcoes.cabecalho.subtitulo, { align: 'center' });
}
doc.moveDown(2);
}
// Adicionar conteúdo
// ... código para adicionar tabelas, gráficos, etc.
// Finalizar o documento
doc.end();
} catch (error) {
reject(error);
}
});
}
Para Excel
// Exemplo de geração de Excel usando ExcelJS
const Excel = require('exceljs');
async function gerarRelatorioExcel(dados, opcoes) {
try {
// Criar um novo workbook
const workbook = new Excel.Workbook();
workbook.creator = 'RiskFlow';
workbook.lastModifiedBy = 'RiskFlow API';
workbook.created = new Date();
workbook.modified = new Date();
// Adicionar uma planilha
const worksheet = workbook.addWorksheet('Relatório');
// Adicionar cabeçalho
worksheet.mergeCells('A1:E1');
const titleCell = worksheet.getCell('A1');
titleCell.value = opcoes.cabecalho.titulo;
titleCell.font = { size: 16, bold: true };
titleCell.alignment = { horizontal: 'center' };
// Adicionar dados
// ... código para adicionar tabelas, dados, etc.
// Gerar buffer
const buffer = await workbook.xlsx.writeBuffer();
return buffer;
} catch (error) {
throw error;
}
}
Para CSV
// Exemplo de geração de CSV usando csv-stringify
const { stringify } = require('csv-stringify/sync');
function gerarRelatorioCSV(dados) {
try {
// Preparar dados para CSV
const registros = dados.map(item => ({
codigo: item.codigo,
cliente: item.cliente,
valor: item.valor,
status: item.status,
data_criacao: item.data_criacao
}));
// Gerar CSV
const csvContent = stringify(registros, {
header: true,
columns: [
{ key: 'codigo', header: 'Código' },
{ key: 'cliente', header: 'Cliente' },
{ key: 'valor', header: 'Valor' },
{ key: 'status', header: 'Status' },
{ key: 'data_criacao', header: 'Data de Criação' }
]
});
return Buffer.from(csvContent);
} catch (error) {
throw error;
}
}
Melhores Práticas
- Otimização de Performance: Para grandes volumes de dados, utilize streaming e paginação para evitar sobrecarga de memória.
- Formatação Adequada: Adapte a formatação para cada tipo de relatório e formato de exportação.
- Cabeçalhos e Metadados: Inclua informações relevantes como data de geração, filtros aplicados e usuário que gerou o relatório.
- Segurança: Aplique controles de acesso para garantir que usuários só possam exportar dados aos quais têm permissão.
- Tamanho de Arquivo: Monitore e limite o tamanho dos arquivos gerados para evitar problemas de performance.
Próximos Passos
Agora que você entende como utilizar o módulo de exportação, pode explorar:
- Métricas - Para entender os dados que podem ser exportados
- Auditoria - Para exportar logs de auditoria
- Retenção de Logs - Para entender as políticas de retenção de dados exportáveis