Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyConJP2020_5_0828_1450

miya8
August 27, 2020

 PyConJP2020_5_0828_1450

miya8

August 27, 2020
Tweet

Other Decks in Programming

Transcript

  1. ・・・ XBRL インスタンス文書 - 値 - 単位 - コンテキスト -

    期間: 2018/04/01 - 2019/03/31 - シナリオ・・・ : 5,800,000 : JPY xx:NetSales - 値 - 単位 - コンテキスト - 期間: 2019/04/01 - 2020/03/31 - シナリオ・・・ : 6,000,000 : JPY xx:NetSales - 値 - 単位 - コンテキスト - 期間: 2018/04/01 - 2019/03/31 - シナリオ・・・ : 54,520 : USD xx:NetSales 報告値の定義  同じ項目名で値の異なる複数のfactが存在し得る  値は金額だけでなく、文字情報、%など色々 - 値 - コンテキスト - 時点: 2019/05/11 : 株式会社XX xx:FilerNameIn JapaneseDEI - 値 - コンテキスト - 時点: 2019/05/11 xx:BusinessRisksTextBlock : …【事業等のリスク】有価証券報告書に記載し た 事 業の状況、経理の・・・・・・ 報告値の一式を fact と呼ぶ
  2. ・・・ XBRL タクソノミ文書 - タクソノミスキーマ CashAndDepositsの定義 - 項目名:CashAndDeposits - ID

    :jppfs_cor_CashAndDeposits - データ型:xbrli:monetaryItemType ・・・ 項目の定義  項目名やID、扱われ方などを定義 NetSalesの定義 - 項目名:NetSales - ID :jppfs_cor_NetSales - データ型:xbrli:monetaryItemType ・・・ FilerNameInJapaneseDEIの定義 - 項目名:FilerNameInJapaneseDEI - ID :jpdei_cor_FilerNameInJapaneseDEI - データ型:xbrli:stringItemType ・・・
  3. 他… XBRL タクソノミ文書 - リンクベース 項目間の関係や、項目に対する追加情報などの定義  XBRL2.1 標準のリンク5種 +

    拡張リンク 表示リンク [損益計算書] - 売上(1) - 売上原価(2) - 売上総利益(3) - ・・・ - 営業外収益(6) -- 受取利息(1) -- 雑収入(2) -- ・・・ - ・・・ 計算リンク [損益計算書] ・・・ { 1*売上総利益 = 1*売上 + (-1)*売上原価 ) } ・・・ 定義リンク 項目間の様々な関係 名称リンク 項目の表示名称 参照リンク 参考文献(会計概念定 義の根拠文献) ディメンションリンク 項目間の多次元データ構造 - 連結 / 個別 - セグメント - … 拡張 XBRL2.1標準
  4. EDINET (Electronic Disclosure for Investors' NETwork) 金融庁の 「金融商品取引法に基づく有価証券報告書等の開示書類に関する電子開示システム」  EDINET閲覧サイトで開示書類を閲覧可能

    – 有価証券報告書は5年 – 四半期報告書は3年 – ・・・  段階的にXBRLが導入されてきた – 有報、四半期報告書は全文XBRL化されている EDINET 概要書から引用
  5.  EDINETタクソノミ – 金融庁が提供するタクソノミ (毎年更新、種類は複数)  提出者別タクソノミ – 提出者がEDINETタクソノミをベースに 作成するタクソノミ

    – 必要に応じて独自定義を追加 EDINETのタクソノミ文書 提出者別タクソノミ作成ガイドラインから引用 提出者ごとにタクソノミが異なる
  6. EDINETの有報XBRL - インスタンス文書の読み方 - インスタンス文書(~.xbrl) 【単位の定義】 <xbrli:unit id="JPY"><xbrli:measure>iso4217:JPY</xbrli:measure></xbrli:unit> 【コンテキストの定義】 <xbrli:context

    id="CurrentYearDuration_NonConsolidatedMember"> <xbrli:entity> <xbrli:c scheme="http://disclosure.edinet-fsa.go.jp">EXXXXX-NNN</xbrli:identifier> </xbrli:entity> <xbrli:period> <xbrli:startDate>2019-04-01</xbrli:startDate> <xbrli:endDate>2020-03-31</xbrli:endDate> </xbrli:period> <xbrli:scenario> <xbrldi:explicitMember dimension="jppfs_cor:ConsolidatedOrNonConsolidatedAxis">jppfs_cor:NonConsolidatedMember</xbrldi:explicitMember> </xbrli:scenario> </xbrli:context> 【報告値】 <jppfs_cor:NetSales id="fact38" contextRef="CurrentYearDuration_NonConsolidatedMember" unitRef="JPY" decimals="-6">349105000000</jppfs_cor:NetSales> 連結 / 個別を表す軸 個別 (※) ※ 連結の場合は設定しない - 値 - 単位 - コンテキスト - 期間: 2019/04/01 - 2020/03/31 - シナリオ - 連結 / 個別:個別 : 34,9105,000,000 : JPY Jppfs_cor: NetSales
  7. タクソノミスキーマ(~.xsd) 【項目の定義】 <xsd:element name=“NetSales” id="jppfs_cor_NetSales“ type=“xbrli:monetaryItemType“ substitutionGroup="xbrli:item“ abstract=“false“ nillable="true“ xbrli:balance=“credit“

    xbrli:periodType="duration“ /> インポートされている~.xsd http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor_2019-11-01.xsd 【EDINETタクソノミのスキーマ のインポート】 <import … /> <import schemaLocation="http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor_2019-11-01.xsd" namespace="http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor" /> <import … /> 【項目の定義】 (提出者の独自定義) ・・・ ダウンロードしたzipファイル内の ~.xsd NetSalesの定義 - 項目名 :NetSales - データ型:金額 - 抽象区分:いいえ - 貸借区分:貸方 - ID:jppfs_cor_NetSales - 代替グループ:その他 - nil可否 :可 - 期間時点 :期間 EDINETの有報XBRL – タクソノミスキーマの読み方 -
  8. リンクベース:計算リンク(~_cal.xml) 【タクソノミスキーマの項目の呼び名】 <link:loc xlink:type="locator" xlink:href="http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor_2019-11-01.xsd#jppfs_cor_GrossProfit" xlink:label="jppfs_cor_GrossProfit" /> <link:loc xlink:type="locator" xlink:href="http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor_2019-11-01.xsd#jppfs_cor_NetSales"

    xlink:label="jppfs_cor_NetSales" /> <link:loc xlink:type="locator" xlink:href="http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/jppfs_cor_2019-11-01.xsd#jppfs_cor_CostOfSales" xlink:label="jppfs_cor_CostOfSales" /> ・・・ 【関係の定義】 <link:calculationArc xlink:type="arc" xlink:from="jppfs_cor_GrossProfit" xlink:to="jppfs_cor_NetSales" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" order="1" weight="1" /> <link:calculationArc xlink:type="arc" xlink:from="jppfs_cor_GrossProfit" xlink:to="jppfs_cor_CostOfSales" xlink:arcrole="http://www.xbrl.org/2003/arcrole/summation-item" order="2" weight="-1" /> jppfs_cor_GrossProfit = 1*jppfs_cor_NetSales + (-1)*jppfs_cor_CostOfSales http://.・・・ jppfs_cor_2019-11-01.xsd(タクソノミスキーマ) の jppfs_cor_GrossProfit を、ここでは“jppfs_cor_GrossProfit” と呼ぶよ “jppfs_cor_GrossProfit” → “jppfs_cor_NetSales” という 足し算関係 をorder(順番)とweight(重み)で定義しているよ EDINETの有報XBRL – リンクベースの読み方① -
  9. リンクベース:名称リンク(~_lab.xml) ・・・日本語 【タクソノミスキーマの呼び名、値を定義して呼び名】 <link:loc xlink:type="locator" xlink:href="../jppfs_cor_2019-11-01.xsd#jppfs_cor_NetSales" xlink:label="NetSales"/> <link:label xlink:type="resource" xlink:label="label_NetSales"

    xlink:role="http://www.xbrl.org/2003/role/label" xml:lang="ja" id="label_NetSales">売上高</link:label> 【関係の定義】 <link:labelArc xlink:type="arc" xlink:arcrole="http://www.xbrl.org/2003/arcrole/concept-label" xlink:from="NetSales" xlink:to="label_NetSales"/> 参照されている~_lab.xml http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/label/jppfs_2019-11-01_lab.xml 【関係の定義】 (提出者の独自定義) ダウンロードしたzipファイル内の ~_lab.xml 【EDINETタクソノミの名称リンク の参照】 <link:linkbaseRef … /> <link:linkbaseRef xlink:type=“simple” xlink:href=“http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2019-11-01/label/jppfs_2019-11-01_lab.xml” ・・・ /> <link:linkbaseRef … /> ダウンロードしたzipファイル内の ~.xsd NetSales は「売上高」 EDINETの有報XBRL – リンクベースの読み方② -
  10. Arelle とは  Apache License 2.0 の Python製OSS  XBRL

    International (XBRLを開発・保守・推進する国際組織) により、XBRL仕様に準拠し たソフトウェアとして認定されている – https://software.xbrl.org/  公式ページ: https://arelle.org/arelle/  Github : https://github.com/Arelle/Arelle
  11. ArelleでXBRL解析する メリット  らく – XBRLの仕様に沿って解析してくれる • インスタンス文書を読み込むとその参照先のタクソノミも解析してくれる → 定義を辿るような煩雑な処理を自分で書く必要がない

    • XBRLの仕様をすべて把握することは困難だが、Arelleを使うことによりある程度のXBRL知識でも解析できる → データ収集にかける労力を減らし、目的である財務分析に時間を使うことができる  無償
  12. 有報を取得(EDINET API)  EDINETが提供するAPI  EDINET API のドキュメント – https://disclosure.edinet-fsa.go.jp/EKW0EZ0015.html

    > 「EDINET API関連資料」  2種類のAPIがある – 書類一覧API : 書類を把握するためのAPI – 書類取得API : 書類を取得するためのAPI
  13.  エンドポイント  HTTPメソッド: GET  リクエストパラメータ – date (必須)

    : YYYY-MM-DD形式のファイル日付 提出処理が行われた日、書類情報修正日、開示不開示区分の変更日 – type (任意) : 1(デフォルト)・・・メタデータのみ 2・・・提出書類一覧及びメタデータ https://disclosure.edinet-fsa.go.jp/api/{バージョン}/documents.json 有報を取得(EDINET API) - 書類一覧 -
  14.  提出書類一覧及びメタデータの取得例 import requests import json endpoint = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json" params

    = { "date" : "2019-05-13", "type": 2 } res = requests.get(endpoint , params=params) res_dict = json.loads(res.text) # 処理・・・ 有報を取得(EDINET API) - 書類一覧 -
  15.  提出書類一覧及びメタデータの取得結果例 { "metadata": { "title": "提出された書類を把握するためのAPI", "parameter": { "date":

    "2019-05-13", "type": "2" }, "resultset": { "count": 492 }, "processDateTime": "2020-06-01 00:03", "status": "200", "message": "OK" }, "results": [ { ・・・ }, { ・・・ }, { ・・・ }, , ・・・ ] } { ・・・ } 【文書情報】 書類管理番号、書類種別など項目たくさん { "seqNumber": 1, “docID”: “XXXXXX”, ← 書類管理番号(書類取得で使う) "edinetCode": "EXXXXX", "filerName”: “株式会社XXXXXX", "formCode": "043000", “docTypeCode”: “140”, ← 書類種別(有報は120) ・・・(省略)・・・ }, 有報を取得(EDINET API) - 書類一覧 -
  16.  エンドポイント  HTTPメソッド: GET  リクエストパラメータ – type (必須)

    : 1~4 (XBRLを取得するには1を指定) https://disclosure.edinet-fsa.go.jp/api/{バージョン}/documents/{書類管理番号} 有報を取得(EDINET API) - 書類取得 -
  17.  取得例 import requests docid = "S100FIZV" endpoint = f"https://disclosure.edinet-fsa.go.jp/api/v1/documents/{docid}"

    params = { "type" : 1 } res = requests.get(endpoint, params=params) # 返ってくるバイナリデータをzip形式のファイルとして保存 (typeに1を指定した場合) ・・・省略・・・ 有報を取得(EDINET API) - 書類取得 -
  18. ZIPファイル展開例 (再掲) 有報を取得(EDINET API) - 書類取得 - インスタンス文書+ 提出者別タクソノミ ・・・ファイル構成定義

    インラインXBRL インスタンスの値と表示情報が一緒になったもの。 提出者がインラインXBRLを提出すると EDINETでインラインXBRLから.xbrl が作成される ※ *_gla.xml(ジェネリックラベルリンク)が存在するケースもあり得る ここだけ抽出すればOK
  19. XBRL解析(Arelle)  基本 from arelle import Cntlr, ModelManager ctrl =

    Cntlr.Cntlr() model_manager = ModelManager.initialize(ctrl) model_xbrl = model_manager.load(“~.xbrl”) ・・・処理・・・ model_manager.close() 初期化・インスタンス文書読込み 文書情報を解放
  20.  QName指定でfact取得例 : jpdei_cor:AccountingStandardsDEI(会計基準) from arelle.ModelValue import qname ・・・ ns

    = model_xbrl.prefixedNamespaces[“jpdei_cor”] print(ns) # -> http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_cor qn = qname(ns, name="jpdei_cor:AccountingStandardsDEI") facts = model_xbrl.factsByQname[qn] print(facts) # -> {modelFact[87390, qname: jpdei_cor:AccountingStandardsDEI, contextRef: FilingDateInstant, unitRef: None, value: Japan GAAP, jpcrp030000-asr-001_EXXXXX-000_2019-11-30_01_2020-02-27.xbrl, line 2337]} プレフィックスをキーとして 名前空間URIが格納されている辞書 QName文字列 → QName型 QNameをキーとして factが格納されている辞書。 値はfactのset(同じQNameのfactは複数あり得る) XBRL解析(Arelle)
  21.  factから項目の表示名称を取得する例 fact = list(facts)[0] print(fact.concept.label()) # -> 会計基準 print(fact.concept.label(lang="en"))

    # -> Accounting standards from arelle import XbrlConst print(fact.concept.label(preferredLabel=XbrlConst.verboseLabel)) # ->会計基準、DEI conceptはタクソノミスキーマで定義されている項目を表す。 その項目に名称リンクで設定されている表示名称が取得される。 XBRL解析(Arelle) 「冗長ラベル」なども取得可能 デフォルト言語はマシン環境による。 lang=で他の言語を指定可能。 (その言語の名称リンクが用意されていれば)
  22. 補足 : EDINETのXBRLデータをArelleで扱う際の注意 EDINETで採用する技術仕様(下図赤枠) ArelleがXBRL準拠認定を受けている仕様 ★ ★ ★ • EDINETで採用されているXBRLの拡張仕様Generic

    Labels 1.0 が Arelleの準拠認定を受けている仕様リストに記載されていない。 → XBRL International のテスト対象モジュールのリスト(https://software.xbrl.org/)に Generic Labels が記載されていない(→認定テスト対象外と思われる)。 また、適用箇所である~.gla.xml(EDINETタクソノミ内)の定義の一部を対象に、Arelleの 機能(modelRoleType.genLabelメソッド)で正しく取得できることを確認できた。 問題なく使えそうではあるが、品質を求められる場面で使う際は要注意。 • Inline XBRL のバージョンが異なる → 適用箇所であるインラインXBRLは通常XBRL解析に使わないので問題ないが、インラ インXBRLで何かする場合はArelleを使わない方が良いと思われる(Inline XBRL 1.1と 1.0の違いについては未調査) EDINET フレームワーク設計書 から引用 XBRL Certified Software から引用
  23. 企業によって使用する勘定科目が異なる 例: 売上高を示す勘定科目 複数社の財務諸表をまとめて扱う場合、 QName指定では意図した通りにデータを取得できない(ケースがある) 補足 : 財務諸表の解析に関する注意 表示名称 QName

    企業A 売上高 jppfs_cor:NetSales 企業B 営業収益 jppfs_cor:OperatingRevenue1 ※ 勘定科目はQname指定で取得するには向いていない。どのようなデータを作りたいかに合わせて処理を検討する。