Pular para o conteúdo principal

Rotina: Contas a Receber

Ciclo completo de lançamento, boleto, retorno bancário, baixa, reparcelamento e encargos por atraso.


Módulos Delphi​

MóduloPapel
source/MFC001/Consulta e listagem de contas a receber
source/MFC003/Baixa de contas a receber
source/MFC005/Geração de boletos
source/MFC015/Retorno bancário (processamento automático)
source/MFC019/Reparcelamento / negociação
source/MFC033/Emissão de boleto via API bancária
source/jFinanceiro/UCompensacao.pasCompensação crédito/débito
source/jFinanceiro/UProvisao.pasPDD (Provisão para Devedores Duvidosos)
source/jBoleto/JunCob*.pasDrivers por banco (40+ bancos)

Tabelas do Banco de Dados​

CONTAS — Tabela Principal de Títulos​

DDL: docs/schema/tables/CONTAS.sql

Chave primária: (CD_EMPRESA, NR_LANCAMENTO, CD_PESSOA, CD_TIPOCONTA, NR_PARCELA)

CampoTipoDescrição
TP_CONTASCHAR(1)'S'=Receber (entrada), 'E'=Pagar (saída)
ST_CONTASCHAR(1)'T'=Pendente total, 'P'=Pago parcial, 'L'=Liquidada, 'C'=Cancelada, 'A'=Agrupada
VL_DOCUMENTONUMERIC(15,2)Valor nominal original (imutável)
VL_SALDONUMERIC(15,2)Saldo residual (decrementado a cada baixa)
DT_VENCIMENTODATEVencimento sem encargos
DT_LANCAMENTODATEData de criação do título
DT_LIQUIDACAODATEData em que VL_SALDO chegou a zero
TP_DOCUMENTOVARCHAR(2)'NT'=Notas Fiscais, 'DP'=Duplicata Avulsa, 'AD'=Adiantamento, 'CH'=Cheques, 'CT'=Cartão de Crédito, 'AG'=Contas Agrupados, 'OC'=Ordem Carregamento, 'ES'=Mensalidades Escola, 'RS'=Restaurante, 'RF'=Receita Frete, 'DF'=Despesa Viagem, 'AF'=Adiantamento Viagem, 'FA'=Fatura, 'EV'=Evento Contrato, 'OB'=Romaneio/Obras, 'CV'=Contrato Vendedor, 'DV'=Débito Vendedor, 'VA'=Vale
CD_TIPOCONTAINTEGERTipo (Boleto, Cheque, Provisão, Cartão, etc.)
CD_JUROINTEGERTabela de encargos (FK → JURO)
CD_FORMAPAGTOVARCHAR(2)Forma de pagamento
CD_CONDPAGTOINTEGERCondição de pagamento de origem
CD_VENDEDORINTEGERVendedor responsável (para comissão)
NR_LANCTONOTAINTEGERLançamento da NF de origem
NR_PARCELACONTAINTEGERParcela (1, 2, 3...)
NR_BOLETOINTEGERNúmero sequencial do Boleto
ST_BOLETOCHAR(1)'N'=Não gerado, 'I'=Impresso, 'R'=Registrado, 'D'=Descontado, 'A'=Finalizado/Retorno Confirmado
NR_NOSSONUMEROAPIVARCHAR(54)Nosso número retornado pelo banco (API)
DS_LINKBOLETOVARCHAR(500)URL do PDF do boleto
DS_LINHADIGITAVELVARCHAR(100)Linha digitável da cobrança via API
DS_CODIGOBARRAVARCHAR(100)Código de barras da cobrança via API
CD_PIXINTEGERNúmero sequencial da tabela PIX. Quando preenchido, a cobrança tem um QR Code do tipo PIX associado
NR_REMESSAINTEGERNúmero sequencial do arquivo de Remessa da cobrança via CNAB
NR_DEBITOAUTOMATICOINTEGERNúmero sequencial do boleto para pagamento
DS_LINHADIGITAVELBOLPAGTOVARCHAR(100)Linha Digitável do boleto para pagamento
ST_REMESSAPAGTOCHAR(1)'N'=Sem Remessa de Pagamento, 'S'=Gerado Remessa de Pagamento
ST_CARTORIOCHAR(1)'N'=Normal, 'C'=Em cartório, 'S'=Protestado, 'J'=Jurídico
ST_INCOBRAVELCHAR(1)'N'=Cobrável, 'S'=Perda reconhecida (PDD)
NR_AGRUPCONTASINTEGERAgrupa os títulos selecionados na tela MNF029 (Gerenciamento de contas de contratos)
PC_COMISSAONUMERIC(3,2)% comissão do vendedor
CD_USUARIOVARCHAR(5)Usuário que criou
DT_REGISTROTIMESTAMPAuditoria de criação

