# コンテンツ定義: 物品購入コンテンツ

> 本書は [specification.md](specification.md) の「コンテンツ定義」セクションを詳細化したものである。

## 基本情報

| 項目         | 値                       |
| ------------ | ------------------------ |
| コンテンツ名 | 物品購入コンテンツ       |
| コンテンツID | purchase_request_content |

## 画面定義

### 画面定義一覧

| 画面種別     | 画面ID  | パス種別       | スクリプトパス             | 初期使用 | 備考                                            |
| ------------ | ------- | -------------- | -------------------------- | -------- | ----------------------------------------------- |
| 申請画面     | SCR-001 | スクリプト開発 | `purchase/apply/apply`     | ○        | `imwUserDataId`はファンクション・コンテナで採番 |
| 再申請画面   | SCR-001 | スクリプト開発 | `purchase/apply/apply`     | ○        | 申請画面と同一。差戻しコメントを追加表示        |
| 処理画面     | SCR-002 | スクリプト開発 | `purchase/approve/approve` | ○        | 申請内容を読み取り専用で表示                    |
| 処理詳細画面 | SCR-003 | スクリプト開発 | `purchase/detail/detail`   | ○        | 参照のみ                                        |
| 参照詳細画面 | SCR-004 | スクリプト開発 | `purchase/detail/detail`   | ○        | 処理詳細画面と同一画面を使用                    |

### 画面項目定義

