# ⑥ 業務ロジック — 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-editInMsgCmn"></a>
### editInMsgCmn()

---

#### 1. 役割

サービスI/F実行用の共通部を設定します（Javadocより）。  
具体的には、`IRequestParameterReadOnly param` の各種識別情報（電文ID・ユースケースID・オペレーションID・サービス呼び出し区分・依頼先ホスト名・依頼元IPアドレス・依頼元画面ID・オペレータID）を `HashMap<String, Object>` に格納し、SCインターフェースに共通で渡すリクエストマップを生成する共通処理です。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsgCmn（param）"] --> S1["Step1: 空のHashMap<String, Object> paramMapを生成"]
  S1 --> S2["Step2: param.getTelegramID（）で電文IDを取得し、paramMapに設定"]
  S2 --> S3["Step3: param.getUsecaseID（）でユースケースIDを取得し、paramMapに設定"]
  S3 --> S4["Step4: param.getOperationID（）でオペレーションIDを取得し、paramMapに設定"]
  S4 --> S5["Step5: param.getCallType（）でサービス呼び出し区分を取得し、paramMapに設定"]
  S5 --> S6["Step6: param.getControlMapData（SCControlMapKeys.REQ_HOSTNAME）で依頼先ホスト名を取得し、paramMapに設定"]
  S6 --> S7["Step7: param.getControlMapData（SCControlMapKeys.REQ_HOSTIP）で依頼元IPアドレスを取得し、paramMapに設定"]
  S7 --> S8["Step8: param.getControlMapData（SCControlMapKeys.REQ_VIEWID）で依頼元画面IDを取得し、paramMapに設定"]
  S8 --> S9["Step9: param.getControlMapData（SCControlMapKeys.OPERATOR_ID）でオペレータIDを取得し、paramMapに設定"]
  S9 --> RET["return paramMap"]
```

**処理ステップ詳細:**

1. Step1: 新規にHashMap<String, Object> paramMapを生成する。
2. Step2: `param.getTelegramID()` で電文IDを取得し、`JCMConstants.TRANZACTION_ID_KEY` をキーとして paramMap に格納。
3. Step3: `param.getUsecaseID()` でユースケースIDを取得し、`JCMConstants.USECASE_ID_KEY` をキーとして paramMap に格納。
4. Step4: `param.getOperationID()` でオペレーションIDを取得し、`JCMConstants.OPERATION_ID_KEY` をキーとして paramMap に格納。
5. Step5: `param.getCallType()` でサービス呼び出し区分を取得し、`JCMConstants.CALL_TYPE_KEY` をキーとして paramMap に格納。
6. Step6: `param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME)` で依頼先ホスト名を取得し、`JCMConstants.CLIENT_HOST_NAME_KEY` をキーとして paramMap に格納。
7. Step7: `param.getControlMapData(SCControlMapKeys.REQ_HOSTIP)` で依頼元IPアドレスを取得し、`JCMConstants.CLIENT_IP_ADDRESS_KEY` をキーとして paramMap に格納。
8. Step8: `param.getControlMapData(SCControlMapKeys.REQ_VIEWID)` で依頼元画面IDを取得し、`JCMConstants.INVOKE_GAMEN_ID_KEY` をキーとして paramMap に格納。
9. Step9: `param.getControlMapData(SCControlMapKeys.OPERATOR_ID)` でオペレータIDを取得し、`JCMConstants.OPERATOR_ID_KEY` をキーとして paramMap に格納。
10. Step10: すべての情報を格納した paramMap を return する。

---

#### 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 → editInMsgCmn` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsgCmn` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0081A010SC` | private | サービス契約一意照会SIFを呼び出し |
| 2 | `callEKK0081B004SC` | private | EKK0081B004 サービス契約一覧照会（SYSID）S-IFを実行します |
| 3 | `callEKK0091A010_SC` | private | サービス契約一意照会SIFを呼び出し |
| 4 | `callEKK0161A010SC` | private | サービス契約内訳一意照会SIFを呼び出し |
| 5 | `callEKK0161B003SC` | private | サービス契約内訳一覧照会（SYSID）SIFを呼び出し |
| 6 | `callEKK0161B004SC` | private | サービス契約内訳一覧照会（サービス契約番号）SIFを呼び出し |
| 7 | `callEKK0161B008SC` | private | 番ポ申込種別照会SIFを呼び出し |
| 8 | `callEKK0161B011SC` | private | サービス契約内訳履歴一覧照会SIFを呼び出し |
| 9 | `callEKK0191A010SC` | protected | サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し |
| 10 | `callEKK0191B001_2SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 11 | `callEKK0191B001SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 12 | `callEKK0191B502SC` | private | - |
| 13 | `callEKK0251B001SC` | private | サービス契約回線内訳一覧照会（サービス契約番号）SIFを呼び出し |
| 14 | `callEKK0251B003SC` | private | EKK0251B003_サービス契約回線内訳一覧照会（現在利用中）SIFを呼び出し |
| 15 | `callEKK0251B003SCCAAMsg` | private | サービス契約回線内訳（現在利用中）SIFを呼び出し |
| 16 | `callEKK0341A010SC` | private | 機器提供サービス契約一意照会SIFを呼び出し |
| 17 | `callEKK0341B002SC` | private | 機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 18 | `callEKK0341B008_02SC` | private | 機器提供サービス契約一覧照会SIFを呼び出し（交換中レコード専用） |
| 19 | `callEKK0341B008SC` | private | 機器提供サービス契約一覧照会SIFを呼び出し 2012-11/21　ロット２IT1-2012-0002131（EKK0341B022 に差替え） |
| 20 | `callEKK0341B504SC` | private | 機器提供サービス契約一覧照会（サービス契約回線内訳）SIFを呼び出し |
| 21 | `callEKK0351A010SC` | private | オプションサービス契約一意照会SIFを呼び出し |
| 22 | `callEKK0351B002SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 23 | `callEKK0351B010SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
| 24 | `callEKK0361A010SC` | private | オプションサービス契約＜ISP＞一意照会SIFを呼び出し |
| 25 | `callEKK0401A010SC` | private | サブオプションサービス契約一意照会SIFを呼び出し |
| 26 | `callEKK0411A010SC` | private | サブオプションサービス契約＜ISP＞一意照会SIFを呼び出し |
| 27 | `callEKK0791A010SC` | private | EKK0791A010 料金コース一意照会を実行します<br> <br> |
| 28 | `callEKK0881A010_SC` | private | 回線使用契約一意照会SIFを呼び出し |
| 29 | `callEKK0891A010_SC` | private | 提供方式契約一意照会を呼び出す。 |
| 30 | `callEKK1041A010SC` | private | オーダ設定一意照会SIFを呼び出し |
| 31 | `callEKK1041B001SC` | private | EKK1041B001 オーダ設定一覧照会を実行します |
| 32 | `callEKK1081B001SC` | private | EKK1081B001 オーダ発行条件一覧照会を実行します |
| 33 | `callEKK1081C011SC` | private | 同一処理番号取得SIFを呼び出し |
| 34 | `callEKK1081E010SC` | private | EKK1081E010 オーダ発行条件論理削除S-IFを実行します。 <br> |
| 35 | `callEKK1681B001SC` | private | 異動予約一覧照会<br> <br> |
| 36 | `callEKK2091A010SC` | private | 住所変更一意照会を呼び出す |
| 37 | `callEKK2101B001SC` | private | 住所変更明細一覧照会 |
| 38 | `callEKK2101B002SC` | private | 住所変更明細一覧照会（変更前識別番号）の取得 |
| 39 | `callEKK2811A010SC` | private | 機器オプションサービス契約一意照会SIFを呼び出し |
| 40 | `callEKK2811B010SC` | private | 機器オプションサービス契約一覧照会SIFを呼び出し |
| 41 | `callEKU0011A010SC` | private | 工事案件一意照会 |
| 42 | `callEKU0081B010SC` | private | サービス契約＿工事案件一覧照会 |
| 43 | `callETU0011B010SC` | private | 番ポ工事一覧照会SIFを呼び出し |
| 44 | `callEZM0121A010SC` | private | 電話番号一意照会SIFを呼び出し |
| 45 | `callEZM0321A010_SC` | private | 業務パラメータ一意照会検索を呼び出す。 |
| 46 | `callEZM0411A010SC` | private | 宅内機器型式一意照会SIFを呼び出し |
### editResultRP_EKK1041B001SC()

