# ⑥ 業務ロジック — Edit (Transform): 10 methods

| 項目 | 内容 |
|---|---|
| 完全修飾名 | `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC` |
| レイヤー | CC（Common Component、パッケージ名およびクラス名から判定） |
| モジュール | common（パッケージ名：com.fujitsu.futurity.bp.custom.commonより） |


<style>
.mermaid { display: flex !important; justify-content: center !important; overflow-x: auto !important; overflow-y: hidden; background: #f9f9f9; padding: 20px; border-radius: 8px; margin: 0 auto; }
.mermaid svg { max-width: 100% !important; height: auto !important; width: fit-content !important; margin: 0 auto; }
.node rect { fill: #e1f5fe !important; stroke: #01579b !important; }
.label { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
</style>

<a id="method-editErrorInfoEKK0341A010CBS"></a>
### editErrorInfoEKK0341A010CBS()

---

#### 1. 役割

EKK0341A010実行後に、IRequestParameterReadWriteにエラー情報をマッピングする。  
具体的には、SC（サービスコンポーネント）から返却されるCAANMsg配列の1番目のテンプレートから、処理ステータス（STATUS）を取得し、`returnCode`と組み合わせて業務エラーメッセージ（RETURN_MESSAGE）を判定する。  
メッセージ・コードの優先順位によりBP（ビジネスプロセス）側のエラー情報を上書きするかを判断し、必要に応じてコントロールマップのRETURN_CODE/RETURN_MESSAGEを設定する。  
本メソッドは内部エラー情報編集の共通処理として、複数のメソッドから呼ばれる場合がある。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0341A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0] から templateStatus を取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S2["templateStatus = 9000"]
  IF1 -->|"No"| S3["templateStatus = template.getInt（EKK0341A010CBSMsg.STATUS）"]
  S2 --> S4
  S3 --> S4
  S4["Step2: RETURN_MESSAGE_XXXX （templateStatus） のメッセージ存在判定"] --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + String.format（'%1$04d', templateStatus）） == null"}
  IF2 -->|"Yes"| S5["templateStatus = 0"]
  IF2 -->|"No"| S6["templateStatus そのまま"]
  S5 --> S7
  S6 --> S7
  S7["Step3: param.getControlMapData（SCControlMapKeys.RETURN_CODE） でbpStatus取得"]
  S7 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S8["formatStatus = String.format（'%1$04d', templateStatus）"]
  S8 --> S9["message = JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + formatStatus）"]
  S9 --> S10["param.setControlMapData（SCControlMapKeys.RETURN_CODE, formatStatus）"]
  S10 --> S11["param.setControlMapData（SCControlMapKeys.RETURN_MESSAGE, message）"]
  IF3 -->|"No"| S12["何もせず次へ"]
  S11 --> END["return param"]
  S12 --> END

  NOTE1["EKK0341A010CBSMsg.STATUS = SCの処理ステータス"]
  NOTE2["SCControlMapKeys.RETURN_CODE = 'RETURN_CODE' （戻りコード）"]
  NOTE3["JCMAPLConstMgr.getString（'RETURN_MESSAGE_xxxx'） = 業務エラーメッセージ取得"]

  S1 -.- NOTE1
  S7 -.- NOTE2
  S9 -.- NOTE3
```

**処理ステップ詳細:**

1. **Step1**: templates配列の先頭（templates[0]）から `templateStatus` を取得。これはEKK0341A010CBSMsg.STATUS（SCから返るステータス）である。
2. **Step2**: `returnCode` が0以外であれば `templateStatus` を9000（異常終了）に上書き。それ以外はtemplateのSTATUS値をそのまま利用。
3. **Step3**: `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` で業務エラーメッセージが存在しなければ `templateStatus` を0にリセット。
4. **Step4**: `param.getControlMapData(SCControlMapKeys.RETURN_CODE)` でビジネスプロセス側（BP）の現在のRETURN_CODEを取得し、`bpStatus` として保持。値がnullの場合は-1とする。
5. **Step5**: `templateStatus > bpStatus` の場合のみ、`formatStatus = String.format("%1$04d", templateStatus)` としてSCのステータスコード・メッセージでBP側を上書きする。
6. **Step6**: 上書きする場合は、コントロールマップのRETURN_CODEおよびRETURN_MESSAGEにセットし、paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名     | 型                         | 業務説明                                  |
| --- | ---------------- | -------------------------- | ----------------------------------------- |
| 1   | param            | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ          |
| 2   | templates        | CAANMsg[]                  | SCからの返却メッセージ配列               |
| 3   | returnCode       | int                        | サービスコンポーネント呼出の戻りコード   |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0341A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0341A010SC` | private | 機器提供サービス契約一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfoEKK0341A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L27376)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L27380)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L27387)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L27392)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L27396)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

> **合計**: 5 blocks (1 depth levels)

### editErrorInfoEKK0081A010CBS()

---

#### 1. 役割

EKK0081A010実行後に、IRequestParameterReadWriteにエラー情報をマッピングする。  
具体的には、SC（サービスコンポーネント）から返却されるCAANMsg配列から処理ステータス（STATUS）を取得し、`returnCode`と照合のうえ、業務エラーメッセージ（RETURN_MESSAGE）を判定して設定する。  
メッセージ・コードの優先順位によりBP（ビジネスプロセス）側のエラー情報を上書きするかを判断し、必要に応じてコントロールマップのRETURN_CODE/RETURN_MESSAGEを設定し、エラー情報を返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0081A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0] から templateStatus を取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S2["templateStatus = 9000"]
  IF1 -->|"No"| S3["templateStatus = template.getInt（EKK0081A010CBSMsg.STATUS）"]
  S2 --> S4
  S3 --> S4
  S4["Step2: RETURN_MESSAGE_XXXX （templateStatus） のメッセージ存在判定"] --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + String.format（'%1$04d', templateStatus）） == null"}
  IF2 -->|"Yes"| S5["templateStatus = 0"]
  IF2 -->|"No"| S6["templateStatus そのまま"]
  S5 --> S7
  S6 --> S7
  S7["Step3: param.getControlMapData（SCControlMapKeys.RETURN_CODE） でbpStatus取得"]
  S7 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S8["formatStatus = String.format（'%1$04d', templateStatus）"]
  S8 --> S9["message = JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + formatStatus）"]
  S9 --> S10["param.setControlMapData（SCControlMapKeys.RETURN_CODE, formatStatus）"]
  S10 --> S11["param.setControlMapData（SCControlMapKeys.RETURN_MESSAGE, message）"]
  IF3 -->|"No"| S12["何もせず次へ"]
  S11 --> END["return param"]
  S12 --> END

  NOTE1["EKK0081A010CBSMsg.STATUS = SCの処理ステータス"]
  NOTE2["SCControlMapKeys.RETURN_CODE = 'RETURN_CODE' （戻りコード）"]
  NOTE3["JCMAPLConstMgr.getString（'RETURN_MESSAGE_xxxx'） = 業務エラーメッセージ取得"]

  S1 -.- NOTE1
  S7 -.- NOTE2
  S9 -.- NOTE3
```

**処理ステップ詳細:**

1. templates配列の先頭（templates[0]）から `templateStatus` を取得。これはEKK0081A010CBSMsg.STATUS（SCから返るステータス）。
2. `returnCode` が0以外であれば `templateStatus` を9000（異常終了）に上書き。それ以外はtemplateのSTATUS値をそのまま利用。
3. `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` で業務エラーメッセージが存在しなければ `templateStatus` を0にリセット。
4. `param.getControlMapData(SCControlMapKeys.RETURN_CODE)` でビジネスプロセス側（BP）の現在のRETURN_CODEを取得し、`bpStatus` として保持。値がnullの場合は-1とする。
5. `templateStatus > bpStatus` の場合のみ、SCのステータスコード・メッセージでBP側を上書きする。
6. 上書きする場合は、コントロールマップのRETURN_CODEおよびRETURN_MESSAGEにセットし、paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名     | 型                         | 業務説明                                  |
| --- | ---------------- | -------------------------- | ----------------------------------------- |
| 1   | param            | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ          |
| 2   | templates        | CAANMsg[]                  | SCからの返却メッセージ配列               |
| 3   | returnCode       | int                        | サービスコンポーネント呼出の戻りコード   |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK0081A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0081A010SC` | private | サービス契約一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfoEKK0081A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L27190)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L27194)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L27201)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L27206)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L27210)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

> **合計**: 5 blocks (1 depth levels)

### editResultRP_EKK0161B003CBS()

