Saltar al contenido principal

Qué es Beancount: contabilidad de doble entrada en texto

Beancount es contabilidad de doble entrada en texto plano para acciones, criptomonedas y libros cotidianos: qué es y por qué los ingenieros lo usan.

Esta guía sintetiza las mejores prácticas para la contabilidad en texto plano utilizando la potente herramienta de contabilidad de código abierto Beancount. Cubre la filosofía fundacional, sintaxis básica-avanzada, casos prácticos para activos complejos y estrategias de gestión de libros mayores a largo plazo.

Parte 1: El "Por Qué" - Fundamentos de una Contabilidad Inteligente

Antes de abordar el "cómo", es crucial entender el "por qué". Una contabilidad efectiva es la base de la gestión financiera personal y un paso necesario hacia la claridad y la libertad financiera.

Más Allá del Seguimiento de Gastos: El Camino hacia la Claridad Financiera

Las aplicaciones simples de seguimiento de gastos te dicen a dónde fue tu dinero. Un sistema contable robusto te dice eso y mucho más: proporciona una imagen completa de tu salud financiera, incluyendo tu patrimonio neto, flujo de caja y el rendimiento de tus inversiones. El objetivo principal es la observabilidad: obtener una comprensión clara y basada en datos de tu vida financiera, lo que te permite tomar decisiones informadas, evaluar riesgos y trabajar hacia metas a largo plazo como la jubilación.

¿Por Qué Partida Doble? El Poder de un Sistema Equilibrado

A diferencia de la contabilidad de partida simple (una lista simple de gastos), el método de partida doble registra cada transacción como un flujo de valor entre al menos dos cuentas. Su principio central es la ecuación contable fundamental:

Activos=Pasivos+Patrimonio Neto\text{Activos} = \text{Pasivos} + \text{Patrimonio Neto}

Este sistema asegura que tus libros estén siempre equilibrados, reduciendo drásticamente los errores. Proporciona una imagen financiera completa al generar informes esenciales como un Balance de Situación (lo que posees y debes) y una Cuenta de Resultados (lo que has ganado y gastado).

Parte 2: Primeros Pasos con Beancount

Beancount es una potente herramienta basada en Python para contabilidad en texto plano.

Tu Primer Vistazo con Fava en Beancount.io

Beancount.io proporciona un entorno potente que combina el motor de Beancount con una aplicación móvil (iOS, Android) y aplicación web - Fava, una fantástica interfaz web para visualizar tu libro mayor. No se necesita instalación. Cuando usas la plataforma, interactúas directamente con un editor de texto para tu archivo de libro mayor (ej., main.bean) y ves cómo los informes generados por Fava se actualizan en tiempo real.

Fava convierte el texto plano que escribes en gráficos interactivos, estados financieros y listas de transacciones filtrables, dándote una visión clara de tus informes financieros.

O Comienza en la Terminal con bea

Si prefieres trabajar desde una shell, bea es la línea de comandos de Beancount.io. No se necesita cuenta: instálalo con brew install bex-co/tap/bea o uv tool install beancount-io, y crea, valida, consulta y genera informes sobre el mismo archivo de texto plano. La guía de inicio rápido de CLI te permite obtener tu primer libro mayor en unos minutos, y Tu primer mes con bea cierra un mes completo de principio a fin.

Los Cinco Tipos de Cuenta Principales

Beancount utiliza cinco tipos de cuenta de nivel superior, que forman la estructura de tu libro mayor:

Tipo de CuentaDescripciónSaldo Típico
ActivosLo que posees (efectivo, cuentas bancarias, inversiones, propiedades).Positivo
PasivosLo que debes (deuda de tarjeta de crédito, préstamos, hipotecas).Negativo
IngresosDe dónde viene tu dinero (salario, bonificaciones, intereses).Negativo
GastosA dónde va tu dinero (comida, viajes, impuestos).Positivo
PatrimonioTu patrimonio neto; utilizado para saldos iniciales.Negativo

La Ecuación de Beancount

Beancount aplica su propia versión de la ecuación contable donde la suma de todos los asientos en todo tu libro mayor es igual a cero:

Activos+Gastos+Pasivos+Ingresos+Patrimonio=0\text{Activos} + \text{Gastos} + \text{Pasivos} + \text{Ingresos} + \text{Patrimonio} = 0