---

#### 1. 役割

EKK1041B001 オーダ設定一覧照会のSC呼び出し結果をパースし、ステータスやエラー情報をBP（業務コンポーネント）にセットする共通処理です。  
具体的には、SCから返却されたCAANMsg配列から1件目のテンプレートを取得し、リターンコードやステータスを検査してBPにセットします。エラー情報のマッピングや例外発生（SCCallException）も行います。照会結果データは定義済みカラム（EKK1041B001CBSMsg1List）の全項目を抽出してリスト化し返却します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK1041B001SC（result, param）"] --> S1["Step1: resultからCAANMsg[] templatesを取得"]
  S1 --> S2["Step2: templates[0]をparentTemplateとして取得"]
  S2 --> S3["Step3: returnCode, templateStatusを取得"]
  S3 --> IF_RETURN{"returnCode != 0"}
  IF_RETURN -.- NOTE1["returnCode = SCのリターンコード"]
  IF_RETURN -->|"Yes"| S4["templateStatus = 9000"]
  IF_RETURN -->|"No"| S5["Step4: JCMAPLConstMgrからメッセージを取得"]
  S4 --> S5
  S5 --> IF_MSG{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"}
  IF_MSG -.- NOTE2["templateStatus: SCレスポンスのSTATUS値"]
  IF_MSG -->|"Yes"| S6["templateStatus = 0"]
  IF_MSG -->|"No"| S7["そのまま"]
  S6 --> S7
  S7 --> S8["Step5: paramのRETURN_CODEを取得しbpStatusへ"]
  S8 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S9["Step6: formatStatus/message取得しBPにセット"]
  IF_BP -->|"No"| S10["何もしない"]
  S9 --> S10
  S10 --> S11["Step7: paramからERROR_INFOリストを取得しなければ新規作成"]
  S11 --> S12["Step8: TemplateErrorUtil.getErrorInfoでエラー情報再取得"]
  S12 --> S13["Step9: paramにERROR_INFOをセット"]
  S13 --> IF_THROW{"0 != returnCode || 0 != templateStatus"}
  IF_THROW -->|"Yes"| S14["SCCallException例外スロー"]
  IF_THROW -->|"No"| S15["Step10: contentsをEKK1041B001CBSMsg1Listから取得"]
  S14 --> S15
  S15 --> S16["Step11: parentTemplateからchildTemplatesを取得"]
  S16 --> S17["Step12: childTemplatesを1件ずつHashMap<String,Object>に格納"]
  S17 --> S18["Step13: retListに追加"]
  S18 --> RET["return retList"]
  style IF_RETURN fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
  style IF_THROW fill:#ffcc00
  NOTE1 -.- S3
  NOTE2 -.- S3
```

**処理ステップ詳細:**

1. Step1: SC呼出し結果resultから `CAANMsg[] templates` を取得。
2. Step2: templates の1件目を parentTemplate として選択。
3. Step3: result から `returnCode`（SCリターンコード）、`templateStatus`（parentTemplateのSTATUS）を取得。
4. Step4: `returnCode != 0` の場合は `templateStatus = 9000`（エラー扱い）。
5. Step5: `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)` でメッセージが取得できなければ `templateStatus = 0`。
6. Step6: param の `RETURN_CODE`（BP側の現状コード）を取得し、`bpStatus` へ格納（nullの場合は-1）。
7. Step7: `templateStatus > bpStatus` の場合は、`formatStatus` をゼロパディングし、`RETURN_CODE` と `RETURN_MESSAGE` をBP側にセット。
8. Step8: param から `ERROR_INFO` リストを取得。なければ新規作成。
9. Step9: `TemplateErrorUtil.getErrorInfo(result, errList)` でエラー情報を再取得し、paramのコントロールマップにセット。
10. Step10: `returnCode` または `templateStatus` が0でなければ `SCCallException` をスロー。
11. Step11: 結果データを `EKK1041B001CBSMsg1List` のcontents定義に従い全カラム抽出。
12. Step12: parentTemplate から childTemplates (明細) を取得し、各項目をHashMap化。
13. Step13: 生成したHashMapをリストに追加。
14. Step14: 全件分のリスト（retList）を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                                 | 業務説明                                              |
| --- | ------------ | ---------------------------------- | ----------------------------------------------------- |
| 1   | result       | Map<?, ?>                          | SCの呼出し結果（CAANMsg[]格納、リターンコード等）     |
| 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_EKK1041B001SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1041B001SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK1041B001SC` | private | EKK1041B001 オーダ設定一覧照会を実行します |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK1041B001SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L31051)

