Rotina: Contas a Receber
Ciclo completo de lançamento, boleto, retorno bancário, baixa, reparcelamento e encargos por atraso.
Módulos Delphi
| Módulo | Papel |
|---|---|
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.pas | Compensação crédito/débito |
source/jFinanceiro/UProvisao.pas | PDD (Provisão para Devedores Duvidosos) |
source/jBoleto/JunCob*.pas | Drivers 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)
| Campo | Tipo | Descrição |
|---|---|---|
| TP_CONTAS | CHAR(1) | 'S'=Receber (entrada), 'E'=Pagar (saída) |
| ST_CONTAS | CHAR(1) | 'T'=Pendente total, 'P'=Pago parcial, 'L'=Liquidada, 'C'=Cancelada, 'A'=Agrupada |
| VL_DOCUMENTO | NUMERIC(15,2) | Valor nominal original (imutável) |
| VL_SALDO | NUMERIC(15,2) | Saldo residual (decrementado a cada baixa) |
| DT_VENCIMENTO | DATE | Vencimento sem encargos |
| DT_LANCAMENTO | DATE | Data de criação do título |
| DT_LIQUIDACAO | DATE | Data em que VL_SALDO chegou a zero |
| TP_DOCUMENTO | VARCHAR(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_TIPOCONTA | INTEGER | Tipo (Boleto, Cheque, Provisão, Cartão, etc.) |
| CD_JURO | INTEGER | Tabela de encargos (FK → JURO) |
| CD_FORMAPAGTO | VARCHAR(2) | Forma de pagamento |
| CD_CONDPAGTO | INTEGER | Condição de pagamento de origem |
| CD_VENDEDOR | INTEGER | Vendedor responsável (para comissão) |
| NR_LANCTONOTA | INTEGER | Lançamento da NF de origem |
| NR_PARCELACONTA | INTEGER | Parcela (1, 2, 3...) |
| NR_BOLETO | INTEGER | Número sequencial do Boleto |
| ST_BOLETO | CHAR(1) | 'N'=Não gerado, 'I'=Impresso, 'R'=Registrado, 'D'=Descontado, 'A'=Finalizado/Retorno Confirmado |
| NR_NOSSONUMEROAPI | VARCHAR(54) | Nosso número retornado pelo banco (API) |
| DS_LINKBOLETO | VARCHAR(500) | URL do PDF do boleto |
| DS_LINHADIGITAVEL | VARCHAR(100) | Linha digitável da cobrança via API |
| DS_CODIGOBARRA | VARCHAR(100) | Código de barras da cobrança via API |
| CD_PIX | INTEGER | Número sequencial da tabela PIX. Quando preenchido, a cobrança tem um QR Code do tipo PIX associado |
| NR_REMESSA | INTEGER | Número sequencial do arquivo de Remessa da cobrança via CNAB |
| NR_DEBITOAUTOMATICO | INTEGER | Número sequencial do boleto para pagamento |
| DS_LINHADIGITAVELBOLPAGTO | VARCHAR(100) | Linha Digitável do boleto para pagamento |
| ST_REMESSAPAGTO | CHAR(1) | 'N'=Sem Remessa de Pagamento, 'S'=Gerado Remessa de Pagamento |
| ST_CARTORIO | CHAR(1) | 'N'=Normal, 'C'=Em cartório, 'S'=Protestado, 'J'=Jurídico |
| ST_INCOBRAVEL | CHAR(1) | 'N'=Cobrável, 'S'=Perda reconhecida (PDD) |
| NR_AGRUPCONTAS | INTEGER | Agrupa os títulos selecionados na tela MNF029 (Gerenciamento de contas de contratos) |
| PC_COMISSAO | NUMERIC(3,2) | % comissão do vendedor |
| CD_USUARIO | VARCHAR(5) | Usuário que criou |
| DT_REGISTRO | TIMESTAMP | Auditoria de criação |
Regra crítica: sempre filtrar
ST_CONTAS <> 'C'eST_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.
| Campo | Tipo | Descrição |
|---|---|---|
| CD_EMPRESA | INTEGER | Empresa |
| NR_LANCCAIXA | INTEGER | Sequencial do lançamento de caixa (PK) |
| TP_MOVTOCAIXA | CHAR(1) | 'R'=Recebimento, 'P'=Pagamento |
| DT_LANCAMENTO | DATE | Data do movimento |
| VL_DOCUMENTO | NUMERIC(15,2) | Valor liquidado neste movimento |
| ST_ESTORNO | CHAR(1) | 'N'=Normal, 'S'=Estornado |
| CD_EMPRCONTAS + NR_LANCAMENTO + ... | FK | Título liquidado (FK → CONTAS) |
| NR_PROCESSO | INTEGER | Lote de baixas (FK → PROCESSO) |
| NR_CONTROLE | INTEGER | Turno de caixa (FK → CAIXA) |
| VL_TROCO | NUMERIC(15,2) | Troco devolvido |
| CD_BANCO, CD_AGENCIA, NR_CONTACOR | — | Dados bancários |
| CD_USUARIOESTORNO | VARCHAR(5) | Usuário que estornou |
| DS_MOTIVOESTORNO | VARCHAR(240) | Motivo do estorno |
| DT_ESTORNO | DATE | Data do estorno |
MOVTOPROCESSO — Detalhe de Encargos por Baixa
| Campo | Tipo | Descrição |
|---|---|---|
| NR_PROCESSO | INTEGER | Lote da baixa (FK → PROCESSO) |
| CD_HISTORICO | INTEGER | Centro de custo / histórico contábil |
| VL_DOCUMENTO | NUMERIC(15,2) | Principal baixado |
| VL_JURO | NUMERIC(15,2) | Juros cobrados |
| VL_DESCONTO | NUMERIC(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)
| Campo | Tipo | Descrição |
|---|---|---|
| TP_BOLETO | CHAR(1) | 'R'=Remessa CNAB, 'I'=Impresso, 'T'=Boleto Impresso com Remessa, 'G'=Gerar remessa e imprimir, 'V'=Remessa vendor |
| CD_CARTEIRA | VARCHAR(5) | Código da carteira no banco |
| CD_CONVENIO | VARCHAR(25) | Convênio bancário |
| PC_JUROSMORA | NUMERIC(3,2) | % mensal de juros de mora |
| PC_MULTA | NUMERIC(3,2) | % de multa por atraso |
| TP_MULTA | CHAR(1) | 'P'=Percentual, 'F'=Fixo |
| NR_DIASPROTESTO | INTEGER | Dias após vencimento para protestar |
| ST_BAIXARETORNO | CHAR(1) | 'S' = baixa automática no retorno bancário |
| ST_APIBOLETOS | VARCHAR(2) | 'N'=Cobrança CNAB, 'PJ'=API PJBank, 'PX'=Cobrança PIX, 'AC'=Cobrança via API |
| PC_DESCONTOANTECIPADO | NUMERIC(3,2) | Desconto para pagamento antecipado |
JURO — Tabela de Encargos
DDL: docs/schema/tables/JURO.sql
| Campo | Tipo | Descrição |
|---|---|---|
| DS_JURO | VARCHAR(60) | Descrição |
| TP_JURO | CHAR(1) | 'F'=Fator fixo, 'T'=Taxa mensal simples, 'S'=Simples dia a dia, 'C'=Composto dia a dia |
| PC_JURO | NUMERIC(3,2) | % mensal de juros |
| PC_MULTA | NUMERIC(3,2) | % de multa fixa |
| VL_MULTAMORA | NUMERIC(15,2) | Valor fixo de multa |
| NR_TOLERANCIA | INTEGER | Dias de carência antes de calcular |
| VL_FATOR | NUMERIC(15,4) | Fator de indexação (SELIC, CDI...) |
REPARCELAMENTO — Acordo de Renegociação
DDL: docs/schema/tables/REPARCELAMENTO.sql
| Campo | Tipo | Descrição |
|---|---|---|
| NR_REPARCELAMENTO | INTEGER | Número do acordo (PK) |
| DT_REPARCELAMENTO | DATE | Data do acordo |
| CD_PESSOA | INTEGER | Cliente |
| ST_REPARCELAMENTO | CHAR(1) | 'V'=Válido, 'C'=Cancelado |
| VL_CAPITALIZADO | NUMERIC(15,2) | Juros capitalizados ao saldo |
| VL_AMORTIZADO | NUMERIC(15,2) | Amortização concedida |
| VL_MORA | NUMERIC(15,2) | Juros acumulados até a data |
Tabelas satélite:
ORIGEMREPARCELAMENTO— títulos originais que foram encerradosDESTINOREPARCELAMENTO— novos títulos gerados pelo acordo
CONTASHISTORICO — Rateio por Centro de Custo
DDL: docs/schema/tables/CONTASHISTORICO.sql
| Campo | Tipo | Descrição |
|---|---|---|
| CD_HISTORICO | INTEGER | Centro de custo / conta gerencial |
| VL_DOCUMENTO | NUMERIC(15,2) | Valor rateado |
| ST_HISTORICOREPARC | CHAR(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:
- Busca número de controle em PARMSALDO
- Gera NR_PARCELA 1..N conforme CONDPAGTO
- Calcula datas via
PARCELA_FINANCIAMENTO - Insere em CONTAS + CONTASHISTORICO (rateio por centro de custo)
- 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):
| Tipo | Fó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:
- Lê cabeçalho do REPARCELAMENTO
- Baixa títulos originais (
ST_CONTAS = 'C') em ORIGEMREPARCELAMENTO - Cria novos títulos em DESTINOREPARCELAMENTO (novos lançamentos em CONTAS)
- Rateia CONTASHISTORICO da origem para o destino
- Contabiliza se
ST_INTEGRACAO = 'S'
Outras Procedures
| Procedure | Açã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âmetro | Tipo | Efeito |
|---|---|---|
ST_ESTORNO | S/N | 'S' = permite estornar baixas já realizadas |
ST_MOVTOCAIXA | S/N | 'S' = gera MOVTOCAIXA automaticamente ao baixar |
ST_COMPENSACAOFINANC | S/N | 'S' = permite compensar CR × CP do mesmo cliente |
ST_AGRUPACONTA | S/N | 'S' = permite agrupar títulos em boleto único |
PC_DESCONTOANTECIPADO | NUMERIC | % de desconto padrão para pagamento antecipado |
CD_HISTJURO | INTEGER | Histórico contábil para juro financeiro |
CD_HISTJUROMORA | INTEGER | Histórico para juro de mora |
CD_HISTREPARCELAMENTO | INTEGER | Histórico para reparcelamento |
TP_CONTASVENDEDOR | — | '0'=vê todas, '1'=vê só as suas |
ST_PROTESTOBOLETO | S/N | Ativa protesto automático após BOLETO.NR_DIASPROTESTO |
Bancos Suportados (jBoleto)
| Arquivo | Banco |
|---|---|
JunCob001.pas | Banco do Brasil |
JunCob004.pas | Caixa Econômica Federal |
JunCob033.pas | Santander |
JunCob041.pas | Banrisul |
JunCob104.pas | Itaú |
JunCob133.pas | Safra |
JunCob136.pas | Bradesco |
JunCob208.pas | BTG Pactual |
JunCob237.pas | Bradesco Expresso |
JunCob341.pas | Itaú 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