Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

466
Vistas
Libro mayor de contabilidad SQL básico de doble entrada: cómo dividir las entradas del diario

Usando el esquema SQL básico de este Gist: https://gist.github.com/NYKevin/9433376 , ¿cómo se haría para crear entradas de diario divididas?

Entiendo por qué la tabla de entries tiene un solo monto con punteros a las cuentas que se acreditarán/débitarán; esto obliga a que la entrada doble sea consistente y facilita el cálculo de los saldos.

Pero esto parece hacer imposible hacer asientos de diario divididos. Un ejemplo simple sería contabilizar el IVA en una compra de £ 1200:

 1. Credit "Creditors control" account with £1200 2. Debit "VAT" account with £200 3. Debit "Purchases" account with £1000

Un ejemplo mucho más complejo sería la nómina, donde hay un cargo a gastos de salarios, otro débito a gastos de impuestos de nómina y créditos a efectivo y una variedad de cuentas de deducción.

¿Este esquema SQL es inadecuado para estos propósitos, o hay alguna forma de hacerlo con el SQL de Gist?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tiene razón, el esquema de ejemplo en su esencia hace que sea imposible dividir las entradas del diario.

Lo que necesita es un esquema que tenga una fila por entrada de diario individual. Este es un diseño más flexible que se adaptará a los escenarios complejos que está buscando.

Ejemplo

Esquema

Sugeriría un mínimo de tres tablas para cumplir con sus requisitos:

 CREATE TABLE account( account_id serial PRIMARY KEY, account_name text NOT NULL ); CREATE TABLE financial_transaction ( financial_transaction_id serial PRIMARY KEY, datetimestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, description text NOT NULL ); CREATE TABLE journal( journal_id serial PRIMARY KEY, financial_transaction_id INTEGER REFERENCES financial_transaction(financial_transaction_id), account_id INTEGER REFERENCES account(account_id), amount NUMERIC(20, 2) NOT NULL, is_credit boolean NOT NULL );

Configuracion de cuenta

Crearemos las tres cuentas para su ejemplo. Aunque es probable que no codifiques el id , lo hacemos aquí con fines de demostración.

 INSERT INTO account (account_id, account_name) VALUES (1, 'Creditors control'); INSERT INTO account (account_id, account_name) VALUES (2, 'VAT'); INSERT INTO account (account_id, account_name) VALUES (3, 'Purchases');

Ejemplo de transacción de compra

Cada transacción financial_transaction involucra exactamente una fila insertada en la tabla de transacciones_financieras y al menos dos filas insertadas en la tabla del journal , y la suma de los créditos y débitos de estas filas debe equilibrarse.

 INSERT INTO financial_transaction (financial_transaction_id, description) VALUES (1, 'Purchase of widget'); INSERT INTO journal (financial_transaction_id, account_id, amount, is_credit) VALUES (1, 1, 1200, TRUE); INSERT INTO journal (financial_transaction_id, account_id, amount, is_credit) VALUES (1, 2, 200, FALSE); INSERT INTO journal (financial_transaction_id, account_id, amount, is_credit) VALUES (1, 3, 1000, FALSE);

notas

Puede ver cómo los diarios divididos se pueden acomodar fácilmente con esta estructura. La estructura se puede consultar fácilmente y las transacciones o cuentas se pueden agregar para diferentes propósitos.

Si estuviera construyendo esto, probablemente crearía un activador para hacer cumplir que, al final de cualquier transacción, la suma de sus entradas de journal de crédito y débito se equilibre. También podría querer definir ciertos tipos de transacciones y qué tipos de cuentas se pueden registrar para esos tipos de transacciones, dependiendo de qué tan complejo o estricto sea mi sistema.

Finalmente, crearía una regla, activaría o configuraría permisos para garantizar que la fila en estas tablas no se elimine o actualice. En un sistema como este, todas las correcciones deben hacerse a través de transacciones adicionales.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda