EDINETの有価証券報告書を14万件以上パースしてきました。11,000以上の日本法人、約10年分。パーサーは本番稼働中で、30分ごとに新規提出をチェックし、クオンツファンド、AIエージェント、フィンテック製品が正確なデータとして利用するAPIに供給しています。
その過程で、日本の財務データ抽出を本質的に難しくする障害パターンを体系化しました。パースエラーでも欠損データでもない — 構造的な曖昧性が、警告なしに間違った数値を出力するパターンです。型チェックを通過し、単体では合理的に見え、モデルを静かに破壊します。
一社だけに影響するエッジケースではありません。有報をまたぎ、会計基準をまたぎ、10年分のデータに繰り返し現れる問題のクラスです。
1. 帰属の曖昧性
すべての連結財務諸表には、同じ指標がスコープの異なる複数のバージョンで含まれています。グループ全体の数値には全エンティティが含まれる。親会社帰属の数値は非支配株主持分を除外する。
両方の値がXBRLに存在します。両方とも有効。ただし正しいのは分析目的に応じて片方だけです。EPS、ROE、純利益率、スクリーニングフィルターはすべて親会社帰属を使うべきです — 企業が投資家に報告し、アナリストが参照し、株価に反映される数値です。
両者の差は様々です。子会社の少ない企業なら1%未満。大規模な合弁事業を持つコングロマリットでは20%を超えることも。極端なケースでは、グループ全体が黒字なのに親会社帰属は赤字 — 同じ有報、同じ年度、符号が逆になります。
損益計算書だけの問題ではありません。同じ曖昧性が純資産にも存在し、連鎖します。ROEの分子と分母が異なるスコープから抽出されれば、すべての派生指標の内部整合性が崩れます。
2. 構造的な誤検出
XBRLは標準タクソノミーを超えて、企業独自の要素を定義できます。これらの企業固有要素は命名規則に従いますが、時として標準的な財務概念と衝突します。
不動産関連の項目が純資産と同じプレフィックスを持つことがある。投資カテゴリーが貸借対照表の集計項目とパターンマッチしてしまうことがある。標準要素が欠落しているか優先度が低い場合、素朴なパーサーは企業固有要素を選択してしまいます。
結果として生じる誤差は小さな端数の違いではありません。桁違いの差になりえます。しかもこれは命名の衝突がたまたまある企業にのみ影響する — パーサーは数千社で正しく動作し、パターンに合わない一握りの企業で静かに誤ったデータを出力します。
このカテゴリーの障害が特に危険なのは間欠的であること。集計レベルのバリデーションでは検出できません。特定の企業について既知の値に対するアサーションレベルのチェックが必要です。
3. 時間的不連続性
日本では3つの会計基準が現役で使われています:日本基準、IFRS、US-GAAP。企業はこれらの間を移行します。移行する際、移行年度のXBRLには両方の基準の要素が含まれます。
両方の要素が同じ正規化フィールドにマッピングされます。両方とも有効な値を持つ。しかし一方は新基準での当期データ、もう一方は旧基準からの比較または残存データです。
企業が現在どの基準で報告しているか把握していないパーサーは、間違った基準の — そして間違った会計期間の — 値を抽出する可能性があります。日本最大級の企業では、その誤差は数兆円に達する。今年の売上高ではなく4年前のもの。エラーなくパースが完了する提出書類から。
過去10年で数百社が基準を移行しています。すべての移行が、以降の有報にゴースト要素を残します。
4. エンティティの重複
大企業グループでは、複数のエンティティがEDINETに別々に提出することがあります。親会社が連結有報を提出する。子会社が — 再編前に、あるいは独立上場中に — 独自に提出する。
両方のXBRLに財務データが含まれています。両方とも有効。しかし収益基盤の異なるエンティティを表している。エンティティ単位で重複排除しなければ、幽霊エントリーが出現します。同じ年度に、子会社の部分データが親会社の連結データに混入する。
幽霊行はしばしばデータが不完全です — 貸借対照表はあるが損益計算書がない、あるいは特定セクションからの単一指標のみ。自動分析はこれらをほとんどのフィールドがnullの行として処理することになり、時系列計算が破綻します。
5. 符号の非整合性
財務諸表には方向的に整合すべきフィールドがあります。当期純利益がマイナスなら、EPSもマイナスでなければならない。営業利益がプラスなら、営業利益率もプラスであるべきです。
しかしこれらのフィールドは同じ有報の異なるセクションから抽出される可能性があり、異なるセクションは異なるスコープ規則を使うことがあります。サマリーセクションは親会社帰属を使い、財務諸表セクションはグループ全体を使う。一方のスコープがプラスでもう一方がマイナスのとき、派生フィールドが互いに矛盾します。
これは内部整合性を前提とするすべての分析を破壊します。キャッシュフローに当期純利益を使い、バリュエーションにEPSを使うDCFモデルは矛盾した結果を出す。「黒字企業」のスクリーニングは、チェックするフィールドによって同じ企業を含めたり除外したりします。
正しい要素を選ぶだけでは不十分です。すべての派生指標が同じソース値に遡ることを保証する必要がある。スコープの混在は許されません。
6. コンテキスト解決
すべてのXBRL値はコンテキスト識別子を持ち、期間、エンティティ、連結範囲を特定します。1件の有報に同じ要素が複数のコンテキストで含まれています — 連結当期、個別当期、前期、セグメント別、地域別。
コンテキストの命名は標準化されていません。企業ごとに異なるパターンを使用します。一部のパターンは曖昧で、「当期」の正規表現にマッチしながら実際には異なる期間を指すコンテキスト名もあります。
そして個別決算のみの企業があります — 連結財務諸表を作成しない中小企業。個別の数値が唯一の数値です。常に連結コンテキストを優先するパーサーは、これらの企業のすべてのフィールドでnullを返し、完全に有効なデータを無視します。
この分岐はスケールで意味を持ちます。EDINETの約4,100エンティティが連結データを持つ上場企業。残り7,000以上が個別決算のみの企業です。「常に連結を選ぶ」ルールはデータセットの過半数をゼロにします。
7. 過去のスキーマドリフト
金融庁はXBRLタクソノミーを毎年更新します。要素名が変わる。要素が非推奨になり置き換えられる。新しい要素が登場する。
15年間提出し続けている企業は、複数バージョンのタクソノミーを使用しています。今日ある財務概念にマッピングされる要素は、10年前にマッピングされていた要素と同じとは限りません。あるいは旧要素が後方互換性のために現行タクソノミーに残っているが、もう使われていない。
結果として、見えない不連続性を持つ時系列データが生まれます。指標が変化するのは企業の事業が変わったからではなく、基盤となるXBRL要素が変わったから。個々の値はもっともらしい — 年をまたいで比較し、派生比率にありえない変動を発見して初めて断裂が見えます。
なぜこれらの障害は残り続けるのか
これら7つの曖昧性クラスには共通する性質があります。パーサーは動作し、出力を生成し、エラーを返さない。値は型バリデーションを通過する。合計は一致する。財務諸表はバランスする。プライマリーソースとの照合、時系列の不連続性の比較、内部整合すべき派生指標の計算をして初めて、破損が見える。
正しく見える ≠ 正しい。
これらの障害パターンへの対処には、有報をまたいだ縦断的分析、既知の値に対するアサーションベースのバリデーション、過去データに対する継続的なリグレッションテストが必要です。パースの問題ではありません — XMLにたまたまエンコードされた、財務データ品質の問題です。
当社はパーサーに対して665の自動正確性チェックを実行しています。3つの会計基準、2つのXBRLフォーマット、連結スコープ、基準移行、命名衝突、フィールド間整合性をカバー。すべてのプロダクション障害は、修正の前にリグレッションテストになります。テストスイートは単調増加です。まだ1つも削除していません。
結果として、監査済み有報と一致する数値を返すAPIです。11,000以上のエンティティ、10年分のデータで。
日本の財務データで開発するなら、これらの障害パターンを身をもって学ぶ必要はありません。