仕組み
財務諸表の階層化の仕組み
2026年10月20日時点の説明です。仕組みは改善に合わせて変わることがあります。
1. 「原本どおりの階層」とは
決算書の貸借対照表や損益計算書は、「資産 → 流動資産 → 現金及び預金」のような入れ子の表です。どの科目がどの合計に含まれ、どの順で並ぶかは、会社が提出した XBRL(財務データの電子形式)に書かれています。ZENITH Code はこの構造を捨てずに、科目ごとの深さ・親・並び順・小計かどうかを付けて保持しています。
view_column標準化した列(絞り込み・比較用)
売上高・営業利益・総資産のように、どの会社でも同じ名前の列にそろえたデータです。会社をまたいだ比較やスクリーニングに向きます。そろえる過程で、標準の列に当てはまらない科目は表に出てきません。
account_tree原本どおりの階層(詳細表示用)
提出された決算書の科目を、順序と入れ子のまま並べたデータです。1 社の決算書を画面にそのまま再現するのに向きます。会社が独自に作った科目も、名寄せできたかどうかに関係なく行として残ります。
標準化した列だけを配る形は扱いやすい一方、名寄せ後のキーだけに頼ると、会社独自の科目(拡張タグ)は落ちてしまいます。ZENITH Code は両方を別の出力として用意しています。
2. なぜこの設計にしたか
決算書をそのまま見せるには、標準化とは別の考え方が要ります。この設計にした理由は次の 4 つです。
会社独自の科目を落とさない
提出者は標準の科目一覧に無い科目を、独自のタグ(拡張タグ)として作れます。名寄せ後のキーに頼るとこれが漏れるため、名寄せに依存せず、元の構造と順序をそのまま保持する方針にしました。
小計と明細を見分ける
XBRL の計算リンク(どの科目を足し引きするとどの合計になるかの定義)を使って、小計と明細を見分けます。合計を明細と同じ扱いにして二重に数えることを防ぐためです。
原本の並び順を再現する
XBRL の表示リンク(科目をどの順に、どの見出しの下に並べるかの定義)の順序を、そのまま画面の並び順にします。
会社ごとの例外から、汎用の処理へ
最初の仕組みは会社ごとの個別対応が積み重なり、ある会社のための例外が別の会社の結果を壊すことがありました。2026 年に、木構造(親子関係)に基づく汎用の処理へ作り直しました。
実際に起きた退行から学んだこと
名寄せ後のキーを使って訂正を重ねる方式では、科目が漏れて貸借が合わなくなる退行が実際に起きました。訂正も含めて、元の構造を単位に扱うことにしたのはこのためです。
3. どう組み立てているか
XBRL には、数値そのもののほかに、科目の関係を表す定義(リンクベース)が付いています。ZENITH Code はこれを次の順に読みます。
- 1
表示リンク → 木と並び順
親子関係と並び順(order)から木を作り、その順で並べます。
- 2
役割(ロール)→ どの計算書か
表示リンクの役割の識別子から、貸借対照表・損益計算書・キャッシュ・フロー計算書・包括利益計算書・株主資本等変動計算書・概況のどれかに分類します。
- 3
計算リンク → 足し引きの関係
どの科目がどの合計に、足す(+1)か引く(−1)かを読み取り、小計の判定と検算に使います。
- 4
ラベル → 科目名
まず提出者が付けた独自のラベルを使い、無ければ標準のラベル辞書で科目名を決めます。
data_object各項目に付く情報
/stable/financial-statement-full の応答では、計算書ごとの items 配列の 1 要素が決算書の 1 行です。各行には次の情報が付きます。
| フィールド | 意味 |
|---|---|
| depth | 木の深さ。数が大きいほど内側の行です。資産の部などの大区分と、流動資産などの小区分は深さを固定し、表示しない見出しがあった場合はその分を詰めます。 |
| parent_key | 木の上での親の行。最上位の行では null です。 |
| sort | 並び順の番号。小さい順に並べると、原本の順序(木を上から深さ優先でたどった順)になります。 |
| is_abstract | 見出しの行かどうか。子の行を持ち、自身は金額を持ちません。 |
| is_subtotal | 小計・合計の行かどうか。IFRS と米国基準は計算リンクの形だけで判定し、ラベルの文字列は読みません。日本基準は標準の定義と計算リンクで判定します。正体の分からない独自タグは明細として扱います。 |
| negated | 原本で「△」付きの負の表示を指定された行かどうか。値の符号は変えず、表示の印だけを運びます。 |
| master_key | 名寄せした標準のキー。標準化した列とつなぐときに使います。名寄せできなかった行では null です。 |
| ancestor_section_key | その行が属する大きな合計の区分です。貸借対照表は流動資産・固定負債・純資産など、損益計算書は営業利益・経常利益・税引前利益・当期純利益、キャッシュ・フロー計算書は営業・投資・財務の各区分です。その諸表の区分に当たらない行と、区分を持たない株主資本等変動計算書・包括利益計算書の行では null です(2026 年 10 月 20 日に整理)。 |
| original_tag | 提出された XBRL の元のタグ名。会社独自のタグもそのまま入ります。 |
| label_ja / label_en | 日本語と英語の科目名。英語のラベルが無い科目では空のことがあります。 |
| source | その行の値の取り出し元(例: xbrl)。 |
| context_id | 値がどの時点・期間のものかを示す XBRL のコンテキスト(例: 四半期末時点、期首からの累計期間)。見出しの行では null です。 |
| has_anomaly | 行ではなく期(1 回の決算)ごとの検算の印。statements 直下にあります。主要な項目の欠け落ちや、現金残高のつじつまを確かめた結果です。 |
items は応答の statements.statements の下に、計算書の区分(BS・PL・CF・CI・SS など)ごとに入っています。行の識別に使う key や tree_tag も付きます。
account_tree実際のデータで見る
トヨタ自動車(7203)の 2026-06(Q1・IFRS)の応答例から、先頭の数行をそのまま描画しました。sort の順に並べ、depth で字下げしています。
貸借対照表(BS)の先頭
| 科目 | 元のタグ(original_tag) | 金額(百万円) |
|---|---|---|
資産見出し | jpigp_cor_AssetsIFRSAbstract_bs | |
流動資産見出し | jpigp_cor_CurrentAssetsIFRSAbstract_bs | |
現金及び現金同等物(連結財政状態計算書) | jpigp_cor_CashAndCashEquivalentsIFRS_bs | 10,343,085 |
営業債権及びその他の債権 | jpigp_cor_TradeAndOtherReceivablesCAIFRS_bs | 4,019,645 |
金融事業に係る債権独自タグmaster_key なし | tse-qcediffr-72030_ReceivablesRelatedToFinancialServicesCAIFRS_bs | 14,086,337 |
損益計算書(PL)の先頭
| 科目 | 元のタグ(original_tag) | 金額(百万円) |
|---|---|---|
営業収益見出し独自タグ | tse-qcediffr-72030_SalesRevenuesIFRSAbstract_pl | |
商品・製品売上収益独自タグmaster_key なし | tse-qcediffr-72030_SalesOfProductsIFRS_pl | 12,142,263 |
金融事業に係る金融収益独自タグmaster_key なし | tse-qcediffr-72030_FinancingOperationsIFRS_pl | 1,383,137 |
営業収益合計小計独自タグmaster_key なし | tse-qcediffr-72030_TotalNetRevenuesIFRS_pl | 13,525,400 |
売上原価並びに販売費及び一般管理費見出し独自タグ | tse-qcediffr-72030_CostsAndExpensesIFRSAbstract_pl |
応答例は 2026-10-23 に開発環境から取得した実データです。「独自タグ」は会社が独自に作った科目、「master_key なし」は標準のキーに名寄せされていない行です。標準のタグでも名寄せ先が無ければ master_key は空になります。
4. 独自の科目と名寄せ
会社独自の科目は、名寄せできなくても行として残します。名寄せは「標準化した列とつなぐための付加情報」であり、行を残すかどうかの条件ではありません。
- check_circle名寄せできなかった行は master_key が空になり、行のキーは科目名の英語表記と所属する区分の名前から作ります。
- check_circle名寄せは、完全一致 → 前方一致 → 接頭辞を除いた一致 の順に試します。
- check_circle同じ標準キーに、会計基準ごとの綴りのタグが競合した場合は、書類が申告した会計基準と綴りが合うほうを先に選び、その中で別名の優先順位と値の有無で決めます。
- check_circle競合に負けたタグも、項目としては残します。
名寄せの辞書は、標準の項目 308(XBRL のタグを対応づけている項目。ほかに計算・導出した項目が 71)と、約 4,700 通りの XBRL のタグ名からなります(辞書の定義の数で、実データでの一致件数ではありません)。
5. なぜ速く出せるか
決算短信の XBRL を短い間隔で取り込み、取り込んだ書類からすぐに階層データを組み立てています。
| 書類 | タイミング(平日) |
|---|---|
| 決算短信(TDnet)の取り込み | 30 分ごと(毎時 01 分・31 分) |
| 決算短信の解析と階層データの構築 | 9:15〜18:15 の毎時 15 分 |
| 時間外の開示 | 翌朝 8:00 の日次の処理(同じ処理) |
| 有価証券報告書など(EDINET) | 毎時取得し、毎時 20 分に書類ごとに解析 |
実際の例: 2026 年 9 月 16 日は、09:02 に短信を取り込み、09:16 に階層データの構築が終わりました。
実測では、TDnet の決算短信(XBRL 付き)は、開示から解析が終わるまで中央値で約 46 分、9 割が 50 分以内です(直近 30 日の 526 件で計測。2026-10-16 時点)。データの種類によって配信までの時間は違います。API に反映される時刻の目安は、ほかのデータと同じく、TDnet 由来が毎日 16:30、EDINET 由来が毎日 19:00(日本時間)です。
この目安は処理の予定と 1 日の実際の例から見積もったもので、保証ではありません。障害が起きたときや、訂正開示が遅れて出たときは別です。API の応答がいつの時点のデータかは、応答ヘッダーの X-Data-As-Of(データの時点)と X-Data-Version(データの版)で確かめられます。
merge短信と有報、訂正が重なったときの決め方
- check_circle同じ銘柄・同じ決算期・同じ四半期では、提出が新しい開示を優先します。
- check_circle貸借対照表・損益計算書などの区分ごとに、実際に数値を持っている最新の開示を採ります。
- check_circle業績予想と配当は常に決算短信から、セグメントなどは有価証券報告書から加えます。
- check_circle1 株あたりの指標だけは例外で、訂正の書類からのみ入れ替えます。
6. 会計基準ごとの違い
日本基準・IFRS・米国基準は、書類の様式を表す記号と、表紙で申告された会計基準から判別します。修正国際基準(JMIS)の分岐も用意しています。
| 項目 | 日本基準 | IFRS | 米国基準 |
|---|---|---|---|
| 自己資本(親会社の所有者に帰属する持分)の取り方 | 純資産 − 非支配株主持分 − 新株予約権 | 持分変動計算書の親会社の所有者に帰属する持分 | 株主資本 |
| 小計の判定 | 標準の定義+計算リンク | 計算リンクの形だけ(ラベルは読まない) | 計算リンクの形だけ(ラベルは読まない) |
| 詳細の階層 | 表示リンクから組み立て | 表示リンクから組み立て | 詳細なタグの無い書類は概況のみ |
自己資本は、どの基準でも「親会社の所有者に帰属する持分」の意味にそろえています。どの取り方にするかは基準の名前ではなく、開示されたタグの組み合わせで判定します。
ruleそのほかの決まり
- check_circle売上は、表紙で名乗っている科目名を正とします。同じ期に 2 つの基準の値があるときは、後の基準を採ります。
- check_circle会計基準を移行した年は、申告した基準と違う基準の値を公開しません。
- check_circle連結の詳細な計算書があるのに単体の値しか無い項目は、連結の欄に載せず空欄にします。
- check_circle12 か月でない変則的な決算期は、年率で計算する指標から外します。
- check_circle決算期を変更したときは、12 か月の通期の行をそのまま残し、第 4 四半期の報告書を Q4 として加えます。
- check_circle四半期累計の書類や米国基準の書類などで詳細なタグが付いていないものは、概況(サマリー)だけを表示します。
7. 試行錯誤の経緯
当社は他のサービスを運用しながら、約 2 年にわたって決算書の解析・分析を続けてきました。いまの仕組みに至るまでに、作り直し(再構築・再解析)は 100 回を超えています。全銘柄・全書類を対象にした全件規模の作り直しのうち、直近で記録に残っているのが、2026 年 8〜9 月の次の 3 回です。
- 2026 年 8 月有価証券報告書(EDINET)の全量を、新しい処理で組み直しました。
- 2026 年 9 月 6〜7 日全銘柄を再構築しました(約 8 時間)。事前に決めた 9 項目の受入確認のうち、複数が不合格でした。
- 2026 年 9 月 8〜9 日修正したうえで再び実施し、受入確認に合格しました。
build主な失敗と対策
| 起きたこと | 対策 | 結果 |
|---|---|---|
| 会社ごとの個別対応が積み重なり、ある会社の例外が別の会社を壊した | 木構造に基づく汎用の処理に作り直した | — |
| 等式による検算が、直しようのない警告を大量に出した(警告の付いた期 3,856 行) | 主要な項目の欠け落ちを検知する方式に切り替え、等式は現金残高のものだけ残した | — |
| 1 つの ZIP に別の書類が同居し、木が混ざった | 書類ごとに分けて解析するようにした | 誤った分割 6 件 → 0 件 |
| 損益と包括利益を 1 つの表で示す形式(一計算書方式)の損益計算書が、木ごと落ちた | この形式の表を損益計算書として組み立てるよう直した | 損益計算書の欠落 3,550 行 → 7 行 |
| 木を保存する鍵に書類が含まれず、訂正の木が古い木で上書きされた(446 期中 6 期) | 保存の鍵に書類の ID を加えた | — |
loop確かめ方
- check_circle検査 → 修正 → 再構築 → 再測定 を 1 回りとして繰り返します。
- check_circle検査には約 50 本の読み取り専用の確認クエリを使います。データを書き換えることはありません。
- check_circle件数が動いたら、データより先に検査の式を疑います。受入の条件は、実行する前に決めて固定します。
- check_circle提出者側の誤りは、補正のルールを作らず、1 件ずつ記録します。
8. 規模
上場中の株式 4,014 銘柄を対象に、2026 年 10 月 20 日にデータ工場の本番データを読み取りで集計しました。書類は「銘柄 × 決算期 × 四半期」で 1 件と数えています。米国基準の一部の書類は詳細なタグが無く、概況だけの扱いです。
| 項目 | 数 |
|---|---|
| 階層データがある銘柄 | 3,785 |
| 階層データがある書類(銘柄 × 期 × 四半期) | 149,370 |
| うち通期の書類 | 41,548 |
| 通期 1 書類あたりの平均項目数 | 192 |
| 最大の深さ(貸借対照表。損益・CF は最大 4) | 6 |
| 会社独自タグが占める割合(直近通期、%) | 2 |
| 会社独自タグを 1 つ以上持つ書類の割合(直近通期、%) | 84 |
2026-10-20 時点の集計です。
9. API での使い方
/stable/financial-statement-full に銘柄コードを渡すと、その期の全計算書を階層付きで返します。fiscalPeriod(YYYY-MM)と quarter(Q1・Q2・Q3・FY)で期を指定でき、省略すると最新の期を返します。
リクエストの例
curl "https://api.zenithcode.net/stable/financial-statement-full?symbol=7203&fiscalPeriod=2026-06&quarter=Q1" \ -H "x-api-key: YOUR_API_KEY"
format_indent_increase画面で決算書を組み立てる
- check_circleitems を sort の小さい順に並べます。
- check_circledepth の分だけ字下げします。
- check_circleis_subtotal が true の行を太字にし、is_abstract の行は金額の欄を空けます。
- check_circlenegated が true の行は、表示の慣習に合わせて「△」を付けて見せられます(値の符号はそのまま)。
JavaScript で貸借対照表を字下げして出す例
const res = await fetch(
"https://api.zenithcode.net/stable/financial-statement-full?symbol=7203",
{ headers: { "x-api-key": "YOUR_API_KEY" } },
);
const [row] = await res.json();
const items = row.statements.statements.BS.items;
for (const it of [...items].sort((a, b) => a.sort - b.sort)) {
const indent = " ".repeat(it.depth);
const label = it.is_subtotal ? `[${it.label_ja}]` : it.label_ja;
console.log(indent + label, it.is_abstract ? "" : it.value);
}hub標準化したエンドポイントとの関係
会社をまたいで比べるときや、決まった列で取りたいときは、標準化したエンドポイントを使います。master_key が入っている行は、標準化した列と同じキーにつながっています。
- 損益計算書(/stable/income-statement)
- 貸借対照表(/stable/balance-sheet-statement)
- キャッシュ・フロー計算書(/stable/cash-flow-statement)
10. よくある質問
標準化された損益計算書などのエンドポイントとの違いは何ですか?
標準化したエンドポイントは、どの会社でも同じ列名にそろえた値を返し、比較や絞り込みに向きます。financial-statement-full は、提出された決算書の科目を順序・親子関係・小計のまま返し、1 社の決算書を画面に再現するのに向きます。
master_key が空の行は何ですか?
標準のキーに名寄せできなかった行です。多くは会社が独自に作った科目です。行そのものは残しているので、original_tag と科目名(label_ja・label_en)で表示できます。
すべての会社で詳細な階層が取れますか?
いいえ。四半期累計の書類や米国基準の一部の書類など、詳細なタグが付いていない書類は概況(サマリー)だけになります。
開示から API に反映されるまで、どれくらいかかりますか?
API への反映は、TDnet 由来のデータが毎日 16:30、EDINET 由来のデータが毎日 19:00(日本時間)が目安です。実測では、TDnet の決算短信(XBRL 付き)は、開示から解析が終わるまで中央値で約 46 分、9 割が 50 分以内です(直近 30 日の 526 件で計測。2026-10-16 時点)。障害時や訂正開示が遅れた場合は除きます。
訂正の開示が出たらどうなりますか?
同じ銘柄・期・四半期では提出が新しい開示を優先し、計算書の区分ごとに実際に数値を持つ最新の開示を採ります。1 株あたりの指標は、訂正の書類からのみ入れ替えます。
会計基準の違う会社どうしを比べられますか?
自己資本は基準をまたいで「親会社の所有者に帰属する持分」の意味にそろえていますが、科目の立て方は基準や会社ごとに違います。会社をまたいだ比較には、標準化したエンドポイントの使用をおすすめします。
このページはデータの作り方の説明です。データの正確性・完全性を保証するものではなく、投資の判断を勧めるものでもありません。

