El ciclo contable, estilo Beancount
Los estados financieros no aparecen por arte de magia. Son el producto final de un proceso estructurado y repetible conocido como ciclo contable. Aunque los principios son universales, las herramientas que uses pueden cambiar drásticamente la experiencia. Esta guía te lleva a través del ciclo contable con un enfoque en Beancount, la poderosa herramienta de contabilidad de texto plano.
Veremos cómo el enfoque basado en texto de Beancount elimina pasos tediosos, qué deberías automatizar y qué informes te dan la visión más clara de tu salud financiera. 🧑💻
TL;DR: El flujo de trabajo con Beancount
- Captura y Diario: Registra cada transacción como una publicación limpia de partida doble en tu archivo de texto
.beancount
. - Validar y conciliar: Usa aserciones
balance
para confirmar que tu libro mayor coincide con los extractos bancarios y ejecutabean-check
para detectar errores. - Revisar: Genera un balance de prueba no ajustado para una rápida verificación de sentido.
- Ajustar: Publica asientos para devengos, diferimientos, depreciación y otros ítems de fin de período.
- Re‑revisar: Comprueba el balance de prueba ajustado para asegurar que todo esté correcto.
- Publicar y cerrar: Genera tu Estado de Resultados, Balance General y Estado de Flujos de Efectivo. Cerrar los libros es opcional en Beancount, ya que los informes son conscientes de la fecha.
Este flujo puede visualizarse así:
Paso 1: Capturar y registrar transacciones
Este es el paso fundamental. Cada evento financiero —una venta, una compra, una comisión bancaria— debe ser registrado. En Beancount, haces esto creando transacciones en un archivo de texto sencillo, típicamente llamado main.beancount
o organizado en varios archivos por año.
Cada transacción debe seguir las reglas de la contabilidad de partida doble, lo que significa que la suma de todas las publicaciones debe ser cero. Beancount lo hace cumplir por ti.
2025-08-10 * "Walmart" "Compra de suministros de oficina"
Expenses:Office:Supplies 45.67 USD
Assets:Bank:Checking -45.67 USD
- Consejo profesional: Usa etiquetas como
#project-phoenix
o#client-acme
para añadir dimensiones a tus datos. Esto hace que la consulta y generación de informes sea increíblemente flexible más adelante.
Higiene de conciliación ✅
La característica más poderosa para garantizar la exactitud es la aserción de balance. Al final de un período de estado (por ejemplo, al final del mes), declaras cuál debería ser el saldo de una cuenta.
2025-08-31 balance Assets:Bank:Checking 12345.67 USD
Si la suma de todas las transacciones que afectan a Assets:Bank:Checking
hasta esa fecha no equivale a 12345.67 USD
, Beancount generará un error. Esta simple directiva convierte tu libro mayor en un documento auto‑auditado.
Para quienes estén retroalimentando datos históricos, la directiva pad
puede crear automáticamente una transacción de balance para que tus saldos de apertura coincidan con tu primera aserción.
Paso 2: "Publicar en el libro mayor" (¡Gratis!)
En los sistemas contables tradicionales, primero escribes asientos en un "diario", y luego un paso separado de "publicación" copia esos valores al "libro mayor general".
Con Beancount, tu archivo .beancount
es tanto el diario como el libro mayor. Cuando escribes y guardas una transacción, ya la has publicado. No hay un paso separado. Esta inmediatez es una ventaja central de la contabilidad de texto plano: lo que ves es lo que obtienes.
Paso 3: Preparar un balance de prueba no ajustado
Antes de comenzar a hacer ajustes, necesitas una rápida verificación de "¿todo cuadra?". Un balance de prueba es un informe sencillo que lista cada cuenta y su saldo total. El total de los saldos deudores debe ser igual al total de los saldos acreedores.
Puedes generar esto con una consulta simple:
bean-query main.beancount \
"SELECT account, sum(position) GROUP BY 1 ORDER BY 1"
O, para un enfoque más visual, abre tu libro mayor en Fava (la interfaz web de Beancount) y navega al informe "Trial Balance". Busca cualquier anomalía: una cuenta de activo con saldo acreedor, o una cuenta de gasto con un valor extraño.
Paso 4: Registrar asientos de ajuste
Los asientos de ajuste son cruciales para una información precisa bajo el principio de acumulación. Garantizan que los ingresos se reconozcan cuando se ganan y los gastos cuando se incurren, sin importar cuándo se mueve el efectivo.
Ajustes comunes incluyen:
- Devengos: Registrar ingresos que has ganado pero aún no has facturado, o gastos que has incurrido pero no has pagado.
- Diferimientos: Manejar pagos anticipados. Si un cliente te paga por un año de servicio por adelantado, lo registras como un pasivo (
Liabilities:UnearnedRevenue
) y reconoces 1/12 cada mes como ingreso. - Elementos no monetarios: Registrar cosas como la depreciación de activos.
- Correcciones: Arreglar errores o contabilizar ítems omitidos de los feeds bancarios, como un pequeño pago de intereses.
Ejemplo: Devengar ingresos
Terminaste un proyecto el 31 de agosto pero no enviarás la factura hasta septiembre. Para reconocer el ingreso en el período correcto (agosto), haces un asiento de ajuste:
2025-08-31 * "Devengar ingreso para proyecto cliente #1042"
Assets:AccountsReceivable 3000.00 USD
Income:Consulting -3000.00 USD
Ejemplo: Registrar depreciación
Tu empresa tiene un calendario de depreciación para sus activos. Al final del período, registras el gasto:
2025-12-31 * "Depreciación anual de equipos informáticos"
Expenses:Depreciation 4800.00 USD
Assets:Fixed:AccumulatedDepreciation -4800.00 USD
Paso 5: Ejecutar un balance de prueba ajustado y validar
Una vez que tus asientos de ajuste estén registrados, vuelve a ejecutar el informe de balance de prueba. Este es tu Balance de Prueba Ajustado. Proporciona el conjunto final de números que se usarán para crear los estados financieros.
Este también es el momento perfecto para ejecutar la verificación interna de Beancount:
bean-check main.beancount
Este comando verifica toda la sintaxis, reglas de balance y aserciones. Si no muestra salida, tus libros son mecánicamente correctos.
Paso 6: Publicar los estados financieros 📊
Este es el premio. Usando los números de tu balance de prueba ajustado, puedes generar los informes clave. Fava es la forma más sencilla de hacerlo, ya que ofrece informes interactivos y con capacidad de profundización de forma inmediata.
- Estado de Resultados (Pérdidas y Ganancias): Muestra tus ingresos y gastos durante un período, resultando en tu utilidad neta o pérdida.
- Balance General: Una instantánea de lo que posees (Activos) y lo que debes (Pasivos), así como tu patrimonio neto (Patrimonio), en una fecha específica.
- Estado de Flujos de Efectivo: Conciliación de tu efectivo inicial con el final mostrando de dónde provino el dinero y a dónde fue.
Para informes personalizados, puedes usar el Lenguaje de Consulta de Beancount (BQL). Aquí tienes una consulta para un estado de resultados mensual:
-- P&L para agosto 2025
SELECT account, sum(position)
WHERE account '^(Income|Expenses)'
AND date >= 2025-08-01 AND date <= 2025-08-31
GROUP BY account ORDER BY account;
Paso 7: Cierre de libros (opcional)
En la contabilidad tradicional, el proceso de "cierre" implica crear asientos que pongan a cero todas las cuentas temporales (Ingresos y Gastos) y transfieran la utilidad neta a una cuenta de patrimonio llamada Utilidades Retenidas. Esto reinicia formalmente las cuentas temporales para el próximo año.
En Beancount, este paso suele ser innecesario. Los informes de Fava son conscientes de la fecha; si solicitas un P&L de 2025, solo usará datos de 2025. Los saldos no "se derraman". La mayoría de los usuarios simplemente dejan los saldos tal como están.
Sin embargo, si necesitas realizar un cierre formal por cumplimiento o informes a accionistas, puedes hacerlo con una simple transacción de fin de año que mueva los saldos totales de ingresos y gastos a Equity:Retained-Earnings
.
Lista de verificación práctica para el cierre mensual
Aquí tienes una lista de verificación repetible para cerrar tus libros cada mes usando Beancount.
- Captura: Importa todas las transacciones de bancos y tarjetas de crédito. Ingresa manualmente cualquier gasto en efectivo o ítem fuera de banda.
- Conciliación: Añade aserciones
balance
para todas las cuentas bancarias, tarjetas de crédito y préstamos, coincidiendo con tus extractos. - Revisión: Examina el balance de prueba no ajustado en Fava. Investiga cualquier saldo extraño o inesperado. Verifica facturas pendientes (
Assets:AccountsReceivable
) o cuentas por pagar (Liabilities:AccountsPayable
). - Ajuste: Registra asientos para ingresos/gastos devengados, ingresos diferidos y cualquier corrección necesaria.
- Validación: Ejecuta
bean-check
. Revisa el balance de prueba ajustado final. - Publicación: Genera el P&L y el Balance General. Envíalos a los interesados o guárdalos para tus registros.
- Cierre: Opcionalmente, realiza un asiento de cierre si tu negocio lo requiere. Archiva una copia de tus archivos
.beancount
del período.
Por qué Beancount brilla en el ciclo contable
- Transparencia y auditabilidad: Tu libro mayor es un archivo de texto. Puedes usar
git
para controlar versiones de tu historia financiera, revisar cambios condiff
y colaborar con tu contador en un formato claro y sin ambigüedades. - Control total: Tú defines tu plan de cuentas. No estás atado a la estructura de un proveedor de software. Tus datos son tuyos, para siempre, en un formato abierto.
- Poder inigualable: La combinación de consultas tipo SQL (BQL) y una rica interfaz web (Fava) te brinda un poder sin precedentes para segmentar, analizar y comprender tus datos financieros.
Fragmentos para copiar y pegar y comenzar
Plan de cuentas simple:
option "title" "My Personal Ledger"
option "operating_currency" "USD"
;; --- Accounts ---
1970-01-01 open Assets:Bank:Checking
1970-01-01 open Assets:AccountsReceivable
1970-01-01 open Liabilities:CreditCard
1970-01-01 open Liabilities:UnearnedRevenue
1970-01-01 open Equity:Owner:Capital
1970-01-01 open Equity:Retained-Earnings
1970-01-01 open Income:Consulting
1970-01-01 open Expenses:Office:Supplies
1970-01-01 open Expenses:Software
1970-01-01 open Expenses:Depreciation
Consulta BQL útil:
-- Find all customers with an outstanding balance
SELECT payee, sum(position)
WHERE account = 'Assets:AccountsReceivable'
GROUP BY payee
HAVING sum(position) > 0
ORDER BY sum(position) DESC;
Al mapear el atemporal ciclo contable a las herramientas modernas basadas en texto de Beancount, obtienes un sistema robusto, transparente y construido para perdurar. ¡Feliz contabilidad!