Regra crítica: sempre filtrar ST_CONTAS <> 'C' e ST_INCOBRAVEL = 'N' em relatórios de posição.


MOVTOCAIXA — Trilha de Baixas​

DDL: docs/schema/tables/MOVTOCAIXA.sql

Cada baixa (total ou parcial) gera uma linha aqui. É a trilha de auditoria de todas as liquidações.

CampoTipoDescrição
CD_EMPRESAINTEGEREmpresa
NR_LANCCAIXAINTEGERSequencial do lançamento de caixa (PK)
TP_MOVTOCAIXACHAR(1)'R'=Recebimento, 'P'=Pagamento
DT_LANCAMENTODATEData do movimento
VL_DOCUMENTONUMERIC(15,2)Valor liquidado neste movimento
ST_ESTORNOCHAR(1)'N'=Normal, 'S'=Estornado
CD_EMPRCONTAS + NR_LANCAMENTO + ...FKTítulo liquidado (FK → CONTAS)
NR_PROCESSOINTEGERLote de baixas (FK → PROCESSO)
NR_CONTROLEINTEGERTurno de caixa (FK → CAIXA)
VL_TROCONUMERIC(15,2)Troco devolvido
CD_BANCO, CD_AGENCIA, NR_CONTACOR—Dados bancários
CD_USUARIOESTORNOVARCHAR(5)Usuário que estornou
DS_MOTIVOESTORNOVARCHAR(240)Motivo do estorno
DT_ESTORNODATEData do estorno

MOVTOPROCESSO — Detalhe de Encargos por Baixa​

CampoTipoDescrição
NR_PROCESSOINTEGERLote da baixa (FK → PROCESSO)
CD_HISTORICOINTEGERCentro de custo / histórico contábil
VL_DOCUMENTONUMERIC(15,2)Principal baixado
VL_JURONUMERIC(15,2)Juros cobrados
VL_DESCONTONUMERIC(15,2)Desconto/abatimento concedido

Uso: discrimina, por título, quanto foi principal, juros e desconto em cada baixa. Permite relatórios analíticos de mora.


BOLETO — Configuração de Carteira Bancária​

DDL: docs/schema/tables/BOLETO.sql Chave: (CD_EMPRESA, CD_BANCO, CD_AGENCIA, CD_FORMAPAGTO)

CampoTipoDescrição
TP_BOLETOCHAR(1)'R'=Remessa CNAB, 'I'=Impresso, 'T'=Boleto Impresso com Remessa, 'G'=Gerar remessa e imprimir, 'V'=Remessa vendor
CD_CARTEIRAVARCHAR(5)Código da carteira no banco
CD_CONVENIOVARCHAR(25)Convênio bancário
PC_JUROSMORANUMERIC(3,2)% mensal de juros de mora
PC_MULTANUMERIC(3,2)% de multa por atraso
TP_MULTACHAR(1)'P'=Percentual, 'F'=Fixo
NR_DIASPROTESTOINTEGERDias após vencimento para protestar
ST_BAIXARETORNOCHAR(1)'S' = baixa automática no retorno bancário
ST_APIBOLETOSVARCHAR(2)'N'=Cobrança CNAB, 'PJ'=API PJBank, 'PX'=Cobrança PIX, 'AC'=Cobrança via API
PC_DESCONTOANTECIPADONUMERIC(3,2)Desconto para pagamento antecipado

JURO — Tabela de Encargos​

DDL: docs/schema/tables/JURO.sql

CampoTipoDescrição
DS_JUROVARCHAR(60)Descrição
TP_JUROCHAR(1)'F'=Fator fixo, 'T'=Taxa mensal simples, 'S'=Simples dia a dia, 'C'=Composto dia a dia
PC_JURONUMERIC(3,2)% mensal de juros
PC_MULTANUMERIC(3,2)% de multa fixa
VL_MULTAMORANUMERIC(15,2)Valor fixo de multa
NR_TOLERANCIAINTEGERDias de carência antes de calcular
VL_FATORNUMERIC(15,4)Fator de indexação (SELIC, CDI...)

REPARCELAMENTO — Acordo de Renegociação​

DDL: docs/schema/tables/REPARCELAMENTO.sql

CampoTipoDescrição
NR_REPARCELAMENTOINTEGERNúmero do acordo (PK)
DT_REPARCELAMENTODATEData do acordo
CD_PESSOAINTEGERCliente
ST_REPARCELAMENTOCHAR(1)'V'=Válido, 'C'=Cancelado
VL_CAPITALIZADONUMERIC(15,2)Juros capitalizados ao saldo
VL_AMORTIZADONUMERIC(15,2)Amortização concedida
VL_MORANUMERIC(15,2)Juros acumulados até a data

Tabelas satélite:

  • ORIGEMREPARCELAMENTO — títulos originais que foram encerrados
  • DESTINOREPARCELAMENTO — novos títulos gerados pelo acordo

CONTASHISTORICO — Rateio por Centro de Custo​

DDL: docs/schema/tables/CONTASHISTORICO.sql

CampoTipoDescrição
CD_HISTORICOINTEGERCentro de custo / conta gerencial
VL_DOCUMENTONUMERIC(15,2)Valor rateado
ST_HISTORICOREPARCCHAR(1)Marcador de reparcelamento

CONTASJUNCAO — Agrupamento de Títulos​

DDL: docs/schema/tables/CONTASJUNCAO.sql Rastreia múltiplas notas agrupadas em um único boleto.


Stored Procedures​

GRAVA_CONTAS (32 KB)​

Scripts/GRAVA_CONTAS.sql

Entrada:
V_TP_LANCAMENTO — 'I' insert, 'A' atualiza
V_CD_EMPRESA
V_CD_PESSOA
V_CD_TIPOCONTA
V_NR_PARCELAS — quantidade de parcelas
V_CD_FORMAPAGTO
V_CD_CONDPAGTO
V_TP_CONTAS — 'S' receber, 'E' pagar
V_TP_DOCUMENTO — 'DP', 'NT', etc.
V_DT_VENCIMENTO
V_VL_DOCUMENTO
V_CD_VENDEDOR
V_NR_LANCTONOTA — vincula à NF de origem

Saída:
V_NR_LANCAMENTO — lançamento criado
V_DS_MENSAGEM — erro ou sucesso

Lógica:

  1. Busca número de controle em PARMSALDO
  2. Gera NR_PARCELA 1..N conforme CONDPAGTO
  3. Calcula datas via PARCELA_FINANCIAMENTO
  4. Insere em CONTAS + CONTASHISTORICO (rateio por centro de custo)
  5. Valida tolerância de juro (JURO.NR_TOLERANCIA)

CALCULA_JUROMORA​

Scripts/CALCULA_JUROMORA.sql

Entrada:
I_CD_EMPRESA, I_NR_LANCAMENTO, I_CD_PESSOA,
I_CD_TIPOCONTA, I_NR_PARCELA
I_DT_PAGAMENTO — data simulada de pagamento
I_PC_JURO — % de juro (opcional, usa CONTAS.CD_JURO se nulo)

Saída:
O_VL_JURO — valor dos juros
O_PC_JURO — % efetivo aplicado

Tipos de juro (TP_JURO em JURO):

TipoFórmula
F (Fator fixo)VL_SALDO × PC_JURO / 100
T (Taxa mensal)VL_SALDO × (PC_JURO/30/100) × NR_DIAS
S (Simples dia a dia)Igual a T, sem capitalização
C (Composto dia a dia)VL_SALDO × (1 + PC_JURO/30/100)^NR_DIAS − VL_SALDO

Carência: DT_VENCIMENTO + NR_TOLERANCIA < DT_PAGAMENTO para calcular.


PROCESSA_REPARCELAMENTO (19 KB)​

Scripts/PROCESSA_REPARCELAMENTO.sql

O que faz:

  1. Lê cabeçalho do REPARCELAMENTO
  2. Baixa títulos originais (ST_CONTAS = 'C') em ORIGEMREPARCELAMENTO
  3. Cria novos títulos em DESTINOREPARCELAMENTO (novos lançamentos em CONTAS)
  4. Rateia CONTASHISTORICO da origem para o destino
  5. Contabiliza se ST_INTEGRACAO = 'S'

Outras Procedures​

