---
generated_at: 2026-01-30 12:00:00
metrics:
  claims_total: 200
  claims_with_evidence: 192
  claims_without_evidence: 8
confidence_derived: 0.96
---

# 根拠レポート：loot-core単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：192 / 200、根拠なし：8
- 優先レビュー（高）
  1. **UT-LCR-092〜095 (shared/async)**: 実際のテストファイルでの挙動確認が必要
  2. **UT-LCR-176〜179 (api/batch-budget)**: APIのバッチ処理の内部状態管理の詳細確認
  3. **UT-LCR-198〜199 (api/sync)**: 同期エラー時の具体的なエラーパターンの網羅確認

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/loot-core/src/shared/util.ts` - ユーティリティ関数群
- E-02: `packages/loot-core/src/shared/transactions.ts` - トランザクション操作関数
- E-03: `packages/loot-core/src/shared/schedules.ts` - スケジュール関連関数
- E-04: `packages/loot-core/src/shared/rules.ts` - ルール関連ユーティリティ
- E-05: `packages/loot-core/src/shared/months.ts` - 日付・月操作関数
- E-06: `packages/loot-core/src/shared/arithmetic.ts` - 算術評価関数
- E-07: `packages/loot-core/src/shared/async.ts` - 非同期制御関数
- E-08: `packages/loot-core/src/shared/query.ts` - クエリビルダ
- E-09: `packages/loot-core/src/server/db/index.ts` - データベース操作
- E-10: `packages/loot-core/src/server/sync/index.ts` - 同期処理
- E-11: `packages/loot-core/src/server/budget/base.ts` - 予算基本処理
- E-12: `packages/loot-core/src/server/rules/app.ts` - ルールアプリケーション
- E-13: `packages/loot-core/src/server/spreadsheet/spreadsheet.ts` - スプレッドシートエンジン
- E-14: `packages/loot-core/src/server/api.ts` - APIハンドラ

## 3) Claims と根拠の対応（レビューの主戦場）

### shared/util (UT-LCR-001〜028)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | last関数が配列の最後の要素を返す | E-01 L4-6 | ○ |
| C-02 | last関数が空配列でundefinedを返す | E-01 L4-6 | ○ |
| C-03 | getChangedValues関数が差分を検出する | E-01 L8-29 | ○ |
| C-04 | getChangedValues関数が変更なしでnullを返す | E-01 L28 | ○ |
| C-05 | hasFieldsChanged関数がフィールド変更を検出する | E-01 L31-45 | ○ |
| C-06 | applyChanges関数が追加・更新・削除を適用する | E-01 L53-85 | ○ |
| C-07 | groupById関数がIDでグループ化する | E-01 L153-165 | ○ |
| C-08 | diffItems関数が差分を検出する | E-01 L125-151 | ○ |
| C-09 | safeNumber関数が安全な数値を検証する | E-01 L418-430 | ○ |
| C-10 | integerToCurrency関数が整数を通貨形式に変換する | E-01 L436-445 | ○ |
| C-11 | currencyToAmount関数が通貨文字列を数値に変換する | E-01 L473-495 | ○ |
| C-12 | amountToInteger関数が金額を整数に変換する | E-01 L514-519 | ○ |
| C-13 | looselyParseAmount関数が様々な形式の金額を解析する | E-01 L534-572 | ○ |
| C-14 | getNumberFormat関数が数値フォーマット設定を返す | E-01 L314-389 | ○ |

### shared/transactions (UT-LCR-029〜042)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-15 | isTemporaryId関数がtempを含むIDを検出する | E-02 L8-10 | ○ |
| C-16 | isPreviewId関数がpreview/を含むIDを検出する | E-02 L12-14 | ○ |
| C-17 | makeChild関数が子トランザクションを作成する | E-02 L33-57 | ○ |
| C-18 | recalculateSplit関数が分割合計を検証する | E-02 L86-100 | ○ |
| C-19 | ungroupTransactions関数がグループを展開する | E-02 L132-144 | ○ |
| C-20 | groupTransaction関数がトランザクションをグループ化する | E-02 L146-153 | ○ |
| C-21 | updateTransaction関数がトランザクションを更新する | E-02 L257-294 | ○ |
| C-22 | deleteTransaction関数がトランザクションを削除する | E-02 L296-322 | ○ |
| C-23 | splitTransaction関数がトランザクションを分割する | E-02 L324-352 | ○ |

### shared/schedules (UT-LCR-043〜058)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | getStatus関数がスケジュール状態を返す | E-03 L18-42 | ○ |
| C-25 | getRecurringDescription関数が繰り返し説明を生成する | E-03 L105-259 | ○ |
| C-26 | recurConfigToRSchedule関数が設定を変換する | E-03 L261-315 | ○ |
| C-27 | getNextDate関数が次回日付を計算する | E-03 L345-378 | ○ |
| C-28 | getDateWithSkippedWeekend関数が週末をスキップする | E-03 L380-394 | ○ |
| C-29 | getScheduledAmount関数が金額を取得する | E-03 L396-409 | ○ |
| C-30 | getUpcomingDays関数が日数を計算する | E-03 L422-460 | ○ |

### shared/rules (UT-LCR-059〜066)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-31 | isValidOp関数が演算子を検証する | E-04 L95-104 | ○ |
| C-32 | getValidOps関数が有効な演算子リストを返す | E-04 L106-114 | ○ |
| C-33 | mapField関数がフィールド名を表示名に変換する | E-04 L124-164 | ○ |
| C-34 | friendlyOp関数が演算子を表示名に変換する | E-04 L166-235 | ○ |
| C-35 | parse関数がルール項目をパースする | E-04 L288-312 | ○ |
| C-36 | getApproxNumberThreshold関数が閾値を計算する | E-04 L362-364 | ○ |

### shared/months (UT-LCR-067〜082)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-37 | _parse関数が日付文字列をパースする | E-05 L13-82 | ○ |
| C-38 | monthFromDate関数が月形式を返す | E-05 L90-92 | ○ |
| C-39 | dayFromDate関数が日形式を返す | E-05 L113-115 | ○ |
| C-40 | nextMonth/prevMonth関数が月を計算する | E-05 L163-173 | ○ |
| C-41 | addMonths/subMonths関数が月を加減算する | E-05 L179-203 | ○ |
| C-42 | addDays/subDays関数が日を加減算する | E-05 L213-219 | ○ |
| C-43 | isBefore/isAfter関数が日付を比較する | E-05 L221-227 | ○ |
| C-44 | rangeInclusive関数が月範囲を生成する | E-05 L323-325 | ○ |

### shared/arithmetic (UT-LCR-083〜091)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-45 | evalArithmetic関数が算術式を評価する | E-06 L115-134 | ○ |
| C-46 | evalArithmetic関数が通貨形式を解析する | E-06 L52-53 | ○ |
| C-47 | evalArithmetic関数がエラー時にデフォルト値を返す | E-06 L127-130 | ○ |

### shared/async (UT-LCR-092〜095)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | sequential関数が順次実行を保証する | E-07 L4-60 | ○ |
| C-49 | once関数が重複実行を防止する | E-07 L62-76 | △ |

### shared/query (UT-LCR-096〜100)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-50 | Query.filter関数がフィルタを追加する | E-08 L42-46 | ○ |
| C-51 | Query.select関数が選択を設定する | E-08 L67-84 | ○ |
| C-52 | Query.orderBy関数がソート順を設定する | E-08 L105-113 | ○ |
| C-53 | Query.limit関数が件数制限を設定する | E-08 L116-118 | ○ |
| C-54 | Query.unfilter関数がフィルタを削除する | E-08 L49-65 | ○ |

### server/db (UT-LCR-101〜126)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-55 | runQuery関数がSQLクエリを実行する | E-09 L112-134 | ○ |
| C-56 | first関数が最初の行を返す | E-09 L173-176 | ○ |
| C-57 | insert関数がレコードを挿入する | E-09 L237-255 | ○ |
| C-58 | update関数がレコードを更新する | E-09 L204-222 | ○ |
| C-59 | delete_関数がレコードを論理削除する | E-09 L257-267 | ○ |
| C-60 | getCategories関数がカテゴリを取得する | E-09 L311-319 | ○ |
| C-61 | insertCategory関数がカテゴリを挿入する | E-09 L435-488 | ○ |
| C-62 | getPayees関数がペイイーを取得する | E-09 L643-650 | ○ |
| C-63 | insertPayee関数がペイイーを挿入する | E-09 L561-571 | ○ |
| C-64 | mergePayees関数がペイイーをマージする | E-09 L603-641 | ○ |
| C-65 | loadClock関数がCRDTクロックをロードする | E-09 L92-109 | ○ |

### server/sync (UT-LCR-127〜142)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-66 | setSyncingMode関数が同期モードを設定する | E-10 L40-59 | ○ |
| C-67 | checkSyncingMode関数がモードを判定する | E-10 L61-74 | ○ |
| C-68 | serializeValue関数が値をシリアライズする | E-10 L153-163 | ○ |
| C-69 | deserializeValue関数が値をデシリアライズする | E-10 L165-178 | ○ |
| C-70 | applyMessages関数がメッセージを適用する | E-10 L257-421 | ○ |
| C-71 | batchMessages関数がバッチ処理する | E-10 L459-480 | ○ |
| C-72 | addSyncListener関数がリスナーを管理する | E-10 L185-191 | ○ |

### server/budget/base (UT-LCR-143〜149)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-73 | getBudgetType関数が予算タイプを返す | E-11 L15-18 | ○ |
| C-74 | getBudgetRange関数が予算範囲を計算する | E-11 L20-39 | ○ |
| C-75 | createCategory関数がカテゴリをスプレッドシートに作成する | E-11 L41-65 | ○ |
| C-76 | triggerBudgetChanges関数が変更を反映する | E-11 L148-203 | ○ |
| C-77 | createBudget関数が予算を作成する | E-11 L228-284 | ○ |

### server/rules/app (UT-LCR-150〜157)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-78 | ruleValidate関数がルールを検証する | E-12 L98-103 | ○ |
| C-79 | addRule関数がルールを追加する | E-12 L105-116 | ○ |
| C-80 | updateRule関数がルールを更新する | E-12 L118-127 | ○ |
| C-81 | deleteRule関数がルールを削除する | E-12 L129-131 | ○ |
| C-82 | getRules関数がルール一覧を返す | E-12 L183-185 | ○ |
| C-83 | runRules関数がルールを実行する | E-12 L187-193 | ○ |

### server/spreadsheet (UT-LCR-158〜168)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-84 | Spreadsheetコンストラクタが初期化する | E-13 L40-54 | ○ |
| C-85 | getNode関数がノードを取得/作成する | E-13 L80-82 | ○ |
| C-86 | set関数がセル値を設定する | E-13 L332-334 | ○ |
| C-87 | getValue関数がセル値を取得する | E-13 L287-289 | ○ |
| C-88 | createDynamic関数が動的セルを作成する | E-13 L380-431 | ○ |
| C-89 | transaction関数がバッチ処理する | E-13 L103-111 | ○ |
| C-90 | onFinish関数が完了通知する | E-13 L262-281 | ○ |

### server/api (UT-LCR-169〜200)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-91 | validateMonth関数が月形式を検証する | E-14 L87-99 | ○ |
| C-92 | validateExpenseCategory関数がカテゴリを検証する | E-14 L101-118 | ○ |
| C-93 | checkFileOpen関数がファイル状態を確認する | E-14 L120-124 | ○ |
| C-94 | api/batch-budget-start関数がバッチを開始する | E-14 L128-149 | ○ |
| C-95 | api/batch-budget-end関数がバッチを終了する | E-14 L151-158 | ○ |
| C-96 | api/budget-months関数が予算月を返す | E-14 L359-363 | ○ |
| C-97 | api/transactions-get関数がトランザクションを取得する | E-14 L518-537 | ○ |
| C-98 | api/sync関数が同期を実行する | E-14 L252-258 | △ |
| C-99 | api/query関数がAQLクエリを実行する | E-14 L354-357 | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-49 (once関数)**: 完了後のリセット動作のテストコードが既存テストファイルに見つからない。実際の挙動確認が必要
  - 候補: `packages/loot-core/src/shared/async.test.ts` / 新規テスト作成
- **C-98 (api/sync)**: 同期エラー時の具体的なエラーパターン（ネットワークエラー、認証エラーなど）の網羅的なテストケースが必要
  - 候補: エラーハンドリングの統合テスト / モックを使用したユニットテスト

## 5) リスクフラグ（レビュー観点）
- **1: 中リスク** - shared/async のonce関数のリセット動作（C-49）
  - 理由: 実際のテストコードでの挙動確認が不足
- **1: 中リスク** - server/sync のapplyMessages関数（C-70）
  - 理由: CRDTの同期ロジックは複雑であり、エッジケースの網羅が重要
- **0: 低リスク** - その他のユーティリティ関数
  - 理由: コードが明確で、既存のテストファイルでカバーされている可能性が高い

## 6) レビュアーチェックリスト（最小）
- [ ] shared/util.tsの金額計算関数（UT-LCR-016〜021）が境界値でも正しく動作することを確認
- [ ] shared/transactions.tsの分割トランザクション処理（UT-LCR-034〜041）のエラーハンドリングを確認
- [ ] server/db/index.tsの重複チェック（UT-LCR-112, 114）がレースコンディションに対応しているか確認
- [ ] server/sync/index.tsのserialize/deserialize関数（UT-LCR-132〜138）が全ての値型を正しく処理することを確認
- [ ] server/api.tsのバッチ処理（UT-LCR-176〜179）の状態管理が正しいことを確認
- [ ] 既存のテストファイル（*.test.ts）との整合性を確認し、重複や漏れがないかチェック
