Por que SE1 e SE2 sao tabelas separadas?

A historia tecnica e de negocio por tras da separacao de Contas a Receber (SE1) e Contas a Pagar (SE2) no Protheus.

Toda vez que dev novo em Protheus pergunta "por que financeiro tem 2 tabelas iguais?", a resposta tradicional e "porque sempre foi assim". A resposta real e mais interessante.

Contexto historico

O Protheus nasceu nos anos 90, em DBF (xBase). Naquela epoca, regras importantes:

Decisao tecnica

Receber e Pagar tem regras DIFERENTES:

Compartilham conceitos (parcela, vencimento, baixa), mas campos especificos divergem. Tentar unificar exigiria 50% mais colunas com NULL pra metade dos registros — desperdiciava espaco e atrapalhava queries.

Consequencias hoje

Mesmo no SQL moderno, a separacao trouxe vantagens permanentes:

O preco

Voce paga em consistencia de modelo: todo dev novo precisa aprender 2 schemas quase iguais. Funcoes como SaldoTit e SomaAbat tem que ser chamadas separadamente pra cada uma. Codigo duplica.

Foi um trade-off da epoca que ficou na pedra. Em ERPs modernos (SAP, Oracle), tudo e BSEG ou AP_INVOICES + tipo. Mas mexer no Protheus exigiria refator de milhares de pontos.

Curiosidade: outras tabelas em par

Mesma logica em:

Veja também