# 機能設計書 17-カテゴリ非表示

## 概要

本ドキュメントは、Actualアプリケーションにおけるカテゴリ非表示機能について、その処理内容、入出力仕様、および実装詳細を記述した機能設計書である。

### 本機能の処理概要

カテゴリ非表示機能は、使用しないカテゴリを予算画面から非表示にする機能である。非表示にしたカテゴリは削除されず、必要に応じて再表示することができる。

**業務上の目的・背景**：時間の経過とともに使用しなくなったカテゴリが発生する。例えば、以前利用していたジムを解約した場合、「ジム会費」カテゴリは不要になる。しかし、過去の取引履歴を維持するためにカテゴリを削除することはできない。本機能により、過去データを保持しながら、予算画面をスッキリさせることができる。

**機能の利用シーン**：
- 使用しなくなったカテゴリを画面から隠したい場合
- 季節限定のカテゴリ（例：夏季レジャー費）をオフシーズン中は非表示にしたい場合
- 過去のカテゴリを保持しつつ、新しいカテゴリ体系に移行したい場合

**主要な処理内容**：
1. カテゴリのhiddenフラグをtrueに設定（非表示化）
2. カテゴリのhiddenフラグをfalseに設定（再表示）
3. 非表示カテゴリの一覧表示切り替え

**関連システム・外部連携**：本機能は内部完結型であり、外部システムとの直接連携はない。

**権限による制御**：特別な権限制御はなく、予算ファイルを開いているユーザーであれば利用可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 9 | 予算画面（デスクトップ） | 補助機能 | 使用しないカテゴリの非表示設定 |

## 機能種別

データ更新

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| id | string | Yes | カテゴリID | 存在するカテゴリID |
| hidden | boolean | Yes | 非表示フラグ | true/false |

### 入力データソース

- 画面入力（予算画面のカテゴリメニュー）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| id | string | カテゴリID |
| hidden | boolean | 非表示フラグ（更新後の値） |

### 出力先

- データベース（categoriesテーブル）

## 処理フロー

### 処理シーケンス

```
1. カテゴリ選択
   └─ 非表示にしたいカテゴリを選択

2. 非表示設定
   └─ カテゴリメニューから「非表示」を選択

3. データベース更新
   └─ categoriesテーブルのhiddenフラグを更新

4. UI更新
   └─ 予算画面から該当カテゴリを除外
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B[カテゴリ選択]
    B --> C{非表示/表示?}
    C -->|非表示| D[hidden = true]
    C -->|表示| E[hidden = false]
    D --> F[UPDATE実行]
    E --> F
    F --> G[UI更新]
    G --> H[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-01 | データ保持 | 非表示にしてもカテゴリデータと取引履歴は保持される | 非表示設定時 |
| BR-02 | 予算値保持 | 非表示にしても予算値は保持される | 非表示設定時 |
| BR-03 | 取引カテゴリ選択 | 非表示カテゴリは新規取引のカテゴリ選択に表示されない | 取引作成時 |
| BR-04 | グループ非表示 | カテゴリグループにもhiddenフラグがある | グループ単位の操作 |

### 計算ロジック

特になし（単純なフラグ更新）

## データベース操作仕様

### 操作別データベース影響一覧

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| カテゴリ非表示 | categories | UPDATE | hiddenフラグを更新 |

### テーブル別操作詳細

#### categories

| 操作 | 項目（カラム名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| UPDATE | hidden | true/false | - |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | なし | - | - |

### リトライ仕様

特になし

## トランザクション仕様

- 単一フィールドの更新のため、特別なトランザクション管理は不要
- undoableラッパーにより元に戻す操作に対応

## パフォーマンス要件

- 即座に反映されること

## セキュリティ考慮事項

- 特別なセキュリティ要件なし

## 備考

- CategoryEntityの`hidden`フィールドで管理
- 作成時にhidden=trueを指定することで、最初から非表示のカテゴリを作成可能

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

カテゴリのhiddenフィールドを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | category.ts | `packages/loot-core/src/types/models/category.ts` | CategoryEntityのhiddenフィールド |

**読解のコツ**:
- **12行目**: `hidden?: boolean` - 非表示フラグの定義

#### Step 2: 更新処理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | app.ts | `packages/loot-core/src/server/budget/app.ts` | updateCategory関数 |

**主要処理フロー**:
- **301-321行目**: updateCategory関数でhiddenフィールドを含む更新が可能

#### Step 3: UI側の表示制御を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | - | 予算画面コンポーネント | hidden=trueのカテゴリをフィルタリング |

### プログラム呼び出し階層図

```
UI (予算画面)
    │
    └─ send('category-update')
           └─ app.ts: updateCategory
                  └─ db.updateCategory
                         └─ UPDATE categories SET hidden = ?
```

### データフロー図

```
[入力]                    [処理]                    [出力]

id ───────────┐
              │
              ├──▶ updateCategory ──▶ categories テーブル
              │         │
hidden ───────┘         └──▶ UI再レンダリング（非表示カテゴリ除外）
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| category.ts | `packages/loot-core/src/types/models/category.ts` | 型定義 | hiddenフィールドの定義 |
| app.ts | `packages/loot-core/src/server/budget/app.ts` | ソース | カテゴリ更新処理 |
| db/index.ts | `packages/loot-core/src/server/db/index.ts` | ソース | データベース操作 |
