Pular para o conteúdo principal

Rotina: Caixa e PDV

Abertura/fechamento de caixa, recebimentos, TEF (cartões), PIX, cupom fiscal e conciliação.


Módulos Delphi​

ArquivoPapel
source/jCaixa/UCaixa.pasForm principal de recebimentos/pagamentos
source/jCaixa/UdmCaixa.pasDataModule — queries e lógica
source/jCaixa/UformPIX.pasForm de integração PIX
source/JunsoftTEF/EsTEF.pasDataModule de integração TEF (TdmTEF)
source/JunsoftTEF/esTEFClasses.pasClasses de domínio TEF
source/JunsoftPix/UdmControle.pasDataModule central PIX
source/JunsoftPix/UPixUtils.pasUtilitários PIX

Tabelas do Banco de Dados​

CAIXA — Turno de Caixa​

DDL: docs/schema/tables/CAIXA.sql

CampoTipoDescrição
CD_EMPRESAINTEGEREmpresa
CD_USUARIOVARCHAR(5)Operador (PK composta)
NR_CONTROLEINTEGERNúmero do turno (PK sequencial)
DT_ABERTURATIMESTAMPInício do turno
DT_FECHAMENTOTIMESTAMPFim do turno (NULL = caixa aberto)
VL_ABERTURANUMERIC(15,2)Valor inicial informado
VL_FECHAMENTONUMERIC(15,2)Valor final conferido
VL_MOVIMENTONUMERIC(15,2)Total movimentado no turno
DT_REGISTROTIMESTAMPAuditoria

Regra: DT_FECHAMENTO IS NULL = caixa ativo no momento.


MOVTOCAIXA — Lançamentos do Caixa​

DDL: docs/schema/tables/MOVTOCAIXA.sql

Registra cada movimento: recebimento, pagamento, sangria, suprimento.

CampoTipoDescrição
NR_LANCCAIXAINTEGERSequencial (PK)
TP_MOVTOCAIXACHAR(1)'R'=Recebimento, 'P'=Pagamento
DT_LANCAMENTODATEData do movimento
VL_DOCUMENTONUMERIC(15,2)Valor movimentado
ST_ESTORNOCHAR(1)'N'=Normal, 'S'=Estornado
ST_TRANSFERENCIACHAR(1)'S'=Transferência interna, 'N'=Externa
NR_CONTROLEINTEGERTurno de caixa (FK → CAIXA)
NR_PROCESSOINTEGERLote de baixa (FK → PROCESSO)
CD_EMPRCONTAS + NR_LANCAMENTO + ...FKTítulo liquidado (FK → CONTAS)
CD_FORMAPAGTOVARCHAR(2)Forma de pagamento
VL_TROCONUMERIC(15,2)Troco devolvido
CD_BANCO, CD_AGENCIA, NR_CONTACOR—Dados bancários
CD_USUARIOESTORNOVARCHAR(5)Quem estornou
DS_MOTIVOESTORNOVARCHAR(240)Motivo do estorno
DT_ESTORNODATEData do estorno

FORMAPAGTO — Meios de Pagamento​

DDL: docs/schema/tables/FORMAPAGTO.sql

CampoTipoDescrição
CD_FORMAPAGTOVARCHAR(2)Código (PK)
DS_FORMAPAGTOVARCHAR(60)Descrição
TP_PAGTCUPOMVARCHAR(2)Código fiscal SEFAZ: '01'=Dinheiro, '02'=Cheque, '03'=Cartão, '15'=PIX
ST_BLOQUEIOCHAR(1)'S' = forma bloqueada
CD_CONTAPADRAOINTEGERConta contábil padrão

CUPOMFISCAL — Cupons ECF/SAT/NFC-e​

DDL: docs/schema/tables/CUPOMFISCAL.sql

CampoTipoDescrição
NR_SERIEVARCHAR(25)Série do equipamento
NR_EQUIPAMENTOVARCHAR(4)ID do terminal ECF/SAT
CD_MODELOVARCHAR(4)'ECF', 'SAT', 'NFCE'
DT_EMISSAODATEData de emissão
NR_REDUCAOINTEGERNúmero de redução Z
NR_OPERACAOINTEGERSequência da operação
VL_VENDABRUTANUMERIC(15,2)Valor bruto da venda
VL_TOTALGERALNUMERIC(15,2)Total geral do cupom
VL_TRIBUTACAONUMERIC(15,2)Total tributado

TEF — Transações de Cartão​

DDL: docs/schema/tables/TEF.sql

CampoTipoDescrição
IDINTEGERPK
NRNSUVARCHAR(150)NSU da transação
NMREDEVARCHAR(32)Rede (Visa, Mastercard, Elo, Hipercard...)
TPTRANSACAOINTEGER1=Débito, 2=Crédito à vista, 3=Crédito parcelado
NRPARCELASINTEGERNúmero de parcelas
CDAUTTRANSACAOVARCHAR(150)Código de autorização
VL_TRANSACAONUMERIC(15,2)Valor
DHTRANSACAOTIMESTAMPData/hora
CD_EMPRESA, NR_LANCTOCAIXAFKLançamento de caixa vinculado

PIX — Transações PIX​

DDL: docs/schema/tables/PIX.sql

CampoTipoDescrição
CD_PIXINTEGERPK
CD_EMPRESA, NR_LANCCAIXAFKLançamento de caixa
TP_INTEGRADORASMALLINTTipo de PSP/banco
ST_PIXSMALLINT1=Pendente, 2=Confirmado, 3=Cancelado
VL_TOTALNUMERIC(15,2)Valor
DT_PIXTIMESTAMPData/hora
NM_CARTEIRAVARCHAR(150)Nome do PSP (BB, Itaú, C6Bank...)
ORDERQRCODEVARCHAR(5000)QR Code dinâmico (Base64)
ORDERENDTOENDIDVARCHAR(150)ID End-to-End (rastreio Bacen)
ORDERID, ORDERREFVARCHARIdentificadores internos da integradora
CD_USUARIOESTORNOVARCHAR(5)Quem solicitou estorno
DS_MOTIVOESTORNOVARCHAR(240)Motivo
DT_ESTORNOTIMESTAMPData do estorno

⚠️ Problema conhecido: Sleep(5000) no loop de estorno PIX pode travar a UI por até 200s em caso de falha de rede.


Integração TEF (JunsoftTEF)​

Arquivo: source/JunsoftTEF/EsTEF.pas

Configuração (lida de JunsoftTEF.ini):

conf_TipoGP // Tipo de Gateway de Pagamento
conf_CodigoLoja // Código da loja
conf_NumeroTerminal // Número do terminal
conf_GPExeName // Caminho do programa do GP
conf_EnderecoIP // IP do servidor TEF
conf_EnderecoPorta // Porta
conf_CNPJ // CNPJ da empresa
conf_PINPAD // Modelo do pinpad
conf_IntervaloAposComando // ms de espera

Tipos de GP (Gateway de Pagamento) suportados:

TipoIntegrador
SiTefABECS — múltiplas adquirentes
CapptaCielo direta
EstabilPDVMulti-rede

Fluxo TEF:

1. Inicia pagamento: ACBrTEFD1 ou ACBrTEFAPI1
2. Envia valor + tipo ao terminal
3. Aguarda resposta do pinpad (cliente digita senha)
4. Retorna: NSU, NMREDE, CDAUTTRANSACAO, NRPARCELAS
5. INSERT TEF (vínculo com MOVTOCAIXA)
6. Se cancelamento pendente: tmrCapptaTimer (polling)

Integração PIX (JunsoftPix)​

Integradoras suportadas (em source/JunsoftPix/Integradoras/):

ArquivoPSP
UPSP_13Shipay.pasShipay
UPSP_13Matera.pasMatera
UPSP_14Cielo.pasCielo
UPSP_BB.pasBanco do Brasil
UPSP_15Banrisul.pasBanrisul
UPSP_16C6Bank.pasC6Bank
UPSP_Ailos.pasAilos

Cada integradora implementa:

  • Geração de QR Code dinâmico (POST /cobv)
  • Recebimento de callback (webhook de confirmação)
  • Consulta de status (GET /cobv/{txid})
  • Devolução/cancelamento (PUT /cobv)

Parâmetros (PARMFINANC)​

DDL: docs/schema/tables/PARMFINANC.sql