---

#### 1. 役割

SC（サービスコンポーネント）EKK0161B003（サービス契約内訳一覧照会（SYSID））の実行結果を、IRequestParameterReadWriteへ展開・格納する。  
具体的には、SCから返却されるCAANMsg配列（複数明細）を順次各マップへ展開し、サービス契約内訳番号・サービス名・料金グループ名・料金コース名・料金プラン名・サービス契約内訳ステータスを格納する。  
また、エラー情報が存在する場合はeditErrorInfo_EKK0161B003CBSでエラー情報を付与し、エラーがあればCCExceptionをthrowする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0161B003CBS（msgList, param）"] --> S1["Step1: msgList.get（TEMPLATE_LIST_KEY） でCAANMsg[] templates取得"]
  S1 --> S2["Step2: parentTemplate = templates[0]; 明細配列 templateArray = parentTemplate.getMsgData（）.get（EKK0161B003CBSMsg.EKK0161B003CBSMSG1LIST）"]
  S2 --> S3["Step3: param.getData（HAKKOSODCCWORKMAP） でdataMap取得"]
  S3 --> IF3{"dataMap == null"}
  IF3 -->|"Yes"| S4["dataMapをnewして param.setData（）"]
  IF3 -->|"No"| S5["既存dataMap利用"]
  S4 --> S6
  S5 --> S6
  S6["Step4: dataMap.get（'EKK0161B003CBSMsg1List'） でdataList取得"]
  S6 --> IF4{"dataList == null"}
  IF4 -->|"Yes"| S7["dataListをnew ArrayList（）"]
  IF4 -->|"No"| S8["既存dataList利用"]
  S7 --> S9
  S8 --> S9
  S9["Step5: templateArrayがnullでなければ明細分ループ"]
  S9 --> S10["各childTemplateをchildMapへ展開"]
  S10 --> S11["各項目（svc_kei_ucwk_no, svc_nm, prc_grp_nm, pcrs_nm, pplan_nm, svc_kei_ucwk_stat）をset"]
  S11 --> S12["dataMapへ 'EKK0161B003CBSMsg1List' として格納"]
  S12 --> S13["editErrorInfo_EKK0161B003CBS（param, templates, return_code） を呼出し paramへ反映"]
  S13 --> S14["param.getControlMapData（ERROR_INFO） でerrList取得"]
  S14 --> IF5{"errList != null && !errList.isEmpty（）"}
  IF5 -->|"Yes"| S15["throw CCException"]
  IF5 -->|"No"| S16["正常終了 return param"]

  NOTE1["TEMPLATE_LIST_KEY = CAANMsg配列キー"]
  NOTE2["EKK0161B003CBSMsg1List = サービス契約内訳一覧照会（SYSID）リスト"]
  NOTE3["editErrorInfo_EKK0161B003CBSでエラー情報を設定"]

  S1 -.- NOTE1
  S2 -.- NOTE2
  S13 -.- NOTE3
```

**処理ステップ詳細:**

1. msgListからTEMPLATE_LIST_KEYでCAANMsg[] templatesを取得し、parentTemplateを抽出。
2. parentTemplate.getMsgData().get(EKK0161B003CBSMsg.EKK0161B003CBSMSG1LIST)で明細配列（templateArray）を取得。
3. param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でdataMapを取得。nullなら初期化しparamへセット。
4. dataMapから'EKK0161B003CBSMsg1List'のArrayListを取得。nullなら初期化。
5. templateArrayがnullでなければ、明細分ループ（childTemplate）し、サービス契約内訳番号・サービス名・料金グループ名・料金コース名・料金プラン名・サービス契約内訳ステータスをchildMapへset。
6. dataMapへ 'EKK0161B003CBSMsg1List'として格納。
7. editErrorInfo_EKK0161B003CBSを呼び出してparamにエラー情報を付与。
8. param.getControlMapData(ERROR_INFO) でerrList取得。errListがnullや空でなければCCExceptionをthrow。
9. 正常終了時はparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                             | 業務説明                                         |
| --- | ------------ | ------------------------------ | ------------------------------------------------ |
| 1   | msgList      | Map<?, ?>                      | サービスコンポーネントから返却された結果マップ   |
| 2   | param        | IRequestParameterReadWrite      | リクエスト/レスポンスパラメータ                 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B003CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSvcKeiUtwkListSysid` | private | サービス契約内訳一覧照会（SYSID）<br> <br> サービス契約内訳一覧照会（SYSID）サービスインターフェイスにより<br> SYSIDに紐づくサービス契約内訳の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0161B003CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L25298)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(dataList == null)` (L25306)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList = new ArrayList();` |

