Saltar al contenido principal
Version: 0.54.0-rc.8

Integración con Cala Ledger

Este documento describe la integración con Cala Ledger para contabilidad por partida doble.

Descripción general

Cala Ledger proporciona:

  • Contabilidad por partida doble
  • Gestión de jerarquía de cuentas
  • Cálculo de saldos
  • Plantillas de transacciones

Arquitectura

Jerarquía de cuentas

Tipos de cuentas

CuentaTipoPropósito
EfectivoActivoEfectivo del banco
Préstamos por cobrarActivoPrincipal de préstamos pendientes
Depósitos de clientesPasivoSaldos de depósitos de clientes
Ingresos por interesesIngresosIntereses ganados
Gastos por interesesGastosIntereses pagados

Plantillas de transacciones

Registro de depósito

DÉBITO:  Efectivo (Activo)              $1,000
CRÉDITO: Depósito de cliente (Pasivo) $1,000

Desembolso de préstamo

DÉBITO:  Préstamos por cobrar (Activo)  $10,000
CRÉDITO: Efectivo (Activo) $10,000

Devengo de intereses

DÉBITO:  Intereses por cobrar (Activo)  $100
CRÉDITO: Ingresos por intereses (Ingresos) $100

Pago de préstamo

DÉBITO:  Efectivo (Activo)                    $500
CRÉDITO: Préstamos por cobrar (Activo) $400
CRÉDITO: Intereses por cobrar (Activo) $100

Adaptador de libro mayor

pub struct DepositLedger {
cala: CalaClient,
}

impl DepositLedger {
pub async fn record_deposit(
&self,
account_id: AccountId,
amount: UsdCents,
) -> Result<TransactionId> {
let entries = vec![
Entry::debit(self.cash_account, amount),
Entry::credit(account_id, amount),
];

self.cala.post_transaction(entries).await
}

pub async fn process_withdrawal(
&self,
account_id: AccountId,
amount: UsdCents,
) -> Result<TransactionId> {
let entries = vec![
Entry::debit(account_id, amount),
Entry::credit(self.cash_account, amount),
];

self.cala.post_transaction(entries).await
}
}

Consultas de Saldo

Saldo de Cuenta

pub async fn get_balance(&self, account_id: AccountId) -> Result<Balance> {
self.cala.get_balance(account_id).await
}

pub struct Balance {
pub settled: UsdCents,
pub pending: UsdCents,
pub available: UsdCents,
}

Balance de Comprobación

pub async fn trial_balance(&self, as_of: DateTime<Utc>) -> Result<TrialBalance> {
self.cala.trial_balance(as_of).await
}

Registro de Transacciones

Todas las transacciones se registran con:

  • ID de transacción único
  • Marca de tiempo
  • ID de correlación (para rastreo)
  • Descripción
  • Detalles de entrada

Garantías de Consistencia

  • Transacciones atómicas (todo o nada)
  • Entradas balanceadas (débitos = créditos)
  • Historial de transacciones inmutable
  • Pista de auditoría para todos los cambios