La guia completa para gestionar cuentas en Beancount y Fava
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:
| Tipo | Proposito | Signo normal | Informe |
|---|---|---|---|
| Assets | Recursos que posees (efectivo, inversiones, propiedades) | Positivo (debito) | Balance general |
| Liabilities | Deudas que debes (tarjetas de credito, prestamos, hipotecas) | Negativo (credito) | Balance general |
| Equity | Participacion del propietario, ganancias retenidas, saldos iniciales | Negativo (credito) | Balance general |
| Income | Fuentes de ingresos (salario, intereses, dividendos) | Negativo (credito) | Estado de resultados |
| Expenses | Categorias 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 soloExpenses) - 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:
| Metodo | Comportamiento |
|---|---|
"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:Federalse convierte automaticamente enIncome: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
| Tarea | Sintaxis |
|---|---|
| Abrir una cuenta | 2024-01-01 open Assets:US:BofA:Checking USD |
| Cerrar una cuenta | 2024-12-31 close Assets:US:OldBank:Savings |
| Verificar saldo | 2024-01-01 balance Assets:US:BofA:Checking 5,432.10 USD |
| Ajustar al saldo | 2024-01-01 pad Assets:Cash Equity:Opening-Balances |
| Agregar nota | 2024-01-15 note Assets:US:BofA:Checking "Conciliacion mensual completada" |
| Adjuntar documento | 2024-01-15 document Assets:US:BofA:Checking "/path/to/statement.pdf" |
| Agregar metadatos | Clave-valor con sangria en la linea siguiente a open |
| Apertura automatica (dev) | plugin "beancount.plugins.auto_accounts" |
| Restringir moneda | 2024-01-01 open Assets:Cash USD,EUR |
| Establecer metodo de asignacion | 2024-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:
- Siempre usa directivas
openexplicitas -- detectan errores tipograficos y refuerzan la disciplina - Agrega restricciones de moneda para prevenir errores entre monedas
- Usa una convencion de nomenclatura consistente -- por institucion para el balance general, por categoria para ingresos/gastos
- Comienza simple y refina -- divide las cuentas a medida que crezcan tus necesidades de informes
- Verifica los saldos regularmente -- la conciliacion mensual detecta errores a tiempo
- Cierra las cuentas correctamente -- con una verificacion de saldo cero
- Aprovecha las funcionalidades de Fava -- indicadores de actualizacion, patrones de colapso e integracion de documentos
- Usa metadatos para categorizacion y reportes personalizados
Feliz contabilidad!
- https://beancount.github.io/docs/beancount_language_syntax.html
- https://beancount.github.io/docs/command_line_accounting_cookbook.html
- https://beancount.github.io/docs/beancount_options_reference.html
- https://beancount.github.io/docs/beancount_query_language.html
- https://plaintextaccounting.org/Choosing-accounts