##### Block 3 — 🔀 IF `(templateArray != null)` (L25311)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `CAANMsg childTemplate = templateArray[i];` |
| 2 | ⚡ EXEC | `dataList.add(new HashMap());` |
| 3 | 📦 VAR | `HashMap childMap = (HashMap)dataList.get(i);` |
| 4 | 📋 SET | `childMap.put("svc_kei_ucwk_no", "");` |
| 5 | 📋 SET | `childMap.put("svc_kei_ucwk_no", childTemplate.getString(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_NO));` [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |
| 6 | 📋 SET | `childMap.put("svc_nm", "");` |
| 7 | 📋 SET | `childMap.put("svc_nm", childTemplate.getString(EKK0161B003CBSMsg1List.SVC_NM));` [➔ SVC_NM="svc_nm"] \| |
| 8 | 📋 SET | `childMap.put("prc_grp_nm", "");` |

###### · Block 3.1 — 🔁 FOR `(for)` (L25313)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 3.1.1 — 🔀 IF `(i >= dataList.size())` (L25316)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.add(new HashMap());` |

###### ·· Block 3.1.2 — 🔀 IF `(childTemplate.isNull(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_NO))` [SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] (L25325)

> 📌 ← サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス契約内訳番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_no", "");` |

###### ·· Block 3.1.3 — ↪️ ELSE `(else)` (L25330)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_no", childTemplate.getString(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_NO));` [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |

###### ·· Block 3.1.4 — 🔀 IF `(childTemplate.isNull(EKK0161B003CBSMsg1List.SVC_NM))` [SVC_NM="svc_nm"] (L25336)

> 📌 ← サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_nm", "");` |

###### ·· Block 3.1.5 — ↪️ ELSE `(else)` (L25341)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金グル―プ名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_nm", childTemplate.getString(EKK0161B003CBSMsg1List.SVC_NM));` [➔ SVC_NM="svc_nm"] \| |

###### ·· Block 3.1.6 — 🔀 IF `(childTemplate.isNull(EKK0161B003CBSMsg1List.PRC_GRP_NM))` [PRC_GRP_NM="prc_grp_nm"] (L25347)

> 📌 ← サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金グル―プ名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("prc_grp_nm", "");` |

###### ·· Block 3.1.7 — ↪️ ELSE `(else)` (L25352)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金コース名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("prc_grp_nm", childTemplate.getString(EKK0161B003CBSMsg1List.PRC_GRP_NM));` [➔ PRC_GRP_NM="prc_grp_nm"] \| |

###### ·· Block 3.1.8 — 🔀 IF `(childTemplate.isNull(EKK0161B003CBSMsg1List.PCRS_NM))` [PCRS_NM="pcrs_nm"] (L25358)

> 📌 ← サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金コース名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_nm", "");` |

###### ·· Block 3.1.9 — ↪️ ELSE `(else)` (L25363)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金プラン名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_nm", childTemplate.getString(EKK0161B003CBSMsg1List.PCRS_NM));` [➔ PCRS_NM="pcrs_nm"] \| |

###### ·· Block 3.1.10 — 🔀 IF `(childTemplate.isNull(EKK0161B003CBSMsg1List.PPLAN_NM))` [PPLAN_NM="pplan_nm"] (L25369)

> 📌 ← サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金プラン名

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_nm", "");` |

###### ·· Block 3.1.11 — ↪️ ELSE `(else)` (L25374)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス契約内訳ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_nm", childTemplate.getString(EKK0161B003CBSMsg1List.PPLAN_NM));` [➔ PPLAN_NM="pplan_nm"] \| |

###### ·· Block 3.1.12 — 🔀 IF `(childTemplate.isNull(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_STAT))` [SVC_KEI_UCWK_STAT="svc_kei_ucwk_stat"] (L25380)

> 📌 ← サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス契約内訳ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_stat", "");` |

###### ·· Block 3.1.13 — ↪️ ELSE `(else)` (L25385)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_stat", childTemplate.getString(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_STAT));` [➔ SVC_KEI_UCWK_STAT="svc_kei_ucwk_stat"] \| |
| 2 | 📋 SET | `dataMap.put("EKK0161B003CBSMsg1List", dataList);` |
| 3 | ⚡ EXEC | `param = editErrorInfo_EKK0161B003CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L25397)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L25405)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0161B003CBSMsg.STATUS)));` |

> **合計**: 19 blocks (3 depth levels)

### editInMsg_EKK0401B001CBS()

---

#### 1. 役割

サブオプションサービス契約一覧照会のSC入力メッセージ（EKK0401B001）を編集・生成する業務処理。  
具体的には、リクエストヘッダ（電文ヘッダ・ユーザエリア）から各種共通情報（ID、オペレーションID、依頼先ホスト名など）を取得し、ユーザデータ（param.getData(HAKKOSODCCWORKMAP)）から「オプションサービス契約番号」を取得しSC入力メッセージへセットする。  
サブオプションサービス契約番号が未設定の場合はnullをセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsg_EKK0401B001CBS（param）"] --> S1["Step1: paramMap（HashMap）初期化"]
  S1 --> S2["Step2: ヘッダ情報（TRANZACTION_ID_KEY等）をparamから取得しparamMapへセット"]
  S2 --> S3["Step3: CAANMsg template = new CAANMsg（EKK0401B001CBSMsg.class.getName（））"]
  S3 --> S4["Step4: テンプレートID・機能コードをセット"]
  S4 --> S5["Step5: editBasicCmn（param, template） で共通部セット"]
  S5 --> S6["Step6: param.getData（HAKKOSODCCWORKMAP） でinMap取得"]
  S6 --> IF1{"inMap == null ||inMap.get（'op_svc_kei_no'） == null|| ''"}
  IF1 -->|"Yes"| S7["template.setNull（EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO）"]
  IF1 -->|"No"| S8["template.set（EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, inMap.get（'op_svc_kei_no'））"]
  S7 --> S9["CAANMsg[] templates = {template} をparamMapへセット"]
  S8 --> S9
  S9 --> END["return paramMap"]

  NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK' （業務ワークマップ）"]
  NOTE2["EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO = サブオプションサービス契約番号"]

  S6 -.- NOTE1
  S8 -.- NOTE2
```

**処理ステップ詳細:**

1. paramMap（HashMap）を初期化。
2. ヘッダ情報（TRANZACTION_ID_KEY, USECASE_ID_KEY, OPERATION_ID_KEY, CALL_TYPE_KEY, CLIENT_HOST_NAME_KEY, CLIENT_IP_ADDRESS_KEY, INVOKE_GAMEN_ID_KEY, OPERATOR_ID_KEYなど）をparamから取得しparamMapへ格納。
3. CAANMsg templateをEKK0401B001CBSMsg.classで生成。
4. テンプレートIDおよび機能コード（一覧照会用）をセット。
5. editBasicCmn(param, template)で共通部を設定。
6. param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得。
7. inMapがnullまたは 'op_svc_kei_no'が未設定の場合はtemplate.setNull(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO)を実行。それ以外は値をセット。
8. CAANMsg[] templatesにtemplateを格納しparamMapへ格納、paramMapを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                             | 業務説明                                   |
| --- | ------------ | ------------------------------ | ------------------------------------------ |
| 1   | param        | IRequestParameterReadOnly      | リクエストパラメータ                       |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0401B001CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSbOpSvcKeiList` | private | サブオプションサービス契約一覧照会<br> <br> サブオプションサービス契約一覧照会サービスインターフェイスにより<br> オプションサービス契約番号に紐づくサブオプションサービス契約の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editInMsg_EKK0401B001CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inMap == null || inMap.get("op_svc_kei_no") == null || "".equals(inMap.get("op_svc_kei_no")))` (L24633)

> 📌 サブオプションサービス契約一覧照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO);` [➔ KEY_OP_SVC_KEI_NO="key_op_svc_kei_no"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L24638)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, (String)inMap.get("op_svc_kei_no"));` [➔ KEY_OP_SVC_KEI_NO="key_op_svc_kei_no"] \| |
| 2 | ⚡ EXEC | `CAANMsg[] templates = new CAANMsg[1];` |
| 3 | ⚡ EXEC | `templates[0] = template;` |
| 4 | 📋 SET | `paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);` [➔ TEMPLATE_LIST_KEY="template_list_key"] \| |

> **合計**: 2 blocks (1 depth levels)

### editInMsg_EKK0161B003CBS()

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID）向けのSC入力メッセージ（EKK0161B003）を編集・生成する。  
具体的には、リクエストヘッダ（電文ヘッダ・ユーザエリア）から各種共通情報を取得し、ユーザデータ（param.getData(HAKKOSODCCWORKMAP)）から「SYSID」を取得しSC入力メッセージへセットする。  
SYSIDが未設定の場合はnullをセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsg_EKK0161B003CBS（param）"] --> S1["Step1: paramMap（HashMap）初期化"]
  S1 --> S2["Step2: ヘッダ情報（TRANZACTION_ID_KEY等）をparamから取得しparamMapへセット"]
  S2 --> S3["Step3: CAANMsg template = new CAANMsg（EKK0161B003CBSMsg.class.getName（））"]
  S3 --> S4["Step4: テンプレートID・機能コードをセット"]
  S4 --> S5["Step5: editBasicCmn（param, template） で共通部セット"]
  S5 --> S6["Step6: param.getData（HAKKOSODCCWORKMAP） でinMap取得"]
  S6 --> IF1{"inMap == null ||inMap.get（'sysid'） == null|| ''"}
  IF1 -->|"Yes"| S7["template.setNull（EKK0161B003CBSMsg.KEY_SYSID）"]
  IF1 -->|"No"| S8["template.set（EKK0161B003CBSMsg.KEY_SYSID, inMap.get（'sysid'））"]
  S7 --> S9["CAANMsg[] templates = {template} をparamMapへセット"]
  S8 --> S9
  S9 --> END["return paramMap"]

  NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK' （業務ワークマップ）"]
  NOTE2["EKK0161B003CBSMsg.KEY_SYSID = SYSID"]

  S6 -.- NOTE1
  S8 -.- NOTE2
```

**処理ステップ詳細:**

1. paramMap（HashMap）を初期化。
2. ヘッダ情報（TRANZACTION_ID_KEY, USECASE_ID_KEY, OPERATION_ID_KEY, CALL_TYPE_KEY, CLIENT_HOST_NAME_KEY, CLIENT_IP_ADDRESS_KEY, INVOKE_GAMEN_ID_KEY, OPERATOR_ID_KEYなど）をparamから取得しparamMapへ格納。
3. CAANMsg templateをEKK0161B003CBSMsg.classで生成。
4. テンプレートIDおよび機能コード（一覧照会用）をセット。
5. editBasicCmn(param, template)で共通部を設定。
6. param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得。
7. inMapがnullまたは 'sysid'が未設定の場合はtemplate.setNull(EKK0161B003CBSMsg.KEY_SYSID)を実行。それ以外は値をセット。
8. CAANMsg[] templatesにtemplateを格納しparamMapへ格納、paramMapを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                             | 業務説明                                  |
| --- | ------------ | ------------------------------ | ----------------------------------------- |
| 1   | param        | IRequestParameterReadOnly      | リクエストパラメータ                      |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B003CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSvcKeiUtwkListSysid` | private | サービス契約内訳一覧照会（SYSID）<br> <br> サービス契約内訳一覧照会（SYSID）サービスインターフェイスにより<br> SYSIDに紐づくサービス契約内訳の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editInMsg_EKK0161B003CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inMap == null || inMap.get("sysid") == null || "".equals(inMap.get("sysid")))` (L25254)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0161B003CBSMsg.KEY_SYSID);` [➔ KEY_SYSID="key_sysid"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L25259)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0161B003CBSMsg.KEY_SYSID, (String)inMap.get("sysid"));` [➔ KEY_SYSID="key_sysid"] \| |
| 2 | ⚡ EXEC | `CAANMsg[] templates = new CAANMsg[1];` |
| 3 | ⚡ EXEC | `templates[0] = template;` |
| 4 | 📋 SET | `paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);` [➔ TEMPLATE_LIST_KEY="template_list_key"] \| |

> **合計**: 2 blocks (1 depth levels)

### editErrorInfo_EKK0401B001CBS()

---

#### 1. 役割