> 📌 ステータスの検査

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L31054)

> 📌 ← `templateStatus = template.getInt(EKK1041B001CBSMsg.STATUS)`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |
| 2 | 📦 VAR | `int bpStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L31060)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L31062)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L31066)

> 📌 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 `(errList == null)` (L31076)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |
| 2 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));` [➔ ERROR_INFO="error_info"] |

##### Block 7 — 🔀 IF `(0 != returnCode || 0 != templateStatus)` (L31083)

> 📌 必要なら例外発生

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus));` |

##### Block 8 — 🔁 FOR `(for)` (L31094)

> 📌 照会結果を格納

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 8.1 — 🔁 FOR `(for)` (L31097)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `retMap.put((String)contents[j][0], childTemplates[i].getString((String)contents[j][0]));` |

> **合計**: 9 blocks (2 depth levels)

### editErrorInfoEZM0411A010CBS()

---

#### 1. 役割

EZM0411A010実行後に、IRequestParameterReadWriteにエラー情報をマッピングする共通処理です。  
具体的には、SCから返却されたテンプレート配列（CAANMsg[]）の1件目（template）からSTATUS値を取得し、リターンコードやメッセージを返却用paramにセットします。エラーがある場合はBPにエラー情報、リターンコードを反映します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEZM0411A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0]でtemplateを取得"]
  S1 --> S2["Step2: template.getInt（EZM0411A010CBSMsg.STATUS）でtemplateStatus取得"]
  S2 --> IF_RC{"returnCode != 0"}
  IF_RC -.- NOTE1["returnCode: SCリターンコード"]
  IF_RC -->|"Yes"| S3["templateStatus = 9000"]
  IF_RC -->|"No"| S4["そのまま"]
  S3 --> S4
  S4 --> IF_MSG{"JCMAPLConstMgr.getString（RETURN_MESSAGE_templateStatus） == null"}
  IF_MSG -->|"Yes"| S5["templateStatus = 0"]
  IF_MSG -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> S7["param.getControlMapData（SCControlMapKeys.RETURN_CODE）でbpStatus取得"]
  S7 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -.- NOTE2["templateStatus: SCレスポンスのSTATUS値"]
  IF_BP -->|"Yes"| S8["Step8: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S9["何もしない"]
  S8 --> S9
  S9 --> RET["return param"]
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
  NOTE1 -.- S2
  NOTE2 -.- IF_BP
```

**処理ステップ詳細:**

1. Step1: templates[0]からCAANMsg templateを取得。
2. Step2: template.getInt(EZM0411A010CBSMsg.STATUS)でtemplateStatusを取得。
3. Step3: returnCodeが0でなければtemplateStatusを9000（エラー）にする。
4. Step4: JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合templateStatus=0にする。
5. Step5: paramからSCControlMapKeys.RETURN_CODEを取得し、bpStatusにセット（なければ-1）。
6. Step6: templateStatus > bpStatusの場合、formatStatusとメッセージをBPにセット。
7. Step7: paramをそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | エラー情報格納先                                      |
| 2   | templates    | CAANMsg[]                  | SCレスポンステンプレート配列                          |
| 3   | returnCode   | int                        | SCリターンコード                                      |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEZM0411A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEZM0411A010SC` | private | 宅内機器型式一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfoEZM0411A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L30641)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L30645)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L30652)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L30657)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L30661)

> 📌 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_EKK0351B010SC()

---

#### 1. 役割

EKK0351B010 オプションサービス契約一覧照会のSC呼び出し結果をパースし、ステータスやエラー情報をBP（業務コンポーネント）にセットする共通処理です。  
具体的には、SCから返却されたCAANMsg配列から1件目のテンプレートを取得し、リターンコードやステータスを検査してBPにセットします。エラー情報のマッピングや例外発生（SCCallException）も行います。  
また、エラーがなければ（コメントアウトされているが）childTemplatesから出力データをリスト化できる実装パターンを持っています。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0351B010SC（result, param）"] --> S1["Step1: SCからCAANMsg[] templatesを取得"]
  S1 --> S2["Step2: templates[0]をtemplateとして取得"]
  S2 --> S3["Step3: returnCodeとtemplateStatus（EKK0791A010CBSMsg.STATUS）を取得"]
  S3 --> IF_RC{"returnCode != 0"}
  IF_RC -->|"Yes"| S4["templateStatus = 9000"]
  IF_RC -->|"No"| S5["そのまま"]
  S4 --> S5
  S5 --> IF_MSG{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + templateStatus） == null"}
  IF_MSG -->|"Yes"| S6["templateStatus = 0"]
  IF_MSG -->|"No"| S7["そのまま"]
  S6 --> S7
  S7 --> S8["Step4: paramからSCControlMapKeys.RETURN_CODEを取得しbpStatusにセット"]
  S8 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S9["Step5: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S10["何もしない"]
  S9 --> S10
  S10 --> S11["Step6: paramからERROR_INFOリストを取得しなければ新規作成"]
  S11 --> S12["Step7: TemplateErrorUtil.getErrorInfoでエラー情報再取得"]
  S12 --> S13["Step8: paramにERROR_INFOをセット"]
  S13 --> IF_THROW{"0 != returnCode || 0 != templateStatus"}
  IF_THROW -->|"Yes"| S14["SCCallException例外スロー"]
  IF_THROW -->|"No"| S15["Step9: 結果データchildTemplates（コメントアウト）"]
  S14 --> S15
  S15 --> S16["Step10: paramを返却"]
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
  style IF_THROW fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: SC呼出し結果resultから `CAANMsg[] templates` を取得。
2. Step2: templates の1件目を template として選択。
3. Step3: result から `returnCode`（SCリターンコード）、`templateStatus`（EKK0791A010CBSMsg.STATUS）を取得。
4. Step4: `returnCode != 0` の場合は `templateStatus = 9000`（エラー扱い）。
5. Step5: `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)` でメッセージが取得できなければ `templateStatus = 0`。
6. Step6: param の `RETURN_CODE`（BP側の現状コード）を取得し、`bpStatus` へ格納（nullの場合は-1）。
7. Step7: `templateStatus > bpStatus` の場合、`formatStatus` をゼロパディングし、`RETURN_CODE` と `RETURN_MESSAGE` をBP側にセット。
8. Step8: param から `ERROR_INFO` リストを取得。なければ新規作成。
9. Step9: `TemplateErrorUtil.getErrorInfo(result, errList)` でエラー情報を再取得し、paramのコントロールマップにセット。
10. Step10: `returnCode` または `templateStatus` が0でなければ `SCCallException` をスロー。
11. Step11: コメントアウトされているが、childTemplatesから出力データをリスト化する実装例がある。
12. Step12: paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                                 | 業務説明                                              |
| --- | ------------ | ---------------------------------- | ----------------------------------------------------- |
| 1   | result       | Map<?, ?>                          | SCの呼出し結果（CAANMsg[]格納、リターンコード等）     |
| 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_EKK0351B010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351B010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0351B010SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0351B010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L28910)

> 📌 ステータスの検査

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L28913)

> 📌 ← `templateStatus = template.getInt(EKK0791A010CBSMsg.STATUS)`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |
| 2 | 📦 VAR | `int bpStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L28919)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L28921)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L28925)

