有価証券報告書には、企業全体の売上高のほかに、事業別の売上高といった詳細な情報が載っていました。
EDINET XBRL のコンテキストにある「シナリオタグ」を取り込むことで、そういった情報も取り出すことができました。
その大まかな方法を紹介します。
ディメンション属性で表を特定
本決算の XBRL には、「セグメント情報」以外にも「大株主トップ10」や「株主資本等変動計算書」といった表がタグ付けされて載っています。
で、そういった表の区別はコンテキストで行うようになっていました。コンテキストって、実は結構多機能で、日付情報のほかに、勘定科目の連結・非連結の区別や、表の区別まで行っているんですね。
それで表の区別ですが、シナリオタグの中のエクスプリシット・メンバーなるタグで区別していました。「ディメンション属性」の内容で表を、「タグテキスト」の内容で表の列を、それぞれ特定できました。
セグメント情報に関して言えば、ディメンション属性で「セグメント情報」の表であると分かり、タグテキストで「○○事業」であると分かりました。
ここまで把握できれば、あとは勘定科目タグをコンテキストで選ぶだけです。
セグメント情報の勘定科目タグには、例えば「売上高 (jppfs_cor:NetSales)」がありましたが、コンテキストにディメンション属性があることで、サマリや財務諸表のタグと区別して読み込むことができました。
そして、「セグメント情報」は「dimension="jpcrp_cor:OperatingSegmentsAxis"
」というディメンションで定義されていました。オペレーティング・セグメンツ・アクシスですね。
アクシスは軸という意味でしたが、要は「表の列名が載っている行」のことを言っていました。で、続くタグテキストの内容で「どの列か?」を決めているイメージです。
プログラムでコンテキストの辞書を作るときに、こういったディメンション属性とタグテキストを取り込んでおきます。エクスプリシット・メンバーですが、2つ以上存在する場合もありましたので、複数取り込めるようにプログラムしました。
これで、勘定科目タグのコンテキストレフ属性から、日付とシナリオ情報(連結区分・表・列)が求まりました。
事業別の売上高を取得するには、勘定科目タグ名で「売上高」を抽出し、シナリオ情報から「セグメント情報」の表を抽出します。
そして、複数の事業やセグメント合計が混在しているところに、pandas.DataFrame のグループバイ groupby() メソッドを適用します。これで、事業別の売上高が列挙できました。
グループバイで、表の列ごとに分けて取得していく感じです。表の列を表すタグテキストですが、これは特に収集・集約する必要はなかったです。事業ごとの時系列を表示するだけなら、これで十分でした。
収集・集約する必要があるのは、複数の企業から似たような事業を列挙して、企業間で比較したい時かと思います。ただ、事業の名称や区分けというのは良く変わるところでしたので、そこまではしませんでした。
コンテキストと勘定科目タグの例
具体的にイメージできるように、実際のコンテキストと勘定科目のタグを紹介します。XBRL の出典は、2018年4月12日に開示された、カネコ種苗(株)の第3四半期報告書です。
コンテキスト
シナリオ付きのコンテキストです。見やすいように、改行とインデントを追加しました。
<xbrli:context id="CurrentYTDDuration_jpcrp040300-q3r_E00004-000SeedsAndSeedlingsReportableSegmentsMember">
<xbrli:entity>
<xbrli:identifier scheme="http://disclosure.edinet-fsa.go.jp">E00004-000</xbrli:identifier>
</xbrli:entity>
<xbrli:period>
<xbrli:startDate>2017-06-01</xbrli:startDate>
<xbrli:endDate>2018-02-28</xbrli:endDate>
</xbrli:period>
<xbrli:scenario>
<xbrldi:explicitMember dimension="jpcrp_cor:OperatingSegmentsAxis">jpcrp040300-q3r_E00004-000:SeedsAndSeedlingsReportableSegmentsMember</xbrldi:explicitMember>
</xbrli:scenario>
</xbrli:context>
この中のディメンション属性で「セグメント情報」の表だと分かり、タグテキストで「種苗事業」であると分かります。
「セグメント情報」や「種苗事業」といった日本語ラベルですが、これらはタクソノミのラベルファイルに載っていました。ディメンションやタグテキストの文字列でタクソノミを検索するとヒットします。
特に、○○事業といった名称はその企業特有のものですので、XBRL の zip に入っているラベルファイルを見ればすぐに見つかると思います。
勘定科目タグ
金額などを定義しているタグです。こちらも見やすいように、改行とインデントを追加しました。
<jpcrp_cor:RevenuesFromExternalCustomers
contextRef="CurrentYTDDuration_jpcrp040300-q3r_E00004-000SeedsAndSeedlingsReportableSegmentsMember"
unitRef="JPY"
decimals="-3">5024088000</jpcrp_cor:RevenuesFromExternalCustomers>
これは「外部顧客への売上高」を表すタグです。このコンテキストレフ属性からコンテキストをたどることで、どの表のどの列の金額なのかが特定できます。
参考資料 (scenario, dimension)
以下の資料を「シナリオ (scenario)」や「ディメンション (dimension)」で検索すると、さらに詳しい情報が載っていました。
- フレームワーク設計書
- EDINETタクソノミの設定規約書
- 報告書インスタンス作成ガイドライン
- 提出者別タクソノミ作成ガイドライン
これらは、エディネットの「操作ガイド」というページで公開されていました。
操作ガイド – EDINET
https://disclosure.edinet-fsa.go.jp/EKW0EZ0015.html
プログラム作成の参考になれば幸いです。