EKK0401B001実行後に、IRequestParameterReadWriteにエラー情報をマッピングする。  
具体的には、SC（サービスコンポーネント）から返却されるCAANMsg配列の1番目のテンプレートから、処理ステータス（STATUS）を取得し、`returnCode`と組み合わせて業務エラーメッセージ（RETURN_MESSAGE）を判定する。  
メッセージ・コードの優先順位によりBP（ビジネスプロセス）側のエラー情報を上書きするかを判断し、必要に応じてコントロールマップのRETURN_CODE/RETURN_MESSAGEを設定し、エラー情報をユーザデータマップにも格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0401B001CBS（param, templates, returnCode）"] --> S1["Step1: templates[0] から templateStatus を取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S2["templateStatus = 9000"]
  IF1 -->|"No"| S3["templateStatus = template.getInt（EKK0401B001CBSMsg.STATUS）"]
  S2 --> S4
  S3 --> S4
  S4["Step2: RETURN_MESSAGE_XXXX （templateStatus） のメッセージ存在判定"] --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + String.format（'%1$04d', templateStatus）） == null"}
  IF2 -->|"Yes"| S5["templateStatus = 0"]
  IF2 -->|"No"| S6["templateStatus そのまま"]
  S5 --> S7
  S6 --> S7
  S7["Step3: param.getControlMapData（SCControlMapKeys.RETURN_CODE） でbpStatus取得"]
  S7 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S8["formatStatus = String.format（'%1$04d', templateStatus）"]
  S8 --> S9["message = JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + formatStatus）"]
  S9 --> S10["param.setControlMapData（SCControlMapKeys.RETURN_CODE, formatStatus）"]
  S10 --> S11["param.setControlMapData（SCControlMapKeys.RETURN_MESSAGE, message）"]
  IF3 -->|"No"| S12["何もせず次へ"]
  S11 --> S13["inMap取得し、エラー情報を格納"]
  S12 --> S13
  S13 --> IF4{"template.isNull（EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR）"}
  IF4 -->|"No"| IF5{"!inMap.containsKey（'op_svc_kei_no_err'）"}
  IF5 -->|"Yes"| S14["inMap.put（'op_svc_kei_no_err', template.getString（EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR））"]
  IF5 -->|"No"| S15["何もせず"]
  IF4 -->|"Yes"| S15
  S14 --> END["return param"]
  S15 --> END

  NOTE1["EKK0401B001CBSMsg.STATUS = SCの処理ステータス"]
  NOTE2["SCControlMapKeys.RETURN_CODE = 'RETURN_CODE' （戻りコード）"]
  NOTE3["EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR = オプションサービス契約番号のエラー情報"]

  S1 -.- NOTE1
  S7 -.- NOTE2
  S14 -.- NOTE3
```

**処理ステップ詳細:**

1. templates配列の先頭（templates[0]）から `templateStatus` を取得。EKK0401B001CBSMsg.STATUS。
2. `returnCode` が0以外であれば `templateStatus` を9000（異常終了）に上書き。
3. `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` でメッセージが存在しなければ `templateStatus` を0にリセット。
4. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でbpStatus取得。値がnullなら-1。
5. `templateStatus > bpStatus` なら、SCのステータスコード・メッセージでBP側を上書き。
6. ユーザデータ情報（inMap）をparam.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)で取得。なければ初期化。
7. EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERRがnullでなければ、inMapに「op_svc_kei_no_err」キーでエラー情報を格納。
8. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ          |
| 2   | templates    | CAANMsg[]                  | SCからの返却メッセージ配列               |
| 3   | returnCode   | int                        | サービスコンポーネント呼出の戻りコード   |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0401B001CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0401B001CBS` | private | 下りマッピング（サブオプションサービス契約一覧照会） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0401B001CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L24820)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L24824)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L24831)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L24836)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L24840)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(inMap == null)` (L24853)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR))` [KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] (L24860)

> 📌 サブオプションサービス契約一覧照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("op_svc_kei_no_err", template.getString(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR));` [➔ KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] \| |

###### · Block 7.1 — 🔀 IF `(!inMap.containsKey("op_svc_kei_no_err"))` (L24862)

> 📌 サブオプションサービス契約一覧照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("op_svc_kei_no_err", template.getString(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR));` [➔ KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] \| |

> **合計**: 8 blocks (2 depth levels)

### editInMsg_EKK0081A010CBS()

---

#### 1. 役割

サービス契約一意照会（EKK0081A010）向けのSC入力メッセージを編集・生成する。  
リクエストヘッダから共通情報を取得し、ユーザデータから「サービス契約番号」「世代登録年月日時分秒」「予約適用年月日」を取得してSCメッセージへセットする。  
いずれかの項目が未設定の場合はnullをセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsg_EKK0081A010CBS（param）"] --> S1["Step1: paramMap（HashMap）初期化"]
  S1 --> S2["Step2: ヘッダ情報（TRANZACTION_ID_KEY等）をparamから取得しparamMapへセット"]
  S2 --> S3["Step3: CAANMsg template = new CAANMsg（EKK0081A010CBSMsg.class.getName（））"]
  S3 --> S4["Step4: テンプレートID・機能コードをセット"]
  S4 --> S5["Step5: editBasicCmn（param, template） で共通部セット"]
  S5 --> S6["Step6: param.getData（HAKKOSODCCWORKMAP） でinMap取得"]
  S6 --> IF1{"inMap == null ||inMap.get（'svc_kei_no'） == null|| ''"}
  IF1 -->|"Yes"| S7["template.setNull（EKK0081A010CBSMsg.KEY_SVC_KEI_NO）"]
  IF1 -->|"No"| S8["template.set（EKK0081A010CBSMsg.KEY_SVC_KEI_NO, inMap.get（'svc_kei_no'））"]
  S7 --> IF2
  S8 --> IF2
  IF2{"inMap == null ||inMap.get（'gene_add_dtm'） == null|| ''"}
  IF2 -->|"Yes"| S9["template.setNull（EKK0081A010CBSMsg.KEY_GENE_ADD_DTM）"]
  IF2 -->|"No"| S10["template.set（EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, inMap.get（'gene_add_dtm'））"]
  S9 --> IF3
  S10 --> IF3
  IF3{"inMap == null ||inMap.get（'rsv_aply_ymd'） == null|| ''"}
  IF3 -->|"Yes"| S11["template.setNull（EKK0081A010CBSMsg.KEY_RSV_APLY_YMD）"]
  IF3 -->|"No"| S12["template.set（EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, inMap.get（'rsv_aply_ymd'））"]
  S11 --> S13["CAANMsg[] templates = {template} をparamMapへセット"]
  S12 --> S13
  S13 --> END["return paramMap"]

  NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK' （業務ワークマップ）"]
  NOTE2["EKK0081A010CBSMsg.KEY_SVC_KEI_NO = サービス契約番号"]
  NOTE3["EKK0081A010CBSMsg.KEY_GENE_ADD_DTM = 世代登録年月日時分秒"]
  NOTE4["EKK0081A010CBSMsg.KEY_RSV_APLY_YMD = 予約適用年月日"]

  S6 -.- NOTE1
  S8 -.- NOTE2
  S10 -.- NOTE3
  S12 -.- NOTE4
```

**処理ステップ詳細:**

1. paramMap（HashMap）を初期化。
2. ヘッダ情報（TRANZACTION_ID_KEY, USECASE_ID_KEY, OPERATION_ID_KEY, CALL_TYPE_KEY, CLIENT_HOST_NAME_KEY, CLIENT_IP_ADDRESS_KEY, INVOKE_GAMEN_ID_KEY, OPERATOR_ID_KEYなど）をparamから取得しparamMapへ格納。
3. CAANMsg templateをEKK0081A010CBSMsg.classで生成。
4. テンプレートIDおよび機能コード（カレント用）をセット。
5. editBasicCmn(param, template)で共通部を設定。
6. param.getData(JKKHakkoSODCCWORKMAP)でinMap取得。
7. inMapがnullまたは 'svc_kei_no'が未設定の場合はtemplate.setNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO)。それ以外は値をセット。
8. 同様に 'gene_add_dtm'（世代登録年月日時分秒）、'rsv_aply_ymd'（予約適用年月日）についてもnullの場合はsetNull、値ありはセット。
9. templates[0] = templateとしてparamMapへ格納、paramMapを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                             | 業務説明                                   |
| --- | ------------ | ------------------------------ | ------------------------------------------ |
| 1   | param        | IRequestParameterReadOnly      | リクエストパラメータ                       |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0081A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSvcKeiInfo` | protected | サービス契約一意照会処理<br> <br> サービス契約一意照会サービスインターフェイスにより<br> サービス契約情報（世代登録年月日時分秒）を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editInMsg_EKK0081A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")))` (L26100)

