Esta guía proporciona plantillas prácticas de Beancount y ejemplos del mundo real para escenarios comunes de criptomonedas. Copia y adapta estas plantillas para tus propias necesidades de contabilidad de criptomonedas.
Cómo leer estos bloques
Cada bloque delimitado abajo es una de tres cosas, y no son intercambiables:
- Las plantillas contienen marcadores de posición
[CORCHETES]y fechasYYYY-MM-DD. No se cargarán hasta que sustituyas valores reales — los corchetes no son sintaxis de Beancount. - Los ejemplos se sitúan directamente bajo su plantilla, llevan fechas y montos reales, y están escritos para cargarse. Cada uno aún necesita que las cuentas que toca estén abiertas, que es para lo que sirve la Plantilla de Estructura de Cuentas a continuación. La única excepción es el bloque de conciliación, que verifica saldos que solo tu propio libro mayor puede satisfacer.
- El bloque de Arbitraje de Préstamo Flash es seudocódigo, y está etiquetado como tal donde aparece.
Dos convenciones recorren todos ellos:
- Las cuentas de ingresos mantienen créditos, por lo que son negativas. Una ganancia realizada es una partida negativa en
Income:CapitalGains:…; una pérdida realizada es una partida positiva enExpenses:CapitalLoss:…. Invertir esto es la forma más común de que una entrada de cripto no cuadre. - Una comisión se registra una vez como gasto y una vez como reducción en efectivo. Los ingresos brutos van a la cuenta de efectivo, la comisión sale de ella, y la diferencia es lo que realmente llega a tu cuenta.
Explora un libro mayor de ejemplo de criptomonedas en vivo:
Plantilla de Configuración Básica
Plantilla de Estructura de Cuentas
; =============================================================================
; CRYPTOCURRENCY ACCOUNT SETUP TEMPLATE
; =============================================================================
; Bank Accounts
1970-01-01 open Assets:Checking
; Exchange Accounts
1970-01-01 open Assets:Crypto:Coinbase:USD
1970-01-01 open Assets:Crypto:Coinbase:BTC
1970-01-01 open Assets:Crypto:Coinbase:ETH
1970-01-01 open Assets:Crypto:Binance:USD
1970-01-01 open Assets:Crypto:Binance:BTC
1970-01-01 open Assets:Crypto:Binance:ETH
1970-01-01 open Assets:Crypto:Binance:BNB
1970-01-01 open Assets:Crypto:Binance:ADA
; On-Chain and Mining Accounts
1970-01-01 open Assets:Crypto:Ethereum:ETH
1970-01-01 open Assets:Crypto:Polygon:ETH
1970-01-01 open Assets:Crypto:Mining:BTC
; Wallet Accounts
1970-01-01 open Assets:Crypto:Wallet:Ledger:BTC
1970-01-01 open Assets:Crypto:Wallet:Ledger:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:ETH
1970-01-01 open Assets:Crypto:Wallet:MetaMask:USDC
1970-01-01 open Assets:Crypto:Wallet:MetaMask:UNI
; DeFi Protocol Accounts
1970-01-01 open Assets:DeFi:Uniswap:ETH-USDC-LP
1970-01-01 open Assets:DeFi:Compound:CUSDC
1970-01-01 open Assets:Staking:Ethereum:ETH
; Income Accounts
1970-01-01 open Income:Crypto:Staking:ETH
1970-01-01 open Income:Crypto:Mining:BTC
1970-01-01 open Income:Crypto:Airdrops
1970-01-01 open Income:Crypto:DeFi:Yield
1970-01-01 open Income:CapitalGains:Crypto
1970-01-01 open Income:CapitalGains:LongTerm
; Expense Accounts
1970-01-01 open Expenses:Crypto:Fees:Trading
1970-01-01 open Expenses:Crypto:Fees:Network
1970-01-01 open Expenses:Crypto:Fees:Withdrawal
1970-01-01 open Expenses:Crypto:Bridge:Fees
1970-01-01 open Expenses:Crypto:Mining:Electricity
1970-01-01 open Expenses:CapitalLoss:Crypto
; Commodity Definitions
1970-01-01 commodity BTC
name: "Bitcoin"
asset-class: "cryptocurrency"
1970-01-01 commodity ETH
name: "Ethereum"
asset-class: "cryptocurrency"
1970-01-01 commodity USDC
name: "USD Coin"
asset-class: "stablecoin"
; Compound writes this receipt token "cUSDC", but a Beancount commodity
; and every account component must start with a capital letter or a digit,
; so the ledger spells it CUSDC and keeps the display name in metadata.
1970-01-01 commodity CUSDC
name: "cUSDC (Compound USD Coin)"
asset-class: "defi-receipt"Plantillas de Trading
Compra Básica de Criptomoneda
; Template: Buy cryptocurrency on exchange
YYYY-MM-DD * "Buy [AMOUNT] [CRYPTO] on [EXCHANGE]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Assets:Crypto:[EXCHANGE]:USD -[TOTAL_COST] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
; Example: Buy 1 BTC on Coinbase
2024-01-15 * "Buy 1 BTC on Coinbase"
Assets:Crypto:Coinbase:BTC 1.0 BTC {45000.00 USD}
Assets:Crypto:Coinbase:USD -45000.00 USD
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USDVenta de Criptomoneda
; Template: Sell cryptocurrency on exchange
YYYY-MM-DD * "Sell [AMOUNT] [CRYPTO] on [EXCHANGE]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
Assets:Crypto:[EXCHANGE]:USD [GROSS_PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Income:CapitalGains:Crypto -[GAIN] USD ; a loss is a positive Expenses:CapitalLoss:Crypto instead
; Example: Sell 0.5 BTC with a gain
2024-03-20 * "Sell 0.5 BTC on Coinbase"
Assets:Crypto:Coinbase:BTC -0.5 BTC {45000.00 USD} @ 48000.00 USD
Assets:Crypto:Coinbase:USD 24000.00 USD ; gross proceeds, 0.5 * 48,000.00
Expenses:Crypto:Fees:Trading 30.00 USD
Assets:Crypto:Coinbase:USD -30.00 USD ; the fee leaves the same cash account
Income:CapitalGains:Crypto -1500.00 USD ; 24,000.00 proceeds - 22,500.00 basisEl lote enajenado vale $22,500.00 al costo, la venta genera $24,000.00 brutos, y $30.00 de eso van al exchange — así que $23,970.00 de efectivo llegan y se realiza una ganancia de $1,500.00. No netees la comisión en la ganancia: la comisión ya es un gasto, y restarla una segunda vez es lo que deja la transacción desbalanceada.
Intercambio Cripto a Cripto
; Template: Trade one crypto for another
YYYY-MM-DD * "Trade [AMOUNT1] [CRYPTO1] for [AMOUNT2] [CRYPTO2]"
Assets:Crypto:[EXCHANGE]:[CRYPTO1] -[AMOUNT1] [CRYPTO1] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:[CRYPTO2] [AMOUNT2] [CRYPTO2] {[NEW_PRICE] USD}
Income:CapitalGains:Crypto -[GAIN] USD ; taxable event; a loss is a positive Expenses:CapitalLoss:Crypto
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
; Example: Trade BTC for ETH
2024-02-10 * "Trade 1 BTC for 20 ETH on Binance"
Assets:Crypto:Binance:BTC -1.0 BTC {46000.00 USD}
Assets:Crypto:Binance:ETH 20 ETH {2400.00 USD}
Income:CapitalGains:Crypto -2000.00 USD ; 48,000.00 received - 46,000.00 basis
Expenses:Crypto:Fees:Trading 40.00 USD
Assets:Crypto:Binance:USD -40.00 USDUn intercambio cripto a cripto enajena el primer activo, por lo que realiza una ganancia exactamente como una venta por efectivo: 20 ETH adquiridos a $2,400.00 son $48,000.00 de valor recibido contra $46,000.00 de base de BTC. La comisión de $40.00 se paga en efectivo y no cambia la ganancia.
Plantillas de Transferencia
Transferencia de Exchange a Wallet
; Template: Transfer crypto from exchange to wallet
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE] to [WALLET]"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:Wallet:[WALLET]:[CRYPTO] [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Expenses:Crypto:Fees:Withdrawal [FEE] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[FEE] [CRYPTO] {[COST_BASIS] USD}
; Example: Transfer BTC to Ledger
2024-01-20 * "Transfer 1 BTC from Coinbase to Ledger"
Assets:Crypto:Coinbase:BTC -1.0 BTC {45000.00 USD}
Assets:Crypto:Wallet:Ledger:BTC 1.0 BTC {45000.00 USD}
Expenses:Crypto:Fees:Withdrawal 0.0005 BTC {45000.00 USD}
Assets:Crypto:Coinbase:BTC -0.0005 BTC {45000.00 USD}Una transferencia no es una enajenación, por lo que no realiza nada: el mismo costo {45000.00 USD} viaja con las monedas y la cuenta receptora hereda la base. Dos consecuencias se derivan. La comisión de retiro se paga en BTC y se contabiliza como gasto a ese mismo costo, por lo que tampoco realiza ganancia — si tu tratamiento dice lo contrario, valora la comisión con @ y añade una partida de ganancia. Y la cuenta emisora ya debe mantener 1.0005 BTC a ese costo exacto, no 1.0, porque la comisión sale del mismo lote. Una reducción sin un lote correspondiente no se contabiliza por muy bien que sumen los totales.
Transferencia entre Exchanges
; Template: Transfer between exchanges
YYYY-MM-DD * "Transfer [AMOUNT] [CRYPTO] from [EXCHANGE1] to [EXCHANGE2]"
Assets:Crypto:[EXCHANGE1]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE2]:[CRYPTO] [AMOUNT] [CRYPTO] {[COST_BASIS] USD}
Expenses:Crypto:Fees:Network [FEE] [CRYPTO] {[COST_BASIS] USD}
Assets:Crypto:[EXCHANGE1]:[CRYPTO] -[FEE] [CRYPTO] {[COST_BASIS] USD}
; Example: Transfer ETH from Coinbase to Binance
2024-02-05 * "Transfer 10 ETH from Coinbase to Binance"
Assets:Crypto:Coinbase:ETH -10 ETH {2500.00 USD}
Assets:Crypto:Binance:ETH 10 ETH {2500.00 USD}
Expenses:Crypto:Fees:Network 0.01 ETH {2500.00 USD}
Assets:Crypto:Coinbase:ETH -0.01 ETH {2500.00 USD}Plantillas de Staking
Staking de Ethereum
; Template: Stake ETH
YYYY-MM-DD * "Stake [AMOUNT] ETH"
Assets:Crypto:Wallet:MetaMask:ETH -[AMOUNT] ETH {[PRICE] USD}
Assets:Staking:Ethereum:ETH [AMOUNT] ETH {[PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[PRICE] USD}
; Example: Stake 32 ETH
2024-01-10 * "Stake 32 ETH on Ethereum 2.0"
Assets:Crypto:Wallet:MetaMask:ETH -32 ETH {2500.00 USD}
Assets:Staking:Ethereum:ETH 32 ETH {2500.00 USD}
Expenses:Crypto:Fees:Network 0.01 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.01 ETH {2500.00 USD}Recompensas de Staking
; Template: Receive staking rewards
YYYY-MM-DD * "[CRYPTO] Staking Rewards - [PERIOD]"
Assets:Staking:[PROTOCOL]:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Income:Crypto:Staking:[CRYPTO] -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: ETH staking rewards
2024-02-01 * "ETH Staking Rewards - January"
Assets:Staking:Ethereum:ETH 0.08 ETH {2600.00 USD}
Income:Crypto:Staking:ETH -208.00 USD ; 0.08 * 2,600.00Una recompensa es ingreso recibido en especie, por lo que las dos partidas describen el mismo evento desde ambos lados: 0.08 ETH llegan con una base de $2,600.00 por unidad, y el ingreso correspondiente de $208.00 es un crédito — negativo. El {2,600.00 USD} es un precio externo que tienes que obtener tú mismo; Beancount lo registra, no lo busca. Anótalo del exchange o índice que realmente uses, y mantén la misma fuente durante todo el año.
Esos $208.00 también son la base del costo de la recompensa de aquí en adelante. Cuando finalmente vendas los 0.08 ETH, solo el movimiento desde esta fecha es una ganancia — los $208.00 ya han sido gravados como ingreso y no deben reconocerse dos veces. Si el ingreso es gravable al recibirlo o al enajenarlo difiere según la jurisdicción; el libro mayor registra los hechos de cualquier manera.
Plantillas DeFi
Provisión de Liquidez en Uniswap
; Template: Add liquidity to Uniswap pool
YYYY-MM-DD * "Add liquidity to [TOKEN1]-[TOKEN2] pool"
Assets:Crypto:Wallet:MetaMask:[TOKEN1] -[AMOUNT1] [TOKEN1] {[PRICE1] USD}
Assets:Crypto:Wallet:MetaMask:[TOKEN2] -[AMOUNT2] [TOKEN2] {[PRICE2] USD}
Assets:DeFi:Uniswap:[TOKEN1]-[TOKEN2]-LP [LP_AMOUNT] [LP_TOKEN] {[LP_PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[ETH_PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[ETH_PRICE] USD}
; Example: Add ETH-USDC liquidity
2024-01-15 * "Add liquidity to ETH-USDC pool"
Assets:Crypto:Wallet:MetaMask:ETH -10 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:USDC -25000 USDC @ 1.00 USD
Assets:DeFi:Uniswap:ETH-USDC-LP 100 UNI-V3-ETH-USDC {500.00 USD}
Expenses:Crypto:Fees:Network 0.02 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.02 ETH {2500.00 USD}Concilia esto un activo a la vez: $25,000.00 de ETH más $25,000.00 de USDC salen, $50,000.00 de token LP llegan, y la comisión de gas mueve $50.00 de ETH del wallet a un gasto. La parte de stablecoin lleva @ 1.00 USD porque se mantiene sin una base de costo — sin la anotación de precio su peso es 25,000 USDC, que no puede cancelar dólares. En muchas jurisdicciones depositar en un pool es en sí una enajenación de ambos tokens; esta entrada deliberadamente transporta la base en su lugar, así que añade las partidas de ganancia si tu tratamiento lo requiere.
Préstamo en Compound
; Template: Supply assets to Compound
YYYY-MM-DD * "Supply [AMOUNT] [TOKEN] to Compound"
Assets:Crypto:Wallet:MetaMask:[TOKEN] -[AMOUNT] [TOKEN] @ [TOKEN_PRICE] USD
Assets:DeFi:Compound:C[TOKEN] [C_AMOUNT] C[TOKEN] {[C_PRICE] USD}
Expenses:Crypto:Fees:Network [FEE] ETH {[ETH_PRICE] USD}
Assets:Crypto:Wallet:MetaMask:ETH -[FEE] ETH {[ETH_PRICE] USD}
; Example: Supply USDC to Compound
2024-01-20 * "Supply 10000 USDC to Compound"
Assets:Crypto:Wallet:MetaMask:USDC -10000 USDC @ 1.00 USD
Assets:DeFi:Compound:CUSDC 500 CUSDC {20.00 USD}
Expenses:Crypto:Fees:Network 0.008 ETH {2500.00 USD}
Assets:Crypto:Wallet:MetaMask:ETH -0.008 ETH {2500.00 USD}Dos cosas hacen que esto se cargue. La parte de USDC lleva @ 1.00 USD para que ambos lados del intercambio pesen en la misma moneda — sin ello Beancount ve $10,000.00 de CUSDC apareciendo contra 10,000 unidades de USDC desapareciendo, que son activos diferentes y no se cancelan. Y el token de recibo es CUSDC, no cUSDC: una primera letra minúscula es un error de lexer tanto en un componente de cuenta como en un símbolo de activo, aunque el protocolo lo escriba así en su propia interfaz.
Plantillas de Minería
Recompensas de Minería
; Template: Receive mining rewards
YYYY-MM-DD * "[CRYPTO] Mining Reward - [POOL/SOLO]"
Assets:Crypto:Mining:[CRYPTO] [AMOUNT] [CRYPTO] {[PRICE] USD}
Income:Crypto:Mining:[CRYPTO] -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: Bitcoin mining reward
2024-01-15 * "BTC Mining Reward - Slush Pool"
Assets:Crypto:Mining:BTC 0.01 BTC {45000.00 USD}
Income:Crypto:Mining:BTC -450.00 USD ; 0.01 * 45,000.00Gastos de Minería
; Template: Mining operational expenses
YYYY-MM-DD * "Mining [EXPENSE_TYPE] - [PERIOD]"
Expenses:Crypto:Mining:[EXPENSE_TYPE] [AMOUNT] USD
Assets:Checking -[AMOUNT] USD
; Example: Mining electricity costs
2024-01-31 * "Mining Electricity - January"
Expenses:Crypto:Mining:Electricity 800.00 USD
Assets:Checking -800.00 USDPlantillas de Airdrop
Airdrops de Tokens
; Template: Receive token airdrop
YYYY-MM-DD * "[TOKEN] Airdrop from [PROJECT]"
Assets:Crypto:Wallet:[WALLET]:[TOKEN] [AMOUNT] [TOKEN] {[PRICE] USD}
Income:Crypto:Airdrops -[VALUE] USD ; [VALUE] = [AMOUNT] * [PRICE]
; Example: UNI token airdrop
2024-03-01 * "UNI Airdrop from Uniswap"
Assets:Crypto:Wallet:MetaMask:UNI 400 UNI {8.00 USD}
Income:Crypto:Airdrops -3200.00 USD ; 400 * 8.00Como una recompensa de staking, el valor reconocido del airdrop se convierte en su base de costo. Registra el precio que puedas defender — la primera cotización líquida del token, de una fuente que nombres — en lugar de un número redondo.
Plantillas Avanzadas
Arbitraje de Préstamo Flash
Este bloque es seudocódigo, no una plantilla. Esboza la secuencia de movimientos de valor dentro de un préstamo flash. No se cargará incluso después de sustituir valores, porque las líneas en blanco entre los grupos terminan la transacción — Beancount reporta un error de sintaxis en las partidas que siguen una. Registra un préstamo flash real como una sola transacción sin líneas en blanco (etiquetando las piernas con comentarios ; indentados), eliminando las piernas intermedias que se netean a cero dentro del mismo bloque.
Pseudocode: flash loan arbitrage
borrow Assets:Crypto:Temp:FlashLoan +[LOAN_AMOUNT] [TOKEN]
Liabilities:DeFi:[PROTOCOL]:Flash -[LOAN_AMOUNT] [TOKEN]
execute Assets:Crypto:Temp:FlashLoan -[LOAN_AMOUNT] [TOKEN]
Assets:Crypto:Temp:Arbitrage +[RETURN_AMOUNT] [TOKEN]
repay Liabilities:DeFi:[PROTOCOL]:Flash +[LOAN_AMOUNT] [TOKEN]
Assets:Crypto:Temp:Arbitrage -[LOAN_PLUS_FEE] [TOKEN]
keep Assets:Crypto:Wallet:[WALLET]:[TOKEN] +[PROFIT] [TOKEN]
Income:Crypto:Arbitrage -[PROFIT_USD] USDTodo lo que el préstamo tocó desaparece al final del bloque, por lo que lo que el libro mayor realmente necesita registrar es la ganancia y la comisión del protocolo. El ejemplo de arbitraje en la guía de seguimiento de portafolio muestra la forma de transacción única.
Puente Entre Cadenas
; Template: Bridge assets across chains
YYYY-MM-DD * "Bridge [AMOUNT] [TOKEN] from [CHAIN1] to [CHAIN2]"
Assets:Crypto:[CHAIN1]:[TOKEN] -[AMOUNT] [TOKEN] {[PRICE] USD}
Assets:Crypto:[CHAIN2]:[TOKEN] [AMOUNT] [TOKEN] {[PRICE] USD}
Expenses:Crypto:Bridge:Fees [FEE] [TOKEN] {[PRICE] USD}
Assets:Crypto:[CHAIN1]:[TOKEN] -[FEE] [TOKEN] {[PRICE] USD}
; Example: Bridge ETH to Polygon
2024-02-05 * "Bridge 5 ETH from Ethereum to Polygon"
Assets:Crypto:Ethereum:ETH -5 ETH {2600.00 USD}
Assets:Crypto:Polygon:ETH 5 ETH {2600.00 USD}
Expenses:Crypto:Bridge:Fees 0.01 ETH {2600.00 USD}
Assets:Crypto:Ethereum:ETH -0.01 ETH {2600.00 USD}Plantillas Optimizadas para Impuestos
Cosecha de Pérdidas Fiscales
; Template: Tax loss harvesting
YYYY-MM-DD * "Tax loss harvesting - Sell [CRYPTO] at loss"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[HIGH_COST_BASIS] USD}
Assets:Crypto:[EXCHANGE]:USD [PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Expenses:CapitalLoss:Crypto [LOSS] USD
; Example: Harvest ADA loss
2024-12-15 * "Tax loss harvesting - Sell ADA at loss"
Assets:Crypto:Binance:ADA -1000 ADA {0.60 USD} @ 0.45 USD
Assets:Crypto:Binance:USD 450.00 USD ; gross proceeds, 1,000 * 0.45
Expenses:Crypto:Fees:Trading 5.00 USD
Assets:Crypto:Binance:USD -5.00 USD
Expenses:CapitalLoss:Crypto 150.00 USD ; 600.00 basis - 450.00 proceedsLa pérdida es la imagen espejo de una ganancia: $600.00 de base salen, $450.00 de ingresos brutos llegan, y la diferencia de $150.00 es una partida positiva a una cuenta de gasto. $445.00 de efectivo es lo que realmente llega, después de la comisión de $5.00.
Ganancias de Capital a Largo Plazo
; Template: Long-term capital gains sale
YYYY-MM-DD * "Long-term sale - [CRYPTO] held > 1 year"
date-acquired: "[PURCHASE_DATE]"
holding-period: "[DAYS] days"
Assets:Crypto:[EXCHANGE]:[CRYPTO] -[AMOUNT] [CRYPTO] {[COST_BASIS] USD} @ [SALE_PRICE] USD
Assets:Crypto:[EXCHANGE]:USD [GROSS_PROCEEDS] USD
Expenses:Crypto:Fees:Trading [FEE] USD
Assets:Crypto:[EXCHANGE]:USD -[FEE] USD
Income:CapitalGains:LongTerm -[GAIN] USD
; Example: Long-term BTC sale
2025-02-01 * "Long-term sale - BTC held 382 days"
date-acquired: "2024-01-15"
holding-period: "382 days"
Assets:Crypto:Coinbase:BTC -1.0 BTC {45000.00 USD} @ 55000.00 USD
Assets:Crypto:Coinbase:USD 55000.00 USD
Expenses:Crypto:Fees:Trading 50.00 USD
Assets:Crypto:Coinbase:USD -50.00 USD
Income:CapitalGains:LongTerm -10000.00 USD ; 55,000.00 proceeds - 45,000.00 basisLa ganancia es $10,000.00, no $9,950.00: la comisión de $50.00 ya está registrada como gasto, por lo que netearla en la ganancia la deduciría dos veces. Income:CapitalGains:LongTerm es una cuenta separada de Income:CapitalGains:Crypto solo para que el período de tenencia sea visible en un informe — Beancount no calcula períodos de tenencia por ti, que es por lo que vale la pena llevar los metadatos date-acquired y holding-period.
Plantillas de Conciliación
Verificación Mensual de Saldo
; Template: Monthly balance assertions
YYYY-MM-DD balance Assets:Crypto:[EXCHANGE]:[CRYPTO] [EXPECTED_BALANCE] [CRYPTO]
YYYY-MM-DD balance Assets:Crypto:Wallet:[WALLET]:[CRYPTO] [EXPECTED_BALANCE] [CRYPTO]
; Example: January balance verification
2024-01-31 balance Assets:Crypto:Coinbase:BTC 2.5 BTC
2024-01-31 balance Assets:Crypto:Binance:ETH 15.0 ETH
2024-01-31 balance Assets:Crypto:Wallet:Ledger:BTC 1.0 BTCA diferencia de los otros ejemplos aquí, este no es autocontenido por diseño: los montos son lo que tus propias pantallas de exchange digan, y la verificación falla hasta que tus transacciones estén en el libro mayor — que es el punto completo del mismo. Ten en cuenta que balance verifica el saldo al inicio del día nombrado, así que fecha la verificación el día después del período que estás cerrando.
Actualizaciones de Precio
; Template: Daily price updates
YYYY-MM-DD price [CRYPTO] [PRICE] USD
; Example: Daily prices
2024-01-15 price BTC 45000.00 USD
2024-01-15 price ETH 2500.00 USD
2024-01-15 price ADA 0.50 USDInstrucciones de Uso
-
Copia la plantilla relevante para tu tipo de transacción
-
Reemplaza cada marcador de posición. Una plantilla no es Beancount válido hasta que
YYYY-MM-DDy cada token[CORCHETES]desaparezcan — los corchetes no son sintaxis de Beancount, y uno sobrante es un error de análisis, no un valor ignorado silenciosamente. Sustituir es mecánico:Marcador de Posición Sustitución Ejemplo YYYY-MM-DDla fecha de la transacción 2024-03-20[MONTO]unidades del activo, sin comillas 0.5[CRIPTO]el símbolo del activo, en mayúsculas BTC[EXCHANGE]el componente de cuenta para el lugar Coinbase[BASE_DEL_COSTO]el costo por unidad del lote que estás eliminando 45000.00[PRECIO_DE_VENTA]el precio por unidad al que vendiste 48000.00[INGRESOS_BRUTOS][MONTO]×[PRECIO_DE_VENTA], antes de comisiones24000.00[COMISION]la comisión del lugar, en la moneda en que se cobró 30.00[GANANCIA][INGRESOS_BRUTOS]−[MONTO]×[BASE_DEL_COSTO]1500.00Sustituir esa columna en la plantilla de Venta de Criptomoneda reproduce el ejemplo trabajado impreso debajo, que es la forma más rápida de comprobar que has leído la plantilla correctamente.
-
Ajusta los nombres de cuentas para que coincidan con tu estructura de cuentas, y asegúrate de que cada una esté abierta por la Plantilla de Estructura de Cuentas — una cuenta que nunca se abre es un error de carga, no una advertencia
-
Añade metadatos según sea necesario para reportes de impuestos o seguimiento
-
Verifica los cálculos con
bea --file tu-archivo.bean checkantes de finalizar las entradas. Una entrada que no cuadre, o que reduzca un lote que no tienes, falla allí en lugar de producir silenciosamente un informe incorrecto
Mejores Prácticas
- Usa convenciones de nomenclatura consistentes
- Incluye IDs de transacción en los metadatos
- Documenta transacciones complejas a fondo
- Verifica los tipos de cambio y precios
- Mantén copias de seguridad regulares de tus archivos
Estas plantillas proporcionan una base sólida para la contabilidad de criptomonedas en Beancount.io. Personalízalas según tus necesidades específicas y patrones de trading.