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