> 📌 サービス契約一意照会.サービス契約番号 → ＫＥＹ＿サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO);` [➔ KEY_SVC_KEI_NO="key_svc_kei_no"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L26105)

> 📌 サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, (String)inMap.get("svc_kei_no"));` [➔ KEY_SVC_KEI_NO="key_svc_kei_no"] \| |

##### Block 3 — 🔀 IF `(inMap == null || inMap.get("gene_add_dtm") == null || "".equals(inMap.get("gene_add_dtm")))` (L26110)

> 📌 サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM);` [➔ KEY_GENE_ADD_DTM="key_gene_add_dtm"] \| |

##### Block 4 — ↪️ ELSE `(else)` (L26115)

> 📌 サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, (String)inMap.get("gene_add_dtm"));` [➔ KEY_GENE_ADD_DTM="key_gene_add_dtm"] \| |

##### Block 5 — 🔀 IF `(inMap == null || inMap.get("rsv_aply_ymd") == null || "".equals(inMap.get("rsv_aply_ymd")))` (L26120)

> 📌 サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD);` [➔ KEY_RSV_APLY_YMD="key_rsv_aply_ymd"] \| |

##### Block 6 — ↪️ ELSE `(else)` (L26125)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, (String)inMap.get("rsv_aply_ymd"));` [➔ KEY_RSV_APLY_YMD="key_rsv_aply_ymd"] \| |
| 2 | ⚡ EXEC | `CAANMsg[] templates = new CAANMsg[1];` |
| 3 | ⚡ EXEC | `templates[0] = template;` |
| 4 | 📋 SET | `paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);` [➔ TEMPLATE_LIST_KEY="template_list_key"] \| |

> **合計**: 6 blocks (1 depth levels)

### editErrorInfo_EKK0341B002CBS()

---

#### 1. 役割

機器提供サービス契約一覧照会（サービス契約番号）EKK0341B002実行後に、IRequestParameterReadWriteにエラー情報をマッピングする。  
CAANMsg配列から処理ステータスを取得し、returnCodeと照合して業務エラーメッセージを判定する。  
また、ユーザデータマップ（inMap）に対して、サービス契約番号、機器提供サービスコード、機器提供サービス契約番号、ソート区分のエラー情報をそれぞれ対応するキーで格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0341B002CBS（param, templates, returnCode）"] --> S1["Step1: templates[0] から templateStatus を取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S2["templateStatus = 9000"]
  IF1 -->|"No"| S3["templateStatus = template.getInt（EKK0341B002CBSMsg.STATUS）"]
  S2 --> S4
  S3 --> S4
  S4["Step2: RETURN_MESSAGE_XXXX （templateStatus） のメッセージ存在判定"] --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + String.format（'%1$04d', templateStatus）） == null"}
  IF2 -->|"Yes"| S5["templateStatus = 0"]
  IF2 -->|"No"| S6["templateStatus そのまま"]
  S5 --> S7
  S6 --> S7
  S7["Step3: param.getControlMapData（SCControlMapKeys.RETURN_CODE） でbpStatus取得"]
  S7 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S8["formatStatus = String.format（'%1$04d', templateStatus）"]
  S8 --> S9["message = JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + formatStatus）"]
  S9 --> S10["param.setControlMapData（SCControlMapKeys.RETURN_CODE, formatStatus）"]
  S10 --> S11["param.setControlMapData（SCControlMapKeys.RETURN_MESSAGE, message）"]
  IF3 -->|"No"| S12["何もせず次へ"]
  S11 --> S13["ユーザデータinMap取得（なければ初期化）"]
  S12 --> S13
  S13 --> IF4{"!template.isNull（EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR）"}
  IF4 -->|"Yes"| IF5{"!inMap.containsKey（'svc_kei_no_err'）"}
  IF5 -->|"Yes"| S14["inMap.put（'svc_kei_no_err', template.getString（EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR））"]
  IF5 -->|"No"| S15["何もせず"]
  IF4 -->|"No"| S16
  S14 --> IF6{"!template.isNull（EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR）"}
  IF6 -->|"Yes"| IF7{"!inMap.containsKey（'kktk_svc_cd_err'）"}
  IF7 -->|"Yes"| S17["inMap.put（'kktk_svc_cd_err', template.getString（EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR））"]
  IF7 -->|"No"| S18["何もせず"]
  IF6 -->|"No"| S19
  S17 --> IF8{"!template.isNull（EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR）"}
  IF8 -->|"Yes"| IF9{"!inMap.containsKey（'kktk_svc_kei_no_err'）"}
  IF9 -->|"Yes"| S20["inMap.put（'kktk_svc_kei_no_err', template.getString（EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR））"]
  IF9 -->|"No"| S21["何もせず"]
  IF8 -->|"No"| S22
  S20 --> IF10{"!template.isNull（EKK0341B002CBSMsg.KEY_SORT_KBN_ERR）"}
  IF10 -->|"Yes"| IF11{"!inMap.containsKey（'sort_kbn_err'）"}
  IF11 -->|"Yes"| S23["inMap.put（'sort_kbn_err', template.getString（EKK0341B002CBSMsg.KEY_SORT_KBN_ERR））"]
  IF11 -->|"No"| S24["何もせず"]
  IF10 -->|"No"| S25
  S23 --> END["return param"]
  S24 --> END
  S25 --> END
  S16 --> END
  S18 --> END
  S19 --> END
  S21 --> END
  S22 --> END
```

**処理ステップ詳細:**

1. templates配列の先頭（templates[0]）から `templateStatus` を取得。EKK0341B002CBSMsg.STATUS。
2. `returnCode` が0以外であれば `templateStatus` を9000（異常終了）に上書き。
3. `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` でメッセージが存在しなければ `templateStatus` を0にリセット。
4. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でbpStatus取得。値がnullなら-1。
5. `templateStatus > bpStatus` なら、SCのステータスコード・メッセージでBP側を上書き。
6. ユーザデータ情報（inMap）をparam.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)で取得。なければ初期化。
7. 各エラー情報（'svc_kei_no_err', 'kktk_svc_cd_err', 'kktk_svc_kei_no_err', 'sort_kbn_err'）について、templateがnullでなければinMapに格納（重複登録なし）。
8. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ          |
| 2   | templates    | CAANMsg[]                  | SCからの返却メッセージ配列               |
| 3   | returnCode   | int                        | サービスコンポーネント呼出の戻りコード   |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0341B002CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0341B002CBS` | private | 下りマッピング（機器提供サービス契約一覧照会（サービス契約番号）） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0341B002CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L25799)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L25803)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L25810)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L25815)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L25819)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(inMap == null)` (L25832)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR))` [KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] (L25839)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

###### · Block 7.1 — 🔀 IF `(!inMap.containsKey("svc_kei_no_err"))` (L25841)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

##### Block 8 — 🔀 IF `(!template.isNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR))` [KEY_KKTK_SVC_CD_ERR="key_kktk_svc_cd_err"] (L25847)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("kktk_svc_cd_err", template.getString(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR));` [➔ KEY_KKTK_SVC_CD_ERR="key_kktk_svc_cd_err"] \| |

###### · Block 8.1 — 🔀 IF `(!inMap.containsKey("kktk_svc_cd_err"))` (L25849)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("kktk_svc_cd_err", template.getString(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR));` [➔ KEY_KKTK_SVC_CD_ERR="key_kktk_svc_cd_err"] \| |

##### Block 9 — 🔀 IF `(!template.isNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR))` [KEY_KKTK_SVC_KEI_NO_ERR="key_kktk_svc_kei_no_err"] (L25855)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("kktk_svc_kei_no_err", template.getString(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR));` [➔ KEY_KKTK_SVC_KEI_NO_ERR="key_kktk_svc_kei_no_err"] \| |

###### · Block 9.1 — 🔀 IF `(!inMap.containsKey("kktk_svc_kei_no_err"))` (L25857)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("kktk_svc_kei_no_err", template.getString(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR));` [➔ KEY_KKTK_SVC_KEI_NO_ERR="key_kktk_svc_kei_no_err"] \| |

