Inclusão de Desconto na Cobrança
CobrancaInclusaoDeDesconto
Rotina do módulo Financeiro (submenu Cobrança → Alteração TREC → Desconto, recurso 1572) que aplica um desconto (operação financeira TRECDESC) sobre um ou mais títulos a receber selecionados, gerando a movimentação financeira correspondente, o lançamento contábil de integração e, quando aplicável, o comprovante de impressão da operação.
Visão Geral
Rotina do módulo Financeiro (submenu Cobrança → Alteração TREC → Desconto, recurso 1572) que aplica um desconto (operação financeira TRECDESC) sobre um ou mais títulos a receber selecionados, gerando a movimentação financeira correspondente, o lançamento contábil de integração e, quando aplicável, o comprovante de impressão da operação.
Endpoints
[POST] /CobrancaInclusaoDeDesconto/Salvar
Processa o desconto sobre a lista de títulos a receber informados no cabeçalho da operação (`dto.TitulosAProcessar`). Para cada título: identifica a variação da operação (adiantamento/cooperado/sem variação, conforme o participante e o tipo de documento), obtém o fato contábil da operação TRECDESC, calcula o valor do desconto (em moeda nacional ou em moeda estrangeira, se a liquidação for em moeda estrangeira) e gera a movimentação financeira. Ao final, dispara a integração contábil de todos os lançamentos gerados e tenta atualizar dados de boleto híbrido via API para os títulos afetados.
Permissão: “CobrancaInclusaoDeDesconto/Salvar” (ID 1919) — acesso à tela coberto por “ListViewDe…” da árvore de Alteração TREC (recurso pai 1562 – Cobrança, item “Desconto”, ID 1572)
Parâmetros:
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| dto | DTOCabecalhoDeOperacoes (corpo da requisição) | Sim | Cabeçalho da operação de desconto |
| dto.TitulosAProcessar | List\<DTODeTituloAProcessar\> | Sim (não pode ser vazia) | Lista dos títulos a receber selecionados, cada um com `ID`, `Desconto`, `DescontoMoeda`, `IDDaCarteiraDePagamento` |
| dto.ValorCotacao | decimal | Condicional | Cotação da moeda, usada quando o desconto é informado em `DescontoMoeda` ou a liquidação é em moeda estrangeira |
| dto.EhLiquidacaoMoedaExtrangeira | bool | Não | Indica se a operação deve tratar variação cambial antes de aplicar o desconto |
| dto.IdRotina | int? | Não | Identifica a rotina de origem, usado para decidir se uma falha de integração com o banco deve interromper a operação |
“` POST /CobrancaInclusaoDeDesconto/Salvar { “TitulosAProcessar”: [ { “ID”: “12345”, “Desconto”: 50.00, “DescontoMoeda”: 0, “IDDaCarteiraDePagamento”: 3 } ], “ValorCotacao”: 1, “EhLiquidacaoMoedaExtrangeira”: false } “`
“`json { “success”: true, “aviso”: null, “listaDeOperacoesFinanceiras”: [], “listaDeOperacoesContabeis”: [] } “`
[POST] /CobrancaInclusaoDeDesconto/Imprimir
Prepara o arquivo de layout do comprovante de desconto (`Comprovante.rpt`) na pasta do cliente (`~/DocumentosDoFinanceiro/Comprovante/Cliente`), copiando o modelo padrão (`~/DocumentosDoFinanceiro/Comprovante/Padrao`) caso ainda não exista uma cópia específica do cliente. Não gera o PDF/relatório em si — apenas garante que o arquivo de layout está disponível para a geração do comprovante ser feita em seguida (fora deste endpoint).
Permissão: “CobrancaInclusaoDeDesconto/Imprimir” (ID 1920)
Parâmetros: nenhum.
“` POST /CobrancaInclusaoDeDesconto/Imprimir “`
“`json { “success”: true } “`
Modelos de Dados
DTOCabecalhoDeOperacoes (campos relevantes para esta rotina)
| Campo | Tipo | Descrição |
|---|---|---|
| TitulosAProcessar | List\<DTODeTituloAProcessar\> | Títulos selecionados para receber o desconto |
| ValorCotacao | decimal | Cotação usada para converter o desconto em moeda estrangeira para moeda nacional |
| EhLiquidacaoMoedaExtrangeira | bool | Indica liquidação em moeda estrangeira (dispara tratamento de variação cambial antes do desconto) |
| IdRotina | int? | Rotina de origem, usada em decisões de interrupção por falha de integração |
DTODeTituloAProcessar (campos relevantes para esta rotina)
| Campo | Tipo | Descrição |
|---|---|---|
| ID | string | Identificador do título a receber |
| Desconto | decimal | Valor do desconto em moeda nacional |
| DescontoMoeda | decimal | Valor do desconto em moeda estrangeira (quando maior que zero, prevalece sobre `Desconto`, que é recalculado pela cotação) |
| IDDaCarteiraDePagamento | int | Carteira de pagamento do título, usada quando o título está associado a uma remessa pendente |
Regras de Negócio
- Lista de títulos obrigatória. Se `dto.TitulosAProcessar` estiver vazia ou nula, a operação é bloqueada.Mensagem exibida: Erro: “Não foi possível Salvar”. Motivo: “Nenhum título foi informado.” Solução: “Verifique e informe título válido para operação”.
- Cálculo do valor do desconto. Se `DescontoMoeda` do título for maior que zero, o valor efetivo do desconto é recalculado como `DescontoMoeda × ValorCotacao` (arredondado a 2 casas decimais) e o valor em moeda é mantido como `DescontoMoeda`; caso contrário, tanto o valor em moeda nacional quanto o valor “em moeda” usados na movimentação são preenchidos com `Desconto`.
- Título já vinculado a remessa pendente. Quando o título tem `IDDaUltimaOcorrencia` igual a “1”, o sistema busca a remessa de cobrança pendente para a carteira de pagamento informada, associa o número da remessa ao título, marca a ocorrência do título como “8” e registra a movimentação financeira do desconto vinculada a essa remessa — sem entrar no cálculo de variação cambial.
- Liquidação em moeda estrangeira. Quando `dto.EhLiquidacaoMoedaExtrangeira` é verdadeiro, antes de aplicar o desconto o sistema executa a movimentação de variação cambial do título (se houver) e confirma essa movimentação isoladamente (commit parcial). Em seguida consulta o saldo atualizado do título: se o desconto informado corresponde ao saldo total (não é parcial), o valor do desconto é ajustado para o saldo exato do título antes de ser lançado.
- Integração contábil obrigatória. Após processar todos os títulos, se houve ao menos uma movimentação financeira gerada, o sistema dispara a integração contábil (lançamentos automáticos) para toda a lista de movimentações.
- Atualização de boleto híbrido via API. Ao final do processamento, o sistema tenta atualizar os dados de boleto híbrido (API) para os títulos afetados. Se essa etapa falhar, o sistema decide — com base em `dto.IdRotina` e na regra de negócio interna de “deve interromper por falha no banco” — se desfaz toda a operação (rollback) ou apenas registra um aviso informativo ao usuário sem desfazer o desconto já lançado.
- Transação atômica. Todo o processamento de uma chamada a “Salvar” ocorre dentro de uma única transação de banco de dados; qualquer erro não tratado durante o processamento de um título é convertido em mensagem de erro padrão do sistema (ver mensagem “ERRO_CHAMADA_METODO_BASE”, que reexibe o texto da exceção original) e a transação é finalizada.
Permissões
Acesso à rotina: permissão de acesso à árvore “Alteração TREC” / item “Desconto” (recurso pai 1562 – Cobrança, ID 1572)
| Ação | Permissão | ID |
|---|---|---|
| Salvar | “CobrancaInclusaoDeDesconto/Salvar” | 1919 |
| Imprimir | “CobrancaInclusaoDeDesconto/Imprimir” | 1920 |