Инженеринг9 мин четене·BG

Извличане на XBRL от български ESEF документи — и защо е по-трудно от Западна Европа

Емитентите на БФБ подават iXBRL вграден в PDF корици, смесени таксономии и контексти с кирилични имена. Ето как стигаме до чист JSON за под 30 секунди.

Публикувано Обновено

Голяма част от инструментите за XBRL са калибрирани за западноевропейски емитенти — тримесечни отчети на английски, корици в HTML, контексти с имена в ASCII. Българската фондова борса не прави нито едно от това. Когато поставихме цел да доставяме документи от БФБ с латентност на приемане под 30 секунди, установихме, че ще трябва да пренапишем по-голямата част от стaка.

Защо ЦИЕ е различен

Три неща нарушават предположенията, заложени в готовите iXBRL парсъри, когато ги насочите към БФБ, WSE или BVB:

  • Смесени езикови документи. Един български тримесечен отчет често включва български наратив, английско резюме и XBRL пакет, чиито имена на контексти са в cyrillic-snake-case.
  • PDF корици. Емитентите прикачат задължителна от регулатора PDF корица преди iXBRL документа, така че получаваме многокомпонентен файл, а не един .xhtml.
  • Дрейф в таксономиите. ESEF изисква МСФО, но локалните разширения за българските банкови отчети са нетривиални и се обновяват всяка година. Нашият парсър поддържа три български разширени таксономии на живо, плюс архивирани версии за преизложения. Освен това местния регулатор изисква подаването на форма в ексел, която не отговаря на МСФО.

Третираме всеки документ като многокомпонентен — не като файл. Корица, наратив и iXBRL пътуват заедно, а графът на цитирания трябва да знае от кой компонент идва всяко число.

— Вътрешен проектен документ, ноември 2025

ESEF по български

Стандартът казва iXBRL. Реализацията казва iXBRL плюс PDF корица, плюс подписан XML манифест, плюс собствено разширено пространство от имена на емитента. Разопаковаме всеки компонент като отделна единица в графа на документите и съгласуваме фактите между тях по време на извличането. Ето типичен лог от приемане:

$ ceewire ingest --debug bash
[2026-05-08T09:14:02Z] FETCH    bse://filing/2438211       (4.2MB, application/zip)
[2026-05-08T09:14:03Z] DEMUX    cover.pdf, narrative.docx, ixbrl.xhtml, manifest.xml
[2026-05-08T09:14:04Z] PARSE    ixbrl.xhtml  contexts=412 facts=1,847 taxonomy=ESEF+BGext-2025
[2026-05-08T09:14:06Z] NORMALIZE  cyrillic_contexts→ascii  units→EUR  signs→IFRS
[2026-05-08T09:14:11Z] EXTRACT  language=BG  translated=EN  preserved_original=true
[2026-05-08T09:14:14Z] EMIT     filing/2438211  JSON  ingest_latency=24.6s

Контексти с имена на кирилица

Спецификацията на XBRL не забранява не-ASCII идентификатори на контексти, но повечето парсъри предполагат точно това. Нашата нормализация детерминирано транслитерира всеки контекст към ASCII, като запазва оригинала в отделно поле — така заявка за revenue_q1 все още се разрешава, а българскоговорящ служител по съответствие може да провери оригиналното съпоставяне.

Бенчмаркове

Измерваме латентността на приемане на 50-ия и 95-ия перцентил за последните 30 дни от Q1 документи на БФБ (n = 847). Числата са секунди от публикуване до наличност на JSON в API:

БорсаP50P95N
БФБ (България)24.6s41.2s847
WSE (Полша)18.1s32.7s2,140
BVB (Румъния)21.4s39.8s612

Над какво работим

Следващата седмица: тестваме потока за корпоративни документи на компании, листнати на румънската борса BVB. На първи етап ще се фокусираме върху компаниите от индекса BET-XT. Ако имате обратна връзка за JSON схемата, четем всяко съобщение на [email protected].

ЕТИКЕТИ#XBRL#ESEF#BSE