> 📌 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 `(errList == null)` (L28935)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |
| 2 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));` [➔ ERROR_INFO="error_info"] |

##### Block 7 — 🔀 IF `(0 != returnCode || 0 != templateStatus)` (L28942)

> 📌 必要なら例外発生

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus));` |

> **合計**: 7 blocks (1 depth levels)

### editErrorInfoEKK0361A010CBS()

---

#### 1. 役割

EKK0361A010実行後に、IRequestParameterReadWriteにエラー情報をマッピングする共通処理です。  
具体的には、SCから返却されたテンプレート配列（CAANMsg[]）の1件目（template）からSTATUS値を取得し、リターンコードやメッセージを返却用paramにセットします。エラーがある場合はBPにエラー情報、リターンコードを反映します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0361A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0]でtemplateを取得"]
  S1 --> S2["Step2: template.getInt（EKK0361A010CBSMsg.STATUS）でtemplateStatus取得"]
  S2 --> IF_RC{"returnCode != 0"}
  IF_RC -->|"Yes"| S3["templateStatus = 9000"]
  IF_RC -->|"No"| S4["そのまま"]
  S3 --> S4
  S4 --> IF_MSG{"JCMAPLConstMgr.getString（RETURN_MESSAGE_templateStatus） == null"}
  IF_MSG -->|"Yes"| S5["templateStatus = 0"]
  IF_MSG -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> S7["param.getControlMapData（SCControlMapKeys.RETURN_CODE）でbpStatus取得"]
  S7 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S8["Step8: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S9["何もしない"]
  S8 --> S9
  S9 --> RET["return param"]
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: templates[0]からCAANMsg templateを取得。
2. Step2: template.getInt(EKK0361A010CBSMsg.STATUS)でtemplateStatusを取得。
3. Step3: returnCodeが0でなければtemplateStatusを9000（エラー）にする。
4. Step4: JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合templateStatus=0にする。
5. Step5: paramからSCControlMapKeys.RETURN_CODEを取得し、bpStatusにセット（なければ-1）。
6. Step6: templateStatus > bpStatusの場合、formatStatusとメッセージをBPにセット。
7. Step7: paramをそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | エラー情報格納先                                      |
| 2   | templates    | CAANMsg[]                  | SCレスポンステンプレート配列                          |
| 3   | returnCode   | int                        | SCリターンコード                                      |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### editErrorInfoEKK0411A010CBS()

---

#### 1. 役割

EKK0411A010実行後に、IRequestParameterReadWriteにエラー情報をマッピングする共通処理です。  
具体的には、SCから返却されたテンプレート配列（CAANMsg[]）の1件目（template）からSTATUS値を取得し、リターンコードやメッセージを返却用paramにセットします。エラーがある場合はBPにエラー情報、リターンコードを反映します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0411A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0]でtemplateを取得"]
  S1 --> S2["Step2: template.getInt（EKK0411A010CBSMsg.STATUS）でtemplateStatus取得"]
  S2 --> IF_RC{"returnCode != 0"}
  IF_RC -->|"Yes"| S3["templateStatus = 9000"]
  IF_RC -->|"No"| S4["そのまま"]
  S3 --> S4
  S4 --> IF_MSG{"JCMAPLConstMgr.getString（RETURN_MESSAGE_templateStatus） == null"}
  IF_MSG -->|"Yes"| S5["templateStatus = 0"]
  IF_MSG -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> S7["param.getControlMapData（SCControlMapKeys.RETURN_CODE）でbpStatus取得"]
  S7 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S8["Step8: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S9["何もしない"]
  S8 --> S9
  S9 --> RET["return param"]
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: templates[0]からCAANMsg templateを取得。
2. Step2: template.getInt(EKK0411A010CBSMsg.STATUS)でtemplateStatusを取得。
3. Step3: returnCodeが0でなければtemplateStatusを9000（エラー）にする。
4. Step4: JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合templateStatus=0にする。
5. Step5: paramからSCControlMapKeys.RETURN_CODEを取得し、bpStatusにセット（なければ-1）。
6. Step6: templateStatus > bpStatusの場合、formatStatusとメッセージをBPにセット。
7. Step7: paramをそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | エラー情報格納先                                      |
| 2   | templates    | CAANMsg[]                  | SCレスポンステンプレート配列                          |
| 3   | returnCode   | int                        | SCリターンコード                                      |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### editErrorInfoEKK0401A010CBS()

---

#### 1. 役割

EKK0401A010実行後に、IRequestParameterReadWriteにエラー情報をマッピングする共通処理です。  
具体的には、SCから返却されたテンプレート配列（CAANMsg[]）の1件目（template）からSTATUS値を取得し、リターンコードやメッセージを返却用paramにセットします。エラーがある場合はBPにエラー情報、リターンコードを反映します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK0401A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0]でtemplateを取得"]
  S1 --> S2["Step2: template.getInt（EKK0401A010CBSMsg.STATUS）でtemplateStatus取得"]
  S2 --> IF_RC{"returnCode != 0"}
  IF_RC -->|"Yes"| S3["templateStatus = 9000"]
  IF_RC -->|"No"| S4["そのまま"]
  S3 --> S4
  S4 --> IF_MSG{"JCMAPLConstMgr.getString（RETURN_MESSAGE_templateStatus） == null"}
  IF_MSG -->|"Yes"| S5["templateStatus = 0"]
  IF_MSG -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> S7["param.getControlMapData（SCControlMapKeys.RETURN_CODE）でbpStatus取得"]
  S7 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S8["Step8: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S9["何もしない"]
  S8 --> S9
  S9 --> RET["return param"]
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: templates[0]からCAANMsg templateを取得。
2. Step2: template.getInt(EKK0401A010CBSMsg.STATUS)でtemplateStatusを取得。
3. Step3: returnCodeが0でなければtemplateStatusを9000（エラー）にする。
4. Step4: JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合templateStatus=0にする。
5. Step5: paramからSCControlMapKeys.RETURN_CODEを取得し、bpStatusにセット（なければ-1）。
6. Step6: templateStatus > bpStatusの場合、formatStatusとメッセージをBPにセット。
7. Step7: paramをそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | エラー情報格納先                                      |
| 2   | templates    | CAANMsg[]                  | SCレスポンステンプレート配列                          |
| 3   | returnCode   | int                        | SCリターンコード                                      |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### editErrorInfoEKK1081C011CBS()

---

#### 1. 役割

EKK1081C011実行後に、IRequestParameterReadWriteにエラー情報をマッピングする共通処理です。  
具体的には、SCから返却されたテンプレート配列（CAANMsg[]）の1件目（template）からSTATUS値を取得し、リターンコードやメッセージを返却用paramにセットします。エラーがある場合はBPにエラー情報、リターンコードを反映します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfoEKK1081C011CBS（param, templates, returnCode）"] --> S1["Step1: templates[0]でtemplateを取得"]
  S1 --> S2["Step2: template.getInt（EKK1081C011CBSMsg.STATUS）でtemplateStatus取得"]
  S2 --> IF_RC{"returnCode != 0"}
  IF_RC -->|"Yes"| S3["templateStatus = 9000"]
  IF_RC -->|"No"| S4["そのまま"]
  S3 --> S4
  S4 --> IF_MSG{"JCMAPLConstMgr.getString（RETURN_MESSAGE_templateStatus） == null"}
  IF_MSG -->|"Yes"| S5["templateStatus = 0"]
  IF_MSG -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> S7["param.getControlMapData（SCControlMapKeys.RETURN_CODE）でbpStatus取得"]
  S7 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S8["Step8: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S9["何もしない"]
  S8 --> S9
  S9 --> RET["return param"]
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: templates[0]からCAANMsg templateを取得。
2. Step2: template.getInt(EKK1081C011CBSMsg.STATUS)でtemplateStatusを取得。
3. Step3: returnCodeが0でなければtemplateStatusを9000（エラー）にする。
4. Step4: JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合templateStatus=0にする。
5. Step5: paramからSCControlMapKeys.RETURN_CODEを取得し、bpStatusにセット（なければ-1）。
6. Step6: templateStatus > bpStatusの場合、formatStatusとメッセージをBPにセット。
7. Step7: paramをそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | エラー情報格納先                                      |
| 2   | templates    | CAANMsg[]                  | SCレスポンステンプレート配列                          |
| 3   | returnCode   | int                        | SCリターンコード                                      |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfoEKK1081C011CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK1081C011SC` | private | 同一処理番号取得SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfoEKK1081C011CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L27005)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L27009)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L27016)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L27021)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L27025)

> 📌 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)

### editErrorInfo_EKK0351A010CBS()

---

#### 1. 役割

オプションサービス契約一意照会（EKK0351A010）実行後にIRequestParameterReadWriteにエラー情報をマッピングする共通処理です。  
具体的には、SCから返却されたテンプレート配列（CAANMsg[]）の1件目（template）からSTATUS値を取得し、リターンコードやメッセージを返却用paramにセットします。また、ユーザデータ情報（HAKKOSODCCWORKMAP）に対して、オプションサービス契約番号や世代登録年月日時分秒、予約適用年月日のエラー情報を格納します。エラーがある場合はBPにエラー情報、リターンコードを反映します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK0351A010CBS（param, templates, returnCode）"] --> S1["Step1: templates[0]でtemplateを取得"]
  S1 --> S2["Step2: template.getInt（EKK0351A010CBSMsg.STATUS）でtemplateStatus取得"]
  S2 --> IF_RC{"returnCode != 0"}
  IF_RC -->|"Yes"| S3["templateStatus = 9000"]
  IF_RC -->|"No"| S4["そのまま"]
  S3 --> S4
  S4 --> IF_MSG{"JCMAPLConstMgr.getString（RETURN_MESSAGE_templateStatus） == null"}
  IF_MSG -->|"Yes"| S5["templateStatus = 0"]
  IF_MSG -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> S7["param.getControlMapData（SCControlMapKeys.RETURN_CODE）でbpStatus取得"]
  S7 --> IF_BP{"templateStatus > bpStatus"}
  IF_BP -->|"Yes"| S8["Step8: formatStatus/messageをBPにセット"]
  IF_BP -->|"No"| S9["何もしない"]
  S8 --> S9
  S9 --> S10["Step9: param.getData（HAKKOSODCCWORKMAP）でinMap取得"]
  S10 --> IF_INMAP{"inMap == null"}
  IF_INMAP -->|"Yes"| S11["新規HashMapを作成しparamにセット"]
  IF_INMAP -->|"No"| S12["そのまま"]
  S11 --> S12
  S12 --> IF_OPSVC{"template.isNull（EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR）"}
  IF_OPSVC -->|"No"| S13["inMapにop_svc_kei_no_err追加"]
  IF_OPSVC -->|"Yes"| S14["何もしない"]
  S13 --> IF_GENE{"template.isNull（EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR）"}
  IF_GENE -->|"No"| S15["inMapにgene_add_dtm_err追加"]
  IF_GENE -->|"Yes"| S16["何もしない"]
  S15 --> IF_RSV{"template.isNull（EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR）"}
  IF_RSV -->|"No"| S17["inMapにrsv_aply_ymd_err追加"]
  IF_RSV -->|"Yes"| S18["何もしない"]
  S17 --> RET["return param"]
  S14 --> S16
  S16 --> S18
  S18 --> RET
  style IF_RC fill:#ffcc00
  style IF_MSG fill:#ffcc00
  style IF_BP fill:#ffcc00
  style IF_INMAP fill:#ffcc00
  style IF_OPSVC fill:#ffcc00
  style IF_GENE fill:#ffcc00
  style IF_RSV fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: templates[0]からCAANMsg templateを取得。
2. Step2: template.getInt(EKK0351A010CBSMsg.STATUS)でtemplateStatusを取得。
3. Step3: returnCodeが0でなければtemplateStatusを9000（エラー）にする。
4. Step4: JCMAPLConstMgr.getString("RETURN_MESSAGE_" + templateStatus)がnullの場合templateStatus=0にする。
5. Step5: paramからSCControlMapKeys.RETURN_CODEを取得し、bpStatusにセット（なければ-1）。
6. Step6: templateStatus > bpStatusの場合、formatStatusとメッセージをBPにセット。
7. Step7: param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMapを取得。なければ新規HashMapを生成しセット。
8. Step8: template.isNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)がfalseなら、inMapにop_svc_kei_no_errを格納。
9. Step9: template.isNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR)がfalseなら、inMapにgene_add_dtm_errを格納。
10. Step10: template.isNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR)がfalseなら、inMapにrsv_aply_ymd_errを格納。
11. Step11: 上記エラー情報をセットしたparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | エラー情報格納先                                      |
| 2   | templates    | CAANMsg[]                  | SCレスポンステンプレート配列                          |
| 3   | returnCode   | int                        | SCリターンコード                                      |

---

#### 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_EKK0351A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0351A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0351A010CBS` | private | 下りマッピング（オプションサービス契約一意照会） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0351A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L26589)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L26593)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L26600)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L26605)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L26609)

