Ir al contenido principal

La guia completa para gestionar cuentas en Beancount y Fava

· 14 min de lectura
Mike Thrift
Mike Thrift
Marketing Manager

Tu plan de cuentas es la columna vertebral de tu libro mayor en Beancount. Una jerarquia de cuentas bien disenada hace que cada informe sea mas claro, cada consulta mas rapida y cada temporada de impuestos menos dolorosa. En esta guia, recorreremos todo lo que necesitas saber sobre la creacion, lectura, actualizacion y cierre de cuentas en Beancount y Fava, desde los conceptos basicos para principiantes hasta patrones avanzados.

Los cinco tipos de cuentas

Beancount utiliza el modelo estandar de contabilidad por partida doble con exactamente cinco tipos de cuentas raiz:

TipoPropositoSigno normalInforme
AssetsRecursos que posees (efectivo, inversiones, propiedades)Positivo (debito)Balance general
LiabilitiesDeudas que debes (tarjetas de credito, prestamos, hipotecas)Negativo (credito)Balance general
EquityParticipacion del propietario, ganancias retenidas, saldos inicialesNegativo (credito)Balance general
IncomeFuentes de ingresos (salario, intereses, dividendos)Negativo (credito)Estado de resultados
ExpensesCategorias de gastos (alimentacion, alquiler, servicios)Positivo (debito)Estado de resultados

La ecuacion contable fundamental siempre se cumple:

Assets + Expenses + Equity + Income + Liabilities = 0

Una heuristica util: si los montos solo son relevantes para un periodo de tiempo (por ejemplo, "Cuanto gaste en alimentacion este mes?"), usa Income o Expenses. Si representan un saldo continuo (por ejemplo, "Cuanto hay en mi cuenta corriente?"), usa Assets o Liabilities.

Convenciones de nomenclatura de cuentas

Los nombres de cuentas en Beancount son identificadores jerarquicos separados por dos puntos. Las reglas son:

  • Deben comenzar con uno de los cinco tipos raiz: Assets, Liabilities, Equity, Income, Expenses
  • Cada componente comienza con una letra mayuscula o un numero
  • Los componentes pueden contener letras, numeros y guiones (sin espacios ni guiones bajos)
  • Se requieren al menos dos componentes (por ejemplo, Expenses:Food, no solo Expenses)
  • Los dos puntos (:) separan los niveles de jerarquia
; Nombres de cuenta validos
Assets:US:BofA:Checking
Liabilities:CA:RBC:CreditCard
Equity:Retained-Earnings
Income:US:Acme:Salary
Expenses:Food:Groceries
Assets:Crypto:BTC-Holdings

; Nombres de cuenta invalidos
assets:checking ; tipo raiz en minusculas
Assets:my checking ; los espacios no estan permitidos
Expenses ; solo un componente

El patron de nomenclatura recomendado para cuentas del balance general es:

Tipo : Pais : Institucion : Cuenta : SubCuenta

Por ejemplo: Assets:US:Vanguard:401k:VTSAX o Liabilities:US:Chase:Sapphire.

Para cuentas de gastos e ingresos, usa nomenclatura basada en categorias:

Expenses:Food:Groceries
Expenses:Housing:Utilities:Electric
Income:US:Employer:Salary

Personalizar los nombres raiz

Puedes renombrar los cinco tipos raiz para localizacion o preferencia personal:

option "name_assets"       "Actifs"
option "name_liabilities" "Passifs"
option "name_equity" "Capital"
option "name_income" "Revenus"
option "name_expenses" "Depenses"

Crear cuentas (directiva Open)

Cada cuenta debe declararse con una directiva open antes de poder registrar transacciones en ella. La sintaxis completa es:

YYYY-MM-DD open Account [MonedaRestriccion,...] ["MetodoDeAsignacion"]

Open basico

2014-05-01 open Assets:US:BofA:Checking

Con restricciones de moneda

Restringir las monedas evita registrar accidentalmente la moneda incorrecta:

2014-05-01 open Assets:US:BofA:Checking       USD
2014-05-01 open Assets:Cash USD,CAD,EUR
2012-03-01 open Assets:US:ETrade:Main:ITOT ITOT

Con metodos de asignacion de lotes

Para cuentas de inversion, especifica como se emparejan los lotes al vender:

2014-02-11 open Assets:US:ETrade:IVV   IVV   "FIFO"
2014-02-11 open Assets:US:Schwab:AAPL AAPL "LIFO"
2014-02-11 open Assets:US:Fidelity GOOG "STRICT"

Metodos de asignacion disponibles:

