Към основното съдържание

Хостваните регистри вече разрешават включвания на управлявани цени

Публикувано 10 минути четенеMike ThriftMike Thrift
Хостваните регистри вече разрешават включвания на управлявани цени
На тази страница

Притежанията ви вече са в регистъра. Цените им са частта, която продължавате да въвеждате отново и отново.

Тази асиметрия е най-старата грижа в счетоводството с обикновен текст. Покупката се записва веднъж и остава вярна завинаги: 120 NWRB {41.80 USD, 2024-03-12} записва количество, себестойност и дата и нищо, което се случи след това, не променя нито едно от трите. Цената е обратното — вярна за един ден, после тихо грешна, и грешна по начин, който нито една проверка на баланса никога няма да улови, защото остарялата цена все още се балансира идеално. Собственият отговор на Beancount винаги е бил да ги изтегляте с инструмент и да въвеждате резултата, което работи и което мнозина са автоматизирали. Това обаче все още е скрипт, който притежавате, cron запис, който поддържате, и файл, който сливате.

Счетоводният двигател на beancount.io вече извършва това разрешаване сам, за регистри, хоствани при нас. Тази публикация е за това какво реално беше пуснато, какво умишлено не се докосва и — също толкова важно — какво още не е изградено.

Какво беше пуснато

Хостван регистър на beancount.io може да носи включване, чиято цел е URL вместо име на файл:

; main.bean, in a hosted beancount.io ledger.
;
; The managed line is shown commented out on purpose: upstream `include` takes a
; file glob, so this file still loads if you copy it to your own machine. Only
; the hosted engine resolves the URL form.
 
option "title" "Taxable brokerage"
option "operating_currency" "USD"
 
include "accounts.bean"
; include "https://beancount.io/prices/ACME-USD"
 
include "transactions/purchases.bean"
include "transactions/sales.bean"

include в upstream Beancount приема име на файл — „посоченият път може да бъде абсолютно или относително име на файл" е цялата спецификация — така че включването на URL не е чист Beancount и никога не се преструва на такова. Това е поведение на хоствания двигател и ето точно какво прави двигателят с него:

  • Материализира канала като виртуален файл само за четене. URL адресът се разрешава през собствения път за разрешаване на включвания на двигателя, точно там, където би попаднал локален файл, така че всяка директива запазва истинско местоположение на източника. Вашите байтове никога не се пренаписват. Файлът, който сте написали, остава файлът, който сте написали.
  • Изтегленото съдържание се валидира като съдържащо само цени. Директиви price, коментари и четири разрешени ключа за метаданни — price-source, price-kind, observed-at и provisional — и нищо друго. Всичко извън това отхвърля цялото съдържание. Няма частично приемане, така че един канал никога не може да пренесе транзакция в книгите ви.
  • Каналите се кешират като неизменяема ревизия плюс движещ се указател. Обновяването се задвижва от времеви печат, а не от изтичане на кеша, което означава, че прекъсване отгоре не може да отнесе последната ви добра ревизия със себе си. Неуспешно обновяване никога не заменя добра ревизия с нищо.
  • Актуалността се изчислява при прочитане на регистъра, а не се съхранява: recent, stale или unavailable, заедно с времето за наблюдение, което самият канал е докладвал. Цена, която не можете да датирате, е цена, която не можете да одитирате.
  • Управляваните записи са само за четене. Редактирането или изтриването им се отказва с грешка, назоваваща управлявания източник, и те не се броят към лимитите за директиви — на канала не е позволено да изразходва бюджета на регистъра ви.

Всичко в този списък работи вътре в услугата за хоствани регистри. Нищо от него не променя какво означава една директива price: тя все още установява курса на обмен между базова стока и котираща стока, точно както го дефинира езиковата справка. Работата на двигателя е само да постави коректни, датирани, проследими такива пред зареждащия механизъм.

Вашата собствена цена винаги печели

Това е частта, която решава дали един канал е използваем от някого, който приема регистъра си сериозно, затова се заявява точно.

За една и съща дата и една и съща двойка стоки — и за реципрочната двойка — цена, която сте написали сами, печели пред управлявания канал, независимо от реда на включване.

Не „обикновено", и не „ако поставите включването си последно". Решението за засенчване се взема преди изграждането на картата на цените, така че не зависи от това къде стои включването във файла. Преместете го най-горе, преместете го най-долу, разделете го на три файла: отговорът е един и същ.

; include "https://beancount.io/prices/ACME-USD"   ; hosted-engine form, again shown commented
 
; A price you wrote yourself, for the same date and pair.
; This one wins — above the include or below it, it makes no difference.
2026-09-16 price ACME 93.40 USD

(ACME е измисленият емитент от примерния регистър по-долу; числото е измислено, не е пазарно наблюдение.)

Защо това правило, а не другото: цена във вашия собствен файл е решение. Тя може да е цената на затваряне, която брокерът ви е отпечатал в извлечението, срещу което се сверявате, моментна котировка за слабо търгувана позиция или цифра, която счетоводителят ви е поискал да използвате. Каналът не знае нищо от това, а система, която тихо замества цифра, създадена от човек, е престанала да бъде регистър и е започнала да бъде мнение. Каналът запълва празнини; той не ви поправя.

Цените движат оценката и нищо друго

Второто уверение е структурно, а не избор на политика, и си струва да се покаже с реални числа, вместо да се твърди. Ето примерния регистър за крипто — датирани партиди, стейкинг, майнинг, DeFi позиции, айдропи:

Отворете Пример за счетоводство на криптовалути — партиди с дати, стейкинг, DeFi и еърдропи в нов раздел

Вземете един запис от него. Айдроп на токен за управление пристига и се записва като доход по справедлива пазарна стойност в деня, в който попада:

2024-03-20 * "Uniswap" "Receive UNI governance token airdrop"
  Assets:Crypto:Wallet:MetaMask:UNI          50.00 UNI {12.50 USD, 2024-03-20}
  Income:Crypto:Airdrops                      -625.00 USD

Тези $625.00 доход и базата от $12.50 на единица, прикрепена към партидата, сега са факти за 2024-03-20. Всяка директива за цени в регистъра — управлявана, написана на ръка или напълно липсваща — оставя и двете недокоснати. Цените променят пазарната стойност; те никога не променят количества, себестойност, парични потоци, такси или реализирани печалби. Затова един канал за цени е безопасно нещо, с което да приемете помощ на първо място: най-лошото, което една грешна цена може да направи, е да докладва погрешно колко струва една позиция днес, и тя никога не може да повреди числото, което ще поставите в данъчна декларация.

Къде един грешен модел на цените всъщност ви подвежда

Примерният регистър за акции и ETF показва по-острата версия на същата мисъл:

Отворете Пример за себестойност на акции и ETF — идентифицируеми партиди, сплит 4 към 1, продажби на конкретни партиди в нов раздел

Той съдържа разделяне на акции 4 към 1 и разделянето е записано по правилния начин — като промяна в количеството, която запазва общата база, без да докосва сметка за доход:

2025-07-15 * "Broker" "NWRB 4-for-1 share split — quantity change, not income"
  Assets:Brokerage:NWRB                   -120 NWRB {41.80 USD, 2024-03-12}
  Assets:Brokerage:NWRB                    480 NWRB {10.45 USD, 2024-03-12}

Двете страни са $5,016.00. Пазарната стойност не се променя при разделянето — 120 акции при $62.00 деня преди, 480 акции при $15.50 деня след, $7,440.00 и в двата случая — и датата на придобиване в къдравите скоби оцелява, което е това, което поддържа продажбата на тези акции през 2026 г. дългосрочна.