画面項目の詳細は [specification.md - 画面項目定義](specification.md#画面項目定義) を参照。

## ユーザプログラム定義

### 開発モデル

| 項目             | 値                                                      |
| ---------------- | ------------------------------------------------------- |
| 開発モデル       | スクリプト開発モデル（SSJS）                            |
| 画面技術         | JSSP（HTMLテンプレート + ファンクション・コンテナ）     |
| ユーザプログラム | サーバサイドJavaScript（アクション処理 / 案件終了処理） |

### アクション処理一覧

| プログラム名   | 配置パス                            | 対象ノード         | 処理内容                                                          |
| -------------- | ----------------------------------- | ------------------ | ----------------------------------------------------------------- |
| ActionProcess1 | `purchase/action/ActionProcess1.js` | 申請ノード         | 申請・再申請時のデータ保存・バリデーション・案件プロパティ設定    |
| ActionProcess2 | `purchase/action/ActionProcess2.js` | 購買部承認ノード   | 承認終了時の発注データ記録                                        |

### ActionProcess1（申請ノード用）の処理詳細

| 処理種別          | ステップ | 処理内容                                                                | 対応ルール    |
| ----------------- | -------- | ----------------------------------------------------------------------- | ------------- |
| apply（申請）     | 1        | ユーザパラメータから画面入力値（ヘッダ・明細行）を取得                  | -             |
|                   | 2        | バリデーション: 明細行数 1〜20                                          | BR-001        |
|                   | 3        | バリデーション: 各明細行の数量 ≧ 1、単価 ≧ 1                            | BR-002        |
|                   | 4        | バリデーション: 希望納期 ≧ 申請日 + 1日                                 | BR-004        |
|                   | 5        | バリデーション: 取引先IDが取引先マスタに存在                            | BR-005        |
|                   | 6        | サーバ側で各明細行の小計および合計金額を再計算                           | BR-006        |
|                   | 7        | 検証エラー時、`resultFlag = false` + エラーメッセージを返却             | -             |
|                   | 8        | `purchase_request` へ INSERT（キー: `userDataId`）                      | -             |
|                   | 9        | `purchase_request_item` へ明細行を一括 INSERT                            | -             |
|                   | 10       | 案件プロパティ `purchase_amount` に合計金額を設定                       | BR-003        |
|                   | 11       | 案件プロパティ `vendor_name` に取引先名を設定                           | -             |
|                   | 12       | `resultFlag = true` を返却                                              | -             |
| reapply（再申請） | 1        | ユーザパラメータから画面入力値を取得                                    | -             |
|                   | 2-7      | バリデーション・合計金額再計算（申請時と同様）                          | BR-001, 002, 004, 005, 006 |
|                   | 8        | `purchase_request` を UPDATE、`purchase_request_item` を全削除後に再 INSERT | -             |
|                   | 9        | 案件プロパティ `purchase_amount`・`vendor_name` を再設定                | BR-003        |
|                   | 10       | `resultFlag = true` を返却                                              | -             |

### ActionProcess2（購買部承認ノード用）の処理詳細

| 処理種別                               | ステップ | 処理内容                                                            | 対応ルール |
| -------------------------------------- | -------- | ------------------------------------------------------------------- | ---------- |
| approveEnd（承認終了）                 | 1        | `userDataId` をキーに `purchase_request` からヘッダデータを取得      | -          |
|                                        | 2        | `purchase_orders` へ発注データを INSERT（発注者は処理者ユーザID）    | BR-007     |
|                                        | 3        | `resultFlag = true` を返却                                          | -          |
| その他（approve / deny / sendBack 等） | -        | 業務データ操作不要。`resultFlag = true` を返却                       | BR-008     |

### 案件終了処理

| プログラム名     | 配置パス                              | 処理内容                                         |
| ---------------- | ------------------------------------- | ------------------------------------------------ |
| MatterEndProcess | `purchase/action/MatterEndProcess.js` | メール送信可否を返却（`data = true` で送信する） |

## 通知定義

### 通知方式

| 項目      | 値                         |
| --------- | -------------------------- |
| 通知方式  | メール通知                 |
| 定義方式  | メッセージ定義（推奨方式） |
| IMBox通知 | 使用しない                 |

### メール送信一覧

| 送信タイミング | 通知種別     | 送信先     | 件名例                             |
| -------------- | ------------ | ---------- | ---------------------------------- |
| 申請時         | 処理依頼     | 部門長     | 物品購入申請が届きました           |
| 部門長承認時   | 処理依頼     | 経理部/購買部 | 物品購入申請の承認が必要です   |
| 経理部承認時   | 処理依頼     | 購買部     | 物品購入申請の発注処理が必要です   |
| 承認時         | 処理結果通知 | 申請者     | 物品購入申請が承認されました       |
| 承認終了時     | 処理結果通知 | 申請者     | 物品購入申請の発注が完了しました   |
| 差戻し時       | 処理結果通知 | 申請者     | 物品購入申請が差し戻されました     |
| 否認時         | 処理結果通知 | 申請者     | 物品購入申請が否認されました       |

### 置換文字列

メール本文内で以下の置換文字列を使用可能。

| 置換文字列       | 説明                                              |
| ---------------- | ------------------------------------------------- |
| 案件プロパティ値 | `purchase_amount`（合計金額）、`vendor_name`（取引先名） |
| intra-mart URL   | 処理画面・参照画面へのリンク                      |

## 案件プロパティ

| プロパティキー  | 設定タイミング | 用途                                            |
| --------------- | -------------- | ----------------------------------------------- |
| purchase_amount | 申請時         | 合計金額。分岐ルートの判定およびメール置換で使用 |
| vendor_name     | 申請時         | 取引先名。案件名生成およびメール置換で使用       |

## ルール定義

合計金額に応じて経理部承認ノードを経由するか分岐するため、ルール定義を設定する。

### ルール一覧

| ルールID         | 判定キー（案件プロパティ） | 比較条件 | 条件値 | 分岐先                 |
| ---------------- | -------------------------- | -------- | ------ | ---------------------- |
| RULE-AMOUNT-LOW  | purchase_amount            | 未満     | 500000 | 経理部承認をスキップ   |
| RULE-AMOUNT-HIGH | purchase_amount            | 以上     | 500000 | 経理部承認ノードへ進む |

- 分岐の構成は [route_definition.md](route_definition.md) のルート構成図を参照
- ルール判定は分岐開始ノードで実行される

## 関連ドキュメント

- [specification.md](specification.md) - 仕様書本体
- [flow_definition.md](flow_definition.md) - フロー定義
- [route_definition.md](route_definition.md) - ルート定義
