Skip to main content

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âmetroTipoObrigatórioDescrição
iduuidSimID da análise

Parâmetros de Consulta

ParâmetroTipoObrigatórioDescrição
formatostringNãoFormato de exportação (padrão: "pdf", opções: "pdf")
incluir_pareceresbooleanNãoSe deve incluir pareceres detalhados (padrão: true)
incluir_historicobooleanNãoSe deve incluir histórico de aprovações (padrão: true)
incluir_documentosbooleanNãoSe 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âmetroTipoObrigatórioDescrição
formatostringNãoFormato de exportação (padrão: "excel", opções: "excel", "csv")
statusstringNãoFiltrar por status (ex: "PENDENTE", "EM_ANALISE", "APROVADO", "REPROVADO")
data_iniciostring (date-time)NãoData inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ)
data_fimstring (date-time)NãoData final para filtro (formato: YYYY-MM-DDThh:mm:ssZ)
tipo_analise_iduuidNãoFiltrar por tipo de análise
nivel_alcada_iduuidNãoFiltrar por nível de alçada atual
responsavel_iduuidNãoFiltrar por responsável atual
colunasstringNãoLista 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âmetroTipoObrigatórioDescrição
formatostringNãoFormato de exportação (padrão: "excel", opções: "excel", "csv", "pdf")
tipostringNãoTipo de métricas (ex: "tempo_medio", "taxa_aprovacao", "sla", "completo")
data_iniciostring (date-time)NãoData inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ)
data_fimstring (date-time)NãoData final para filtro (formato: YYYY-MM-DDThh:mm:ssZ)
tipo_analise_iduuidNãoFiltrar por tipo de análise
nivel_alcada_iduuidNãoFiltrar por nível de alçada
incluir_graficosbooleanNãoSe 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âmetroTipoObrigatórioDescrição
formatostringNãoFormato de exportação (padrão: "excel", opções: "excel", "csv", "pdf")
tipostringNãoTipo de métricas avançadas (ex: "comparativo", "preditivo", "completo")
periodo_atual_iniciostring (date-time)NãoData inicial do período atual (formato: YYYY-MM-DDThh:mm:ssZ)
periodo_atual_fimstring (date-time)NãoData final do período atual (formato: YYYY-MM-DDThh:mm:ssZ)
periodo_comparativo_iniciostring (date-time)NãoData inicial do período comparativo (formato: YYYY-MM-DDThh:mm:ssZ)
periodo_comparativo_fimstring (date-time)NãoData final do período comparativo (formato: YYYY-MM-DDThh:mm:ssZ)
tipo_comparacaostringNãoTipo de comparação (ex: "personalizado", "mes_anterior", "ano_anterior")
incluir_graficosbooleanNãoSe 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âmetroTipoObrigatórioDescrição
formatostringNãoFormato de exportação (padrão: "excel", opções: "excel", "csv", "pdf")
entidadestringNãoFiltrar por tipo de entidade (ex: "analise", "usuario")
entidade_iduuidNãoFiltrar por ID da entidade
operacaostringNãoFiltrar por tipo de operação (ex: "criar", "atualizar", "excluir")
usuario_iduuidNãoFiltrar por ID do usuário que realizou a operação
data_iniciostring (date-time)NãoData inicial para filtro (formato: YYYY-MM-DDThh:mm:ssZ)
data_fimstring (date-time)NãoData final para filtro (formato: YYYY-MM-DDThh:mm:ssZ)
nivelstringNãoFiltrar por nível de severidade (info, alerta, erro, critico)
incluir_detalhesbooleanNãoSe 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

  1. Otimização de Performance: Para grandes volumes de dados, utilize streaming e paginação para evitar sobrecarga de memória.
  2. Formatação Adequada: Adapte a formatação para cada tipo de relatório e formato de exportação.
  3. Cabeçalhos e Metadados: Inclua informações relevantes como data de geração, filtros aplicados e usuário que gerou o relatório.
  4. Segurança: Aplique controles de acesso para garantir que usuários só possam exportar dados aos quais têm permissão.
  5. 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