機能設計書

バージョン: 1.0.0

最終更新:

ステータス: 計画中

1. 概要

本ドキュメントは、アプリケーションの機能設計について記載します。各機能の詳細、実装方法、および依存関係を定義します。

2. 機能一覧

2.1 コア機能

  • 認証・認可システム 計画中

    ユーザーのログイン、ログアウト、権限管理を行います。

  • データ管理機能 計画中

    アプリケーションのコアデータの作成、読取、更新、削除を行います。

  • レポート生成機能 計画中

    データを基にした各種レポートの生成と出力を行います。

3. 機能詳細

3.1 認証・認可システム

項目 内容
目的 セキュアなユーザー認証と権限管理
対象ユーザー 全ユーザー
技術スタック JWT、OAuth 2.0
優先度

APIエンドポイント

POST /api/auth/login POST /api/auth/logout POST /api/auth/refresh GET /api/auth/profile

3.2 データ管理機能

項目 内容
目的 効率的なデータの管理と操作
対象ユーザー 認証済みユーザー
技術スタック RESTful API、GraphQL(検討中)
優先度

4. 非機能要件

4.1 パフォーマンス要件

  • レスポンス時間: 95%のリクエストが200ms以内
  • 同時接続数: 最大1000ユーザー
  • 可用性: 99.9%以上

4.2 セキュリティ要件

  • 全通信のHTTPS化
  • 定期的なセキュリティ監査
  • OWASP Top 10への対策

5. 財務データ処理フロー(2段階フロー実装)

5.1 全体処理フロー(✅ 2025年1月実装完了)

財務分析アプリケーションにおける企業検索から財務データ表示までの2段階フロー処理を以下に示します。

処理ステップ一覧(2段階フロー)

  1. 企業名入力・検索
    • コンポーネント: pages/index.js
    • ユーザー入力を受け取り、/api/search-company-integrated APIを呼び出し
    • マスターデータ(6,217社)から検索結果表示
  2. 企業・年度選択
    • ユーザーが検索結果から企業を選択
    • 年度選択ボタン(過去10年)を表示
    • 年度選択時に書類検索段階に移行
  3. 【段階1】書類検索・一覧表示
    • コンポーネント: src/components/DocumentSearchLoader.js
    • API: /api/search-documents-streaming.js
    • Edge Runtime + Streaming対応でタイムアウト対策
    • ハイブリッド検索(月末→日次)で効率化
    • リアルタイム進捗表示
  4. ハイブリッド書類検索処理
    • Stage1(月末検索): 36ヶ月間の月末日で検索
    • Stage2(日次検索): Stage1で見つからない場合、91日間の日次検索
    • 有価証券報告書(formCode: 120, 030000)をフィルタ
    • 検索結果を書類一覧として表示
  5. 【段階2】書類選択・財務データ抽出
    • コンポーネント: src/components/DocumentSelector.js
    • 検索された有価証券報告書一覧をユーザーに表示
    • 書類選択後、財務データ抽出APIを呼び出し
    • 書類メタデータ(提出日、期間、docId等)も表示
  6. 財務データ抽出処理
    • API: /api/extract-financial-data.js
    • 選択されたdocIdからXBRLデータをダウンロード
    • XBRLParser でXMLを解析
    • 財務項目(売上、利益、資産等)を自動抽出
  7. XBRL解析・財務項目マッピング
    • パーサー: src/lib/edinet/parsers/XBRLParser.js
    • XMLデータから数値項目を再帰的検索
    • BS項目: 総資産、流動資産、負債、純資産
    • PL項目: 売上高、営業利益、純利益
    • 単位情報(百万円等)も保持
  8. 財務比率計算
    • ROE(自己資本利益率)= 純利益 ÷ 純資産
    • ROA(総資産利益率)= 純利益 ÷ 総資産
    • 売上高純利益率 = 純利益 ÷ 売上高
    • 総資産回転率 = 売上高 ÷ 総資産
  9. BS/PL整形・表示
    • コンポーネント: components/XBRLFinancialDataTable.js
    • 貸借対照表(BS)・損益計算書(PL)のテーブル表示
    • 財務比率グラフ表示
    • 数値の桁区切り・単位表示
  10. 結果表示・操作継続
    • 財務データ表示完了
    • 「別の年度を検索」ボタンで最初に戻る
    • 同一企業の他年度検索が可能

5.2 主要コンポーネント構成(2段階フロー対応)

