XBRL解析が難しいので、簡易的に財務諸表を作ってみた

[A-SaaSアドベントカレンダー2017](https://qiita.com/advent-calendar/2017/accounting_saas_japan) 
22日目です！残すところあと3日♪
本日は[アカウンティング・サース・ジャパン株式会社](https://www.a-saas.com/) プロダクト開発チーム@saya38が担当させていただきます
よろしくお願いします(´∀`艸)♡


#◆そもそも

[【去年の】弊社のアドベントカレンダー](https://qiita.com/advent-calendar/2016/accounting_saas_japan)にこんな投稿があります（私のではなく）

[XBRLのほんとのほんとの基礎](https://qiita.com/Kobayashi-asaas/items/1914508b4750a0fca4b2)

XBRLとは国税庁に財務諸表を送信するときに使われているマークアップ言語
らしいです( ..)φ_

XBRL・・・（初めて聞いた）よっしゃーこのデータで財務諸表を作ってみよう！

#◆簡易的に

さっそく始めたのですが・・・

複雑・・・(´；ω；`)

読み解くと項目の表示順序関係なども取り出せるのですが
完全に理解するには時間がかかりそうです
「タクソノミ」も引っ張ってこないとなりません

もし利用する科目や順序が決まっているのであれば
紐付け情報をテーブルに登録し
XBRLから金額情報などだけ抜き出しマッチングして財務諸表を作っちゃえば・・・
と
短時間で作った財務諸表メモです

#◆ポイント

##１．会計期間

```xml
            <xbrli:context id="Prior1YearNonConsolidatedInstant">     
              <xbrli:entity>
                <xbrli:identifier scheme="http://www.e-tax.nta.go.jp/">アカウンティング・サース・ジャパン株式会社</xbrli:identifier>
              </xbrli:entity>
              <xbrli:period>
                <xbrli:instant>2017-03-31</xbrli:instant>
              </xbrli:period>
              <xbrli:scenario>
                <jpfr-oe:NonConsolidated/>
              </xbrli:scenario>
            </xbrli:context>
            <xbrli:context id="CurrentYearNonConsolidatedInstant">
              <xbrli:entity>
                <xbrli:identifier scheme="http://www.e-tax.nta.go.jp/">アカウンティング・サース・ジャパン株式会社</xbrli:identifier>
              </xbrli:entity>
              <xbrli:period>
                <xbrli:instant>2018-03-31</xbrli:instant>
              </xbrli:period>
              <xbrli:scenario>
                <jpfr-oe:NonConsolidated/>
              </xbrli:scenario>
            </xbrli:context>
            <xbrli:context id="CurrentYearNonConsolidatedDuration">
              <xbrli:entity>
                <xbrli:identifier scheme="http://www.e-tax.nta.go.jp/">アカウンティング・サース・ジャパン株式会社</xbrli:identifier>
              </xbrli:entity>
              <xbrli:period>
                <xbrli:startDate>2017-04-01</xbrli:startDate>
                <xbrli:endDate>2018-03-31</xbrli:endDate>
              </xbrli:period>
              <xbrli:scenario>
                <jpfr-oe:NonConsolidated/>
              </xbrli:scenario>
            </xbrli:context>
```

まず会計期間に関しては以下のように設定されています

＊<b>Prior1YearNonConsolidatedInstant</b> → 会計年度の前期の期末日時点(又は当期
の期首日時点)
   ・・・ `<xbrli:instant>2017-03-31</xbrli:instant>`→期末日
＊<b>CurrentYearNonConsolidatedInstant</b> → 会計年度の期末日 時点
   ・・・ `<xbrli:instant>2018-03-31</xbrli:instant>`→期末日
＊<b>CurrentYearNonConsolidatedDuration</b> → 会計年度の期間
   ・・・ `<xbrli:startDate>2017-04-01</xbrli:startDate>`→期首日
   ・・・ `<xbrli:endDate>2018-03-31</xbrli:endDate>`→期末日

貸借対照表であれば期末日時点での状況を記載するため<b>CurrentYearNonConsolidatedInstant</b>
の情報を利用することになります
損益計算書などは会計期間の状況であるため<b>CurrentYearNonConsolidatedDuration</b>です

##２．テーブル

表示科目や形式、順序が決まっているので
表示用に勝手に定義したテーブルです
この情報順にXBRLを検索し合致した情報があれば出力する～というイメージです

例えば貸借対照表・・・

| elementName | accountName | prefixId | level |
|:-----------|:------------|:------------|:------------|
| CashAndDeposits | 現金及び預金 | jpfr-t-cte | 3 |
| NotesReceivableTrade | 受取手形 | jpfr-t-cte | 3 |
| AccountsReceivableTrade | 売掛金 | jpfr-t-cte | 3 |
| Merchandise | 商品 | jpfr-t-cte | 3 |
| AdvancePaymentsTrade | 前渡金 | jpfr-t-cte | 3 |
| DepositsPaid | 預け金 | jpfr-t-cte | 3 |
| CashHandGainLoss | 現金過不足 | jpfr-t-cte | 3 |
| OtherCA | その他 | jpfr-t-cte | 3 |
| CurrentAssets | 流動資産合計 | jpfr-t-cte | 6 |
| ： | ： | ： | ： |

levelを指定しておき、組版（？ インデントや罫線など）に利用します
同様に損益計算書や製造原価報告書も同様にテーブル定義すると作成可能です

株主資本等変動計算書は科目名の配下に摘要も存在するため、もう少しテーブルの情報が増えます
前期末の情報＝今期首の情報
なのでXBRLの<b>Prior1YearNonConsolidatedInstant</b>も登録します

| elementName | accountName | sortId | contextRef | summaryName | prefixId | level |
|:-----------|:------------|:------------|:------------|:------------|:------------|:------------|
| CapitalStock | 資本金 | 1 | Prior1YearNonConsolidatedInstant | 資本金 | jpfr-t-cte | 4 |
| IssuanceOfNewSharesCAP | 資本金 | 2 | CurrentYearNonConsolidatedDuration | 新株の発行 | jpfr-t-cte | 4 |
| IssuanceOfNewSharesExerciseOfSubscriptionRightsToSharesCAP | 資本金 | 2 | CurrentYearNonConsolidatedDuration | 新株予約権の行使 | jpfr-t-cte | 4 |
| CapitalReductionCAP | 資本金 | 2 | CurrentYearNonConsolidatedDuration | 減資 | jpfr-t-cte | 4 |
| OtherChangesOfItemsDuringThePeriodCAP99 | 資本金 | 2 | CurrentYearNonConsolidatedDuration | その他 | jpfr-t-cte | 4 |
| TotalChangesOfItemsDuringThePeriodCAP | 資本金 | 2 | CurrentYearNonConsolidatedDuration | 当期変動額合計| jpfr-t-cte | 4 |

個別注記表も同じ仕組みを使いaccountNameを情報のタイトル、データを内容として出力しました

##３．マッチング

説明するまでもないですが紐付け情報をテーブルに登録し
XBRLから金額情報などだけ抜き出しマッチングして財務諸表を作成する
とはこんなイメージです

テーブルに登録してある順に上からXBRLを検索し
情報があれば印字・・・Levelが0なら大分類、3なら金額の箇所に
6なら合計金額として罫線を引く 等

金額等の情報は`<XBRL2_1_INSTANCE>`タグにあります

<img width="1160" alt="xbrl_qiita.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/132485/56c3e456-b020-d05e-1f32-96ff83439bf2.png">


##４．ちなみに

XBRLには独自科目名も登録することができます
その場合`elementName`が何の項目であるのかは
XBRL内の`<XBRL2_1_LINKBASE>`タグ内にあります

 



#最後に

今回は短時間で作成してしまいましたが
いつかはちゃんと解析して財務諸表を作成したいなーと思います
これじゃ、こういう場合ダメだよ
などご意見などありましたらぜひぜひよろしくお願いします

読んでいただきありがとうございました٩( ^◡^ )( ´◡` )۶