MetodoComportamiento
"STRICT"Por defecto. Requiere especificacion exacta del lote; genera error en caso de ambiguedad
"FIFO"Primero en entrar, primero en salir: reduce los lotes mas antiguos primero
"LIFO"Ultimo en entrar, primero en salir: reduce los lotes mas recientes primero
"AVERAGE"Combina todos los lotes y recalcula el costo promedio
"NONE"Sin emparejamiento de lotes; se acepta cualquier precio

Con metadatos

2013-03-14 open Assets:US:BTrade:HOOLI
category: "taxable"
institution: "BTrade Corp"
account-number: "XX-1234-5678"

Elegir las fechas de apertura estrategicamente

  • Usa tu fecha de nacimiento para cuentas universales como Expenses:Groceries (esto te da sumas de toda la vida)
  • Usa la fecha de inicio de empleo para cuentas de ingresos relacionadas con el trabajo
  • Usa la fecha real de creacion de la cuenta para cuentas especificas de instituciones (cuentas bancarias, tarjetas de credito)

Apertura automatica con un plugin

Si deseas omitir las directivas open manuales durante el prototipado:

plugin "beancount.plugins.auto_accounts"

Esto genera automaticamente directivas open para cualquier cuenta referenciada en las transacciones. Sin embargo, reduce la deteccion de errores tipograficos, por lo que no se recomienda para uso en produccion.

Listar y consultar cuentas

Usando bean-query (BQL)

# Listar todas las cuentas con saldos
bean-query ledger.beancount "SELECT account, units(sum(position)) GROUP BY 1"

# Listar solo cuentas de gastos
bean-query ledger.beancount "SELECT account WHERE account ~ 'Expenses'"

# Estado de cuenta con saldo acumulado
bean-query ledger.beancount \
"SELECT date, account, position, balance WHERE account ~ 'BofA:Checking'"

# Vista de diario para una cuenta especifica
bean-query ledger.beancount "JOURNAL 'Assets:US:BofA:Checking'"

Usando bean-report

# Balance de comprobacion (todas las cuentas con saldos finales)
bean-report ledger.beancount balances

# Balance general
bean-report ledger.beancount balsheet

# Estado de resultados
bean-report ledger.beancount income

# Diario para una cuenta especifica
bean-report ledger.beancount journal -a Assets:US:BofA:Checking

Usando Fava

Fava ofrece una interfaz visual enriquecida para explorar cuentas:

  • Pagina de Balance general: arbol interactivo de todos los Assets, Liabilities y Equity
  • Pagina de Estado de resultados: arbol interactivo de todos los Income y Expenses
  • Pagina de cuenta: haz clic en cualquier nombre de cuenta para ver sus pestanas de Diario, Cambios y Saldos
  • Barra de filtro: usa patrones regex para mostrar solo las cuentas que coincidan (por ejemplo, Assets:US)

Actualizar cuentas (renombrar y reorganizar)

Beancount no tiene una directiva de renombrado integrada, pero existen varios enfoques.

1. Buscar y reemplazar

El simple buscar y reemplazar funciona, pero ten cuidado: Assets:Bank tambien coincidiria con Assets:Bank:Cash. Usa patrones con limites de palabra:

sed -i 's/Assets:US:OldBank:Checking/Assets:US:NewBank:Checking/g' *.beancount

2. El plugin rename_accounts

El paquete beancount_reds_plugins proporciona un potente plugin de renombrado:

plugin "beancount_reds_plugins.rename_accounts.rename_accounts" "{
'Expenses:Taxes' : 'Income:Taxes',
'Assets:House:Capital-Improvements' : 'Expenses:House:Appliances',
}"

Este plugin:

  • Usa coincidencia de subcadenas (Expenses:Taxes:Federal se convierte automaticamente en Income:Taxes:Federal)
  • Soporta expresiones regulares con referencias hacia atras
  • Genera automaticamente directivas Open para las cuentas renombradas
  • No modifica tus archivos fuente, solo cambia la representacion en memoria
  • Se puede activar/desactivar comentando la linea del plugin

3. Patron de cerrar y reabrir

Para migraciones reales de cuentas (por ejemplo, cambiar de banco):

; Cuenta antigua
2010-01-01 open Assets:US:OldBank:Checking USD

; Cerrar la antigua, abrir la nueva
2024-06-15 close Assets:US:OldBank:Checking
2024-06-15 open Assets:US:NewBank:Checking USD

; Transferir el saldo restante
2024-06-15 * "Transferencia al nuevo banco"
Assets:US:OldBank:Checking -5000.00 USD
Assets:US:NewBank:Checking 5000.00 USD