カテゴリ コンポーネント/ファイル 役割 実装状況
UI(メイン) pages/index.js メイン画面・2段階フロー制御 ✅ 完了
UI(書類検索) src/components/DocumentSearchLoader.js 書類検索UI・進捗表示 ✅ 完了
UI(書類選択) src/components/DocumentSelector.js 書類選択・財務データ抽出UI ✅ 完了
UI(結果表示) components/XBRLFinancialDataTable.js BS/PL表示・財務比率グラフ ✅ 完了
API(企業検索) pages/api/search-company-integrated.js 企業検索エンドポイント ✅ 完了
API(書類検索) pages/api/search-documents-streaming.js 書類検索専用API(Edge Runtime) ✅ 完了
API(財務抽出) pages/api/extract-financial-data.js 財務データ抽出専用API ✅ 完了
Service(統合) src/lib/edinet/index.js EDINETClient統合インターフェース ✅ 完了
Service(企業検索) CompanySearchService(Vercel).js 企業検索サービス(環境別) ✅ 完了
Service(書類検索) DocumentService.js 書類検索・取得サービス ✅ 完了
Parser XBRLParser.js XBRL解析エンジン ✅ 完了
Data edinet-master-full.json 企業マスターデータ(6,217社) ✅ 完了

5.3 新実装API仕様詳細

📋 書類検索API

POST /api/search-documents-streaming
  • Runtime: Edge Runtime(タイムアウト対策)
  • レスポンス: Server-Sent Events(ストリーミング)
  • パラメータ: edinetCode, year
  • 機能: ハイブリッド検索(月末36回→日次91回)
  • 進捗: リアルタイム進捗報告

💰 財務データ抽出API

POST /api/extract-financial-data
  • Runtime: Node.js Runtime
  • レスポンス: JSON
  • パラメータ: docId, docInfo
  • 機能: XBRL解析・BS/PL項目抽出・財務比率計算
  • 出力: 構造化財務データ

5.4 データフロー図(2段階フロー完全版)

[ユーザー入力: 企業名]
    ↓
[pages/index.js] → [/api/search-company-integrated]
                            ↓
                    [EDINETClient]
                            ↓
                    [CompanySearchService]
                            ↓
                    [マスターデータ検索(6,217社)]
                            ↓
                    [企業一覧返却]
    ↓
[企業選択 + 年度選択] ✅ 実装完了
    ↓
【段階1: 書類検索】
[DocumentSearchLoader] → [/api/search-documents-streaming]
                                    ↓
                            [Edge Runtime + Streaming]
                                    ↓
                            [ハイブリッド検索開始]
                                    ↓
                            [Stage1: 月末検索(36回API)]
                                    ↓
                            [見つからない場合: Stage2: 日次検索(91回API)]
                                    ↓
                            [有価証券報告書一覧返却]
    ↓
【段階2: 書類選択・財務データ抽出】
[DocumentSelector] → 書類選択 → [/api/extract-financial-data]
                                        ↓
                                [EDINETClient.getDocument]
                                        ↓
                                [XBRLダウンロード(docId指定)]
                                        ↓
                                [XBRLParser.parse]
                                        ↓
                                [財務項目抽出・マッピング]
                                        ↓
                                [財務比率計算(ROE, ROA等)]
                                        ↓
                                [構造化財務データ返却]
    ↓
[XBRLFinancialDataTable] → BS/PL表示・グラフ表示 ✅ 完了

【フロー継続】
[別の年度を検索] → 最初の年度選択に戻る
                    

5.5 実装完了・技術改善点

✅ 2025年1月実装完了項目

  • 2段階フロー分離: 書類検索とBS/PL抽出を明確に分離
  • タイムアウト対策: Edge Runtime + Streaming対応
  • ハイブリッド検索: 効率的な月末→日次検索
  • ユーザビリティ向上: 書類選択による明確な操作フロー
  • リアルタイム進捗: 検索状況の可視化
  • 財務比率自動計算: ROE, ROA, 利益率等の算出

🔧 技術的改善点

  • API設計: 単一責任の原則に基づく分離設計
  • エラーハンドリング: 各段階での適切なエラー処理
  • パフォーマンス: 必要時のみ重い処理を実行
  • スケーラビリティ: Edge Runtime活用による負荷分散

6. 今後の追加予定機能

以下の機能は、今後のバージョンで追加を検討しています: