Il sistema di inventario di Beancount è una potente funzionalità per tracciare asset che vengono acquistati e venduti nel tempo, come azioni, fondi comuni o valute estere. Consente un tracciamento preciso del costo base, essenziale per calcolare le plusvalenze e comprendere la performance del portafoglio. Questo tutorial copre i meccanismi fondamentali per gestire gli inventari nella tua contabilità.
Concetti Fondamentali
Al suo cuore, la gestione dell'inventario ruota attorno al tracciamento delle posizioni. Una "posizione" è semplicemente una quantità di una merce detenuta in un conto. Beancount distingue tra due tipi fondamentali di posizioni.
Tipi di Posizione
-
Posizione Semplice (Senza Costo): Questa è una registrazione standard di saldo. Rappresenta una quantità di una merce senza alcun costo di acquisizione associato. È adatta per contanti o semplici asserzioni di saldo.
Assets:Bank:Checking 100.00 USD -
Posizione con Costo Base: Questo tipo di posizione include non solo il numero di unità e la merce, ma anche il costo al quale è stata acquisita. Questa è la base del tracciamento dell'inventario. Il costo è specificato tra parentesi graffe
{}.Assets:Invest:VTSAX 10 VTSAX {100.00 USD, "lotto-1"}In questo esempio, deteniamo 10 unità di
VTSAX. Ogni unità è stata acquisita a un costo di $100.00 USD. Questo lotto specifico di azioni è identificato come un "lotto."
Operazioni sull'Inventario
Ci sono due operazioni principali che puoi eseguire su un inventario:
-
Aumenti (Aggiunta all'inventario): Quando acquisti una merce, aumenti il tuo inventario. Crei un nuovo lotto con un numero specifico di unità e un costo base.
2024-01-15 * "Acquista azioni" Assets:Invest:STOCK 50 STOCK {25.00 USD, "lotto-1"} Assets:Bank:Checking -1250.00 USDQui, acquistiamo 50 unità di
STOCKa un costo unitario di $25.00 USD. Questo crea un lotto nel contoAssets:Invest:STOCK. -
Riduzioni (Rimozione dall'inventario): Quando vendi una merce, riduci il tuo inventario. Devi specificare da quale lotto stai vendendo. Questo viene fatto fornendo informazioni corrispondenti tra parentesi graffe.
2024-01-20 * "Vendi azioni" Assets:Invest:STOCK -25 STOCK {25.00 USD} Assets:Bank:Checking 625.00 USDIn questa transazione, stiamo vendendo 25 unità di
STOCKdal lotto acquistato a $25.00 USD per unità.
Metodi di Contabilizzazione
Quando riduci un inventario, Beancount necessita di una regola per decidere da quale lotto specifico prelevare se più lotti corrispondono o se la corrispondenza è ambigua. Questa regola è chiamata "metodo di contabilizzazione". Puoi impostare un metodo predefinito per l'intero file o specificarne uno per ogni conto.
1. STRICT (Rigoroso)
Il metodo STRICT è quello predefinito e più sicuro. Impone una corrispondenza esplicita e non ambigua.
2024-01-01 open Assets:Invest:STOCK "STRICT"- Richiede Corrispondenza Esatta del Lotto: Devi fornire informazioni sufficienti nella registrazione di riduzione (
{...}) per identificare in modo univoco il lotto venduto. - Errore su Corrispondenze Ambigu: Se le informazioni fornite corrispondono a più lotti, Beancount solleverà un errore, costringendoti a essere più specifico.
- Eccezione: Se una registrazione di riduzione rimuove esattamente il numero totale di unità detenute in un conto, è consentito uno specificatore di costo vuoto (
{}).
2. FIFO (First-In, First-Out)
Il metodo FIFO contabilizza automaticamente le riduzioni sui lotti più vecchi disponibili per primi.
2024-01-01 open Assets:Invest:STOCK "FIFO"- Risoluzione Automatica: Risolve l'ambiguità selezionando i lotti più vecchi corrispondenti.
- Corrispondenza Cronologica: Questo è un metodo contabile comune in cui si assume di vendere gli asset detenuti da più tempo. È il metodo richiesto per scopi fiscali in molti paesi.
3. LIFO (Last-In, First-Out)
Il metodo LIFO è l'opposto di FIFO. Contabilizza le riduzioni sui lotti più recenti disponibili per primi.
2024-01-01 open Assets:Invest:STOCK "LIFO"- Ordine Cronologico Inverso: Seleziona i lotti acquisiti più recentemente che corrispondono ai criteri di riduzione.
- Ottimizzazione Fiscale: In alcune giurisdizioni, questo metodo può essere utilizzato per l'ottimizzazione fiscale, ad esempio vendendo prima le azioni con il costo base più alto per minimizzare le plusvalenze.
4. NONE (Nessuno)
Il metodo NONE disabilita completamente la corrispondenza dei lotti.
2024-01-01 open Assets:Invest:STOCK "NONE"- Nessuna Corrispondenza dei Lotti: Beancount non tenta di abbinare le riduzioni agli aumenti.
- Consente Segni Misti: Questo permette a un conto di detenere contemporaneamente saldi positivi e negativi della stessa merce. Questo comportamento è simile a come lo strumento Ledger CLI gestisce le merci.
Specifica del Lotto
Un "lotto" è un blocco specifico di una merce acquisita in un determinato momento e a un determinato prezzo. Quando crei o riduci una posizione, puoi specificare in dettaglio i suoi attributi.
Specifica Completa
Quando aumenti un inventario (acquisto), puoi specificare fino a tre attributi per il lotto:
Assets:Invest:STOCK 10 STOCK {
100.00 USD, # Costo base (costo per unità)
2024-01-15, # Data di acquisizione
"identificativo-lotto" # Un'etichetta testuale univoca
}Sebbene tutti e tre siano opzionali, fornire almeno il costo base è una pratica standard.
Metodi di Corrispondenza
Quando riduci un inventario (vendita), utilizzi la stessa sintassi per specificare da quale/i lotto/i vendere.
-
Corrispondenza per costo: Questo è il metodo più comune.
Assets:Invest:STOCK -5 STOCK {100.00 USD} -
Corrispondenza per data: Se i costi sono identici, puoi distinguere utilizzando la data di acquisizione.
Assets:Invest:STOCK -5 STOCK {2024-01-15} -
Corrispondenza per etichetta: Le etichette forniscono un modo infallibile per identificare un lotto.
Assets:Invest:STOCK -5 STOCK {"identificativo-lotto"} -
Corrispondenza per qualsiasi lotto: Un insieme vuoto di parentesi
{}corrisponderà a qualsiasi lotto disponibile. Questo viene spesso utilizzato con la contabilizzazioneFIFOoLIFO, dove il lotto specifico viene selezionato automaticamente.Assets:Invest:STOCK -5 STOCK {}
Gestione del Prezzo
È fondamentale comprendere la differenza tra costo base ({}) e prezzo (@). Servono a scopi diversi e non sono intercambiabili.
Prezzo vs Costo
{costo}: Definisce il costo di acquisizione di un asset. Fa parte del lotto di inventario stesso e viene utilizzato per la contabilizzazione delle riduzioni e il calcolo delle plusvalenze.@ prezzo: Un'annotazione che registra un prezzo di mercato al momento di una transazione. Viene utilizzata per conversioni valutarie o per annotare il valore di mercato in una data specifica.
Ecco i tre scenari:
-
Annotazione del Prezzo (Conversione): Usa
@per convertire da una valuta all'altra.Assets:Forex 1000 USD @ 0.85 EUR -
Costo Base (Acquisizione): Usa
{}quando acquisti un asset per stabilirne il costo.Assets:Invest 10 STOCK {100.00 USD} -
Entrambi (Vendita con Registrazione del Prezzo): Quando vendi un asset, usa
{}per identificare il lotto venduto e@per registrare il prezzo di vendita. Ciò consente il calcolo automatico delle plusvalenze.Assets:Invest -10 STOCK {100.00 USD} @ 105.00 USDQuesta registrazione vende 10
STOCKdal lotto che costava 105.00 ciascuno.
Regole di Utilizzo del Prezzo
- Le annotazioni di prezzo (
@) non influenzano quale lotto viene contabilizzato. La corrispondenza dei lotti è gestita esclusivamente dal costo base ({}) e dal metodo di contabilizzazione del conto. - Il simbolo
@viene utilizzato solo per:
- Conversioni valutarie.
- Registrare il valore di mercato di un asset al momento di una transazione.
- Fornire il prezzo di vendita per i calcoli delle plusvalenze.
Configurazione
Puoi configurare i metodi di contabilizzazione a livello globale o per singolo conto.
Metodo di Contabilizzazione Globale
Puoi impostare un metodo di contabilizzazione predefinito per l'intero file Beancount utilizzando la direttiva option.
option "booking_method" "STRICT"Le opzioni disponibili sono "STRICT", "FIFO", "LIFO" e "NONE".
Sostituzione per Conto
Spesso è utile avere metodi diversi per conti diversi. Ad esempio, potresti volere FIFO per un conto pensionistico ma STRICT per un conto di intermediazione tassabile per assicurarti di vendere lotti fiscali specifici. Puoi impostare il metodo di contabilizzazione quando apri il conto.
2024-01-01 open Assets:Retirement:401K "FIFO"
2024-01-01 open Assets:Taxable:Stock "STRICT"Migliori Pratiche
-
Organizzazione dell'Inventario: Per mantenere la tua contabilità pulita e semplice, è altamente raccomandato utilizzare conti separati per ogni merce unica che detieni.
# BUONO: Conti separati per merce Assets:Invest:VTSAX ; Solo posizioni VTSAX qui Assets:Invest:VFIAX ; Solo posizioni VFIAX quiEvita di mescolare diverse azioni o fondi nello stesso conto, poiché ciò complica la gestione dell'inventario.
-
Gestione dei Lotti:
-
Usa etichette significative per i lotti, specialmente per transazioni specifiche come il tax-loss harvesting o le assegnazioni di azioni ai dipendenti.
Assets:Invest:STOCK 10 STOCK {100.00 USD, "tax-loss-harvest-2024"} -
Documenta le tue transazioni con commenti. Questo rende la tua contabilità più facile da leggere e comprendere in seguito.
Assets:Invest:STOCK -10 STOCK {100.00 USD} @ 110.00 USD ; Guadagno: 10%
- Debugging: Se incontri errori o comportamenti imprevisti, Beancount fornisce strumenti per ispezionare lo stato del tuo inventario.
-
Esamina lo Stato dell'Inventario: Lo strumento
bean-doctorpuò mostrarti lo stato esatto di tutti gli inventari in qualsiasi punto del tuo file.Sostituisci
<NUMERORIGA>con il numero di riga subito dopo una transazione per vedere il suo effetto. -
Verifica la Corrispondenza dei Lotti: Lo strumento
bean-checkconvalida l'intero file. Catturerà eventuali errori di contabilizzazione, come corrispondenze ambigue di lotti in modalitàSTRICT.