ProcedureAção
RETORNA_SALDOCONTAFINANCJUROS (37 KB)Calcula saldo com juros simulados em data
CANCELA_CONTAS (19 KB)Cancela/descancela título
GERA_JUNCAOCONTAS (9 KB)Agrupa títulos em boleto único
RETORNA_BAIXACONTAS (2.3 KB)Busca conta para baixa
CONTABILIZA_REPARCELAMENTO (19 KB)Contabiliza renegociação

Parâmetros (PARMFINANC)​

DDL: docs/schema/tables/PARMFINANC.sql

ParâmetroTipoEfeito
ST_ESTORNOS/N'S' = permite estornar baixas já realizadas
ST_MOVTOCAIXAS/N'S' = gera MOVTOCAIXA automaticamente ao baixar
ST_COMPENSACAOFINANCS/N'S' = permite compensar CR × CP do mesmo cliente
ST_AGRUPACONTAS/N'S' = permite agrupar títulos em boleto único
PC_DESCONTOANTECIPADONUMERIC% de desconto padrão para pagamento antecipado
CD_HISTJUROINTEGERHistórico contábil para juro financeiro
CD_HISTJUROMORAINTEGERHistórico para juro de mora
CD_HISTREPARCELAMENTOINTEGERHistórico para reparcelamento
TP_CONTASVENDEDOR—'0'=vê todas, '1'=vê só as suas
ST_PROTESTOBOLETOS/NAtiva protesto automático após BOLETO.NR_DIASPROTESTO

Bancos Suportados (jBoleto)​

ArquivoBanco
JunCob001.pasBanco do Brasil
JunCob004.pasCaixa Econômica Federal
JunCob033.pasSantander
JunCob041.pasBanrisul
JunCob104.pasItaú
JunCob133.pasSafra
JunCob136.pasBradesco
JunCob208.pasBTG Pactual
JunCob237.pasBradesco Expresso
JunCob341.pasItaú Shopline
+ outros~40 bancos no total

Cada driver implementa:

  • Geração de remessa CNAB 240/400
  • Parse de retorno bancário
  • Cálculo de nosso número e dígito verificador

Estados e Transições (ST_CONTAS)​

INSERT (GRAVA_CONTAS)
│
▼
'T' Pendente Total
(VL_SALDO = VL_DOCUMENTO)
│
├─ Baixa parcial ──────────────► 'P' Pago Parcial
│ (VL_SALDO > 0) │
│ │ Baixa do restante
│ ▼
├─ Baixa total ────────────────► 'L' Liquidada
│ (VL_SALDO = 0) (DT_LIQUIDACAO = hoje)
│
├─ Cancelamento ───────────────► 'C' Cancelada
│ (CANCELA_CONTAS) (VL_SALDO zerado logicamente)
│
└─ Agrupamento ────────────────► 'A' Agrupada
(GERA_JUNCAOCONTAS) (rastreado em CONTASJUNCAO)

Fluxo Completo — Contas a Receber​

┌───────────────────────────────────────────────────────┐
│ 1. LANÇAMENTO │
│ GRAVA_CONTAS (chamada por GERA_NOTAPEDIDO ou manual) │
│ → INSERT CONTAS (TP_CONTAS='S', ST_CONTAS='T') │
│ → INSERT CONTASHISTORICO (rateio centro de custo) │
└──────────────────────────┬────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────┐
│ 2. GERAÇÃO DE BOLETO (MFC033 e MFC011) │
│ → BOLETO (carteira, % juro, % multa, prazo protesto) │
│ → Se ST_APIBOLETOS='AC' (API): │
│ Chama API bancária → retorna NR_NOSSONUMEROAPI │
│ CONTAS.ST_BOLETO := 'R' │
│ CONTAS.DS_LINKBOLETO := URL do PDF │
│ CONTAS.CD_PIX := Referência ao QrCode do Pix │
│ → Se ST_APIBOLETOS='PJ' (API PJBank): │
│ Chama API PJBank → retorna NR_NOSSONUMEROAPI │
│ CONTAS.ST_BOLETO := 'R' │
│ CONTAS.DS_LINKBOLETO := URL do PDF │
│ CONTAS.DS_LINKGRUPO := URL dos PDFs da Cobrança │
│ → Se ST_APIBOLETOS='PX' (Cobrança Pix): │
│ Chama JunsoftPIX → retorna NR_NOSSONUMEROAPI │
│ CONTAS.ST_BOLETO := 'R' │
│ CONTAS.DS_LINKBOLETO := Pix Copia e Cola │
│ CONTAS.CD_PIX := Referência ao QrCode do Pix │
│ → Se ST_APIBOLETOS='N' (Remessa): │
│ Gera arquivo CNAB 240/400 via JunCob*.pas │
│ CONTAS.ST_BOLETO := 'I' (impresso) │
└──────────────────────────┬────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────┐
│ 3. RETORNO BANCÁRIO │
│ (MFC011) │
│ → Parse do arquivo de retorno via JunCob*.pas │
│ → Identifica SeuNumero (CD_EMPRESA + NR_BOLETO) │
│ → localiza CONTAS │
│ → CONTAS.ST_BOLETO := 'D' (descontado/confirmado) │
│ → Se ST_BAIXARETORNO='S': │
│ → Liquidação automática do título │
│ (JunsoftAPIBoletos) │
│ → Pesquisa no WS: boletos liquidados no dia │
│ → Identifica SeuNumero (CD_EMPRESA + NR_BOLETO) │
│ → localiza CONTAS │
│ → Liquida o título automaticamente │
└──────────────────────────┬────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────┐
│ 4. BAIXA / LIQUIDAÇÃO (MFC004) │
│ → Seleciona títulos (ST_CONTAS IN ('T','P')) │
│ → Se atrasado: CALCULA_JUROMORA → exibe encargos │
│ → Usuário confirma valor + juros + desconto │
│ → INSERT MOVTOCAIXA (trilha de auditoria) │
│ → INSERT MOVTOPROCESSO (principal + juro + desconto) │
│ → CONTAS.VL_SALDO -= VL_BAIXADO │
│ → Se VL_SALDO = 0: │
│ CONTAS.ST_CONTAS := 'L' │
│ CONTAS.DT_LIQUIDACAO := hoje │
│ → Se VL_SALDO > 0: │
│ CONTAS.ST_CONTAS := 'P' │
└──────────────────────────┬────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────┐
│ 5. REPARCELAMENTO (MFC019) — para contas vencidas │
│ → INSERT REPARCELAMENTO (cabeçalho do acordo) │
│ → INSERT ORIGEMREPARCELAMENTO (títulos originais) │
│ ST_CONTAS := 'C' nos originais │
│ → PROCESSA_REPARCELAMENTO │
│ → Cria novos títulos em CONTAS │
│ → INSERT DESTINOREPARCELAMENTO │
│ → Novas parcelas: TP_DOCUMENTO='RP' │
└───────────────────────────────────────────────────────┘

Queries de Referência​

-- Títulos em aberto por cliente
SELECT C.CD_PESSOA, P.NM_PESSOA, SUM(C.VL_SALDO) AS VL_TOTAL
FROM CONTAS C
INNER JOIN PESSOA P ON P.CD_PESSOA = C.CD_PESSOA
WHERE C.TP_CONTAS = 'S'
AND C.ST_CONTAS IN ('T', 'P')
AND C.ST_INCOBRAVEL = 'N'
GROUP BY C.CD_PESSOA, P.NM_PESSOA
ORDER BY VL_TOTAL DESC

-- Títulos vencidos (inadimplência)
SELECT C.*, P.NM_PESSOA,
CURRENT_DATE - C.DT_VENCIMENTO AS NR_DIASATRASO
FROM CONTAS C
INNER JOIN PESSOA P ON P.CD_PESSOA = C.CD_PESSOA
WHERE C.TP_CONTAS = 'S'
AND C.ST_CONTAS IN ('T', 'P')
AND C.DT_VENCIMENTO < CURRENT_DATE
AND C.ST_INCOBRAVEL = 'N'
ORDER BY NR_DIASATRASO DESC

Influências em Outros Módulos​

→ Emissão NF-e​

  • NF autorizada chama GRAVA_CONTAS via GERA_NOTAPEDIDO
  • CONTASPEDIDO vincula título ao pedido e à NF de origem

→ Caixa e PDV​

  • Baixa de título no caixa gera MOVTOCAIXA vinculado ao turno CAIXA

→ Pedido de Venda​

  • CONTASPEDIDO permite rastrear de qual pedido veio cada duplicata
  • Saldo de crédito do cliente impacta aprovação de novos pedidos

→ APIs Java​

  • MCP: consultar_contas_a_receber, detalhar_titulos_pessoa
  • MCP: calcular_juros_multa, simular_reparcelamento
  • MCP: listar_contas_reparcelaveis, consultar_boletos_a_receber_por_vendedor