首页 > 解决方案 > 将 XBRL 报告实例映射到 JSON

问题描述

我希望将 XBRL 报告实例,特别是 SEC 生成的财务报告,转换为 Python 字典或 JSON。我花时间使用 bs4(美丽的汤)开发代码,但理想情况下我想利用开源的 Arelle 库。

我的理解是Arelle软件包有一个名为“saveLoadableOIM”的插件。XBRL.org 发布了一般指南;但是,它没有实际实施。

http://www.xbrl.org/Specification/xbrl-json/CR-2020-05-06/xbrl-json-CR-2020-05-06.html

我发现有关 Arelle 的命令提示符用法的文档已过时且不适用于 Python 3.x。谁能提供如何通过python命令提示符操作Arelle的指导;具体来说,如何将 SEC xBRL 报告实例转换为 JSON?我想要一个能够适应标准分类法未来变化的模型,特别是 GAAP:

https://www.sec.gov/info/edgar/edgartaxonomies.shtml

将以下 MSFT 10-K 的 XBRL 报告实例映射到 JSON 的示例代码将特别有帮助:

https://www.sec.gov/Archives/edgar/data/789019/000156459018019062/msft-20180630.xml

如果现有的 Arelle 库中有限制,我想了解这些限制是什么。

标签: pythonjsonpython-3.xxbrl

解决方案


我在 Python 3 下调用 Arelle:

python3 $HOME/Arelle/arelleCmdLine.py

这是在 Linux 上,并假设我在我的主目录中将 Arelle 签出为Arelle.

要加载插件,请使用--plugins并为其指定Arelle/arelle/plugin目录下的文件名(不带.py扩展名)。例如,--plugins=saveLoadableOIM。然后您可以添加--help,您应该会看到帮助消息中包含的其他选项。

这对我有用:

python3 $HOME/Arelle/arelleCmdLine.py --plugins=saveLoadableOIM --saveLoadableOIM=msft.json -f https://www.sec.gov/Archives/edgar/data/789019/000156459018019062/msft-20180630.xml

使用真棒jq提取数据的示例:

jq '[.facts[] | select( .dimensions.concept | test(":GrossProfit$") )] | sort_by(.dimensions.period)[-1]' msft.json

这将获得最新的 GrossProfit 值:

{
  "value": "20343000000",
  "decimals": -6,
  "dimensions": {
    "concept": "us-gaap:GrossProfit",
    "entity": "cik:0000789019",
    "period": "2018-04-01T00:00:00/2018-07-01T00:00:00",
    "unit": "iso4217:USD"
  }
}

我应该注意的是,xBRL-JSON 规范尚未最终确定,而且这个 JSON 的格式可能会随着时间的推移而略有变化。我希望Arelle 一旦可用,就会更新到最终版本。


推荐阅读