Esta es la razón por la que, por convención, las cuentas de Ingresos, Pasivos y Patrimonio mantienen valores negativos: son las fuentes de fondos que aumentan tus Activos y Gastos.

Parte 3: El Lenguaje de Beancount - Sintaxis Básica

Todas las entradas en Beancount son directivas que comienzan con una fecha.

Definiendo Cuentas (open) y Commodities

Antes de poder usar una cuenta, debes declararla con la directiva open. También puedes especificar opcionalmente los "commodities" o divisas que contendrá.

; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking      USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:Google

Los commodities pueden ser divisas del mundo real (ej., USD, JPY) o cualquier unidad personalizada que definas, como millas de aerolínea (MILLAS_UA) o tickers de acciones (HOOL).

Registrando Tu Primera Transacción (*)

Las transacciones son la entrada más común. Comienzan con una fecha, un indicador (* para una transacción completa o ! para una incompleta), un beneficiario opcional y una descripción. Cada línea que sigue (sangrada con dos espacios) es un "asiento" en una cuenta.

; YYYY-MM-DD * "Payee" "Description"
;   Account1      Amount Commodity
;   Account2     -Amount Commodity
 
2024-07-28 * "Trader Joe's" "Weekly groceries"
  Expenses:Food:Groceries     125.50 USD
  Liabilities:CreditCard:US:Discover  -125.50 USD

Por conveniencia, si una transacción tiene solo dos asientos, puedes omitir el monto en la segunda línea, y Beancount lo calculará automáticamente.

2024-07-28 * "Trader Joe's" "Weekly groceries"
  Expenses:Food:Groceries     125.50 USD
  Liabilities:CreditCard:US:Discover

Equilibrio a Nivel de Transacción: Más importante para el uso diario, cada transacción individual también debe equilibrarse: la suma de todos los asientos dentro de una sola transacción debe ser cero. Si una transacción no se equilibra, Beancount mostrará un error como este:

Alerta de error de Beancount

Manejo de Transacciones en Múltiples Divisas (@ y @@)

Beancount sobresale en la contabilidad multidivisa.

  • Usa @ para especificar un precio de conversión por unidad.
  • Usa @@ para especificar el costo total de la conversión.
; Buying a flight in EUR with a USD card
2024-08-01 * "Lufthansa" "Flight to Berlin"
  Expenses:Travel:Flights      500.00 EUR @@ 545.00 USD  ; 500 EUR cost me 545 USD in total
  Liabilities:CreditCard:US:Discover  -545.00 USD

Parte 4: Garantizando la Precisión - El Arte de la Conciliación

Una práctica clave para mantener un libro mayor preciso es la conciliación regular. Esto implica comparar los saldos en tu libro mayor de Beancount con los estados de cuenta oficiales de tus instituciones financieras.

Automatizando Comprobaciones con Aserciones de Saldo (balance)

La directiva balance es tu herramienta principal para comprobaciones automatizadas. Afirmas que, en una fecha determinada, una cuenta tenía un saldo específico. Beancount generará un error si su saldo calculado no coincide con tu afirmación. Esto es invaluable para localizar errores rápidamente.

Nota: La aserción de saldo verifica el estado de la cuenta al inicio del día especificado (antes de cualquier transacción de ese día).

; From your monthly credit card statement
2024-08-01 balance Liabilities:CreditCard:US:Discover  -1432.78 USD

Vinculando Documentos de Apoyo (document)

Puedes vincular archivos externos como estados de cuenta bancarios o recibos, creando un rastro auditable. Fava hace que estos enlaces sean clicables.

2024-08-01 document Liabilities:CreditCard:US:Discover "statements/discover-2024-07.pdf"

Corrigiendo Errores e Inicializando Saldos

Cuando comienzas tu libro mayor o encuentras una discrepancia que no puedes rastrear, necesitas hacer un ajuste. La práctica estándar es usar una cuenta especial de Patrimonio.

; Initializing a cash account when starting your ledger
2020-01-01 * "Initial Balance" "Setting up cash account"
  Assets:Cash:Wallet           200.00 USD
  Equity:Opening-Balances     -200.00 USD

La cuenta Equity:Opening-Balances contiene montos que entran a tu libro mayor desde fuentes desconocidas o externas.

Para correcciones rápidas donde la discrepancia exacta no es importante, la directiva pad puede ajustar automáticamente el saldo de una cuenta para cumplir con una balance posterior, contabilizando la diferencia en una cuenta de patrimonio. Úsala con precaución, ya que puede ocultar problemas mayores. Los ajustes explícitos son generalmente más seguros.

Parte 5: Patrones de Transacción Avanzados y Realistas

Seguimiento de Deudas: Gestión de Cuentas por Cobrar y Pagar

La contabilidad de partida doble es perfecta para rastrear dinero que te deben (Assets:Receivables) o que debes (Liabilities:Payable).

Ejemplo: Pagas una cena grupal de $90, y tu amigo Bob te debe su parte de $45.

  1. Registra el gasto inicial y la cuenta por cobrar:

    2024-08-05 * "Dinner Place" "Dinner with Bob"
      Expenses:Food:Restaurant          45.00 USD  ; Your share
      Assets:Receivables:Bob            45.00 USD  ; Bob owes you
      Assets:Bank:US:Chase:Checking    -90.00 USD
  2. Cuando Bob te pague:

    2024-08-06 * "Bob" "Paid me back for dinner"
      Assets:Bank:US:Chase:Checking     45.00 USD
      Assets:Receivables:Bob           -45.00 USD

La cuenta Assets:Receivables:Bob ahora está a cero, y tus libros están perfectamente equilibrados.

Activos vs. Gastos: Compra de un Coche y Depreciación

Una compra grande como un coche no es un simple gasto; es la adquisición de un activo que pierde valor con el tiempo (depreciación).

  1. Registra la compra como un activo:

    2023-01-15 * "Toyota Dealer" "Purchase of a new car"
      Assets:Car:ToyotaCamry         30000.00 USD
      Assets:Bank:US:Chase:Checking -30000.00 USD
  2. Registra la depreciación anual: Supongamos que estimas que el coche pierde $3,000 de valor cada año. Al final del año, registras esto como un gasto.

    2023-12-31 * "Depreciation" "Annual car value depreciation"
      Expenses:Depreciation:Car      3000.00 USD
      Assets:Car:ToyotaCamry        -3000.00 USD

Después de este asiento, tu cuenta Assets:Car:ToyotaCamry refleja correctamente el nuevo valor del coche ($27,000), y has contabilizado adecuadamente el costo de uso como un gasto para ese año.

Parte 6: Inmersión Profunda - Modelando Activos Complejos del Mundo Real

Caso de Estudio 1: Contabilidad para Bienes Raíces

Una casa es a menudo tu mayor activo y pasivo. Aquí te mostramos cómo modelarla.

  1. Crea Cuentas y un Commodity Personalizado:

    2022-01-01 commodity HOUSE_123MAIN
      name: "Property at 123 Main St"
    2022-01-01 open Assets:Property:Home:123Main        HOUSE_123MAIN
    2022-01-01 open Liabilities:Mortgage:HomeLoan       USD
    2022-01-01 open Expenses:Home:Interest
    2022-01-01 open Expenses:Home:PropertyTax
  2. Registra la Compra: Digamos que compras una casa de $500k con un pago inicial de $100k y un préstamo de $400k.

    2022-03-15 * "Settlement Company" "Purchase of 123 Main St"
      Assets:Property:Home:123Main          1 HOUSE_123MAIN {500000.00 USD}
      Assets:Bank:DownPayment          -100000.00 USD
      Liabilities:Mortgage:HomeLoan    -400000.00 USD
  3. Registra los Pagos Mensuales de la Hipoteca: Tu pago mensual consiste en capital (reduce el pasivo) e intereses (un gasto).

    2022-04-01 * "Mortgage Bank" "Monthly Mortgage Payment"
      Liabilities:Mortgage:HomeLoan      800.00 USD   ; Principal
      Expenses:Home:Interest            1200.00 USD   ; Interest
      Assets:Bank:US:Chase:Checking    -2000.00 USD
  4. Seguimiento de la Plusvalía (Ganancias No Realizadas): El valor de mercado de una casa cambia. Para rastrear esto sin afectar tu patrimonio neto oficial (ya que la ganancia no se realiza hasta que vendes), puedes usar una directiva de precio con una moneda "virtual".

    ; The purchase price is the real cost basis
    2022-03-15 price HOUSE_123MAIN   500000.00 USD
     
    ; An updated market estimate is an unrealized gain
    2024-01-01 price HOUSE_123MAIN   550000.00 USD.UNREALIZED

Esto te permite ver el valor estimado en los gráficos de Fava sin inflar indebidamente tu balance general.

Explora un libro mayor de ejemplo de bienes raíces en vivo con seguimiento de hipoteca, depreciación y venta de propiedad:

Abrir Libro Mayor de Ejemplo de Bienes Raíces en una pestaña nueva

Caso de Estudio 2: Seguimiento de Unidades de Acciones Restringidas (RSUs)

Las RSUs son una forma común de compensación en acciones. Contabilizarlas implica rastrear la concesión inicial, los eventos de adjudicación y la retención de impuestos.

  1. Configuración Inicial: Crea los commodities para las acciones adjudicadas (HOOL) y no adjudicadas (HOOL.NO_ADJUDICADO), junto con cada cuenta que tocarán los asientos posteriores. Declararlas todas de antemano es lo que hace que las dos transacciones siguientes se carguen por sí solas.

    2021-01-01 commodity HOOL
    2021-01-01 commodity HOOL.UNVEST
    2021-01-01 open Assets:Brokerage:Etrade:HOOL          HOOL
    2021-01-01 open Assets:Grant:Unvested                 HOOL.UNVEST
    2021-01-01 open Income:Grant:Awards                   HOOL.UNVEST
    2021-01-01 open Expenses:Grant:Vested                 HOOL.UNVEST
    2021-01-01 open Income:Salary:Hooli:RSU               USD
    2021-01-01 open Expenses:Taxes:Federal                USD
    2021-01-01 open Expenses:Taxes:State                  USD
  2. Registra la Concesión Inicial: Esta transacción muestra la concesión total moviéndose a una cuenta de activos no adjudicados. Nada es gravable todavía, por lo que toda la entrada está denominada en el commodity de seguimiento HOOL.NO_ADJUDICADO.

    2021-02-01 * "Hooli" "Initial RSU Grant"
      Assets:Grant:Unvested        1000 HOOL.UNVEST
      Income:Grant:Awards         -1000 HOOL.UNVEST
  3. Registra un Evento de Adjudicación: Esta es la transacción clave. Cuando las acciones se adjudican, reconoces ingresos, el empleador retiene acciones para pagar los impuestos, y te quedas con el resto. Supongamos que 100 acciones se adjudican a $150.00, entonces:

    • Compensación bruta: 100 × $150.00 = $15,000.00
    • Acciones retenidas para impuestos: 40 × $150.00 = $6,000.00 (federal $4,800.00 + estatal $1,200.00)
    • Acciones que conservas: 60 × $150.00 = $9,000.00 de base de costo
    • Efectivo para ti: $0.00 — toda la retención se paga en acciones

    Esos montos son la entrada, y se concilian: $6,000.00 de impuestos más $9,000.00 de acciones retenidas es exactamente los $15,000.00 de ingresos.

    2022-02-01 * "Hooli" "RSU Vesting Event"
      ; Ordinary income: 100 shares * $150.00
      Income:Salary:Hooli:RSU                   -15000.00 USD
      ; Tax withheld, funded by 40 of the 100 shares (40 * $150.00 = $6,000.00)
      Expenses:Taxes:Federal                      4800.00 USD
      Expenses:Taxes:State                        1200.00 USD
      ; The 60 shares you keep, at their $150.00 vesting-day basis
      Assets:Brokerage:Etrade:HOOL                  60 HOOL {150.00 USD}
      ; Retire the 100 unvested units the grant was tracking
      Assets:Grant:Unvested                       -100 HOOL.UNVEST
      Expenses:Grant:Vested                        100 HOOL.UNVEST

Esta única transacción equilibrada modela el evento completo: la concesión no adjudicada se reduce, se reconocen ingresos, se retienen impuestos, y las 60 acciones netas adjudicadas aparecen en tu cuenta de corretaje con la base de costo correcta para futuros cálculos de ganancias de capital.

Hay dos detalles que vale la pena copiar en tu propio libro mayor. Primero, escribe la retención cuenta por cuenta en lugar de dejar que una cuenta de equilibrio general la absorba: si los asientos federales y estatales no suman el valor de las acciones retenidas, la transacción no se equilibrará y Beancount te lo dirá. Segundo, no dejes una línea en blanco entre asientos: una línea en blanco termina la transacción, y Beancount informa un error de sintaxis en los asientos que la siguen.

