Skip to content

イテレーション計画 8 - 財務会計システム

基本情報

項目 内容
イテレーション番号 8
期間 2026-02-17 〜 2026-03-02(2週間)
作業日数 10日
チーム人数 3名
総作業可能時間 150時間(3名 × 5時間/日 × 10日)
前イテレーションベロシティ 13SP
累積平均ベロシティ 15.9SP

イテレーションゴール

損益計算書表示を実装し、リリース 2.0 機能拡張版を完了する

リリース 2.0 の最後のイテレーションとして、損益計算書表示を実装する。貸借対照表(US-FS-001)で確立したアーキテクチャパターン(Repository/Service/Controller + PDF/Excel エクスポート)を再利用し、効率的に実装する。イテレーション完了をもってリリース 2.0 機能拡張版(57SP)が全て達成される。

選択したストーリー

ストーリーID ストーリー名 SP 優先度
US-FS-002 損益計算書表示 8 必須
合計 8

コミットメント: 8SP(累積平均ベロシティ 15.9SP に対して余裕あり。リリース 2.0 完了の統合テスト・品質確認に残り時間を活用)


ゴール

イテレーション終了時の達成状態

  1. 損益計算書表示: 収益・費用の各科目で損益計算書を表示でき、期間指定と前期比較が可能
  2. 利益計算: 売上総利益、営業利益、経常利益、当期純利益が正しく計算される
  3. エクスポート: PDF/Excel でダウンロードできる
  4. リリース 2.0 完了: 全 12 ストーリー(57SP)の受入条件を満たす

成功基準

  • US-FS-002 の全受入条件を満たしている
  • テストカバレッジ 80% 以上を維持
  • SonarQube Quality Gate パス
  • リリース 2.0 全機能の統合テスト完了

ユーザーストーリー

US-FS-002: 損益計算書表示(8SP)

ストーリー:

経理責任者として、損益計算書を表示したい。なぜなら、企業の収益性を把握するためだ。

受入条件:

  • 収益、費用の各科目と金額が表示される
  • 売上総利益、営業利益、経常利益、当期純利益が計算される
  • 期間を指定して表示できる
  • 前期比較ができる
  • PDF/Excel でダウンロードできる

タスク分解

US-FS-002: 損益計算書表示(8SP)

タスクID タスク名 理想時間 担当 状態
FS-002-01 損益計算書ユースケース設計 2h Claude [x]
FS-002-02 GetProfitAndLossQuery / Result 実装 2h Codex [x]
FS-002-03 GetProfitAndLossService 実装(利益計算ロジック) 5h Codex [x]
FS-002-04 ProfitAndLossRepository(Output Port)+ MyBatis mapper 3h Codex [x]
FS-002-05 前期比較ロジック実装 3h Codex [x]
FS-002-06 損益計算書 API 実装(GET /api/profit-and-loss) 2h Codex [x]
FS-002-07 単体テスト作成 4h Codex [x]
FS-002-08 損益計算書画面 UI 実装(報告式レイアウト) 6h Codex [x]
FS-002-09 前期比較 UI 実装 3h Codex [x]
FS-002-10 PDF/Excel ダウンロード機能実装 4h Codex [x]
FS-002-11 フロントエンド API 連携 2h Codex [x]
FS-002-12 統合テスト(E2E テスト) 3h Claude [x]
小計 39h

実装詳細

バックエンド実装(貸借対照表パターン再利用)

アーキテクチャ層構造:

ProfitAndLossController(REST API)
    ↓
GetProfitAndLossUseCase(入力ポート)
    ↓
GetProfitAndLossService(ユースケース実装)
    ↓
ProfitAndLossRepository(出力ポート)
    ↓
MyBatisProfitAndLossRepository(実装)+ ProfitAndLossMapper(MyBatis)
    ↓
ProfitAndLossEntity(エンティティ)

Input Port(Query):

public record GetProfitAndLossQuery(
    LocalDate dateFrom,       // 期間開始日(必須)
    LocalDate dateTo,         // 期間終了日(必須)
    LocalDate comparativeDateFrom,  // 前期比較 開始日(任意)
    LocalDate comparativeDateTo     // 前期比較 終了日(任意)
)

貸借対照表との差異:

項目 貸借対照表(BS) 損益計算書(PL)
フィルタ bspl_category = 'B' bspl_category = 'P'
期間 時点指定(date) 期間指定(dateFrom, dateTo)
セクション ASSET, LIABILITY, EQUITY REVENUE, EXPENSE
利益計算 balanced チェック 段階利益計算
符号 ASSET=正, LIABILITY/EQUITY=負→正 REVENUE=正(貸方), EXPENSE=正(借方)