Cerrar cuentas

La directiva close marca una cuenta como inactiva:

2016-11-28 close Liabilities:CreditCard:CapitalOne

Que hace el cierre

  • Genera un error si se realizan registros despues de la fecha de cierre
  • Filtra la cuenta de los informes fuera de su periodo activo
  • Indica a Fava que oculte la cuenta en las vistas de arbol (configurable)

Cuando cerrar cuentas

  • Cuando cierras una cuenta bancaria o tarjeta de credito en el mundo real
  • Cuando cambias de empleador
  • Cuando consolidas o reorganizas tu plan de cuentas
  • Cuando vendes una propiedad o cierras una posicion de inversion

Siempre verificar saldo cero antes de cerrar

Beancount no verifica automaticamente un saldo cero al cerrar. Agrega una verificacion manual:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

Organizar tu plan de cuentas

Comienza simple, refina con el tiempo

No necesitas el plan de cuentas perfecto desde el primer dia. Comienza con categorias amplias y dividelas a medida que crezcan tus necesidades de informes. El autor de Beancount reporta tener mas de 250 cuentas de gastos, todas creadas organicamente con el tiempo.

Patrones de organizacion comunes

Patron 1: Por institucion (para cuentas del balance general)

Assets:US:BofA:Checking
Assets:US:BofA:Savings
Assets:US:Vanguard:401k:VTSAX
Assets:US:Vanguard:401k:VBTLX
Liabilities:US:Amex:Platinum
Liabilities:US:Chase:Sapphire

Patron 2: Por categoria (para cuentas de ingresos y gastos)

Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental

Patron 3: Por geografia (para finanzas en multiples paises)

Assets:US:BofA:Checking
Assets:CA:RBC:Checking
Assets:UK:HSBC:Current
Income:US:Acme:Salary
Income:CA:Freelance:Consulting

Patron 4: Por propiedad o proyecto (para bienes raices o negocios)

Assets:US:Loft4530:Property
Income:US:Loft4530:Rental
Expenses:Loft4530:Electricity
Expenses:Loft4530:Insurance
Expenses:Loft4530:Maintenance

Patron 5: Cuentas relacionadas en espejo (mismo componente de institucion)

Assets:US:ETrade:Cash
Assets:US:ETrade:AAPL
Income:US:ETrade:Dividends
Income:US:ETrade:PnL
Expenses:US:ETrade:Commissions

Que tan profundas deben ser las jerarquias?

  • 2-3 niveles es comun para categorias de gastos (Expenses:Food:Restaurant)
  • 3-4 niveles para elementos estructurados del balance general (Assets:US:Vanguard:401k:VTSAX)
  • Evita mas de 5 niveles a menos que tengas una razon solida para los informes
  • Las jerarquias profundas funcionan bien cuando Fava las colapsa en vistas de arbol

Un ejemplo del mundo real

Aqui tienes un plan de cuentas practico para finanzas personales:

; -- Activos --
Assets:US:BofA:Checking USD
Assets:US:BofA:Savings USD
Assets:US:Vanguard:401k:VTSAX VTSAX
Assets:US:Vanguard:Roth:VTSAX VTSAX
Assets:US:ETrade:Cash USD
Assets:US:ETrade:AAPL AAPL
Assets:Cash:Wallet USD

; -- Pasivos --
Liabilities:US:Amex:Platinum USD
Liabilities:US:Chase:Freedom USD
Liabilities:US:BofA:Mortgage USD

; -- Ingresos --
Income:US:Employer:Salary
Income:US:Employer:Bonus
Income:US:Employer:Match401k
Income:US:ETrade:Dividends
Income:US:BofA:Interest

; -- Gastos --
Expenses:Food:Groceries
Expenses:Food:Restaurant
Expenses:Food:Coffee
Expenses:Housing:Rent
Expenses:Housing:Insurance
Expenses:Housing:Utilities:Electric
Expenses:Housing:Utilities:Water
Expenses:Transport:Subway
Expenses:Transport:Taxi
Expenses:Transport:Gas
Expenses:Health:Medical
Expenses:Health:Dental
Expenses:Health:Pharmacy
Expenses:Shopping:Clothing
Expenses:Shopping:Electronics
Expenses:Entertainment:Streaming
Expenses:Entertainment:Books
Expenses:Travel:Flights
Expenses:Travel:Hotels
Expenses:Taxes:Federal
Expenses:Taxes:State
Expenses:Taxes:SocialSecurity
Expenses:Taxes:Medicare

; -- Patrimonio --
Equity:Opening-Balances
Equity:Retained-Earnings

Funcionalidades especificas de Fava