ParâmetroTipoEfeito
TP_ABERTURACHAR(1)'A'=Automática (sem digitar valor), 'M'=Manual, 'N'=Não usa caixa
ST_ABRECAIXAS/NHabilita módulo de caixa
ST_DIASCAIXAS/N'S' = fechamento de caixa respeita dias úteis
ST_VISUALIZARECIBOS/NMostra recibo ao finalizar baixa
CD_LAYCAIXAVARCHAR(6)Layout de impressão de recibos
ST_MOVTOCAIXAS/NGera MOVTOCAIXA automaticamente ao baixar título
ST_ESTORNOS/NPermite estornar lançamentos de caixa

Estados do PIX​

ST_PIX = 1 (Pendente)
→ QR Code gerado, aguardando pagamento do cliente
→ Sistema faz polling na integradora a cada N segundos
│
├── Cliente paga → Webhook/polling confirma
│ ST_PIX = 2 (Confirmado)
│ INSERT MOVTOCAIXA (efetiva o recebimento)
│ CONTAS.ST_CONTAS atualizado
│
└── Timeout ou cancelamento
ST_PIX = 3 (Cancelado)
Caixa reabre para outra forma de pagamento

Fluxo Completo — Abertura e Recebimento​

┌──────────────────────────────────────────────────────┐
│ 1. ABERTURA DE CAIXA │
│ UCaixa.btnAbrirClick │
│ INSERT CAIXA (DT_ABERTURA=NOW, DT_FECHAMENTO=NULL) │
│ Se TP_ABERTURA='M': usuário informa VL_ABERTURA │
│ INSERT MOVTOCAIXA (suprimento inicial) │
└─────────────────────────┬────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────┐
│ 2. RECEBIMENTO (UCaixa) │
│ Seleciona CD_PESSOA (cliente) e títulos │
│ Calcula juros: CALCULA_JUROMORA (se atrasado) │
│ │
│ Se CD_FORMAPAGTO = PIX: │
│ UformPIX.ShowModal │
│ Gera QR Code dinâmico (integradora) │
│ Poll até ST_PIX=2 (confirmado) │
│ INSERT PIX │
│ │
│ Se CD_FORMAPAGTO = CARTÃO: │
│ JunsoftTEF.IniciarPagamento(VL) │
│ Aguarda NSU + código autorização │
│ INSERT TEF │
│ │
│ Se CD_FORMAPAGTO = DINHEIRO: │
│ Calcula troco (VL_RECEBIDO - VL_TOTAL) │
│ VL_TROCO := troco │
│ │
│ INSERT MOVTOCAIXA │
│ Atualiza CONTAS.VL_SALDO / ST_CONTAS │
│ Se VL_SALDO=0: ST_CONTAS='L', DT_LIQUIDACAO=hoje │
└─────────────────────────┬────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────┐
│ 3. SANGRIA / SUPRIMENTO │
│ Sangria: INSERT MOVTOCAIXA (VL negativo) │
│ Suprimento: INSERT MOVTOCAIXA (VL positivo) │
│ Controle por limites configuráveis │
└─────────────────────────┬────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────┐
│ 4. FECHAMENTO DE CAIXA │
│ SUM(MOVTOCAIXA.VL_DOCUMENTO WHERE NR_CONTROLE=X) │
│ Usuário confere valores físicos │
│ CAIXA.DT_FECHAMENTO := NOW │
│ CAIXA.VL_FECHAMENTO := valor conferido │
│ Diferença registrada em MOVTOCAIXA se necessário │
└──────────────────────────────────────────────────────┘

Relatórios e Views​

Procedure/ViewUso
EXTRATO_CAIXAExtrato de movimentação de conta em período
VIEW_FLUXOCAIXAProjeção de entradas e saídas futuras
VIEW_DIARIOCAIXAResumo diário por tipo de movimento
VIEW_DEMONSTRATIVOCAIXAAnalítico de caixa

Influências em Outros Módulos​

→ Contas a Receber​

  • Recebimento no caixa baixa título via MOVTOCAIXA → atualiza CONTAS.VL_SALDO
  • Encargos calculados: CALCULA_JUROMORA → MOVTOPROCESSO.VL_JURO

→ Contas a Pagar​

  • Pagamentos a fornecedores: MOVTOCAIXA (TP='P')

→ Emissão NF-e​

  • PDV emite NFC-e (modelo 65) ou SAT-CFe vinculado ao cupom
  • CUPOMFISCAL registra cada cupom emitido

→ jCaixa​

  • Toda a lógica de recebimento é encapsulada em jCaixa (UCaixa, UdmCaixa, UformPIX)