損益計算書の利益計算ロジック

売上高(REVENUE のうち売上関連)
  - 売上原価(EXPENSE のうち原価関連)
= 売上総利益

売上総利益
  - 販売費及び一般管理費(EXPENSE のうち営業費関連)
= 営業利益

営業利益
  + 営業外収益(REVENUE のうち営業外)
  - 営業外費用(EXPENSE のうち営業外)
= 経常利益

経常利益
  + 特別利益(REVENUE のうち特別)
  - 特別損失(EXPENSE のうち特別)
= 税引前当期純利益

税引前当期純利益
  - 法人税等
= 当期純利益

: 現在のアカウント構造(AccountType = REVENUE / EXPENSE のみ)では段階利益の詳細分類が限定的。初期実装では以下のシンプルな構造とする:

  • 収益合計: REVENUE タイプの全勘定科目
  • 費用合計: EXPENSE タイプの全勘定科目
  • 当期純利益: 収益合計 - 費用合計

勘定科目コードの先頭桁で分類する方式で段階利益に対応可能(将来拡張)。

データソース

  • accounts テーブル — bspl_category = 'P' で損益計算書項目を抽出
  • daily_account_balances テーブル — 期間フィルタ(posting_date BETWEEN dateFrom AND dateTo
  • profit_and_loss ビュー(V10 で作成済み)— 参考

MyBatis クエリ設計

SELECT
    a.code AS account_code,
    a.name AS account_name,
    a.account_type,
    COALESCE(SUM(d.debit_amount), 0) AS total_debit,
    COALESCE(SUM(d.credit_amount), 0) AS total_credit,
    CASE
        WHEN a.account_type = 'EXPENSE' THEN
            COALESCE(SUM(d.debit_amount), 0) - COALESCE(SUM(d.credit_amount), 0)
        WHEN a.account_type = 'REVENUE' THEN
            COALESCE(SUM(d.credit_amount), 0) - COALESCE(SUM(d.debit_amount), 0)
        ELSE 0
    END AS amount
FROM accounts a
LEFT JOIN daily_account_balances d
    ON a.code = d.account_code
    AND d.is_closing_entry = 0
    AND d.posting_date BETWEEN #{dateFrom} AND #{dateTo}
WHERE a.bspl_category = 'P'
GROUP BY a.code, a.name, a.account_type
ORDER BY a.code

API 設計

メソッド エンドポイント 説明 権限
GET /api/profit-and-loss 損益計算書表示 全ロール
GET /api/profit-and-loss/export 損益計算書エクスポート 全ロール

API パラメータ詳細

GET /api/profit-and-loss

パラメータ 必須 説明
dateFrom LocalDate 任意 期間開始日(省略時: 会計年度期首)
dateTo LocalDate 任意 期間終了日(省略時: 当日)
comparativeDateFrom LocalDate 任意 前期比較 期間開始日
comparativeDateTo LocalDate 任意 前期比較 期間終了日

GET /api/profit-and-loss/export

パラメータ 必須 説明
format String 必須 出力形式(pdf / excel)
dateFrom LocalDate 任意 期間開始日
dateTo LocalDate 任意 期間終了日

フロントエンド実装

コンポーネント構成(貸借対照表パターンに準拠):

  • ProfitAndLossPage.tsx - 損益計算書ページ
  • ProfitAndLossFilter.tsx - 期間指定(dateFrom, dateTo)+ 前期比較期間入力
  • ProfitAndLossTable.tsx - 報告式レイアウト(縦並び)
  • ProfitAndLossSummary.tsx - 利益サマリー(当期純利益・前期比較)
  • getProfitAndLoss.ts - API クライアント
  • exportProfitAndLoss.ts - エクスポート API クライアント

損益計算書レイアウト(報告式):

┌─────────────────────────────────────────────────┐
│                  損 益 計 算 書                    │
│           自 2026年1月1日 至 2026年12月31日        │
├─────────────────────────────────────────────────┤
│ 【収益の部】                                      │
│   売上高                              1,000,000   │
│   受取利息                                5,000   │
│   収益合計                            1,005,000   │
├─────────────────────────────────────────────────┤
│ 【費用の部】                                      │
│   売上原価                              600,000   │
│   給料                                  200,000   │
│   地代家賃                              100,000   │
│   費用合計                              900,000   │
├─────────────────────────────────────────────────┤
│ 当期純利益                              105,000   │
└─────────────────────────────────────────────────┘

ルーティング:

  • Route: /financial-statements/profit-and-loss
  • Sidebar: financial-statements children に追加

作業時間サマリー

カテゴリ 理想時間
US-FS-002: 損益計算書表示 39h
リリース 2.0 統合テスト 8h
品質確認(SonarQube 等) 4h
合計 51h

キャパシティ: 150h(3名 × 5h × 10日) バッファ: 99h(66%)— リリース 2.0 品質確認とリファクタリングに活用


詳細スケジュール

gantt
    title イテレーション8 詳細スケジュール(2週間)
    dateFormat  YYYY-MM-DD
    axisFormat  %m/%d

    section US-FS-002 損益計算書表示
    ユースケース設計                  :fs2-1, 2026-02-17, 1d
    Query/Result/Service実装          :fs2-2, 2026-02-18, 2d
    Repository・MyBatis mapper        :fs2-3, after fs2-2, 1d
    前期比較ロジック                  :fs2-4, after fs2-3, 1d
    API実装・単体テスト               :fs2-5, after fs2-4, 1d
    UI実装(報告式レイアウト)        :fs2-6, 2026-02-24, 2d
    前期比較UI・エクスポート          :fs2-7, after fs2-6, 1d
    E2Eテスト                         :fs2-8, after fs2-7, 1d

    section リリース 2.0 品質確認
    統合テスト                        :qa-1, after fs2-8, 1d
    SonarQube Quality Gate確認        :qa-2, after qa-1, 1d

    section マイルストーン
    イテレーション8完了               :milestone, m1, 2026-03-02, 0d
    リリース2.0完了                   :milestone, m2, 2026-03-02, 0d

リスクと対策

リスク 影響度 発生確率 対策
段階利益計算の複雑性 初期実装は収益合計-費用合計のシンプル構造、段階利益は勘定科目コード分類で将来対応
期間指定クエリのパフォーマンス daily_account_balances にインデックスが存在、BS と同じ JOIN パターン
PDF/Excel エクスポートの報告式レイアウト BS のエクスポートパターンを再利用、レイアウトのみ変更
E2E テストのデータ依存性 visibilityTestSetup パターンを継続適用

前イテレーションからの改善アクション

# アクション 状態 備考
1 貸借対照表パターンの再利用 計画済み Repository/Service/Controller + エクスポートを再利用
2 ページネーション楽観的更新の横展開 計画済み 必要に応じて他ページにも適用
3 SonarQube Quality Gate 確認 計画済み IT-8 完了時に確認・記録
4 リリース 2.0 統合テスト 計画済み 全機能の統合テスト実施

リリース 2.0 機能拡張版 達成要件(イテレーション 5-8)

機能要件

  • ユーザー管理(編集・削除・一覧)※イテレーション 5 完了
  • 仕訳承認ワークフロー(申請・承認)※イテレーション 5 完了
  • 仕訳差し戻し・確定 ※イテレーション 6 完了
  • 月次残高照会 ※イテレーション 6 完了
  • 残高試算表表示 ※イテレーション 6 完了
  • 貸借対照表表示 ※イテレーション 7 完了
  • 補助元帳照会 ※イテレーション 7 完了
  • 損益計算書表示 ← イテレーション 8 で実装完了(2026-02-17)

イテレーション 8 の位置づけ

イテレーション 8 はリリース 2.0 機能拡張版の最後のイテレーション。損益計算書表示(US-FS-002 8SP)を実装することで、全 12 ストーリー(57SP)が完了し、リリース 2.0 が達成される。


コミットメント確認

チーム合意事項

  • US-FS-002 の受入条件を理解した
  • タスク分解と見積もりに合意した
  • 8SP を2週間で完了することにコミットする
  • リリース 2.0 の統合テストを実施する
  • デイリースタンドアップを毎日実施する
  • 問題発生時は即座に共有する

完了の定義(Definition of Done)

  • すべての受入条件を満たしている
  • 単体テストが作成され、すべてパスしている
  • 統合テスト(E2E テスト)が作成され、すべてパスしている
  • コードレビューが完了している
  • CI/CD パイプラインでビルドが成功している
  • テストカバレッジ 80% 以上を維持している
  • SonarQube Quality Gate パス
  • ドキュメントが更新されている

進捗状況

ストーリー進捗

ストーリーID ストーリー名 SP 状態 完了日
US-FS-002 損益計算書表示 8 ✅ 完了 2026-02-17

日次残理想時間

計画残時間 実績残時間 差異
Day 1 (2/17) 51h 0h -51h(全タスク完了)

更新履歴

日付 更新内容 更新者
2026-02-17 初版作成 Claude Opus 4.6
2026-02-17 US-FS-002 全タスク完了、受入条件達成、コミットメント確認・完了の定義更新 Claude Opus 4.6

関連ドキュメント