Indicadores de actualizacion

Una de las mejores funcionalidades de Fava para la gestion de cuentas. Agrega estos metadatos a cualquier cuenta:

2014-05-01 open Assets:US:BofA:Checking  USD
fava-uptodate-indication: TRUE

Fava entonces muestra puntos de colores junto a la cuenta:

  • Punto verde: la ultima entrada es una verificacion de saldo exitosa (la cuenta esta conciliada)
  • Punto rojo: la ultima entrada es una verificacion de saldo fallida (necesita atencion)
  • Punto amarillo: existe una ultima entrada pero no es una verificacion de saldo (aun no conciliada)
  • Punto gris: sin actividad dentro del periodo de revision

Configura el umbral del punto gris:

2016-06-14 custom "fava-option" "uptodate-indicator-grey-lookback-days" "60"

Controles de vista de arbol

Controla como Fava muestra las cuentas:

; Mostrar cuentas cerradas en el arbol
2016-06-14 custom "fava-option" "show-closed-accounts" "true"

; Mostrar cuentas sin transacciones
2016-06-14 custom "fava-option" "show-accounts-with-zero-transactions" "true"

; Mostrar cuentas con saldo cero
2016-06-14 custom "fava-option" "show-accounts-with-zero-balance" "true"

Patrones de colapso

Colapsa cuentas profundamente anidadas por defecto:

; Colapsar todas las cuentas con 3+ niveles de profundidad
2016-06-14 custom "fava-option" "collapse-pattern" ".*:.*:.*"

; Colapsar subarboles especificos
2016-06-14 custom "fava-option" "collapse-pattern" "Assets:US:Vanguard:.*"

Incluir subcuentas en el diario de la cuenta

Al ver el diario de una cuenta en Fava, incluir los registros de las cuentas hijas:

2016-06-14 custom "fava-option" "account-journal-include-children" "true"

Invertir signos para mayor legibilidad

Por defecto, los ingresos y pasivos se muestran como numeros negativos (su signo natural). Para mostrarlos como positivos:

2016-06-14 custom "fava-option" "invert-income-liabilities-equity" "true"

Gestion de documentos

Fava integra el manejo de documentos con tu jerarquia de cuentas. Establece una raiz de documentos:

option "documents" "/path/to/documents"

Luego organiza los archivos segun la ruta de la cuenta:

/path/to/documents/
Assets/
US/
BofA/
Checking/
2024-01-15.january-statement.pdf
2024-02-15.february-statement.pdf
Liabilities/
US/
Amex/
Platinum/
2024-03-15.march-bill.pdf

Los archivos que comienzan con YYYY-MM-DD son descubiertos automaticamente por Fava y aparecen en la vista del diario de la cuenta.

Errores comunes y como evitarlos

1. Errores tipograficos en nombres de cuentas

Un simple error tipografico como Expenses:Grocries crea una cuenta completamente nueva y no deseada.

Solucion: No uses el plugin auto_accounts en produccion. Requiere directivas open explicitas. Beancount generara un error inmediatamente ante cualquier cuenta no declarada:

ERROR: Invalid reference to unknown account 'Expenses:Grocries'

2. Olvidar las restricciones de moneda

Sin restricciones de moneda, puedes registrar accidentalmente EUR en una cuenta que solo deberia ser USD.

Solucion: Siempre especifica las monedas en las directivas open:

2014-01-01 open Assets:US:BofA:Checking  USD

3. No verificar saldos regularmente

Sin verificaciones de saldo regulares, los errores pueden pasar desapercibidos durante meses.

Solucion: Agrega verificaciones de saldo mensuales para cada cuenta activa:

2024-01-01 balance Assets:US:BofA:Checking   5,432.10 USD
2024-02-01 balance Assets:US:BofA:Checking 4,890.55 USD
2024-03-01 balance Assets:US:BofA:Checking 6,123.00 USD

4. Convenciones de nomenclatura inconsistentes

Mezclar patrones (por ejemplo, Expenses:Food vs Expenses:US:Food) hace que las consultas y los informes sean confusos.

Solucion: Elige una convencion y mantente fiel a ella. Usa prefijos de pais para cuentas del balance general, nomenclatura basada en categorias para ingresos y gastos.

5. Cerrar sin verificacion de saldo cero

La directiva close no verifica el saldo. Podrias cerrar una cuenta que todavia tiene dinero.

Solucion: Siempre empareja el cierre con una verificacion de saldo:

2023-12-31 balance Assets:US:OldBank:Savings  0.00 USD
2023-12-31 close Assets:US:OldBank:Savings

Patrones avanzados

