Skip to content

Contabilidad Implicita

Zentto implementa un sistema de contabilidad implicita donde cada modulo auxiliar genera asientos contables automaticamente cuando se ejecutan operaciones de negocio. El usuario no necesita crear asientos manualmente para las operaciones rutinarias.

Toda operacion de negocio que tenga impacto financiero genera un asiento contable automaticamente, sin intervencion del usuario.

El patron se aplica de forma consistente en todos los modulos: ventas, compras, bancos, nomina, manufactura, flota, POS y restaurante.

La generacion de asientos usa el patron best-effort: nunca bloquea la operacion principal.

// Patron en el router de cada modulo
try {
// 1. Operacion principal (SIEMPRE se ejecuta)
const result = await svc.createSale(data);
// 2. Asiento contable (best-effort, NUNCA bloquea)
try {
await generateAccountingEntry(result);
} catch {
// Silencioso: la venta ya se registro correctamente
}
res.json(result);
} catch (err) {
res.status(500).json({ error: String(err) });
}

Esto garantiza:

  1. La operacion principal siempre se completa — una venta nunca falla por un error contable.
  2. El usuario no se bloquea — la experiencia es fluida incluso si hay un problema en contabilidad.
  3. Los errores se detectan despues — se pueden revisar asientos faltantes en auditoria.

Cada asiento contable generado automaticamente incluye campos que lo vinculan con su operacion origen:

CampoTablaDescripcion
SourceModuleacct.JournalEntryModulo que genero el asiento (ej: ventas, compras, bancos)
SourceDocumentNoacct.JournalEntryNumero del documento origen (ej: FAC-0001, NC-0003)

Estos campos se exponen en la API como origenModulo y origenDocumento, permitiendo filtrar asientos por su origen.

Las cuentas a debitar y acreditar se configuran en la tabla acct.AccountTemplate:

Plantilla: VENTA_FACTURA
Debito: 1.1.2.01 (Cuentas por Cobrar)
Credito: 4.1.1.01 (Ventas)
Credito: 2.1.4.01 (IVA por Pagar)

El administrador configura estas plantillas desde el modulo de contabilidad. Si no existe plantilla, el asiento no se genera (best-effort silencioso).

Trigger: Emision de factura de venta.

EventoDebitoCreditoorigenModulo
Factura emitidaCuentas por CobrarVentas + IVA por Pagarventas
Nota de creditoVentas + IVA por PagarCuentas por Cobrarventas
Cobro recibidoBanco/CajaCuentas por Cobrarventas
AnulacionReverso del asiento originalventas

Archivo: web/api/src/modules/documentos-venta/routes.ts

Trigger: Registro de factura de compra.

EventoDebitoCreditoorigenModulo
Compra registradaInventario/Gasto + IVA CreditoCuentas por Pagarcompras
Nota de credito proveedorCuentas por PagarInventario/Gastocompras
Pago emitidoCuentas por PagarBancocompras
AnulacionReverso del asiento originalcompras

Archivo: web/api/src/modules/documentos-compra/routes.ts

Trigger: Registro de movimiento bancario, conciliacion, cierre.

EventoDebitoCreditoorigenModulo
Deposito recibidoBancoCuenta contrapartidabancos
Cheque/transferencia emitidaCuenta contrapartidaBancobancos
Conciliacion (diferencia)AjusteBanco o viceversabancos
Gasto caja chicaGastoCaja Chicabancos

Archivos: web/api/src/modules/bancos/routes.ts, bancos-contabilidad.service.ts, conciliacion.service.ts, caja-chica.service.ts

Trigger: Cierre de caja, venta POS.

EventoDebitoCreditoorigenModulo
Venta POS efectivoCajaVentas + IVApos
Venta POS tarjetaBanco (tarjeta)Ventas + IVApos
Cierre de cajaBancoCajapos

Trigger: Cierre de orden, consumo de ingredientes.

EventoDebitoCreditoorigenModulo
Venta de ordenCaja/BancoVentasrestaurante
Consumo de ingredientesCosto de VentasInventario (MP)restaurante

Trigger: Procesamiento de nomina quincenal/mensual.

EventoDebitoCreditoorigenModulo
Nomina procesadaGasto de NominaNomina por Pagarnomina
Pago de nominaNomina por PagarBanconomina
PrestacionesGasto PrestacionesProvision Prestacionesnomina
Aportes patronalesGasto AportesAportes por Pagarnomina

Trigger: Liquidacion de prestaciones, vacaciones pagadas.

EventoDebitoCreditoorigenModulo
LiquidacionProvision PrestacionesBancorrhh
Vacaciones pagadasProvision VacacionesBancorrhh

Trigger: Completar orden de trabajo.

EventoDebitoCreditoorigenModulo
Consumo materialesProduccion en ProcesoInventario (MP)manufactura
Produccion terminadaInventario (PT)Produccion en Procesomanufactura
Mano de obraProduccion en ProcesoNomina por Pagarmanufactura
CIF (costos indirectos)Produccion en ProcesoCIF Aplicadosmanufactura

Archivos: web/api/src/modules/manufactura/routes.ts, mfg-integracion.service.ts

Trigger: Carga de combustible, mantenimiento completado.

EventoDebitoCreditoorigenModulo
CombustibleGasto CombustibleCaja/Bancoflota
Mantenimiento preventivoGasto MantenimientoCaja/Bancoflota
Mantenimiento correctivoGasto ReparacionesCaja/Bancoflota

La API permite filtrar asientos contables por su modulo de origen:

GET /v1/contabilidad/asientos?origenModulo=ventas
GET /v1/contabilidad/asientos?origenModulo=bancos
GET /v1/contabilidad/asientos?origenDocumento=FAC-0001

El SP usp_Acct_JournalEntry_List acepta el parametro p_origen_modulo para este filtrado.

ValorModulo origen
ventasDocumentos de venta, CxC
comprasDocumentos de compra, CxP
bancosMovimientos bancarios, conciliacion, caja chica
posPunto de venta
restauranteOrdenes de restaurante
nominaProcesamiento de nomina
rrhhLiquidaciones, vacaciones
manufacturaOrdenes de produccion
flotaCombustible, mantenimiento
inventarioAjustes de inventario
manualAsientos creados manualmente
CaracteristicaManualAutomatico
CreacionUsuario desde UISistema al ejecutar operacion
SourceModulemanualNombre del modulo
SourceDocumentNoNULL o referencia libreNumero del documento
EditableSi (antes de aprobar)No (solo anulable)
AprobacionRequiere aprobacionAprobado automaticamente
Operacion de negocio
|
v
[Ejecutar operacion principal]
|
+--> OK
| |
| v
| [Buscar plantilla contable]
| |
| +--> No existe plantilla
| | |
| | v
| | (Silencioso, no genera asiento)
| |
| +--> Plantilla encontrada
| |
| v
| [Generar asiento]
| |
| +--> OK: asiento registrado
| |
| +--> Error: silencioso (best-effort)
|
+--> Error en operacion principal
|
v
Retornar error al usuario