📊 Análise Completa do Endpoint /reports/cosifGeneralBalance
🎯 Endpoint
URL: POST /reports/cosifGeneralBalance
Serviço: ecosif-reports
Controller: ReportsController.getReportCosifGeneralBalance()
📥 Estrutura de Entrada (Request)
DTO Principal: BalanceteGeralRequestDTO
{
"balanceteGeralDTO": {
"dataReferencia": "2025-12-31T00:00:00.000Z",
"paginaInicial": "1",
"nivelMaximo": "9",
"fundosEncerrados": false,
"alertaSaldosInvertidos": false,
"geraArquivoTexto": false, // ⚠️ CHAVE PRINCIPAL
"contasFantasmas": false,
"valoresZerados": false,
"empresa": "000000001",
"filial": "000000001",
"filialFim": "000000001",
"usuario": "nome_usuario"
},
"printDTO": {
"orientationEnum": "LANDSCAPE",
"visualizationEnum": "PDF" // Valores: "PDF", "TXT", "CSV"
}
}
⚠️ Campos Faltantes no DTO
O DTO NÃO possui os campos:
- somenteXml (Boolean)
- txtGeraXml (Boolean)
Esses campos são enviados pelo frontend mas não são processados pelo backend.
📤 Estrutura de Saída (Response)
DTO de Resposta: RetornoRelatorioBalanceteGeral
{
"status": 200,
"mensagem": "",
"elemento": {
"relatorio": "base64_string...", // Quando geraArquivoTexto = false
"arquivoTxt": "base64_string..." // Quando geraArquivoTexto = true
}
}
Campos de retorno:
- relatorio (String, base64): Relatório formatado (PDF/TXT/CSV)
- arquivoTxt (String, base64): Arquivo TXT específico (formato COSIF)
🔀 Lógica de Decisão de Saída
O endpoint usa a seguinte lógica:
if (geraArquivoTexto == true) {
// Retorna arquivoTxt (formato específico COSIF)
result.setArquivoTxt(txtCosif4010Txt(dado.getArquivo()));
} else {
// Retorna relatorio (formato report)
switch (visualizationEnum) {
case "PDF": result.setRelatorio(pdfCosif4010(dado)); break;
case "TXT": result.setRelatorio(txtCosif4010(dado)); break;
case "CSV": result.setRelatorio(pdfCosif4010(dado)); break; // ⚠️ Retorna PDF mesmo
}
}
📋 Opções de Saída Possíveis
1️⃣ Relatório Formatado (Report) - geraArquivoTexto = false
Quando geraArquivoTexto = false, retorna relatorio (base64) no formato especificado:
A) PDF (visualizationEnum = "PDF")
- Método:
pdfCosif4010() - Template:
/templates/cos4010-4016_A4_Landscape.jrxml - Formato: PDF em base64
- Conteúdo: Relatório formatado com cabeçalho, ativos, passivos, totais
- Uso: Visualização/impressão
B) TXT Report (visualizationEnum = "TXT")
- Método:
txtCosif4010() - Template:
/templates/cos4010-4016_A4_Landscape.jrxml(mesmo do PDF) - Formato: TXT em base64 (exportado via JRTextExporter)
- Conteúdo: Mesmo conteúdo do PDF, mas em formato texto
- Uso: Visualização em texto
C) CSV (visualizationEnum = "CSV")
- Método:
pdfCosif4010()⚠️ BUG: Retorna PDF mesmo quando CSV é solicitado - Formato: PDF em base64 (incorreto)
- Uso: Não funciona corretamente
2️⃣ Arquivo TXT Específico - geraArquivoTexto = true
Quando geraArquivoTexto = true, retorna arquivoTxt (base64):
- Método:
txtCosif4010Txt() - Template:
/templates/cos4010-4016_txt.jrxml - Formato: TXT em base64
- Conteúdo: Arquivo formatado no padrão COSIF específico:
#A14010[CNPJ][8 espaços][MES][ANO]D[35 espaços] 00[CODIGO_CONTA_7DIG][5 espaços][VALOR_18D][VALOR_18D][VALOR_18D] ... @1[000001][63 espaços] - Estrutura:
- Linha 1: Cabeçalho (
#A1ou#C1+ código 4010/4016 + CNPJ + data) - Linhas intermediárias: Dados das contas (ativo e passivo)
- Última linha: Rodapé (
@1+ contador de linhas) - Uso: Envio para sistemas externos, importação
3️⃣ XML - ⚠️ NÃO IMPLEMENTADO
O backend NÃO gera XML atualmente, mesmo quando o frontend envia somenteXml ou txtGeraXml.
Serviço disponível mas não usado:
- Report4010Service.generateXmlFromTxt(String txtContent) existe
- Converte TXT (formato específico) para XML
- Não é chamado em nenhum lugar do código
Estrutura XML que seria gerada:
<Relatorio4010>
<conta codigoConta="1234567890" saldo="1000000"/>
<conta codigoConta="9876543210" saldo="-500000"/>
...
</Relatorio4010>
🔧 Como Passar Parâmetros para Cada Tipo de Saída
Para gerar PDF Report:
{
"balanceteGeralDTO": {
"geraArquivoTexto": false,
...
},
"printDTO": {
"visualizationEnum": "PDF"
}
}
Para gerar TXT Report:
{
"balanceteGeralDTO": {
"geraArquivoTexto": false,
...
},
"printDTO": {
"visualizationEnum": "TXT"
}
}
Para gerar Arquivo TXT Específico:
{
"balanceteGeralDTO": {
"geraArquivoTexto": true,
...
}
}
Nota: Quando geraArquivoTexto = true, o visualizationEnum é ignorado.
Para gerar XML (atualmente não funciona):
{
"balanceteGeralDTO": {
"geraArquivoTexto": true,
"somenteXml": true, // ⚠️ Campo não existe no DTO
"txtGeraXml": false
}
}
Problema: Os campos somenteXml e txtGeraXml não existem no BalanceteGeralDTO, então não são processados.
🐛 Problemas Identificados
1. XML não é gerado
- Frontend envia
somenteXmletxtGeraXml, mas o DTO não tem esses campos Report4010Service.generateXmlFromTxt()existe mas não é usado- Não há campo no response para retornar XML
2. CSV retorna PDF
- Quando
visualizationEnum = "CSV", o código chamapdfCosif4010()em vez de um método CSV
3. Frontend tenta chamar endpoint inexistente
- Quando XML está habilitado, frontend tenta chamar
/api/compliance/run/download - Esse endpoint não existe no
ecosif-compliance
✅ Soluções Necessárias
Opção A: Implementar XML no ecosif-reports (Recomendado)
-
Adicionar campos no DTO:
java // BalanceteGeralDTO.java private Boolean somenteXml; private Boolean txtGeraXml; -
Adicionar campo no Response:
java // RetornoRelatorioBalanceteGeral.java private String arquivoXml; -
Modificar lógica no Service: ```java if (geraArquivoTexto) { String txtBase64 = txtCosif4010Txt(dado.getArquivo()); result.setArquivoTxt(txtBase64);
if (somenteXml || txtGeraXml) { // Decodificar base64, converter para XML String txtContent = new String(Base64.getDecoder().decode(txtBase64)); String xmlContent = report4010Service.generateXmlFromTxt(txtContent); result.setArquivoXml(Base64.getEncoder().encodeToString(xmlContent.getBytes())); } } ```
Opção B: Criar endpoint no ecosif-compliance
Criar /api/compliance/run/download que:
- Recebe os mesmos parâmetros de /api/compliance/run
- Gera o XML diretamente
- Retorna Blob com XML
📝 Resumo das Opções de Saída
geraArquivoTexto |
visualizationEnum |
Saída | Campo Retornado |
|---|---|---|---|
false |
PDF |
PDF formatado (report) | relatorio |
false |
TXT |
TXT formatado (report) | relatorio |
false |
CSV |
PDF formatado (report) ⚠️ | relatorio |
true |
qualquer | TXT específico COSIF | arquivoTxt |
true + XML* |
qualquer | XML ⚠️ NÃO IMPLEMENTADO | - |
*XML requer implementação adicional
Última atualização: 2026-01-28