# コンテンツ定義: 休暇申請コンテンツ

> 本書は [specification.md](specification.md) の「コンテンツ定義」セクションを詳細化したものである。

## 基本情報

| 項目         | 値                    |
| ------------ | --------------------- |
| コンテンツ名 | 休暇申請コンテンツ    |
| コンテンツID | leave_request_content |

## 画面定義

### 画面定義一覧

| 画面種別     | 画面ID  | パス種別       | スクリプトパス          | 初期使用 | 備考                                            |
| ------------ | ------- | -------------- | ----------------------- | -------- | ----------------------------------------------- |
| 申請画面     | SCR-001 | スクリプト開発 | `leave/apply/apply`     | ○        | `imwUserDataId`はファンクション・コンテナで採番 |
| 再申請画面   | SCR-001 | スクリプト開発 | `leave/apply/apply`     | ○        | 申請画面と同一。差戻しコメントを追加表示        |
| 処理画面     | SCR-002 | スクリプト開発 | `leave/approve/approve` | ○        | 申請内容を読み取り専用で表示                    |
| 処理詳細画面 | SCR-003 | スクリプト開発 | `leave/detail/detail`   | ○        | 参照のみ                                        |
| 参照詳細画面 | SCR-004 | スクリプト開発 | `leave/detail/detail`   | ○        | 処理詳細画面と同一画面を使用                    |

### 画面項目定義

画面項目の詳細は [specification.md - 画面項目定義](specification.md#画面項目定義) を参照。

## ユーザプログラム定義

### 開発モデル

| 項目             | 値                                                      |
| ---------------- | ------------------------------------------------------- |
| 開発モデル       | スクリプト開発モデル（SSJS）                            |
| 画面技術         | JSSP（HTMLテンプレート + ファンクション・コンテナ）     |
| ユーザプログラム | サーバサイドJavaScript（アクション処理 / 案件終了処理） |

### アクション処理一覧

| プログラム名   | 配置パス                         | 対象ノード | 処理内容                                                       |
| -------------- | -------------------------------- | ---------- | -------------------------------------------------------------- |
| ActionProcess1 | `leave/action/ActionProcess1.js` | 申請ノード | 申請・再申請時のデータ保存・バリデーション・案件プロパティ設定 |
| ActionProcess2 | `leave/action/ActionProcess2.js` | 承認ノード | 承認終了時の残日数減算処理                                     |

### ActionProcess1（申請ノード用）の処理詳細

| 処理種別          | ステップ | 処理内容                                                    | 対応ルール            |
| ----------------- | -------- | ----------------------------------------------------------- | --------------------- |
| apply（申請）     | 1        | ユーザパラメータから画面入力値を取得                        | -                     |
|                   | 2        | バリデーション: 取得日数 ≦ 残日数                           | BR-001                |
|                   | 3        | バリデーション: 半日有給時、開始日 = 終了日                 | BR-002                |
|                   | 4        | バリデーション: 開始日 ≧ 申請日                             | BR-004                |
|                   | 5        | バリデーション: 同一期間の重複申請なし                      | BR-007                |
|                   | 6        | 検証エラー時、`resultFlag = false` + エラーメッセージを返却 | -                     |
|                   | 7        | `leave_request` へ INSERT（キー: `userDataId`）             | -                     |
|                   | 8        | 案件プロパティ `leave_days` に取得日数を設定                | -                     |
|                   | 9        | `resultFlag = true` を返却                                  | -                     |
| reapply（再申請） | 1        | ユーザパラメータから画面入力値を取得                        | -                     |
|                   | 2-6      | バリデーション実行（申請時と同様）                          | BR-001, 002, 004, 007 |
|                   | 7        | `leave_request` を UPDATE（キー: `userDataId`）             | -                     |
|                   | 8        | 案件プロパティ `leave_days` を再設定                        | -                     |
|                   | 9        | `resultFlag = true` を返却                                  | -                     |

### ActionProcess2（承認ノード用）の処理詳細

| 処理種別                               | ステップ | 処理内容                                               | 対応ルール |
| -------------------------------------- | -------- | ------------------------------------------------------ | ---------- |
| approveEnd（承認終了）                 | 1        | `userDataId` をキーに `leave_request` からデータ取得   | -          |
|                                        | 2        | `leave_balance` の取得済日数に取得日数を加算（UPDATE） | BR-005     |
|                                        | 3        | 残日数を再計算（付与日数 + 繰越日数 − 取得済日数）     | -          |
|                                        | 4        | `resultFlag = true` を返却                             | -          |
| その他（approve / deny / sendBack 等） | -        | 業務データ操作不要。`resultFlag = true` を返却         | BR-006     |

### 案件終了処理

| プログラム名     | 配置パス                           | 処理内容                                         |
| ---------------- | ---------------------------------- | ------------------------------------------------ |
| MatterEndProcess | `leave/action/MatterEndProcess.js` | メール送信可否を返却（`data = true` で送信する） |

## 通知定義

### 通知方式

| 項目      | 値                         |
| --------- | -------------------------- |
| 通知方式  | メール通知                 |
| 定義方式  | メッセージ定義（推奨方式） |
| IMBox通知 | 使用しない                 |

### メール送信一覧

| 送信タイミング | 通知種別     | 送信先 | 件名例                       |
| -------------- | ------------ | ------ | ---------------------------- |
| 申請時         | 処理依頼     | 上長   | 休暇申請が届きました         |
| 承認時         | 処理結果通知 | 申請者 | 休暇申請が承認されました     |
| 承認終了時     | 処理結果通知 | 申請者 | 休暇申請が最終承認されました |
| 差戻し時       | 処理結果通知 | 申請者 | 休暇申請が差し戻されました   |
| 否認時         | 処理結果通知 | 申請者 | 休暇申請が否認されました     |

### 置換文字列

メール本文内で以下の置換文字列を使用可能。

| 置換文字列       | 説明                         |
| ---------------- | ---------------------------- |
| 案件プロパティ値 | `leave_days`（取得日数）     |
| intra-mart URL   | 処理画面・参照画面へのリンク |

## 案件プロパティ

| プロパティキー | 設定タイミング | 用途                             |
| -------------- | -------------- | -------------------------------- |
| leave_days     | 申請時         | 取得日数。メール置換文字列で使用 |

## ルール定義

本ワークフローでは分岐ルートを使用しないため、ルール定義は設定しない。

## 関連ドキュメント

- [specification.md](specification.md) - 仕様書本体
- [flow_definition.md](flow_definition.md) - フロー定義
- [route_definition.md](route_definition.md) - ルート定義