Si tu empleador vende las acciones retenidas en el mercado abierto en lugar de recuperarlas al precio de adjudicación, la venta es una transacción separada (una reducción de Assets:Brokerage:Etrade:HOOL contra efectivo), y cualquier diferencia entre el precio de venta y la base de $150.00 es una pequeña ganancia o pérdida de capital. Mantenla fuera del asiento de adjudicación.

Parte 7: Gestión de Proyectos para Tu Libro Mayor

A medida que tu libro mayor crece, la organización se vuelve clave.

Usando Control de Versiones (Git) para Proteger Tus Datos

Dado que tu libro mayor es un archivo de texto, es perfecto para el control de versiones con Git. Esto te brinda un historial completo de todos los cambios, protegiéndote de eliminaciones o errores accidentales. Advertencia: Tus datos financieros son altamente sensibles. Usa un repositorio privado en servicios como GitHub/GitLab, o aloja el tuyo propio.

Organizando con Etiquetas (#) y Enlaces (^)

Beancount proporciona dos formas de agrupar transacciones más allá de las cuentas:

  • Etiquetas (#): Úsalas para eventos o proyectos. Puedes filtrar todas las transacciones relacionadas con un viaje específico, por ejemplo. 2024-07-20 * "Hotel" "Viena" #viaje-europa-2024
  • Enlaces (^): Úsalos para conectar transacciones financieramente relacionadas que ocurren en diferentes momentos, como un retiro de efectivo y la tarifa bancaria asociada.

Una Estrategia Escalable para Estructurar Tus Archivos (include)

Un archivo único y masivo es difícil de gestionar. Usa la directiva include para dividir tu libro mayor en múltiples archivos. main.bean:

; Main ledger file
 
; Global options
option "title" "My Personal Ledger"
option "operating_currency" "USD"
 
; Include account declarations and other files
include "accounts.bean"
include "years/2023.bean"
include "years/2024.bean"
include "events/trip-europe-2024.bean"

Una estrategia organizativa robusta, en orden de precedencia:

  1. Por Evento: Crea un archivo separado para un evento importante y autocontenido (ej., viaje-europa-2024.bean).
  2. Por Categoría/Beneficiario: Para transacciones recurrentes altamente regulares como facturas de servicios públicos o salario, agrúpalas en su propio archivo (ej., recurrente-alquiler.bean).
  3. Por Cuenta: Para transacciones estrechamente vinculadas a una cuenta específica (intereses, tarifas, pagos de tarjetas de crédito), considera un archivo específico de la cuenta.
  4. Por Fecha: Para todas las demás transacciones generales, una división simple por año (2024.bean) o mes (2024/07.bean) es efectiva.

Parte 8: Conclusión

Beancount ofrece una curva de aprendizaje pronunciada pero recompensa el esfuerzo con un poder, flexibilidad y control incomparables sobre tus datos financieros. Al adoptar los principios de la contabilidad de partida doble y las herramientas prácticas que Beancount proporciona, puedes pasar del simple seguimiento de gastos a un sistema completo, preciso y perspicaz de gestión financiera personal. Tu libro mayor se convierte en un activo permanente, privado e invaluable para comprender tu pasado y planificar tu futuro.

Primeros Pasos con Beancount.io

Beancount.io es una plataforma moderna de gestión financiera basada en la nube que transforma tus registros de transacciones en texto plano en estados financieros completos, incluyendo cuentas de resultados, balances generales y balances de comprobación. Al combinar la fiabilidad de los archivos de texto plano con potentes herramientas de visualización, Beancount.io te ayuda a mantener un control preciso sobre tu vida financiera mientras obtienes información valiosa sobre el rendimiento de tus inversiones.

Comienza tu viaje financiero con Beancount.io — consulta los planes y precios actuales para ver lo que incluye cada nivel.

Panel de control del libro mayor de beancount.io que muestra un gráfico de tendencia de patrimonio neto, saldos de cuentas y una barra de asistente de IA

Explora el libro mayor en vivo →

Cuenta de resultados del libro mayor público de Beancount de Apple en beancount.io con gráfico de beneficio neto y desglose de ingresos y gastos

Explora el libro mayor en vivo →

Balance general del libro mayor público de Beancount de Apple en beancount.io con gráfico de patrimonio neto y detalle de activos y pasivos

Explora el libro mayor en vivo →

Fuente: https://beancount.io/es/docs/introduction-to-beancount