> 📌 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)` (L26622)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR))` [KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] (L26629)

> 📌 オプションサービス契約一意照会.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("op_svc_kei_no_err", template.getString(EKK0351A010CBSMsg.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"))` (L26631)

> 📌 オプションサービス契約一意照会.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("op_svc_kei_no_err", template.getString(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR));` [➔ KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] \| |

##### Block 8 — 🔀 IF `(!template.isNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR))` [KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] (L26637)

> 📌 オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("gene_add_dtm_err", template.getString(EKK0351A010CBSMsg.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"))` (L26639)

> 📌 オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("gene_add_dtm_err", template.getString(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR));` [➔ KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] \| |

##### Block 9 — 🔀 IF `(!template.isNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR))` [KEY_RSV_APLY_YMD_ERR="key_rsv_aply_ymd_err"] (L26645)

> 📌 オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("rsv_aply_ymd_err", template.getString(EKK0351A010CBSMsg.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"))` (L26647)

> 📌 オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("rsv_aply_ymd_err", template.getString(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR));` [➔ KEY_RSV_APLY_YMD_ERR="key_rsv_aply_ymd_err"] \| |

> **合計**: 12 blocks (2 depth levels)

### editResultRP_EKK0351A010CBS()

---

#### 1. 役割

オプションサービス契約一意照会（EKK0351A010）実行後に、SCからの戻り値（CAANMsg[]）を業務データ（HAKKOSODCCWORKMAP）へマッピングし、エラー情報を処理する共通処理です。  
具体的には、SCのレスポンスから明細リスト（EKK0351A010CBSMsg1List）をdataMapに格納し、editErrorInfo_EKK0351A010CBSでエラー情報を追記します。エラーがあればCCException/SCCallExceptionをスローします。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0351A010CBS（msgList, param）"] --> S1["Step1: msgListからCAANMsg[] templatesを取得"]
  S1 --> S2["Step2: templates[0]をparentTemplateとして取得"]
  S2 --> S3["Step3: parentTemplate.getMsgData（）からchildTemplates（EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST）を取得"]
  S3 --> S4["Step4: param.getData（HAKKOSODCCWORKMAP）でdataMapを取得"]
  S4 --> IF_DATA{"dataMap == null"}
  IF_DATA -->|"Yes"| S5["新規HashMapを生成してparamにセット"]
  IF_DATA -->|"No"| S6["そのまま"]
  S5 --> S6
  S6 --> IF_LIST{"dataList == null"}
  IF_LIST -->|"Yes"| S7["新規ArrayListを生成"]
  IF_LIST -->|"No"| S8["そのまま"]
  S7 --> S8
  S8 --> IF_TEMPARRAY{"templateArray != null"}
  IF_TEMPARRAY -->|"Yes"| S9["for各childTemplate: gene_add_dtmをdataListに格納"]
  IF_TEMPARRAY -->|"No"| S10["スキップ"]
  S9 --> S10
  S10 --> S11["dataMapにEKK0351A010CBSMsg1ListキーでdataListを格納"]
  S11 --> S12["editErrorInfo_EKK0351A010CBS（param, templates, return_code）呼出"]
  S12 --> S13["param.getControlMapData（SCControlMapKeys.ERROR_INFO）でerrList取得。なければ新規作成"]
  S13 --> S14["TemplateErrorUtil.getErrorInfo（msgList, errList）でエラー情報更新"]
  S14 --> IF_ERR{"errList != null && !errList.isEmpty（）"}
  IF_ERR -->|"Yes"| S15["CCException/SCCallExceptionスロー"]
  IF_ERR -->|"No"| S16["paramを返却"]
  style IF_DATA fill:#ffcc00
  style IF_LIST fill:#ffcc00
  style IF_TEMPARRAY fill:#ffcc00
  style IF_ERR fill:#ffcc00
```

**処理ステップ詳細:**

1. Step1: msgListからCAANMsg[] templatesを取得。
2. Step2: templates[0]をparentTemplateとして取得。
3. Step3: parentTemplate.getMsgData()からtemplateArray（EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST）を取得。
4. Step4: param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でdataMapを取得。なければ新規生成しparamにセット。
5. Step5: dataMapから"dataList"を取得。なければ新規ArrayListを生成。
6. Step6: templateArrayがnullでなければ、forループでgene_add_dtmをchildMapに格納しdataListへ追加。
7. Step7: dataMapにEKK0351A010CBSMsg1ListキーでdataListを格納。
8. Step8: editErrorInfo_EKK0351A010CBS(param, templates, return_code)を呼び出し、paramにエラー情報をセット。
9. Step9: param.getControlMapData(SCControlMapKeys.ERROR_INFO)でerrListを取得。なければ新規ArrayListを生成。
10. Step10: TemplateErrorUtil.getErrorInfo(msgList, errList)でエラー情報を更新し、paramにセット。
11. Step11: errListがnullでなく空でなければCCException/SCCallExceptionをスロー。
12. Step12: paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                                 | 業務説明                                              |
| --- | ------------ | ---------------------------------- | ----------------------------------------------------- |
| 1   | msgList      | Map<?, ?>                          | SCの呼出し結果（CAANMsg[]格納、リターンコード等）     |
| 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_EKK0351A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0351A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0351A010SC` | private | オプションサービス契約一意照会SIFを呼び出し |
| 2 | `getOpSvcKeiGaDtm` | private | オプションサービス契約一意照会処理<br> <br> オプションサービス契約一意照会サービスインターフェイスにより<br> オプションサービス契約情報（世代登録年月日時分秒）を取得します。<br> <br> |
---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0351A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L26513)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(dataList == null)` (L26521)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList = new ArrayList();` |

##### Block 3 — 🔀 IF `(templateArray != null)` (L26526)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `CAANMsg childTemplate = templateArray[i];` |
| 2 | ⚡ EXEC | `dataList.add(new HashMap());` |
| 3 | 📦 VAR | `HashMap childMap = (HashMap)dataList.get(i);` |
| 4 | 📋 SET | `childMap.put("gene_add_dtm", "");` |
| 5 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0351A010CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |

###### · Block 3.1 — 🔁 FOR `(for)` (L26528)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 3.1.1 — 🔀 IF `(i >= dataList.size())` (L26531)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.add(new HashMap());` |

###### ·· Block 3.1.2 — 🔀 IF `(childTemplate.isNull(EKK0351A010CBSMsg1List.GENE_ADD_DTM))` [GENE_ADD_DTM="gene_add_dtm"] (L26539)

> 📌 オプションサービス契約一意照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", "");` |

###### ·· Block 3.1.3 — ↪️ ELSE `(else)` (L26544)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0351A010CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |
| 2 | 📋 SET | `dataMap.put("EKK0351A010CBSMsg1List", dataList);` |
| 3 | ⚡ EXEC | `param = editErrorInfo_EKK0351A010CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L26556)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L26564)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0341B002CBSMsg.STATUS)));` |

> **合計**: 9 blocks (3 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_EKK0351A010CBS()` (L26583) — 13 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L26589 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L26593 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L26600 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L26605 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L26609 |
| 6 | 🔀 IF | D0 | (inMap == null) | オプションサービス契約一意照会.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却 | - | - | L26622 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)) | オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却 | - | - | L26629 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("op_svc_kei_no_err")) | オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却 | - | - | L26631 |
| 9 | 🔀 IF | D0 | (!template.isNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR)) | オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却 | - | - | L26637 |
| 10 | · 🔀 IF | D1 | (!inMap.containsKey("gene_add_dtm_err")) | オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却 | - | - | L26639 |
| 11 | 🔀 IF | D0 | (!template.isNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR)) | - | - | - | L26645 |
| 12 | · 🔀 IF | D1 | (!inMap.containsKey("rsv_aply_ymd_err")) | - | - | - | L26647 |
| 13 | ↩️ RETURN | D0 | param | - | - | - | L26652 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0351A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L26589"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L26593"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L26600"| B2
  B3["ELSE"]
  CF0 -->|"L26605"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L26609"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L26622"| B5
  subgraph SG6["IF: （!template.isNull（EKK0351A010CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'op_svc_kei_no_…"]
  end
  CF0 -->|"L26629"| SG6
  subgraph SG7["IF: （!template.isNull（EKK0351A010CBSMsg.KEY_…"]
    direction TB
    C7_0["IF: （!inMap.containsKey（'gene_add_dtm_e…"]
  end
  CF0 -->|"L26637"| SG7
  subgraph SG8["IF: （!template.isNull（EKK0351A010CBSMsg.KEY_…"]
    direction TB
    C8_0["IF: （!inMap.containsKey（'rsv_aply_ymd_e…"]
  end
  CF0 -->|"L26645"| SG8
  B9["RETURN: param"]
  CF0 -->|"L26652"| B9
```

### `editErrorInfoEKK0361A010CBS()` (L28629) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L28634 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L28638 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L28645 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L28650 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L28654 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L28663 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEKK0361A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L28634"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L28638"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L28645"| B2
  B3["ELSE"]
  CF0 -->|"L28650"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L28654"| B4
  B5["RETURN: param"]
  CF0 -->|"L28663"| B5
```

### `editErrorInfoEKK0401A010CBS()` (L27561) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L27566 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L27570 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L27577 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27582 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27586 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L27595 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEKK0401A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L27566"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L27570"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L27577"| B2
  B3["ELSE"]
  CF0 -->|"L27582"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L27586"| B4
  B5["RETURN: param"]
  CF0 -->|"L27595"| B5
```

### `editErrorInfoEKK0411A010CBS()` (L27747) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L27752 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L27756 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L27763 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27768 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27772 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L27781 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEKK0411A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L27752"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L27756"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L27763"| B2
  B3["ELSE"]
  CF0 -->|"L27768"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L27772"| B4
  B5["RETURN: param"]
  CF0 -->|"L27781"| B5
```

### `editErrorInfoEKK1081C011CBS()` (L27000) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L27005 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L27009 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L27016 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27021 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27025 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L27034 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEKK1081C011CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L27005"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L27009"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L27016"| B2
  B3["ELSE"]
  CF0 -->|"L27021"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L27025"| B4
  B5["RETURN: param"]
  CF0 -->|"L27034"| B5
```

### `editErrorInfoEZM0411A010CBS()` (L30636) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L30641 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L30645 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L30652 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L30657 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L30661 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L30670 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfoEZM0411A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L30641"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L30645"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L30652"| B2
  B3["ELSE"]
  CF0 -->|"L30657"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L30661"| B4
  B5["RETURN: param"]
  CF0 -->|"L30670"| B5
```

### `editResultRP_EKK0351A010CBS()` (L26495) — 11 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | - | - | - | L26513 |
| 2 | 🔀 IF | D0 | (dataList == null) | - | - | - | L26521 |
| 3 | 🔀 IF | D0 | (templateArray != null) | - | - | `editErrorInfo_EKK0351A010CBS()` | L26526 |
| 4 | · 🔁 FOR | D1 | (for-loop) | - | - | `editErrorInfo_EKK0351A010CBS()` | L26528 |
| 5 | ·· 🔀 IF | D2 | (i >= dataList.size()) | オプションサービス契約一意照会明細.世代登録年月日時分秒 | - | - | L26531 |
| 6 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0351A010CBSMsg1List.GENE_ADD_DTM)) | - | GENE_ADD_DTM=gene_add_dtm | - | L26539 |
| 7 | ·· 🔀 ELSE | D2 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK0351A010CBS()` | L26544 |
| 8 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L26556 |
| 9 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L26564 |
| 10 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0341B002CBSMsg.STATUS))) | - | - | - | L26566 |
| 11 | ↩️ RETURN | D0 | param | - | - | - | L26569 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0351A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L26513"| B0
  B1["IF: （dataList == null）"]
  CF0 -->|"L26521"| B1
  subgraph SG2["IF: （templateArray != null）"]
    direction TB
    C2_0["FOR: …"]
  end
  CF0 -->|"L26526"| SG2
  B3["IF: （errList == null）"]
  CF0 -->|"L26556"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L26564"| SG4
  B5["RETURN: param"]
  CF0 -->|"L26569"| B5
