# ルート定義: 物品購入ルート

> 本書は [specification.md](specification.md) の「ルート定義」セクションを詳細化したものである。

## 基本情報

| 項目     | 値                     |
| -------- | ---------------------- |
| ルート名 | 物品購入ルート         |
| ルートID | purchase_request_route |

## ルート構成図

```mermaid
flowchart LR
    Start(("開始")) --> Apply["申請ノード<br/>（申請者）"]
    Apply -- "申請" --> Approve1["承認ノード<br/>（部門長）"]
    Approve1 -- "承認" --> BranchStart{{"分岐開始<br/>（金額判定）"}}
    BranchStart -- "50万円未満" --> BranchEnd{{"分岐終了"}}
    BranchStart -- "50万円以上" --> Approve2["承認ノード<br/>（経理部）"]
    Approve2 -- "承認" --> BranchEnd
    BranchEnd --> Order["承認ノード<br/>（購買部）"]
    Order -- "承認終了" --> End1(("完了<br/>可決"))
```

## ノード定義

### ノード一覧

| ノード順 | ノード種別     | ノード名         | 処理対象者         | 説明                                               |
| -------- | -------------- | ---------------- | ------------------ | -------------------------------------------------- |
| 1        | 開始ノード     | 開始             | -                  | ルートの開始                                       |
| 2        | 申請ノード     | 物品購入申請     | 申請者本人         | 物品購入の入力・申請                               |
| 3        | 承認ノード     | 部門長承認       | 申請者の直属部門長 | 業務妥当性・部門予算を考慮して承認                 |
| 4        | 分岐開始ノード | 金額判定         | -                  | 案件プロパティ `purchase_amount` でルート分岐判定  |
| 5        | 承認ノード     | 経理部承認       | 経理部担当者       | 高額（50万円以上）申請時のみ経由                   |
| 6        | 分岐終了ノード | 分岐終了         | -                  | 分岐ルートの合流                                   |
| 7        | 承認ノード     | 購買部発注処理   | 購買部担当者       | 取引先への発注処理を行い承認終了                   |
| 8        | 終了ノード     | 終了             | -                  | ルートの終了                                       |

## 処理権限者プラグイン

### プラグイン設定一覧

| ノード名       | プラグイン名           | プラグインID                                    | 説明                                                         |
| -------------- | ---------------------- | ----------------------------------------------- | ------------------------------------------------------------ |
| 部門長承認     | 申請者の上位組織＋役職 | `apply_user_one_step_upper_department_and_post` | 申請者の直属上位組織に属し、指定役職を持つユーザを展開       |
| 経理部承認     | 組織＋ロール           | `department_and_role`                           | 指定した組織・ロールに属するユーザを処理対象者として展開する |
| 購買部発注処理 | 組織＋ロール           | `department_and_role`                           | 指定した組織・ロールに属するユーザを処理対象者として展開する |

### 部門長承認ノード: 処理権限者プラグインの詳細

| 項目                 | 値                                                    |
| -------------------- | ----------------------------------------------------- |
| プラグインID         | `apply_user_one_step_upper_department_and_post`       |
| 処理対象者の解決方法 | 申請者の1つ上位の組織に属し、指定した役職を持つユーザ |
| 展開タイミング       | 対象者を展開する日（フロー定義の機能設定に従う）      |
| 設定する役職         | 部門長役職                                            |

### 経理部承認ノード: 処理権限者プラグインの詳細

| 項目                 | 値                                               |
| -------------------- | ------------------------------------------------ |
| プラグインID         | `department_and_role`                            |
| 処理対象者の解決方法 | 指定した組織に属し、指定したロールを持つユーザ   |
| 展開タイミング       | 対象者を展開する日（フロー定義の機能設定に従う） |
| 設定する組織         | 経理部                                           |
| 設定するロール       | 経理部担当者ロール                               |

### 購買部発注処理ノード: 処理権限者プラグインの詳細

| 項目                 | 値                                               |
| -------------------- | ------------------------------------------------ |
| プラグインID         | `department_and_role`                            |
| 処理対象者の解決方法 | 指定した組織に属し、指定したロールを持つユーザ   |
| 展開タイミング       | 対象者を展開する日（フロー定義の機能設定に従う） |
| 設定する組織         | 購買部                                           |
| 設定するロール       | 購買部担当者ロール                               |

## 処理フロー補足

| 処理               | 説明                                                                   |
| ------------------ | ---------------------------------------------------------------------- |
| 分岐（金額判定）   | 案件プロパティ `purchase_amount` が50万円以上の場合のみ経理部承認を経由する |
| 差戻し（部門長）   | 部門長が申請ノードへ差し戻す                                           |
| 差戻し（経理部）   | 経理部が申請ノードまたは部門長承認ノードへ差し戻す                     |
| 差戻し（購買部）   | 購買部が申請ノードまたは経理部承認ノード（経由している場合）へ差し戻す |
| 否認               | 各承認ノードで申請を否認可能。案件は完了（否認）となる                 |
| 引戻し             | 申請者が次ノードの処理対象者の未処理中に申請を引き戻す                 |
| 取止め             | 申請者が未承認の申請を取り止める。案件は完了（取止め）となる           |
| 保留               | 承認者が処理を一時保留する。本人以外の処理対象者の処理が禁止される     |
| 保留解除           | 保留した承認者が保留を解除し、処理を再開可能にする                     |

## 関連ドキュメント

- [specification.md](specification.md) - 仕様書本体
- [flow_definition.md](flow_definition.md) - フロー定義
- [content_definition.md](content_definition.md) - コンテンツ定義