##### Block 10 — 🔀 IF `(!template.isNull(EKK0341B002CBSMsg.KEY_SORT_KBN_ERR))` [KEY_SORT_KBN_ERR="key_sort_kbn_err"] (L25863)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("sort_kbn_err", template.getString(EKK0341B002CBSMsg.KEY_SORT_KBN_ERR));` [➔ KEY_SORT_KBN_ERR="key_sort_kbn_err"] \| |

###### · Block 10.1 — 🔀 IF `(!inMap.containsKey("sort_kbn_err"))` (L25865)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("sort_kbn_err", template.getString(EKK0341B002CBSMsg.KEY_SORT_KBN_ERR));` [➔ KEY_SORT_KBN_ERR="key_sort_kbn_err"] \| |

> **合計**: 14 blocks (2 depth levels)

### editErrorInfo_EKK0161B003CBS()

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID）EKK0161B003実行後に、IRequestParameterReadWriteにエラー情報をマッピングする。  
CAANMsg配列から処理ステータスを取得し、returnCodeと照合して業務エラーメッセージを判定する。  
また、ユーザデータマップ（inMap）に対して、SYSIDのエラー情報を「sysid_err」キーで格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK0161B003CBS（param, templates, returnCode）"] --> S1["Step1: templates[0] から templateStatus を取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S2["templateStatus = 9000"]
  IF1 -->|"No"| S3["templateStatus = template.getInt（EKK0161B003CBSMsg.STATUS）"]
  S2 --> S4
  S3 --> S4
  S4["Step2: RETURN_MESSAGE_XXXX （templateStatus） のメッセージ存在判定"] --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + String.format（'%1$04d', templateStatus）） == null"}
  IF2 -->|"Yes"| S5["templateStatus = 0"]
  IF2 -->|"No"| S6["templateStatus そのまま"]
  S5 --> S7
  S6 --> S7
  S7["Step3: param.getControlMapData（SCControlMapKeys.RETURN_CODE） でbpStatus取得"]
  S7 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S8["formatStatus = String.format（'%1$04d', templateStatus）"]
  S8 --> S9["message = JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + formatStatus）"]
  S9 --> S10["param.setControlMapData（SCControlMapKeys.RETURN_CODE, formatStatus）"]
  S10 --> S11["param.setControlMapData（SCControlMapKeys.RETURN_MESSAGE, message）"]
  IF3 -->|"No"| S12["何もせず次へ"]
  S11 --> S13["ユーザデータinMap取得（なければ初期化）"]
  S12 --> S13
  S13 --> IF4{"!template.isNull（EKK0161B003CBSMsg.KEY_SYSID_ERR）"}
  IF4 -->|"Yes"| IF5{"!inMap.containsKey（'sysid_err'）"}
  IF5 -->|"Yes"| S14["inMap.put（'sysid_err', template.getString（EKK0161B003CBSMsg.KEY_SYSID_ERR））"]
  IF5 -->|"No"| S15["何もせず"]
  IF4 -->|"No"| S15
  S14 --> END["return param"]
  S15 --> END

  NOTE1["EKK0161B003CBSMsg.STATUS = SCの処理ステータス"]
  NOTE2["SCControlMapKeys.RETURN_CODE = 'RETURN_CODE' （戻りコード）"]
  NOTE3["EKK0161B003CBSMsg.KEY_SYSID_ERR = SYSIDのエラー情報"]

  S1 -.- NOTE1
  S7 -.- NOTE2
  S14 -.- NOTE3
```

**処理ステップ詳細:**

1. templates配列の先頭（templates[0]）から `templateStatus` を取得。EKK0161B003CBSMsg.STATUS。
2. `returnCode` が0以外であれば `templateStatus` を9000（異常終了）に上書き。
3. `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` でメッセージが存在しなければ `templateStatus` を0にリセット。
4. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でbpStatus取得。値がnullなら-1。
5. `templateStatus > bpStatus` なら、SCのステータスコード・メッセージでBP側を上書き。
6. ユーザデータ情報（inMap）をparam.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)で取得。なければ初期化。
7. EKK0161B003CBSMsg.KEY_SYSID_ERRがnullでなければ、inMapに「sysid_err」キーでエラー情報を格納。
8. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ          |
| 2   | templates    | CAANMsg[]                  | SCからの返却メッセージ配列               |
| 3   | returnCode   | int                        | サービスコンポーネント呼出の戻りコード   |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B003CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0161B003CBS` | private | 下りマッピング（サービス契約内訳一覧照会（SYSID）） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0161B003CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L25431)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L25435)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L25442)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L25447)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L25451)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(inMap == null)` (L25464)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0161B003CBSMsg.KEY_SYSID_ERR))` [KEY_SYSID_ERR="key_sysid_err"] (L25471)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("sysid_err", template.getString(EKK0161B003CBSMsg.KEY_SYSID_ERR));` [➔ KEY_SYSID_ERR="key_sysid_err"] \| |

###### · Block 7.1 — 🔀 IF `(!inMap.containsKey("sysid_err"))` (L25473)

> 📌 サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("sysid_err", template.getString(EKK0161B003CBSMsg.KEY_SYSID_ERR));` [➔ KEY_SYSID_ERR="key_sysid_err"] \| |

> **合計**: 8 blocks (2 depth levels)

### editErrorInfo_EKK0081A010CBS()

---

#### 1. 役割

サービス契約一意照会（EKK0081A010）実行後に、IRequestParameterReadWriteにエラー情報をマッピングする。  
CAANMsg配列から処理ステータスを取得し、returnCodeと照合して業務エラーメッセージを判定する。  
また、ユーザデータマップ（inMap）に対して、サービス契約番号・世代登録年月日時分秒・予約適用年月日の各エラー情報をそれぞれ対応するキーで格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK0081A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0] から templateStatus を取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S2["templateStatus = 9000"]
  IF1 -->|"No"| S3["templateStatus = template.getInt（EKK0081A010CBSMsg.STATUS）"]
  S2 --> S4
  S3 --> S4
  S4["Step2: RETURN_MESSAGE_XXXX （templateStatus） のメッセージ存在判定"] --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + String.format（'%1$04d', templateStatus）） == null"}
  IF2 -->|"Yes"| S5["templateStatus = 0"]
  IF2 -->|"No"| S6["templateStatus そのまま"]
  S5 --> S7
  S6 --> S7
  S7["Step3: param.getControlMapData（SCControlMapKeys.RETURN_CODE） でbpStatus取得"]
  S7 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S8["formatStatus = String.format（'%1$04d', templateStatus）"]
  S8 --> S9["message = JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + formatStatus）"]
  S9 --> S10["param.setControlMapData（SCControlMapKeys.RETURN_CODE, formatStatus）"]
  S10 --> S11["param.setControlMapData（SCControlMapKeys.RETURN_MESSAGE, message）"]
  IF3 -->|"No"| S12["何もせず次へ"]
  S11 --> S13["ユーザデータinMap取得（なければ初期化）"]
  S12 --> S13
  S13 --> IF4{"!template.isNull（EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR）"}
  IF4 -->|"Yes"| IF5{"!inMap.containsKey（'svc_kei_no_err'）"}
  IF5 -->|"Yes"| S14["inMap.put（'svc_kei_no_err', template.getString（EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR））"]
  IF5 -->|"No"| S15["何もせず"]
  IF4 -->|"No"| S16
  S14 --> IF6{"!template.isNull（EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR）"}
  IF6 -->|"Yes"| IF7{"!inMap.containsKey（'gene_add_dtm_err'）"}
  IF7 -->|"Yes"| S17["inMap.put（'gene_add_dtm_err', template.getString（EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR））"]
  IF7 -->|"No"| S18["何もせず"]
  IF6 -->|"No"| S19
  S17 --> IF8{"!template.isNull（EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR）"}
  IF8 -->|"Yes"| IF9{"!inMap.containsKey（'rsv_aply_ymd_err'）"}
  IF9 -->|"Yes"| S20["inMap.put（'rsv_aply_ymd_err', template.getString（EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR））"]
  IF9 -->|"No"| S21["何もせず"]
  IF8 -->|"No"| S22
  S20 --> END["return param"]
  S21 --> END
  S22 --> END
  S16 --> END
  S18 --> END
  S19 --> END
  S15 --> END

  NOTE1["EKK0081A010CBSMsg.STATUS = SCの処理ステータス"]
  NOTE2["SCControlMapKeys.RETURN_CODE = 'RETURN_CODE' （戻りコード）"]
  NOTE3["EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR = サービス契約番号のエラー情報"]
  NOTE4["EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR = 世代登録年月日時分秒のエラー情報"]
  NOTE5["EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR = 予約適用年月日のエラー情報"]

  S1 -.- NOTE1
  S7 -.- NOTE2
  S14 -.- NOTE3
  S17 -.- NOTE4
  S20 -.- NOTE5
```

**処理ステップ詳細:**

1. templates配列の先頭（templates[0]）から `templateStatus` を取得。EKK0081A010CBSMsg.STATUS。
2. `returnCode` が0以外であれば `templateStatus` を9000（異常終了）に上書き。
3. `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` でメッセージが存在しなければ `templateStatus` を0にリセット。
4. param.getControlMapData(SCControlMapKeys.RETURN_CODE)でbpStatus取得。値がnullなら-1。
5. `templateStatus > bpStatus` なら、SCのステータスコード・メッセージでBP側を上書き。
6. ユーザデータ情報（inMap）をparam.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)で取得。なければ初期化。
7. EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR, KEY_GENE_ADD_DTM_ERR, KEY_RSV_APLY_YMD_ERRがnullでなければ、inMapにそれぞれのエラー情報を対応するキーで格納（重複登録なし）。
8. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ          |
| 2   | templates    | CAANMsg[]                  | SCからの返却メッセージ配列               |
| 3   | returnCode   | int                        | サービスコンポーネント呼出の戻りコード   |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| - | (なし — 直接DB/SC呼び出しなし) | - | - | サブメソッド経由で処理 |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0081A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0081A010CBS` | private | 下りマッピング（サービス契約一意照会） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |
---
---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0081A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L26325)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L26329)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L26336)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L26341)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L26345)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(inMap == null)` (L26358)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR))` [KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] (L26365)

> 📌 サービス契約一意照会.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

###### · Block 7.1 — 🔀 IF `(!inMap.containsKey("svc_kei_no_err"))` (L26367)

> 📌 サービス契約一意照会.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

##### Block 8 — 🔀 IF `(!template.isNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR))` [KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] (L26373)

> 📌 サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("gene_add_dtm_err", template.getString(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR));` [➔ KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] \| |

###### · Block 8.1 — 🔀 IF `(!inMap.containsKey("gene_add_dtm_err"))` (L26375)

> 📌 サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("gene_add_dtm_err", template.getString(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR));` [➔ KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] \| |

##### Block 9 — 🔀 IF `(!template.isNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR))` [KEY_RSV_APLY_YMD_ERR="key_rsv_aply_ymd_err"] (L26381)

> 📌 サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("rsv_aply_ymd_err", template.getString(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR));` [➔ KEY_RSV_APLY_YMD_ERR="key_rsv_aply_ymd_err"] \| |

###### · Block 9.1 — 🔀 IF `(!inMap.containsKey("rsv_aply_ymd_err"))` (L26383)

> 📌 サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("rsv_aply_ymd_err", template.getString(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR));` [➔ KEY_RSV_APLY_YMD_ERR="key_rsv_aply_ymd_err"] \| |

> **合計**: 12 blocks (2 depth levels)



---

## 📋 全分岐詳細 (deterministic per-branch table)

> 以下のテーブルはソースコードから deterministic に生成されたものです。全条件分岐を網羅します。

### 📞 Screen/Batch 呼び出し元 (External Entry Points)

> このクラスを呼び出すScreen/Batchの一覧です（クラスレベルの呼び出し元）。
> **「呼出チェーン」列**: CC直接エントリメソッド → IntraClass経由 → 本チャンクの対象メソッド（**太字**）の実際の呼出パス。
> ※ 例: `CCエントリメソッド → 中間メソッド → **対象メソッド**` — 左端がCC入口、太字が本チャンクの対象メソッド。
> **「種別」列**: BPCheck＝業務確認チェック, Batch＝バッチ処理, Operation＝オペレーション, CC＝制御クラス。

| # | Screen/Batch | 種別 | 呼び出しクラス | 呼び出しメソッド | 呼出チェーン（CC入口 → IntraClass → 対象） |
|---|---|---|---|---|---|
| 1 | `KKSV0004` | BPCheck | `KKSV0004OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 2 | `KKSV0008` | BPCheck | `KKSV0008OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 3 | `KKSV0009` | BPCheck | `KKSV0009OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 4 | `KKSV0031` | BPCheck | `KKSV0031OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 5 | `KKSV0073` | BPCheck | `KKSV0073OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 6 | `KKSV0136` | BPCheck | `KKSV0136OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 7 | `KKSV0162` | BPCheck | `KKSV0162OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 8 | `KKSV0428` | BPCheck | `KKSV0428OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 9 | `KKSV0429` | BPCheck | `KKSV0429OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 10 | `KKSV0430` | BPCheck | `KKSV0430OPBPCheck` | `invokeCheck` | `getInvokeCBS` |

## ③.6 制御フロー分岐 (Control Flow Branching)

### `editErrorInfo_EKK0081A010CBS()` (L26319) — 13 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L26325 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L26329 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L26336 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L26341 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L26345 |
| 6 | 🔀 IF | D0 | (inMap == null) | サービス契約一意照会.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却 | - | - | L26358 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR)) | サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却 | - | - | L26365 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("svc_kei_no_err")) | サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却 | - | - | L26367 |
| 9 | 🔀 IF | D0 | (!template.isNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM_ERR)) | サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却 | - | - | L26373 |
| 10 | · 🔀 IF | D1 | (!inMap.containsKey("gene_add_dtm_err")) | サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却 | - | - | L26375 |
| 11 | 🔀 IF | D0 | (!template.isNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD_ERR)) | - | - | - | L26381 |
| 12 | · 🔀 IF | D1 | (!inMap.containsKey("rsv_aply_ymd_err")) | - | - | - | L26383 |
| 13 | ↩️ RETURN | D0 | param | - | - | - | L26388 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0081A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L26325"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L26329"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L26336"| B2
  B3["ELSE"]
  CF0 -->|"L26341"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L26345"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L26358"| B5
  subgraph SG6["IF: （!template.isNull（EKK0081A010CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'svc_kei_no_err…"]
  end
  CF0 -->|"L26365"| SG6
  subgraph SG7["IF: （!template.isNull（EKK0081A010CBSMsg.KEY_…"]
    direction TB
    C7_0["IF: （!inMap.containsKey（'gene_add_dtm_e…"]
  end
  CF0 -->|"L26373"| SG7
  subgraph SG8["IF: （!template.isNull（EKK0081A010CBSMsg.KEY_…"]
    direction TB
    C8_0["IF: （!inMap.containsKey（'rsv_aply_ymd_e…"]
  end
  CF0 -->|"L26381"| SG8
  B9["RETURN: param"]
  CF0 -->|"L26388"| B9
```

### `editErrorInfo_EKK0161B003CBS()` (L25425) — 9 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L25431 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L25435 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L25442 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L25447 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L25451 |
| 6 | 🔀 IF | D0 | (inMap == null) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却 | - | - | L25464 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0161B003CBSMsg.KEY_SYSID_ERR)) | - | - | - | L25471 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("sysid_err")) | - | - | - | L25473 |
| 9 | ↩️ RETURN | D0 | param | - | - | - | L25478 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0161B003CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L25431"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L25435"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L25442"| B2
  B3["ELSE"]
  CF0 -->|"L25447"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L25451"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L25464"| B5
  subgraph SG6["IF: （!template.isNull（EKK0161B003CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'sysid_err'））"]
  end
  CF0 -->|"L25471"| SG6
  B7["RETURN: param"]
  CF0 -->|"L25478"| B7
