未分類
純資産増減ウォーターフォール実装計画
概要
純資産の増減を可視化するウォーターフォールチャートを、営業利益増減のウォーターフォールチャートに加えて追加する。
現在のUI構成
ページには以下の2つの異なるウォーターフォールチャートセクションが存在する:

1. P/L Waterfall(損益計算書フロー)
売上高から純利益までの損益計算書の流れを可視化:
売上高 → 営業費用 → 営業利益 → 営業外収益/費用 → 経常利益 → 特別利益/損失 → 法人税等 → 純利益
関連コンポーネント:
JLeaguePLWaterfallSection.vue- セクション全体(ここをタブ化する)JLeaguePLWaterfallChart.vue- P/L Waterfallチャート本体
このセクションをタブ化して純資産ウォーターフォールを追加する。
2. 営業利益増減(前年比較)
このセクションは変更しない。
表示場所
「P/L Waterfall」セクションをタブ化し、2つのビューを切り替え可能にする:
- P/L Waterfall(デフォルト表示) - 既存のチャート
- 純資産ウォーターフォール - 新規追加
純資産増減ウォーターフォールの構造
チャート要素
[前年度純資産] → [当期純利益] → [その他利益剰余金増減] → [資本金等の増減] → [当期純資産]
計算ロジック
1. 開始点: 前年度の純資産
- データフィールド:
純資産(純資産の部)(前年度)
2. 当期純利益
- データフィールド:
当期純利益(当期) - 正の値: 緑色(増加)
- 負の値: 赤色(減少)
3. その他利益剰余金増減
配当金やその他の利益剰余金変動を表す。
計算式:
その他利益剰余金増減 = (当期利益剰余金 - 前期利益剰余金) - 当期純利益
- 配当がない場合: ほぼゼロになる
- 配当がある場合: マイナスになる(利益剰余金の減少)
- その他の増減がある場合: プラスまたはマイナス
4. 資本金等の増減
第三者割当増資などによる資本金・資本剰余金の変動を表す。
計算式:
資本金等の増減 = (当期資本金 + 当期資本剰余金等) - (前期資本金 + 前期資本剰余金等)
5. 終了点: 当期の純資産
- データフィールド:
純資産(純資産の部)(当期)
整合性検証
以下の等式が成立するはず:
前年度純資産 + 当期純利益 + その他利益剰余金増減 + 資本金等の増減 = 当期純資産
注意: データの丸め誤差(2百万円程度)は許容する。
必要なデータフィールド
JSONデータから使用するフィールド(JLeagueYearDataRaw型より):
| フィールド | 説明 |
|---|---|
純資産(純資産の部) | 純資産合計 |
資本金 | 資本金 |
資本剰余金等 | 資本剰余金等 |
利益剰余金 | 利益剰余金 |
当期純利益 | 当期純利益 |
実装タスク
Phase 1: データ層
- 型定義の追加 (
app/types/jleague.ts)NetAssetsVarianceData型を定義- 純資産増減の各項目を表す型
- Composable作成 (
app/composables/jleague/useJLeagueNetAssetsVariance.ts)- 純資産増減データを計算するComposableを新規作成
- 前年度データとの比較ロジック
useJLeagueVarianceData.tsを参考に実装
Phase 2: テストコード
- 整合性テスト作成 (
tests/jleague-net-assets-waterfall.test.ts)- 全クラブ・全年度で整合性を検証
- 計算式:
前年度純資産 + 当期純利益 + その他利益剰余金増減 + 資本金等の増減 = 当期純資産 - 不一致があれば詳細を出力
Phase 3: UI層
- 純資産ウォーターフォールチャートコンポーネント (
app/components/jleague/JLeagueNetAssetsWaterfallChart.vue)- 既存の
JLeaguePLWaterfallChart.vueを参考に作成 - バーの色分け: 増加=緑、減少=赤
- 既存の
- タブ化UI (
app/components/jleague/JLeaguePLWaterfallSection.vueの改修)- P/L Waterfallと純資産ウォーターフォールを切り替えるタブを追加
- デフォルトはP/L Waterfallを表示
Phase 4: ページ統合
- クラブページへの統合 (
app/pages/financial-quiz/jleague/club/[club].vue)- 純資産増減データをComposableから取得
- タブ化されたセクションに渡す
ファイル構成(予定)
apps/web/
├── app/
│ ├── types/
│ │ └── jleague.ts # 型定義追加
│ ├── composables/jleague/
│ │ ├── useJLeagueVarianceData.ts # 既存(参考)
│ │ └── useJLeagueNetAssetsVariance.ts # 新規
│ ├── components/jleague/
│ │ ├── JLeaguePLWaterfallSection.vue # 改修(タブ化)
│ │ └── JLeagueNetAssetsWaterfallChart.vue # 新規
│ └── pages/financial-quiz/jleague/club/
│ └── [club].vue # 統合
└── tests/
└── jleague-net-assets-waterfall.test.ts # 新規
データ可用性の考慮
2005年頃の古いデータでは以下の値がnullの場合がある:
資本剰余金等利益剰余金
この場合の対処:
- 前年度データがない → 「データなし」メッセージ
- 一部フィールドがnull → 0として計算(ただし「調整」項目で差額吸収)
テストケース
- 整合性テスト: 全クラブ・全年度で計算値と実際値が一致
- 境界条件: 前年度データがない年(各クラブ最初の年)
- 特殊ケース: 大規模増資があったクラブ(資本金等の大きな変動)
- 赤字年度: 当期純損失の年の表示