Pular para conteúdo

Cobrança Escritural — Boletos (API TecnoSpeed PlugBoleto)

Objetivo

Documentar o fluxo de geração, transmissão, consulta, baixa e cancelamento de boletos de cobrança escritural via API TecnoSpeed PlugBoleto, com mapeamento campo a campo.


Visão Geral

A cobrança escritural é gerenciada pelo método _gerar_cobranca_escritural() (linha 1794 de account.py), que monta um payload JSON enviado à API PlugBoleto via POST /api/v1/boletos/lote.

Diferença fundamental: A cobrança escritural NÃO usa TX2. Usa JSON nativo via API REST do PlugBoleto.

Cadeia de Métodos

Método Linha Descrição
action_gerar_boleto_nfe() 2072 Orquestrador: gera nosso número, monta boletos, transmite
_gerar_cobranca_escritural() 1794 Monta o payload JSON de cada boleto
_gerar_boleto() 2017 Hook: retorna True por padrão (pode ser sobrescrito)
_get_l10n_br_cobranca_id() 1791 Hook: permite customizar o registro de cobrança
action_baixar_boletos() 2020 Solicita baixa em lote
action_boleto_nfe_situacao() ~2188 Consulta situação dos boletos
_check_boleto_naodisponivel() 2188 Cron: verifica boletos pendentes

Configuração da Cobrança

Onde configurar: O registro de cobrança (l10n_br_cobranca_id) é vinculado via: 1. Provedor de pagamento (payment_provider_id.l10n_br_cobranca_id) — prioridade 2. Condição de pagamento (invoice_payment_term_id.l10n_br_cobranca_id) — fallback

Campos de Configuração do Registro de Cobrança

Campo Descrição Usado como
l10n_br_cedente_conta Conta do cedente CedenteContaNumero
l10n_br_cedente_conta_digito Dígito da conta CedenteContaNumeroDV
l10n_br_cedente_convenio Convênio CedenteConvenioNumero
l10n_br_cedente_banco Código do banco CedenteContaCodigoBanco
l10n_br_carteira Carteira/variação TituloVariacaoCarteira
l10n_br_tipo_cobranca Tipo de cobrança TituloTipoCobranca
l10n_br_nosso_numero_id Sequência nosso número Gera sequencialmente
l10n_br_transmissao Tipo transmissão webservice ou outro
l10n_br_url URL base API Base URL do PlugBoleto
l10n_br_token Token de autenticação Header token-cedente
l10n_br_especie Espécie do título TituloDocEspecie
l10n_br_hibrido Boleto híbrido (PIX+boleto) hibrido = True
l10n_br_cod_emissao_bloqueto Código emissão TituloCodEmissaoBloqueto
l10n_br_enviar_chave_nf Envia chave NF no boleto Força inclusão de dados NF
l10n_br_mensagem_pagamento Local de pagamento TituloLocalPagamento
l10n_br_mensagem_01 a _09 Mensagens adicionais TituloMensagem01 a 09

Juros

Campo Cobrança Descrição Campo API
l10n_br_codigo_juros 1 valor/dia, 2 %/mês, 12 valor/dia fixo, 3 isento TituloCodigoJuros
l10n_br_percentual_juros Percentual/valor TituloValorJuros / TituloValorJurosTaxa
l10n_br_dias_juros Dias após vencimento Calcula TituloDataJuros

Multa

Campo Cobrança Descrição Campo API
l10n_br_codigo_multa 0 sem, 1 valor fixo, 2 percentual, 12 valor/dia TituloCodigoMulta
l10n_br_percentual_multa Percentual/valor TituloValorMultaTaxa
l10n_br_dias_multa Dias após vencimento Calcula TituloDataMulta

Baixa e Protesto

Campo Cobrança Descrição Campo API
l10n_br_codigo_baixa 1 baixar, 2 devolver TituloCodBaixaDevolucao
l10n_br_dias_baixa Dias após vencimento TituloPrazoBaixa
l10n_br_codigo_protesto Código de protesto TituloCodProtesto
l10n_br_dias_protesto Dias para protesto TituloPrazoProtesto

Mapeamento Completo dos Campos do Boleto

Dados do Cedente (origem: registro de cobrança)

Campo API Origem Observação
CedenteContaNumero l10n_br_cedente_conta Configuração da cobrança
CedenteContaNumeroDV l10n_br_cedente_conta_digito Dígito verificador
CedenteConvenioNumero l10n_br_cedente_convenio Convênio bancário
CedenteContaCodigoBanco l10n_br_cedente_banco 001 BB, 033 Santander, etc.

Dados do Sacado (origem: parceiro)

Prioridade de parceiro: partner_invoice_idpartner_idparent_id

Campo API Origem Campo Odoo
SacadoCPFCNPJ Parceiro l10n_br_cnpj ou l10n_br_cpf
SacadoNome Parceiro l10n_br_razao_social ou name
SacadoEmail Parceiro email (primeiro e-mail se houver ;)
SacadoEnderecoLogradouro Parceiro street
SacadoEnderecoNumero Parceiro l10n_br_endereco_numero
SacadoEnderecoComplemento Parceiro street2
SacadoEnderecoBairro Parceiro l10n_br_endereco_bairro (máx 60)
SacadoEnderecoCEP Parceiro zip (sem formatação)
SacadoEnderecoCidade Parceiro → Município name
SacadoEnderecoUF Parceiro → Estado code
SacadoTelefone Parceiro phone (somente dígitos)

Dados do Título (origem: parcela/fatura)

Campo API Origem Observação
TituloDataEmissao Calculado datetime.now(tz=SP) — data de geração
TituloDataVencimento Parcela date_maturity — data de vencimento
TituloNossoNumero Parcela ou sequência l10n_br_cobranca_nossonumero (existente) ou next_by_id()
TituloAceite Fixo N
TituloNumeroDocumento Calculado {NF}/{parcela:003} últimos 10 chars
TituloDocEspecie Cobrança/tipo doc 02 (NF-e), 04 (NFS-e), ou fixo do registro
TituloValor Parcela debit (ou amount_residual se parcela única)

Regra especial Banco do Brasil: Quando banco 001 e transmissão webservice, o TituloNumeroDocumento usa - ao invés de /.

Dados de NF (para bancos específicos)

Bancos Campo API Origem
000, 224, 246, 637, 707 + l10n_br_enviar_chave_nf TituloNumeroNfe l10n_br_numero_nf / _nfce / _nfse
Idem TituloValorNfe l10n_br_total_nfe
Idem TituloDataEmissaoNfe invoice_date
Idem TituloChaveDanfe l10n_br_chave_nf

Exceção: Banco ABC (246) não envia chave NF para NFS-e (ticket #23385).

Sacrador/Avalista (se fundo emissor)

Condição Campo API Origem
fundo_emissor_id preenchido TituloSacadorAvalista emissor_id.l10n_br_razao_social
Idem TituloSacadorAvalistaEndereco emissor_id.street
Idem TituloInscricaoSacadorAvalista emissor_id.l10n_br_cnpj

Desconto (se configurado na parcela)

Campo API Origem Campo Odoo
TituloCodDesconto Parcela l10n_br_cobranca_tipo_desconto
TituloValorDescontoTaxa Parcela l10n_br_cobranca_valor_desconto
TituloDataDesconto Parcela l10n_br_cobranca_data_desconto

Autenticação PlugBoleto

Header Origem Observação
Content-Type Fixo application/json
cnpj-cedente fundo_emissor_id ou emissor_id CNPJ sem formatação
cnpj-sh Fixo 28653792000112 (CIEL IT)
token-cedente Cobrança l10n_br_token

Fluxo de Geração

flowchart TD
    A["action_gerar_boleto_nfe()"] --> B["Gera nosso número por parcela"]
    B --> C["_gerar_cobranca_escritural()"]
    C --> D["POST /api/v1/boletos/lote"]
    D --> E{"Resposta?"}
    E -->|sucesso| F["Atualiza idintegracao, situacao"]
    F --> G["action_boleto_nfe_situacao()"]
    E -->|falha| H["Registra erro, raise UserError"]

Filtros de Parcelas

O sistema gera boleto apenas para parcelas (account.move.line) que: 1. account_type == 'asset_receivable' 2. date_maturity preenchido 3. date_maturity > invoice_date 4. l10n_br_cobranca_idintegracao vazio (não gerado anteriormente) 5. l10n_br_cobranca_situacao vazio 6. _gerar_boleto(invoice_payment) retorna True


Baixa de Boletos

Método: action_baixar_boletos() (linha 2020)

Aspecto Detalhe
Endpoint POST /api/v1/boletos/baixa/lote
Payload Lista de l10n_br_cobranca_idintegracao
Filtro Apenas parcelas com situação ≠ REJEITADO, BAIXADO, LIQUIDADO

Retorno de Baixa

Se _status == 'sucesso', o sistema considera a baixa processada. Caso contrário, exibe erro.


Cron de Verificação

Método: _check_boleto_naodisponivel() (linha 2188)

  • Busca parcelas com situação SALVO, PENDENTE_RETENTATIVA, EMITIDO
  • Para cada fatura, chama action_boleto_nfe_situacao() para atualizar o status

Troubleshooting

Problema Causa Provável Solução
Boleto não gerado Cobrança não vinculada à condição de pagamento Vincular l10n_br_cobranca_id
Parcela ignorada date_maturity <= invoice_date Verificar vencimento da parcela
Parcela já processada l10n_br_cobranca_idintegracao já preenchido Limpar se rejeitado
Nosso número duplicado Sequência desatualizada Verificar sequência l10n_br_nosso_numero_id
CPF/CNPJ inválido Parceiro sem CNPJ/CPF Preencher cadastro do parceiro
Token expirado Token do cedente inválido Renovar l10n_br_token
Sacado sem CEP CEP em branco Preencher endereço do parceiro
Multa/juros incorretos Configuração errada no registro de cobrança Revisar percentuais e códigos
Banco do Brasil com / BB webservice rejeita / Sistema substitui por - automaticamente

Referências Cruzadas