```

### `editErrorInfo_EKK0341B002CBS()` (L25793) — 15 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L25799 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L25803 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L25810 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L25815 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L25819 |
| 6 | 🔀 IF | D0 | (inMap == null) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却 | - | - | L25832 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR)) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード のエラー情報返却 | - | - | L25839 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("svc_kei_no_err")) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード のエラー情報返却 | - | - | L25841 |
| 9 | 🔀 IF | D0 | (!template.isNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD_ERR)) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却 | - | - | L25847 |
| 10 | · 🔀 IF | D1 | (!inMap.containsKey("kktk_svc_cd_err")) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 のエラー情報返却 | - | - | L25849 |
| 11 | 🔀 IF | D0 | (!template.isNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR)) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分 のエラー情報返却 | - | - | L25855 |
| 12 | · 🔀 IF | D1 | (!inMap.containsKey("kktk_svc_kei_no_err")) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分 のエラー情報返却 | - | - | L25857 |
| 13 | 🔀 IF | D0 | (!template.isNull(EKK0341B002CBSMsg.KEY_SORT_KBN_ERR)) | - | - | - | L25863 |
| 14 | · 🔀 IF | D1 | (!inMap.containsKey("sort_kbn_err")) | - | - | - | L25865 |
| 15 | ↩️ RETURN | D0 | param | - | - | - | L25870 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0341B002CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L25799"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L25803"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L25810"| B2
  B3["ELSE"]
  CF0 -->|"L25815"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L25819"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L25832"| B5
  subgraph SG6["IF: （!template.isNull（EKK0341B002CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'svc_kei_no_err…"]
  end
  CF0 -->|"L25839"| SG6
  subgraph SG7["IF: （!template.isNull（EKK0341B002CBSMsg.KEY_…"]
    direction TB
    C7_0["IF: （!inMap.containsKey（'kktk_svc_cd_er…"]
  end
  CF0 -->|"L25847"| SG7
  subgraph SG8["IF: （!template.isNull（EKK0341B002CBSMsg.KEY_…"]
    direction TB
    C8_0["IF: （!inMap.containsKey（'kktk_svc_kei_n…"]
  end
  CF0 -->|"L25855"| SG8
  subgraph SG9["IF: （!template.isNull（EKK0341B002CBSMsg.KEY_…"]
    direction TB
    C9_0["IF: （!inMap.containsKey（'sort_kbn_err'）…"]
  end
  CF0 -->|"L25863"| SG9
  B10["RETURN: param"]
  CF0 -->|"L25870"| B10
```

### `editErrorInfo_EKK0401B001CBS()` (L24814) — 9 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L24820 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L24824 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L24831 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L24836 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L24840 |
| 6 | 🔀 IF | D0 | (inMap == null) | サブオプションサービス契約一覧照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却 | - | - | L24853 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR)) | - | - | - | L24860 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("op_svc_kei_no_err")) | - | - | - | L24862 |
| 9 | ↩️ RETURN | D0 | param | - | - | - | L24867 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0401B001CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L24820"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L24824"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L24831"| B2
  B3["ELSE"]
  CF0 -->|"L24836"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L24840"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L24853"| B5
  subgraph SG6["IF: （!template.isNull（EKK0401B001CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'op_svc_kei_no_…"]
  end
  CF0 -->|"L24860"| SG6
  B7["RETURN: param"]
  CF0 -->|"L24867"| B7
```

### `editErrorInfoEKK0081A010CBS()` (L27185) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L27190 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L27194 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L27201 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27206 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27210 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L27219 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEKK0081A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L27190"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L27194"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L27201"| B2
  B3["ELSE"]
  CF0 -->|"L27206"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L27210"| B4
  B5["RETURN: param"]
  CF0 -->|"L27219"| B5
```

### `editErrorInfoEKK0341A010CBS()` (L27371) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L27376 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L27380 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L27387 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27392 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27396 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L27405 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEKK0341A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L27376"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L27380"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L27387"| B2
  B3["ELSE"]
  CF0 -->|"L27392"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L27396"| B4
  B5["RETURN: param"]
  CF0 -->|"L27405"| B5
```

### `editInMsg_EKK0081A010CBS()` (L26051) — 7 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("svc_kei_no") == null ｜｜ "".equals(inMap.get("svc_kei_no"))) | サービス契約一意照会.サービス契約番号 → ＫＥＹ＿サービス契約番号 | - | - | L26100 |
| 2 | 🔀 ELSE | D0 | (else) | サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 | - | - | L26105 |
| 3 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("gene_add_dtm") == null ｜｜ "".equals(inMap.get("gene_add_dtm"))) | サービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 | - | - | L26110 |
| 4 | 🔀 ELSE | D0 | (else) | サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 | - | - | L26115 |
| 5 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("rsv_aply_ymd") == null ｜｜ "".equals(inMap.get("rsv_aply_ymd"))) | サービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 | - | - | L26120 |
| 6 | 🔀 ELSE | D0 | (else) | - | - | - | L26125 |
| 7 | ↩️ RETURN | D0 | paramMap | - | - | - | L26133 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editInMsg_EKK0081A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inMap == null || inMap.get（'svc_kei_no'…"]
  CF0 -->|"L26100"| B0
  B1["ELSE"]
  CF0 -->|"L26105"| B1
  B2["IF: （inMap == null || inMap.get（'gene_add_dt…"]
  CF0 -->|"L26110"| B2
  B3["ELSE"]
  CF0 -->|"L26115"| B3
  B4["IF: （inMap == null || inMap.get（'rsv_aply_ym…"]
  CF0 -->|"L26120"| B4
  B5["ELSE"]
  CF0 -->|"L26125"| B5
  B6["RETURN: paramMap"]
  CF0 -->|"L26133"| B6
```

### `editInMsg_EKK0161B003CBS()` (L25205) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("sysid") == null ｜｜ "".equals(inMap.get("sysid"))) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ | - | - | L25254 |
| 2 | 🔀 ELSE | D0 | (else) | - | - | - | L25259 |
| 3 | ↩️ RETURN | D0 | paramMap | - | - | - | L25267 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editInMsg_EKK0161B003CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inMap == null || inMap.get（'sysid'） == …"]
  CF0 -->|"L25254"| B0
  B1["ELSE"]
  CF0 -->|"L25259"| B1
  B2["RETURN: paramMap"]
  CF0 -->|"L25267"| B2
```

### `editInMsg_EKK0401B001CBS()` (L24584) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("op_svc_kei_no") == null ｜｜ "".equals(inMap.get("op_svc_kei_no"))) | サブオプションサービス契約一覧照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 | - | - | L24633 |
| 2 | 🔀 ELSE | D0 | (else) | - | - | - | L24638 |
| 3 | ↩️ RETURN | D0 | paramMap | - | - | - | L24646 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editInMsg_EKK0401B001CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inMap == null || inMap.get（'op_svc_kei_…"]
  CF0 -->|"L24633"| B0
  B1["ELSE"]
  CF0 -->|"L24638"| B1
  B2["RETURN: paramMap"]
  CF0 -->|"L24646"| B2
```

### `editResultRP_EKK0161B003CBS()` (L25280) — 21 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | - | - | - | L25298 |
| 2 | 🔀 IF | D0 | (dataList == null) | - | - | - | L25306 |
| 3 | 🔀 IF | D0 | (templateArray != null) | - | - | `editErrorInfo_EKK0161B003CBS()` | L25311 |
| 4 | · 🔁 FOR | D1 | (for-loop) | - | - | `editErrorInfo_EKK0161B003CBS()` | L25313 |
| 5 | ·· 🔀 IF | D2 | (i >= dataList.size()) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス契約内訳番号 | - | - | L25316 |
| 6 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_NO)) | - | SVC_KEI_UCWK_NO=svc_kei_ucwk_no | - | L25325 |
| 7 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス名 | - | - | L25330 |
| 8 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B003CBSMsg1List.SVC_NM)) | - | - | - | L25336 |
| 9 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金グル―プ名 | - | - | L25341 |
| 10 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B003CBSMsg1List.PRC_GRP_NM)) | - | - | - | L25347 |
| 11 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金コース名 | - | - | L25352 |
| 12 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B003CBSMsg1List.PCRS_NM)) | - | - | - | L25358 |
| 13 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.料金プラン名 | - | - | L25363 |
| 14 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B003CBSMsg1List.PPLAN_NM)) | - | - | - | L25369 |
| 15 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会（ＳＹＳＩＤ）マップ.サービス契約内訳一覧照会（ＳＹＳＩＤ）明細.サービス契約内訳ステータス | - | - | L25374 |
| 16 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B003CBSMsg1List.SVC_KEI_UCWK_STAT)) | - | - | - | L25380 |
| 17 | ·· 🔀 ELSE | D2 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK0161B003CBS()` | L25385 |
| 18 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L25397 |
| 19 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L25405 |
| 20 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0161B003CBSMsg.STATUS))) | - | - | - | L25407 |
| 21 | ↩️ RETURN | D0 | param | - | - | - | L25410 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0161B003CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L25298"| B0
  B1["IF: （dataList == null）"]
  CF0 -->|"L25306"| B1
  subgraph SG2["IF: （templateArray != null）"]
    direction TB
    C2_0["FOR: …"]
  end
  CF0 -->|"L25311"| SG2
  B3["IF: （errList == null）"]
  CF0 -->|"L25397"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L25405"| SG4
  B5["RETURN: param"]
  CF0 -->|"L25410"| B5
```

> **制御フロー合計**: 10 methods, 92 branches