Обичайната грешка е да се запише разделянето като ценово събитие вместо това и да се разчита на „коригирана за разделяне" серия, за да излезе оценката правилна. Това работи само докато всяка цена, която някога видите, е коригирана по същия начин. В момента, в който пристигне некоригирана цифра — стар потвърдителен документ, екранна снимка, серия от трета страна, която не преизчислява нищо — позицията се оценява на четири пъти стойността си, а броят акции в регистъра вече не съвпада с извлечението на брокера, така че проверката в края на годината, която би го уловила, не може да задейства.

Това е истинският аргумент за канал за цени с деклариран източник, деклариран вид и видимо време за наблюдение: не удобство, а знание под каква конвенция е изчислено числото, което току-що сте внесли. Собственият файл с цени на примерния регистър е умишлено некоригиран и го заявява, а двете му директиви, пресичащи разделянето, са написани като проверка, която можете да проверите на око.

Една честна бележка относно кликването във всеки от двата вградени прегледа: програмата за преглед на хоствания регистър изобразява салдата по сметки по себестойност и не предлага контрол за оценка на страницата. Регистрите по-горе са там, за да ви покажат регистрите — партидите, разделянето, продажбите на конкретни партиди — а не пазарна оценка, която програмата за преглед в момента не чертае. И двата са публични и двата могат да бъдат клонирани и пуснати локално.

Какво още не е тук

Един запис в дневника на промените струва по-малко от нищо, ако ви позволява да повярвате в нещо, което не е вярно, затова ето и другата половина, ясно и без дата, прикрепена към нещо от нея.

  • Крайната точка за цени не е публична. Анонимна заявка към https://beancount.io/prices/<ALIAS> се пренасочва към страницата за вход. Няма публичен каталог с псевдоними.
  • Така че това не е нещо, което можете да поставите в собствения си файл днес. Двигателят разрешава включването; маршрутът, който разрешава, още не е отворен. Когато бъде, това ще бъде отделен запис в дневника на промените.
  • Локалният CLI bea не разрешава включвания на URL. Той чете файлове от диска, така че включване на URL се проваля локално като glob за файл, който не съвпада с нищо. Поддръжката на зареждащия механизъм в CLI е посочено като следваща стъпка.
  • Няма повърхност за API. Нито REST, нито GraphQL, нито MCP поле за управлявани цени.
  • Няма повърхност в таблото за управление. Няма екран за свързване на канал и няма етикет за актуалност в потребителския интерфейс; актуалността, която двигателят изчислява, още няма къде да бъде показана.
  • Снимки и експорт не са изградени, както и каталог с инструменти или крайна точка за ръчно обновяване.

Пуснатото е слоят на двигателя: разрешаването на включванията, валидацията, кешът с ревизии, правилото за приоритет и изчислението на актуалността. Това е частта, върху която всичко останало трябва да стъпи, и това е частта, която е най-трудна за промяна по-късно, поради което тя мина първа.

Къде да погледнете след това

И двата регистра по-горе са част от галерията с примери, шест разработени модела, които можете да клонирате и пуснете локално — и двата от тези два умишлено предоставят статични, въведени в хранилището файлове с цени, така че клониране, направено след две години, все още произвежда отчета, който произвежда днес. Всичко останало, което пускаме, се появява в дневника на промените.

Ако все още поддържате цените актуални със свой собствен изтеглящ инструмент, това остава правилният отговор за локален регистър, а собствената документация за изтегляне на цени на Beancount плюс поддържаният инструмент beanprice са мястото, от което да започнете.

Пазете скучната част скучна

Причината цените да си струва да се автоматизират е, че те са единствената част от регистъра с обикновен текст, която се разпада сама. Beancount.io ви дава счетоводство с обикновен текст, което остава ваше — одитируемо, контролирано с версии и никога пренаписвано зад гърба ви, което е точно стандартът, който един управляван канал трябваше да покрие, преди да пуснем такъв. Започнете безплатно и пазете книгите си във файлове, които можете да прочетете.

Споделете тази статия

Следване на тази тема

  • RSS
  • Atom

Източник: https://beancount.io/bg/blog/2026/09/17/managed-price-includes-hosted-ledgers

Публикувано: 17 септември 2026 г.