Чтение и разбор файла XBRL в Perl (или преобразование в обычный XML/JSON!)

Я ничего не понимаю в этом. XBRL, по-видимому, основан на XML, но для него, похоже, нет согласованной структуры. Я беру данные с сайта http://download.companieshouse.gov.uk/en_monthlyaccountsdata.html , и я хочу разобрать файл на пригодные для использования данные

Как предполагается обрабатывать файлы XBRL и выводить пригодные для использования структуры данных? Например, я хочу посмотреть, каков был валовой оборот за прошлые годы.

Это должно быть возможно, иначе какой смысл в Company House предоставлять данные?

Любое руководство очень ценится! Я чувствую, что хожу по кругу с этим


person Andrew Newby    schedule 24.07.2020    source источник
comment
Кажется, есть, например. XBRL::JPFR на CPAN, который может помочь.   -  person choroba    schedule 24.07.2020
comment
@choroba спасибо. Я что-то пропустил? Документация кажется скудной, по крайней мере. Кроме того, кажется, что это только для финансовой отчетности Японии?   -  person Andrew Newby    schedule 24.07.2020
comment
Если вы посмотрите на исходный код этого модуля, он использует XML::LibXML для внутреннего использования.   -  person AKHolland    schedule 24.07.2020
comment
@AKHolland спасибо - не знаете, как это использовать? Это не похоже на правильный XML-файл как таковой - так что, думаю, вам придется возиться с ним? Пример файла, предоставленного Регистрационной палатой: pastebin.com/QTZ2YMJp   -  person Andrew Newby    schedule 24.07.2020
comment
Re похоже, что для него нет согласованной структуры. Используемая схема найдена здесь. .... хммм, документ, который вы поместили в pastebin, не имеет экземпляра {http://www.xbrl.org/2003/instance}xbrl, но я думаю, что вы можете рассматривать элемент {http://www.w3.org/1999/xhtml}body с той же схемой, что и {http://www.xbrl.org/2003/instance}xbrl, за исключением того, что вы также разрешаете дополнительные элементы (из других пространств имен).   -  person ikegami    schedule 25.07.2020
comment
хм, почему образец XBRL на странице, на которую вы ссылаетесь, показывает правильный документ XBRL, а образец, на который вы ссылаетесь, - нет?   -  person ikegami    schedule 25.07.2020
comment
@ikegami спасибо. На странице указано, что они предлагают 2 типа. Один из них представляет собой настоящий файл .xml, а другой — файл iXBRL (который имеет встроенный код + html). Проблема заключается в том, как извлечь данные в пригодные для использования числа/столбцы. Я еще раз поиграю с ним на следующей неделе и посмотрю, смогу ли я придумать пригодную для использования систему для его извлечения.   -  person Andrew Newby    schedule 25.07.2020


Ответы (1)


XBRL следует спецификациям XBRL, которые основаны на XML. Регистрационная палата использует Inline XBRL (iXBRL) вариант XBRL, в котором теги XBRL встроены в документ HTML.

Неверно сказать, что документы не следуют какой-либо определенной структуре; они соответствуют приведенным выше спецификациям и подтверждаются при получении Регистрационной палатой.

Однако отчеты iXBRL, собираемые Регистрационной палатой, являются финансовыми отчетами, которые соответствуют применимым стандартам бухгалтерского учета, а стандарты бухгалтерского учета допускают довольно много различий в том, что именно сообщает каждая компания.

Данные в XBRL помечаются путем связывания значения (например, 1000) с понятием (например, доход) и некоторыми измерениями (такими как период и единицы).

Учетные термины (такие как активы, доход и т. д.) определяются как понятия в таксономии. Из-за различий, разрешенных стандартами бухгалтерского учета, вы можете обнаружить, что не все компании раскрывают концепции, которые вы ищете.

В случае с данными Регистрационной палаты это еще более осложняется тем фактом, что многие более мелкие компании могут и делают сокращенные отчеты, которые не включают отчет о прибылях и убытках, поэтому оборот часто просто не сообщается. Подача iXBRL в Регистрационную палату не является обязательной, и многие компании предпочитают делать свои данные менее доступными, подавая их на бумаге.

С точки зрения упрощения работы с данными я настоятельно рекомендую использовать существующий процессор XBRL, который позаботится о чтении не только отчета iXBRL, но и связанной с ним таксономии.

Наиболее широко используемым процессором с открытым исходным кодом является Arelle, а также доступно множество коммерческих процессоров (см. https://software.xbrl.org).

Arelle позволит вам работать с данными XBRL через API Python, или его можно использовать для преобразования их в новый, xBRL-JSON.

person pdw    schedule 24.07.2020
comment
Re Companies House использует вариант XBRL Inline XBRL (iXBRL), в котором теги XBRL встроены в документ HTML. Согласно странице, на которую ссылается OP, он предоставляет как стандартный, так и встроенный варианты. - person ikegami; 25.07.2020
comment
@pdw спасибо - просто установил Arelle, чтобы попробовать. Преобразование в xBRL-JSON звучит многообещающе - person Andrew Newby; 25.07.2020
comment
@pdw - хм, я установил модули ( sudo apt-get install python2.7 python2.7-lxml python2.7-tk ), а затем загрузил исходный код в /arelle - затем попытался запустить с: cd /arelle; ./arelleCmdLine --help , но он не запускается. Что я делаю не так? (документация кажется немного скудной). у меня убунту 18.04 - person Andrew Newby; 25.07.2020
comment
Регистрационная палата @ikegami поддержала XBRL до внедрения iXBRL. Я не уверен, что XBRL все еще принимается, но я ожидаю, что все текущие документы будут в iXBRL, поскольку это формат, требуемый HMRC для налоговых деклараций. - person pdw; 25.07.2020
comment
@AndrewNewby Я использую python3 ./arelleCmdLine.py --help. Если это не сработает, дайте мне знать, какую ошибку вы видите. - person pdw; 25.07.2020
comment
@pdw - спасибо, я использую python 2.7, поэтому попробовал: ` python2 ./arelleCmdLine.py --help `, но получаю сообщение об ошибке: ibb.co/z7SqhP2 - person Andrew Newby; 26.07.2020
comment
@pdw а, хорошо, я понял. Оказывается, у меня были установлены python2.7 и 3. Итак, попытка с вашей командой сказала мне, что у меня не установлены некоторые биты. Кажется, это помогло: apt -y install python3-pip; pip3 install --upgrade lxml; pip3 install --upgrade isodate. Сейчас попробую :) - person Andrew Newby; 27.07.2020
comment
@pdw ах, ладно, я тестирую: python3 ./arelleCmdLine.py -f "/home/xxxx/ch-accounts/Prod224_0067_00908825_20190624.html" , и какое-то время он работает, но потом просто выводит: [info] loaded in 12.11 secs at 2020-07-27T07:21:51 - /home/xxxx/ch-accounts/Prod224_0067_00908825_20190624.html .. как мне получить вывод? - person Andrew Newby; 27.07.2020
comment
@pdw wahoo - думаю, у меня все получится. python3 ./arelleCmdLine.py --facts "/home/output/test.json" -f "/home/xxx/Prod224_0067_07873760_20171231.html". Мне все еще нужно протестировать и убедиться, что выходные данные одинаковы для всех файлов (т. е. у меня есть доступ к валовому обороту и т. д.), но пока все выглядит хорошо. Спасибо! - person Andrew Newby; 27.07.2020
comment
@AndrewNewby Рад, что у тебя все получилось. Параметр --facts на самом деле дает вам более старый, специфичный для Arelle формат JSON. Если вам действительно нужен xBRL-JSON, используйте: --plugins saveLoadableOIM --saveLoadableOIM foo.json - person pdw; 27.07.2020
comment
@pdw спасибо, но когда я это делаю, я получаю сообщение об ошибке? python3 /arelle/arelleCmdLine.py --plugins saveLoadableOIM --disclosureSystem="hmrc" --saveLoadableOIM "/home/xxx/foo.json" -f "/home/xxx/Prod223_2706_00126369_20200331.html" = ошибка: такой опции нет: --saveLoadableOIM - person Andrew Newby; 27.07.2020
comment
Это последняя Arelle из github? Существует ли файл Arelle/arelle/plugin/saveLoadableOIM.py? Если вы запустите только python3 /arelle/arelleCmdLine.py --plugins savelLoadableOIM, вы получите сообщение об активации плагина? Если вы вставите --help в конце, появится ли saveLoadableOIM в документах? Возможно, стоит начать новый вопрос об Arelle + xBRL-JSON, так как я думаю, что это может быть полезно другим. - person pdw; 28.07.2020
comment
@pdw извините за поздний ответ. Не знаю, как я пропустил это! Вот что я получаю с помощью этой команды: ibb.co/QKvQWfb . python3 /arelle/arelleCmdLine.py --help | grep saveLoadableOIM не дает мне результата, так что я думаю, что это не так. В зависимости от версии я получаю: `Arelle(r) 1.2018.01.06 (64bit)` - person Andrew Newby; 13.08.2020
comment
@pdw а, хорошо, я понял. По какой-то причине я был на очень старой версии! Я обновил его до версии 2020 года, и теперь у него есть этот плагин! Я получаю сообщение об ошибке при запуске его в файле XML, поэтому начну новый пост, как было предложено. - person Andrew Newby; 13.08.2020