```

### `editResultRP_EKK0351B010SC()` (L28900) — 9 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | ステータスの検査 | - | - | L28910 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L28913 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L28919 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L28921 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L28925 |
| 6 | 🔀 IF | D0 | (errList == null) | エラー情報のマップを取得 | - | - | L28935 |
| 7 | 🔀 IF | D0 | (0 != returnCode ｜｜ 0 != templateStatus) | 必要なら例外発生 | - | - | L28942 |
| 8 | · ⚠️ THROW | D1 | new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus)) | CAANMsg[] childTemplates = template.getCAANMsgList(EKK0351B010CBSMsg.EKK0351B010CBSMSG1LIST); | - | - | L28944 |
| 9 | ↩️ RETURN | D0 | param | return retList; | - | - | L28959 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0351B010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L28910"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L28913"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L28919"| B2
  B3["ELSE"]
  CF0 -->|"L28921"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L28925"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L28935"| B5
  subgraph SG6["IF: （0 != returnCode || 0 != templateStatus）"]
    direction TB
    C6_0["THROW: new SCCallException（'サービスインターフ…"]
  end
  CF0 -->|"L28942"| SG6
  B7["RETURN: param"]
  CF0 -->|"L28959"| B7
```

### `editResultRP_EKK1041B001SC()` (L31041) — 11 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | ステータスの検査 | - | - | L31051 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L31054 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L31060 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L31062 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L31066 |
| 6 | 🔀 IF | D0 | (errList == null) | エラー情報のマップを取得 | - | - | L31076 |
| 7 | 🔀 IF | D0 | (0 != returnCode ｜｜ 0 != templateStatus) | 必要なら例外発生 | - | - | L31083 |
| 8 | · ⚠️ THROW | D1 | new SCCallException("サービスインターフェイス呼出しでエラー発生", returnCode.toString(), Integer.valueOf(templateStatus)) | 照会結果を格納 | - | - | L31085 |
| 9 | 🔁 FOR | D0 | (for-loop) | - | - | - | L31094 |
| 10 | · 🔁 FOR | D1 | (for-loop) | - | - | - | L31097 |
| 11 | ↩️ RETURN | D0 | retList | - | - | - | L31104 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK1041B001SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L31051"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L31054"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L31060"| B2
  B3["ELSE"]
  CF0 -->|"L31062"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L31066"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L31076"| B5
  subgraph SG6["IF: （0 != returnCode || 0 != templateStatus）"]
    direction TB
    C6_0["THROW: new SCCallException（'サービスインターフ…"]
  end
  CF0 -->|"L31083"| SG6
  subgraph SG7["FOR: …"]
    direction TB
    C7_0["FOR: …"]
  end
  CF0 -->|"L31094"| SG7
  B8["RETURN: retList"]
  CF0 -->|"L31104"| B8
```

> **制御フロー合計**: 9 methods, 74 branches