Consejos para multiples monedas

Declara tus monedas operativas para columnas dedicadas en los informes:

option "operating_currency" "USD"
option "operating_currency" "EUR"

Para cuentas con multiples monedas, lista todas las monedas permitidas:

2014-01-01 open Assets:Cash  USD,CAD,EUR

Las verificaciones de saldo con multiples monedas deben hacerse una moneda a la vez:

2024-01-01 balance Assets:Cash     562.00 USD
2024-01-01 balance Assets:Cash 210.00 CAD
2024-01-01 balance Assets:Cash 60.00 EUR

Pad y balance para la configuracion inicial

Usa la directiva pad para establecer saldos iniciales sin calcular manualmente los montos:

2000-05-28 open Assets:US:BofA:Checking  USD
2000-05-28 pad Assets:US:BofA:Checking Equity:Opening-Balances
2024-07-01 balance Assets:US:BofA:Checking 12,345.67 USD

Beancount sintetiza automaticamente la transaccion de ajuste. Una advertencia importante: las verificaciones de saldo comprueban el saldo al inicio de la fecha especificada. Por lo tanto, un pad del 2 de enero necesita una verificacion de saldo del 3 de enero o posterior.

Metadatos de cuenta para categorizacion

Usa metadatos en las directivas open para informes personalizados:

2014-01-01 open Assets:US:BofA:Checking  USD
category: "liquid"
tax-status: "taxable"

2014-01-01 open Assets:US:Vanguard:401k USD
category: "retirement"
tax-status: "tax-deferred"

Consulta los metadatos con BQL:

SELECT account, META("category") WHERE META("tax-status") = "taxable"

Notas para el historial de la cuenta

Adjunta notas con fecha al diario de cualquier cuenta:

2024-03-20 note Assets:US:BofA:Checking "Llame por cargo disputado, ref #12345"
2024-06-01 note Liabilities:US:Chase:Sapphire "Cuota anual exonerada despues de llamar a retencion"

Estas notas aparecen en el diario de la cuenta en Fava, proporcionando un registro de auditoria.

Cuentas de seguimiento y asignacion de fondos

Beancount no tiene los registros virtuales de Ledger, pero puedes usar subcuentas para asignar fondos:

; Rastrear fondo de emergencia dentro de la cuenta corriente
Assets:US:BofA:Checking:EmergencyFund USD
Assets:US:BofA:Checking:Operating USD

; Rastrear reembolsos
Assets:Receivables:Employer:Travel USD
Assets:Receivables:Friend:SharedDinner USD

Categorias de gastos amigables para impuestos

Estructura las cuentas de gastos para facilitar la preparacion de impuestos:

Expenses:Health:Medical:Deductible
Expenses:Charity:Deductible
Expenses:Business:Office
Expenses:Business:Equipment
Expenses:Education:Professional

Hoja de referencia rapida

TareaSintaxis
Abrir una cuenta2024-01-01 open Assets:US:BofA:Checking USD
Cerrar una cuenta2024-12-31 close Assets:US:OldBank:Savings
Verificar saldo2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD
Ajustar al saldo2024-01-01 pad Assets:Cash Equity:Opening-Balances
Agregar nota2024-01-15 note Assets:US:BofA:Checking "Conciliacion mensual completada"
Adjuntar documento2024-01-15 document Assets:US:BofA:Checking "/path/to/statement.pdf"
Agregar metadatosClave-valor con sangria en la linea siguiente a open
Apertura automatica (dev)plugin "beancount.plugins.auto_accounts"
Restringir moneda2024-01-01 open Assets:Cash USD,EUR
Establecer metodo de asignacion2024-01-01 open Assets:US:ETrade:AAPL AAPL "FIFO"

Resumen

Gestionar bien las cuentas es la base de una contabilidad efectiva en Beancount. Estos son los puntos clave:

  1. Siempre usa directivas open explicitas -- detectan errores tipograficos y refuerzan la disciplina
  2. Agrega restricciones de moneda para prevenir errores entre monedas
  3. Usa una convencion de nomenclatura consistente -- por institucion para el balance general, por categoria para ingresos/gastos
  4. Comienza simple y refina -- divide las cuentas a medida que crezcan tus necesidades de informes
  5. Verifica los saldos regularmente -- la conciliacion mensual detecta errores a tiempo
  6. Cierra las cuentas correctamente -- con una verificacion de saldo cero
  7. Aprovecha las funcionalidades de Fava -- indicadores de actualizacion, patrones de colapso e integracion de documentos
  8. Usa metadatos para categorizacion y reportes personalizados

Feliz contabilidad!

References: