| Data de elaboração | 25/11/2023 |
| Responsável pelo estudo | Ádrian Rabelo Mendes (Assessor), Diego Gonçalves de Almeida (Assessor), Jônatas Legal (Técnico em Tecnologia da Informação e Comunicação) (Assessor), Rodrigo Stefano Sales Nascimento (Assessor) |
| Equipe do estudo | CAOS |
| Alvo | Sistema Governa |
| Origem | Objetivo estratégico: Separar Carta Remessa na sua geração de relatório por Financeiro. |
| Objetivo | para que seja atendida a demanda de agilizar a demanda diária de desbloqueios de pagamentos e a respectiva disponibilização das cartas remessas em cada processo SEI (demanda Nº: 0031.072694/2022-33) |
| Documentação correlata | Estudo Técnico para separar carta remessa por Lotação |
FEBRABAN – Federação Brasileira de Bancos
CNAB240 – Centro Nacional de Automação Bancária
A carta remessa é um documento ou arquivo eletrônico contendo detalhes de uma transação ou série de transações a serem processadas por um banco ou outra instituição financeira. Estes detalhes podem incluir informações sobre o remetente e o destinatário do pagamento, o valor da transação, a data da transação, entre outros.
Atualmente, as Cartas Remessa são produzidas em um formato padrão definido pela Federação Brasileira de Bancos (FEBRABAN), conhecido como CNAB240. Este formato estruturado facilita o processamento automatizado das transações pelos bancos e é amplamente aceito em todo o setor bancário brasileiro.
No sistema Governa, a geração da carta remessa é feita por um processo que envolve várias etapas. Neste estudo, iremos explorar estas etapas em detalhes, e fornecer recomendações para a implementação da separação dos relatórios nela gerados.
A carta remessa pode ser gerada através do seguinte menu no sistema Governa, módulo de Recursos Humanos:
Movimentação Mensal > Controle Bancário > Carta Remessa > Emitir

Figura 1: Menu de emissão de carta remessa
Na figura 2, na tela de emissão de Carta Remessa, podemos observar diversas opções para que o usuário possa escolher no evento da geração da mesma.

Figura 2: Tela de emissão de Carta Remessa
Para gerar a Carta remessa, o usuário precisará preencher todos os campos obrigatórios, marcados com asterisco * e acionar o botão Executar. Se a carta remessa nas condições que o usuário escolheu já foi gerada, o botão Baixar Relatório estará ativo, permitindo assim, que o usuário faça download do arquivo gerado.
Realizamos anteriormente um estudo aprofundado sobre o processo de geração da carta remessa, a emissão do relatório e a separação por Identificador (Lotação). Este estudo, intitulado ‘Estudo Técnico para separar carta remessa por Identificador’, disponível aqui, oferece uma análise detalhada e minuciosa de todas as classes envolvidas neste processo.
O sistema governa também executa uma geração de relatórios de carta remessa, quando o usuário acessa o menu Movimentação Mensal> Controle Bancario> Bloqueio/Desbloqueio> Efetivação de Desbloqueio, conforme podemos observar na imagem abaixo:

Figura 3 - Efetivação de Desbloqueio

Figura 4 - Efetivação de Desbloqueio
Por meio desta tela, o usuário consegue gerar o relatório de carta remessa ao efetivar o desbloqueio da matrícula localizada. O relatório gerado considera o mês de referência informado pelo usuário, monta uma instância de carta remessa com os seguintes parâmetros:
- rotina de cálculo: FOLHA_PAGAMENTO
- mês de referência: mês informado pelo usuário
- intervalo de matrículas: de 0 até 999999999
- intervalo de lotação: de 0 até 999999999
- modelo: ACERTO_SALARIO_LIQUIDO
Atualmente, o sistema Governa(treinamento) gera os relatórios da Carta Remessa seguindo estas 3 etapas:

Figura 5 - Geração dos Relatórios por Lotação
Tanto na tela de emissão da carta remessa(Figura 2) quanto na tela de efetivação do desbloqueio(Figura 4), o sistema governa utiliza o mesmo método gerarRelatorioCartaRemessa(), que separa os relatórios por Lotação, compacta em um arquivo ZIP e retorna o arquivo para download, conforme podemos conferir no código abaixo:
public StreamedContent gerarRelatorioCartaRemessa(String numeroCarta, String nomeCartaRemessa, String mesReferencia, String lotacaoCodigo)
throws RelatorioGeracaoExcecao {
try {
List<CartaRemessaDetalheVisao> listaCartaRemessaDetalheVisao = this.buscarListaCartaRemessaDetalheVisao();
// Obtem cartas agrupadas por lotacao
Map<String, List<CartaRemessaDetalheVisao>> cartasAgrupadas = obterCartasAgrupadasPorLotacao(listaCartaRemessaDetalheVisao);
// Cria um mapa para armazenar os relatorios por lotacao
Map<String, ByteArrayOutputStream> mapaRelatorios = new HashMap<>();
// Removida a geração do arquivo para o banco a pedido do cliente
// ByteArrayOutputStream relatorioCartaRemessaViaBanco = geradorCartaRemessa.gerarRelatorioCartaRemessa(super.getEmpresaAutenticada(),
// this.cartaRemessa, listaCartaRemessaDetalheVisao, IRelatorioCartaRemessaGerador.ViaCartaRemessa.BANCO);
// Gera o relatório para cada lotacao
for (Map.Entry<String, List<CartaRemessaDetalheVisao>> entry : cartasAgrupadas.entrySet()) {
// Obtem o nome da lotacao
String lotacao = entry.getKey();
// Obtem a lista de detalhes da carta remessa desta lotacao
List<CartaRemessaDetalheVisao> detalhesLotacao = entry.getValue();
// Gera o relatório
ByteArrayOutputStream relatorioCartaRemessaViaFinanceiro = geradorCartaRemessa.gerarRelatorioCartaRemessa(
super.getEmpresaAutenticada(), this.cartaRemessa, detalhesLotacao,
IRelatorioCartaRemessaGerador.ViaCartaRemessa.FINANCEIRO);
// Armazena o relatorio no mapa usando a lotacao como chave
mapaRelatorios.put(lotacao, relatorioCartaRemessaViaFinanceiro);
}
return this.gerarStreamZipFromMap(mapaRelatorios, numeroCarta, nomeCartaRemessa,
mesReferencia, lotacaoCodigo);
} catch (Exception e) {
throw new RelatorioGeracaoExcecao(e);
}
}
No estudo conduzido anteriormente, abordamos detalhadamente todas as estapas para a geração do relatório.

Figura 6 - Efetivação de Desbloqueio
Uma possível solução seria no caso, criar um método exclusivo para geração dos relatórios separados por Lotação e modificar a tela de Efetivação de Desbloqueio para que a mesma chame este novo método na hora de executar a efetivação do desbloqueio. Isso garantiria que a separação por Lotação fosse chamada corretamente nesta tela.

Figura 7 - Emissão de Carta Remessa
Na tela de Emissão da carta remessa, o usuário poderá informar ao sistema qual separação dos relatórios o sistema deverá efetuar. Caso escolha por Lotação, o sistema chamará o método específico para emitir a carta remessa e gerar os relatórios separados por Lotação, caso opte por Financeiro, o sistema executará o método que emite e faz a separação por unidade gestora(Financeiro).
Ao final da emissão e geração dos relatórios, o sistema habilitará o botão de download referente ao tipo de relatório que o usuário escolheu.

Figura 8 - Geração dos Relatórios por Lotação
Na Etapa 1, é realizada a busca dos detalhes da carta remessa, levando em consideração a divisão por lotações. Essa abordagem permite a obtenção dos detalhes de forma segmentada, melhorando o desempenho e a organização dos dados.
Na Etapa 2, os relatórios são gerados para cada lotação. Utilizando um laço de repetição, o relatório é gerado individualmente para cada lotação, garantindo que cada um seja devidamente processado e formatado.
Por fim, na Etapa 3, os relatórios gerados são compactados em arquivos ZIP. Utilizando novamente um laço de repetição, cada relatório é adicionado ao arquivo ZIP correspondente à sua lotação. Essa abordagem permite a organização dos relatórios em lotações separadas, facilitando a posterior consulta e análise dos dados.

Figura 9 - Geração dos Relatórios por Financeiro
Na Etapa 1, é realizada a busca dos detalhes da carta remessa, levando em consideração a divisão por unidade gestora. Essa abordagem permite a obtenção dos detalhes de forma segmentada, melhorando o desempenho e a organização dos dados.
Na Etapa 2, os relatórios são gerados para cada unidade gestora. Utilizando um laço de repetição, o relatório é gerado individualmente para cada unidade gestora, garantindo que cada um seja devidamente processado e formatado.
Por fim, na Etapa 3, os relatórios gerados são compactados em arquivos ZIP. Utilizando novamente um laço de repetição, cada relatório é adicionado ao arquivo ZIP correspondente à sua unidade gestora. Essa abordagem permite a organização dos relatórios em unidades gestoras separadas, facilitando a posterior consulta e análise dos dados.
| História | O quê: Eu, dev, preciso modificar a tela de Efetivação de Desbloqueio Por quê: para que seja possível separar os relatórios por Lotação e Financeiro. |
| Regras e Validações | no botão de Efetivar Desbloqueio chame o método gerarRelatorioCartaRemessaPorLotacao |
| Pontuação | 2 |
| História | O quê: Eu, dev, preciso modificar a tela de Emissão de Carta Remessa Por quê: para que seja possível separar os relatórios por Lotação e Financeiro. |
| Regras e Validações | Adicionar listbox com Lotação e Financeiro nas opções, adicionar os botões de download dos respectivos relatórios |
| Pontuação | 3 |
| História | O quê: Eu, dev, preciso modificar o backend da tela de Emissão de Carta Remessa Por quê: para que seja possível separar os relatórios por Lotação e Financeiro. |
| Regras e Validações | Adicionar regras de negócio para considerar a opção escolhida na listbox do tipo de relatório, modificar a chamada do método na hora de executar para chamar a função específica de acordo com a seleção na listbox. Separar os arquivos zip gerados de acordo com a seleção na listbox e possibilitar o download dos mesmos |
| Pontuação | 6 |
| História | O quê: Eu, dev, preciso modificar/adicionar query no repositório ICartaRemessaDetalheRepositorio para trazer as informações de unidade gestora, Por quê: para que seja possível separar os relatórios por Lotação e Financeiro. |
| Regras e Validações | Precisa retornar os mesmos dados incluindo as informações da unidade gestora |
| Pontuação | 8 |
| História | O quê: Eu, dev, preciso criar o método gerarRelatorioCartaRemessaPorLotacao específico para gerar os relatórios por Lotação, Por quê: para que seja possível separar os relatórios por Lotação e Financeiro. |
| Regras e Validações | Atender as 3 etapas da Figura 8 |
| Pontuação | 5 |
| História | O quê: Eu, dev, preciso criar o método gerarRelatorioCartaRemessaPorFinanceiro específico para gerar os relatórios por Unidade Gestora, Por quê: para que seja possível separar os relatórios por Lotação e Financeiro. |
| Regras e Validações | Atender as 3 etapas da Figura 9 |
| Pontuação | 5 |
Com base nessa análise, é possível concluir que é necessário fazer modificações no código fonte para separar os relatórios PDF por Financeiro e Lotação.