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