# ⑥ 業務ロジック — 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-editResultRP_EKK1081C011CBS"></a>
### editResultRP_EKK1081C011CBS()

---

#### 1. 役割

`EKK1081C011CBS` からの結果レスポンスを業務データ（パラメータ）にマッピングする処理。具体的には、SC（サービスコンポーネント）から返却された同一処理番号（`same_trn_no`）などの各種業務値をハッシュマップに格納し、エラー情報は `editErrorInfo_EKK1081C011CBS` を通じてパラメータへ設定する。エラー発生時はコントロールマップのエラー情報リストを確認し、エラーが存在すれば例外をスローする。  
本メソッドはエラー管理系の共通処理としても機能し、取得したデータの設定・エラー情報のセット・例外スローまで一連の流れを担う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK1081C011CBS（msgList, param）"] --> S1["Step1: CAANMsg[] templates = msgList.get（TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg parentTemplate = templates[0]"]
  S2 --> S3["Step3: Object return_code = msgList.get（RET_CD_INT_KEY）"]
  S3 --> S4["Step4: HashMap dataMap = param.getData（HAKKOSODCCWORKMAP）"]
  S4 --> IF1{"dataMap == null"}
  IF1 -->|"Yes"| S5["Step5: dataMap = new HashMap（）; param.setData（HAKKOSODCCWORKMAP, dataMap）"]
  IF1 -->|"No"| S6["Step6: 既存 dataMap を利用"]
  S5 --> S7
  S6 --> S7
  S7["Step7: parentTemplate.isNull（SAME_TRN_NO）判定"] --> IF2{"parentTemplate.isNull（SAME_TRN_NO）"}
  IF2 -->|"Yes"| S8["Step8: dataMap.put（'same_trn_no', ''）"]
  IF2 -->|"No"| S9["Step9: dataMap.put（'same_trn_no', parentTemplate.getString（SAME_TRN_NO））"]
  S8 --> S10
  S9 --> S10
  S10["Step10: param = editErrorInfo_EKK1081C011CBS（param, templates, （Integer）return_code）"]
  S10 --> S11["Step11: errList = param.getControlMapData（ERROR_INFO）"]
  S11 --> IF3{"errList == null"}
  IF3 -->|"Yes"| S12["Step12: errList = new ArrayList（）"]
  IF3 -->|"No"| S13["Step13: 既存 errList を利用"]
  S12 --> S14
  S13 --> S14
  S14["Step14: param.setControlMapData（ERROR_INFO, TemplateErrorUtil.getErrorInfo（msgList, errList））"]
  S14 --> IF4{"errList != null && !errList.isEmpty（）"}
  IF4 -->|"Yes"| S15["Step15: throw CCException （return_code, templates[0].getInt（STATUS））"]
  IF4 -->|"No"| RET["return param"]

  S1 -.- NOTE1["TEMPLATE_LIST_KEY = 'templateList'"]
  S3 -.- NOTE2["RET_CD_INT_KEY = 'returnCode'"]
  S4 -.- NOTE3["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S7 -.- NOTE4["SAME_TRN_NO = 'same_trn_no'"]
  S11 -.- NOTE5["ERROR_INFO = 'ERROR_INFO'"]
  S14 -.- NOTE6["TemplateErrorUtil: エラー情報整形ユーティリティ"]
  S15 -.- NOTE7["CCException: 共通業務例外 / SCCallException: サービスコンポーネント呼出例外"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. SCから戻り値としてCAANMsg配列（テンプレートリスト）を取得する。
2. 配列の1件目を親テンプレート（parentTemplate）として取得。
3. リターンコード（return_code）をメッセージリストから取得。
4. 業務データ用のデータマップ（HAKKOSODCCWORKMAP）をparamから取得し、なければ新規生成しセット。
5. 親テンプレートのSAME_TRN_NO（同一処理番号）がnullか判定し、nullなら空文字、非nullなら値をdataMapに格納。
6. エラー情報の設定として、editErrorInfo_EKK1081C011CBSを呼び出し、paramにエラー処理結果を反映。
7. コントロールマップからエラーリスト（ERROR_INFO）を取得し、なければ新規生成して設定。
8. エラーリストをTemplateErrorUtilで整形しコントロールマップに再セット。
9. エラーリストにエラーがあれば、CCException（共通業務例外）をスローし処理を中断。
10. エラーがなければ、paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                        |
| --- | ------------ | -------------------------- | ----------------------------------------------- |
| 1   | msgList      | Map<?, ?>                  | SC戻り値マップ（テンプレート・リターンコード等） |
| 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_EKK1081C011CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK1081C011CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSameTrnNo` | private | 同一処理番号採番処理<br> <br> 同一処理番号採番サービスインターフェイスにより<br> 同一処理番号を採番します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK1081C011CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L25957)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(parentTemplate.isNull(EKK1081C011CBSMsg.SAME_TRN_NO))` [SAME_TRN_NO="same_trn_no"] (L25964)

> 📌 同一処理番号取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `dataMap.put("same_trn_no", "");` |

##### Block 3 — ↪️ ELSE `(else)` (L25969)

> 📌 エラー情報の設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `dataMap.put("same_trn_no", parentTemplate.getString(EKK1081C011CBSMsg.SAME_TRN_NO));` [➔ SAME_TRN_NO="same_trn_no"] \| |
| 2 | ⚡ EXEC | `param = editErrorInfo_EKK1081C011CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L25978)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L25986)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK1081C011CBSMsg.STATUS)));` |

> **合計**: 5 blocks (1 depth levels)

### editResultRP_EKK0161B004CBS()

---

#### 1. 役割

SC（サービスコンポーネント）から返却された `EKK0161B004CBS` のレスポンスデータ（CAANMsg配列）を、業務データ（param）内のデータマップへ展開・格納する処理。サービス契約内訳一覧の各明細（サービス契約内訳番号、世代登録年月日時分秒、ステータス、サービス契約番号、申込明細番号、料金コースコード、料金プランコード等）をリスト形式で格納し、エラー情報は `editErrorInfo_EKK0161B004CBS` を通じてparamへ設定する。エラーがあればコントロールマップでエラーリストをチェックし、存在すれば例外をスローする。  
本メソッドは `EKK0161B004CBSMsg1List` のリストデータ整形・格納およびエラー管理の共通処理として呼ばれる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0161B004CBS（msgList, param）"] --> S1["Step1: CAANMsg[] templates = msgList.get（TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg parentTemplate = templates[0]"]
  S2 --> S3["Step3: CAANMsg[] templateArray = parentTemplate.getMsgData（）.get（EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST）"]
  S3 --> S4["Step4: ArrayList dataList = dataMap.get（'EKK0161B004CBSMsg1List'）"]
  S4 --> IF1{"dataMap == null"}
  IF1 -->|"Yes"| S5["Step5: dataMap = new HashMap（）; param.setData（HAKKOSODCCWORKMAP, dataMap）"]
  IF1 -->|"No"| S6
  S5 --> S7
  S6 --> S7
  S7["Step6: dataList == null の場合 new ArrayList（） を生成"]
  S7 --> IF2{"templateArray != null"}
  IF2 -->|"Yes"| S8["Step7: for （int i = 0; i < templateArray.length; i++） 各明細処理"]
  IF2 -->|"No"| S13
  S8 --> S9["Step8: childTemplate = templateArray[i]; dataListに空HashMap追加"]
  S9 --> S10["Step9: 各フィールドをchildMapに格納（null時は空文字）"]
  S10 --> S11["Step10: サービス契約内訳番号・世代登録日時・ステータス・契約番号・申込明細番号・料金コースコード・料金プランコード"]
  S11 --> S12["Step11: dataMap.put（'EKK0161B004CBSMsg1List', dataList）"]
  S12 --> S13
  S13["Step12: param = editErrorInfo_EKK0161B004CBS（param, templates, return_code）"]
  S13 --> S14["Step13: errList = param.getControlMapData（ERROR_INFO）"]
  S14 --> IF3{"errList == null"}
  IF3 -->|"Yes"| S15["Step14: errList = new ArrayList（）"]
  IF3 -->|"No"| S16
  S15 --> S17
  S16 --> S17
  S17["Step15: param.setControlMapData（ERROR_INFO, TemplateErrorUtil.getErrorInfo（msgList, errList））"]
  S17 --> IF4{"errList != null && !errList.isEmpty（）"}
  IF4 -->|"Yes"| S18["Step16: throw CCException （return_code, templates[0].getInt（STATUS））"]
  IF4 -->|"No"| RET["return param"]

  S1 -.- NOTE1["TEMPLATE_LIST_KEY = 'templateList'"]
  S3 -.- NOTE2["EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST = 'EKK0161B004CBSMsg1List'"]
  S4 -.- NOTE3["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S14 -.- NOTE4["ERROR_INFO = 'ERROR_INFO'"]
  S17 -.- NOTE5["TemplateErrorUtil: エラー情報整形ユーティリティ"]
  S18 -.- NOTE6["CCException: 共通業務例外 / SCCallException: サービスコンポーネント呼出例外"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. SCから返却されたCAANMsg配列（テンプレートリスト）を取得。
2. 親テンプレートを抽出し、サービス契約内訳一覧照会明細の配列を取得。
3. 業務データ用のデータマップ（HAKKOSODCCWORKMAP）・データリストを取得し、なければ新規生成・セット。
4. 明細配列が存在する場合、forループで各明細（childTemplate）を処理し、必要なだけ空のHashMapをdataListに追加。
5. 各明細のフィールド（サービス契約内訳番号、世代登録日時、ステータス、契約番号、申込明細番号、料金コースコード、料金プランコード）をchildMapにセット。値がnullの場合は空文字を格納。
6. dataMapにリストを再セット。
7. エラー情報の設定としてeditErrorInfo_EKK0161B004CBSを呼び出し、paramに反映。
8. コントロールマップからエラーリスト（ERROR_INFO）を取得し、なければ新規生成して設定。
9. エラーリストをTemplateErrorUtilで整形しコントロールマップに反映。
10. エラーがあれば共通例外をスローし、なければparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                         |
| --- | ------------ | -------------------------- | ------------------------------------------------ |
| 1   | msgList      | Map<?, ?>                  | SC戻り値マップ（テンプレート・リターンコード等）  |
| 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_EKK0161B004CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0161B004CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSvcKeiUtwkList` | private | サービス契約内訳一覧照会<br> <br> サービス契約内訳一覧照会サービスインターフェイスにより<br> サービス契約番号に紐づくサービス契約内訳の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0161B004CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L24992)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(dataList == null)` (L25000)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList = new ArrayList();` |

##### Block 3 — 🔀 IF `(templateArray != null)` (L25005)

| # | 種別 | 処理内容 |
|---|---|---|
| 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(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO));` [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |
| 6 | 📋 SET | `childMap.put("gene_add_dtm", "");` |
| 7 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0161B004CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |
| 8 | 📋 SET | `childMap.put("svc_kei_ucwk_stat", "");` |
| 9 | 📋 SET | `childMap.put("svc_kei_ucwk_stat", childTemplate.getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT));` [➔ SVC_KEI_UCWK_STAT="svc_kei_ucwk_stat"] \| |

###### · Block 3.1 — 🔁 FOR `(for)` (L25007)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 3.1.1 — 🔀 IF `(i >= dataList.size())` (L25010)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.add(new HashMap());` |

###### ·· Block 3.1.2 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO))` [SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] (L25017)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約内訳番号 ← サービス契約内訳一覧照会明細.サービス契約内訳番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_no", "");` |

###### ·· Block 3.1.3 — ↪️ ELSE `(else)` (L25022)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.世代登録年月日時分秒 ← サービス契約内訳一覧照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_no", childTemplate.getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO));` [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |

###### ·· Block 3.1.4 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.GENE_ADD_DTM))` [GENE_ADD_DTM="gene_add_dtm"] (L25027)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.世代登録年月日時分秒 ← サービス契約内訳一覧照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", "");` |

###### ·· Block 3.1.5 — ↪️ ELSE `(else)` (L25032)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約内訳ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0161B004CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |

###### ·· Block 3.1.6 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT))` [SVC_KEI_UCWK_STAT="svc_kei_ucwk_stat"] (L25038)

> 📌 ← サービス契約内訳一覧照会明細.サービス契約内訳ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_stat", "");` |

###### ·· Block 3.1.7 — ↪️ ELSE `(else)` (L25043)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約番号 ← サービス契約内訳一覧照会明細.サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_stat", childTemplate.getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT));` [➔ SVC_KEI_UCWK_STAT="svc_kei_ucwk_stat"] \| |

###### ·· Block 3.1.8 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.SVC_KEI_NO))` [SVC_KEI_NO="svc_kei_no"] (L25048)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約番号 ← サービス契約内訳一覧照会明細.サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_no", "");` |

###### ·· Block 3.1.9 — ↪️ ELSE `(else)` (L25053)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.申込明細番号 ← サービス契約内訳一覧照会明細.申込明細番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_no", childTemplate.getString(EKK0161B004CBSMsg1List.SVC_KEI_NO));` [➔ SVC_KEI_NO="svc_kei_no"] \| |

###### ·· Block 3.1.10 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.MSKM_DTL_NO))` [MSKM_DTL_NO="mskm_dtl_no"] (L25058)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.申込明細番号 ← サービス契約内訳一覧照会明細.申込明細番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("mskm_dtl_no", "");` |

###### ·· Block 3.1.11 — ↪️ ELSE `(else)` (L25063)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.料金コースコード ← サービス契約内訳一覧照会明細.料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("mskm_dtl_no", childTemplate.getString(EKK0161B004CBSMsg1List.MSKM_DTL_NO));` [➔ MSKM_DTL_NO="mskm_dtl_no"] \| |

###### ·· Block 3.1.12 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.PCRS_CD))` [PCRS_CD="pcrs_cd"] (L25068)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.料金コースコード ← サービス契約内訳一覧照会明細.料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_cd", "");` |

###### ·· Block 3.1.13 — ↪️ ELSE `(else)` (L25073)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.料金プランコード ← サービス契約内訳一覧照会明細.料金プランコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_cd", childTemplate.getString(EKK0161B004CBSMsg1List.PCRS_CD));` [➔ PCRS_CD="pcrs_cd"] \| |

###### ·· Block 3.1.14 — 🔀 IF `(childTemplate.isNull(EKK0161B004CBSMsg1List.PPLAN_CD))` (L25078)

> 📌 サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.料金プランコード ← サービス契約内訳一覧照会明細.料金プランコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_cd", "");` |

###### ·· Block 3.1.15 — ↪️ ELSE `(else)` (L25083)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_cd", childTemplate.getString(EKK0161B004CBSMsg1List.PPLAN_CD));` [➔ PPLAN_CD="pplan_cd"] \| |
| 2 | 📋 SET | `dataMap.put("EKK0161B004CBSMsg1List", dataList);` |
| 3 | ⚡ EXEC | `param = editErrorInfo_EKK0161B004CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L25095)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L25103)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0161B004CBSMsg.STATUS)));` |

> **合計**: 21 blocks (3 depth levels)

### editErrorInfo_EKK0161B004CBS()

---

#### 1. 役割

`EKK0161B004CBS` のエラー情報を業務データ（param）に設定する処理。具体的には、CAANMsgからエラーコードやステータスを判定し、コントロールマップへエラーコード・エラーメッセージをセット。サービス契約内訳一覧照会におけるエラー情報（サービス契約番号、料金コースコード、サービス期間中フラグ等のエラー項目）を業務データマップに格納する。エラー発生時はテンプレートステータスを最優先としてエラー情報を上書きし、エラーが存在する場合は例外をスローせずparamを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK0161B004CBS（param, templates, returnCode）"] --> S1["Step1: CAANMsg template = templates[0]"]
  S1 --> S2["Step2: int templateStatus = template.getInt（STATUS）"]
  S2 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S3["Step3: templateStatus = 9000"]
  IF1 -->|"No"| S4
  S3 --> S4
  S4["Step4: RETURN_MESSAGE_xxxx 存在チェック"]
  S4 --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + format（templateStatus）） == null"}
  IF2 -->|"Yes"| S5["Step5: templateStatus = 0"]
  IF2 -->|"No"| S6
  S5 --> S6
  S6["Step6: bpStatus = param.getControlMapData（RETURN_CODE）"]
  S6 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S7["Step7: param.setControlMapData（RETURN_CODE, formatStatus） / RETURN_MESSAGE"]
  IF3 -->|"No"| S8
  S7 --> S9
  S8 --> S9
  S9["Step8: inMap = param.getData（HAKKOSODCCWORKMAP）"]
  S9 --> IF4{"inMap == null"}
  IF4 -->|"Yes"| S10["Step9: inMap = new HashMap（）; param.setData（HAKKOSODCCWORKMAP, inMap）"]
  IF4 -->|"No"| S11
  S10 --> S11
  S11["Step10: サービス契約番号エラー → inMap['svc_kei_no_err']"]
  S11 --> S12["Step11: 料金コースコードエラー → inMap['pcrs_cd_err']"]
  S12 --> S13["Step12: サービス期間中フラグエラー → inMap['svc_prd_flg_err']"]
  S13 --> RET["return param"]

  S1 -.- NOTE1["STATUS = 'status'"]
  S6 -.- NOTE2["RETURN_CODE = 'returnCode'"]
  S9 -.- NOTE3["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. テンプレート（templates[0]）からステータスを取得。
2. returnCodeが0でなければtemplateStatusを9000にセット。
3. JCMAPLConstMgrでテンプレートステータスに対応するエラーメッセージが存在しない場合、templateStatusを0に。
4. bpStatus（コントロールマップのRETURN_CODE）と比較し、templateStatusの方が大きければRETURN_CODE・RETURN_MESSAGEをparamにセット。
5. 業務データマップ（HAKKOSODCCWORKMAP）がなければ新規生成しセット。
6. サービス契約番号エラー（KEY_SVC_KEI_NO_ERR）、料金コースコードエラー（KEY_PCRS_CD_ERR）、サービス期間中フラグエラー（KEY_SVC_PRD_FLG_ERR）が存在する場合はinMapに格納。
7. 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_EKK0161B004CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0161B004CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0161B004CBS` | private | 下りマッピング（サービス契約内訳一覧照会） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0161B004CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L25128)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L25132)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L25139)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L25144)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L25148)

> 📌 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)` (L25161)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0161B004CBSMsg.KEY_SVC_KEI_NO_ERR))` [KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] (L25168)

> 📌 サービス契約内訳一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0161B004CBSMsg.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"))` (L25170)

> 📌 サービス契約内訳一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_kei_no_err", template.getString(EKK0161B004CBSMsg.KEY_SVC_KEI_NO_ERR));` [➔ KEY_SVC_KEI_NO_ERR="key_svc_kei_no_err"] \| |

##### Block 8 — 🔀 IF `(!template.isNull(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR))` [KEY_PCRS_CD_ERR="key_pcrs_cd_err"] (L25177)

> 📌 サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("pcrs_cd_err", template.getString(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR));` [➔ KEY_PCRS_CD_ERR="key_pcrs_cd_err"] \| |

###### · Block 8.1 — 🔀 IF `(!inMap.containsKey("pcrs_cd_err"))` (L25179)

> 📌 サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("pcrs_cd_err", template.getString(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR));` [➔ KEY_PCRS_CD_ERR="key_pcrs_cd_err"] \| |

##### Block 9 — 🔀 IF `(!template.isNull(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR))` [KEY_SVC_PRD_FLG_ERR="key_svc_prd_flg_err"] (L25186)

> 📌 サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_prd_flg_err", template.getString(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR));` [➔ KEY_SVC_PRD_FLG_ERR="key_svc_prd_flg_err"] \| |

###### · Block 9.1 — 🔀 IF `(!inMap.containsKey("svc_prd_flg_err"))` (L25188)

> 📌 サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("svc_prd_flg_err", template.getString(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR));` [➔ KEY_SVC_PRD_FLG_ERR="key_svc_prd_flg_err"] \| |

> **合計**: 12 blocks (2 depth levels)

### editInMsg_EKK0161B004CBS()

---

#### 1. 役割

`EKK0161B004CBS`（サービス契約内訳一覧照会）のSCインプットデータを構築する処理。主にリクエストパラメータ（param）から電文ID、ユースケースID、オペレーションID、呼び出し区分、依頼先ホスト名、IPアドレス、画面ID、オペレータIDなどの共通部をテンプレートにセットし、さらにユーザデータ領域（HAKKOSODCCWORKMAP）からサービス契約番号・料金コースコード・サービス期間中フラグ等をKey項目としてテンプレートにマッピングする。未設定項目はsetNullで初期化する。  
本メソッドは `editResultRP_EKK0161B004CBS` などから呼ばれる共通のインプット生成処理である。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsg_EKK0161B004CBS（param）"] --> S1["Step1: paramMap = new HashMap"]
  S1 --> S2["Step2: 共通部（電文ID・ユースケースID・オペレーションID・呼び出し区分）をセット"]
  S2 --> S3["Step3: コントロールマップから依頼先ホスト名・IPアドレス・画面ID・オペレータIDをセット"]
  S3 --> S4["Step4: CAANMsg template = new CAANMsg（EKK0161B004CBSMsg.class.getName（））"]
  S4 --> S5["Step5: テンプレートID, 機能コード（一覧照会）セット"]
  S5 --> S6["Step6: editBasicCmn（param, template） で共通部設定"]
  S6 --> S7["Step7: ユーザデータ情報 inMap = param.getData（HAKKOSODCCWORKMAP）"]
  S7 --> IF1{"inMap == null or inMap.get（'svc_kei_no'） == null or ''"}
  IF1 -->|"Yes"| S8["Step8: template.setNull（KEY_SVC_KEI_NO）"]
  IF1 -->|"No"| S9["Step9: template.set（KEY_SVC_KEI_NO, inMap.get（'svc_kei_no'））"]
  S8 --> IF2
  S9 --> IF2
  IF2{"inMap == null or inMap.get（'pcrs_cd'） == null or ''"}
  IF2 -->|"Yes"| S10["Step10: template.setNull（KEY_PCRS_CD）"]
  IF2 -->|"No"| S11["Step11: template.set（KEY_PCRS_CD, inMap.get（'pcrs_cd'））"]
  S10 --> IF3
  S11 --> IF3
  IF3{"inMap == null or inMap.get（'svc_prd_flg'） == null or ''"}
  IF3 -->|"Yes"| S12["Step12: template.setNull（KEY_SVC_PRD_FLG）"]
  IF3 -->|"No"| S13["Step13: template.set（KEY_SVC_PRD_FLG, inMap.get（'svc_prd_flg'））"]
  S12 --> S14
  S13 --> S14
  S14["Step14: paramMap.put（TEMPLATE_LIST_KEY, templates）"]
  S14 --> RET["return paramMap"]

  S7 -.- NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S8 -.- NOTE2["KEY_SVC_KEI_NO = 'svc_kei_no'"]
  S10 -.- NOTE3["KEY_PCRS_CD = 'pcrs_cd'"]
  S12 -.- NOTE4["KEY_SVC_PRD_FLG = 'svc_prd_flg'"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. paramMap（HashMap）を初期化。
2. 電文ID・ユースケースID・オペレーションID・サービス呼び出し区分をセット。
3. コントロールマップから依頼先ホスト名・IPアドレス・画面ID・オペレータIDをセット。
4. CAANMsgのテンプレートを生成。
5. テンプレートID、機能コード（一覧照会）をセット。
6. 共通部（editBasicCmn）を設定。
7. ユーザデータ情報（HAKKOSODCCWORKMAP）を取得。
8. サービス契約番号（svc_kei_no）、料金コースコード（pcrs_cd）、サービス期間中フラグ（svc_prd_flg）をinMapから取得し、値がなければsetNull、あればsetでテンプレートにマッピング。
9. テンプレート配列をparamMapに格納し返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                        |
| --- | ------------ | -------------------------- | ----------------------------------------------- |
| 1   | param        | IRequestParameterReadOnly  | リクエスト（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 → editInMsg_EKK0161B004CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0161B004CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSvcKeiUtwkList` | private | サービス契約内訳一覧照会<br> <br> サービス契約内訳一覧照会サービスインターフェイスにより<br> サービス契約番号に紐づくサービス契約内訳の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editInMsg_EKK0161B004CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")))` (L24928)

> 📌 サービス契約内訳一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0161B004CBSMsg.KEY_SVC_KEI_NO);` [➔ KEY_SVC_KEI_NO="key_svc_kei_no"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L24933)

> 📌 サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0161B004CBSMsg.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("pcrs_cd") == null || "".equals(inMap.get("pcrs_cd")))` (L24938)

> 📌 サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0161B004CBSMsg.KEY_PCRS_CD);` [➔ KEY_PCRS_CD="key_pcrs_cd"] \| |

##### Block 4 — ↪️ ELSE `(else)` (L24943)

> 📌 サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0161B004CBSMsg.KEY_PCRS_CD, (String)inMap.get("pcrs_cd"));` [➔ KEY_PCRS_CD="key_pcrs_cd"] \| |

##### Block 5 — 🔀 IF `(inMap == null || inMap.get("svc_prd_flg") == null || "".equals(inMap.get("svc_prd_flg")))` (L24948)

> 📌 サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG);` [➔ KEY_SVC_PRD_FLG="key_svc_prd_flg"] \| |

##### Block 6 — ↪️ ELSE `(else)` (L24953)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG, (String)inMap.get("svc_prd_flg"));` [➔ KEY_SVC_PRD_FLG="key_svc_prd_flg"] \| |
| 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_EKK1081C011CBS()

---

#### 1. 役割

`EKK1081C011CBS` のエラー情報を業務データ（param）に設定する処理。CAANMsgからエラーコードやステータスを判定し、コントロールマップへエラーコード・エラーメッセージをセットする。SCでエラーが発生した場合はテンプレートステータスを9000にし、JCMAPLConstMgrでエラーメッセージを取得、RETURN_CODEとRETURN_MESSAGEに格納する。BP（ビジネスプロセス）へのエラー情報伝播機能を担う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK1081C011CBS（param, templates, returnCode）"] --> S1["Step1: CAANMsg template = templates[0]"]
  S1 --> S2["Step2: int templateStatus = template.getInt（STATUS）"]
  S2 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S3["Step3: templateStatus = 9000"]
  IF1 -->|"No"| S4
  S3 --> S4
  S4["Step4: RETURN_MESSAGE_xxxx 存在チェック"]
  S4 --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + format（templateStatus）） == null"}
  IF2 -->|"Yes"| S5["Step5: templateStatus = 0"]
  IF2 -->|"No"| S6
  S5 --> S6
  S6["Step6: bpStatus = param.getControlMapData（RETURN_CODE）"]
  S6 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S7["Step7: param.setControlMapData（RETURN_CODE, formatStatus） / RETURN_MESSAGE"]
  IF3 -->|"No"| RET["return param"]

  S1 -.- NOTE1["STATUS = 'status'"]
  S6 -.- NOTE2["RETURN_CODE = 'returnCode'"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. テンプレート（templates[0]）からステータスを取得。
2. returnCodeが0でなければtemplateStatusを9000にセット。
3. JCMAPLConstMgrでテンプレートステータスに対応するエラーメッセージが存在しなければtemplateStatusを0に。
4. bpStatus（コントロールマップのRETURN_CODE）と比較し、templateStatusの方が大きければRETURN_CODE・RETURN_MESSAGEをparamにセット。
5. 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_EKK1081C011CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK1081C011CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK1081C011CBS` | private | 下りマッピング（同一処理番号採番） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK1081C011CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L26010)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L26014)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L26021)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L26026)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L26030)

> 📌 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)

### editInMsg_EKK0351A010CBS()

---

#### 1. 役割

`EKK0351A010CBS`（オプションサービス契約一意照会）のSCインプットデータを構築する処理。リクエストパラメータ（param）から電文ID、ユースケースID、オペレーションID、呼び出し区分、依頼先ホスト名、IPアドレス、画面ID、オペレータIDなどの共通部をテンプレートにセットし、ユーザデータエリア（HAKKOSODCCWORKMAP）からオプションサービス契約番号、世代登録年月日時分秒、予約適用年月日等をKey項目としてテンプレートにマッピングする。未設定項目はsetNullで初期化する。  
本メソッドは、SC入力メッセージ編集の共通処理として、他メソッドから呼び出される。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsg_EKK0351A010CBS（param）"] --> S1["Step1: paramMap = new HashMap"]
  S1 --> S2["Step2: 共通部（電文ID・ユースケースID・オペレーションID・呼び出し区分）をセット"]
  S2 --> S3["Step3: コントロールマップから依頼先ホスト名・IPアドレス・画面ID・オペレータIDをセット"]
  S3 --> S4["Step4: CAANMsg template = new CAANMsg（EKK0351A010CBSMsg.class.getName（））"]
  S4 --> S5["Step5: テンプレートID, 機能コード（カレント）セット"]
  S5 --> S6["Step6: editBasicCmn（param, template） で共通部設定"]
  S6 --> S7["Step7: ユーザデータ情報 inMap = param.getData（HAKKOSODCCWORKMAP）"]
  S7 --> IF1{"inMap == null or inMap.get（'op_svc_kei_no'） == null or ''"}
  IF1 -->|"Yes"| S8["Step8: template.setNull（KEY_OP_SVC_KEI_NO）"]
  IF1 -->|"No"| S9["Step9: template.set（KEY_OP_SVC_KEI_NO, inMap.get（'op_svc_kei_no'））"]
  S8 --> IF2
  S9 --> IF2
  IF2{"inMap == null or inMap.get（'gene_add_dtm'） == null or ''"}
  IF2 -->|"Yes"| S10["Step10: template.setNull（KEY_GENE_ADD_DTM）"]
  IF2 -->|"No"| S11["Step11: template.set（KEY_GENE_ADD_DTM, inMap.get（'gene_add_dtm'））"]
  S10 --> IF3
  S11 --> IF3
  IF3{"inMap == null or inMap.get（'rsv_aply_ymd'） == null or ''"}
  IF3 -->|"Yes"| S12["Step12: template.setNull（KEY_RSV_APLY_YMD）"]
  IF3 -->|"No"| S13["Step13: template.set（KEY_RSV_APLY_YMD, inMap.get（'rsv_aply_ymd'））"]
  S12 --> S14
  S13 --> S14
  S14["Step14: paramMap.put（TEMPLATE_LIST_KEY, templates）"]
  S14 --> RET["return paramMap"]

  S7 -.- NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S8 -.- NOTE2["KEY_OP_SVC_KEI_NO = 'op_svc_kei_no'"]
  S10 -.- NOTE3["KEY_GENE_ADD_DTM = 'gene_add_dtm'"]
  S12 -.- NOTE4["KEY_RSV_APLY_YMD = 'rsv_aply_ymd'"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. paramMap（HashMap）を初期化。
2. 電文ID・ユースケースID・オペレーションID・サービス呼び出し区分をセット。
3. コントロールマップから依頼先ホスト名・IPアドレス・画面ID・オペレータIDをセット。
4. CAANMsgのテンプレートを生成。
5. テンプレートID、機能コード（カレント）をセット。
6. 共通部（editBasicCmn）を設定。
7. ユーザデータ情報（HAKKOSODCCWORKMAP）を取得。
8. オプションサービス契約番号（op_svc_kei_no）、世代登録年月日時分秒（gene_add_dtm）、予約適用年月日（rsv_aply_ymd）をinMapから取得し、値がなければsetNull、あればsetでテンプレートにマッピング。
9. テンプレート配列をparamMapに格納し返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                        |
| --- | ------------ | -------------------------- | ----------------------------------------------- |
| 1   | param        | IRequestParameterReadOnly  | リクエスト（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 → editInMsg_EKK0351A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0351A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getOpSvcKeiGaDtm` | private | オプションサービス契約一意照会処理<br> <br> オプションサービス契約一意照会サービスインターフェイスにより<br> オプションサービス契約情報（世代登録年月日時分秒）を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editInMsg_EKK0351A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inMap == null || inMap.get("op_svc_kei_no") == null || "".equals(inMap.get("op_svc_kei_no")))` (L26449)

> 📌 オプションサービス契約一意照会.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO);` [➔ KEY_OP_SVC_KEI_NO="key_op_svc_kei_no"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L26454)

> 📌 オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, (String)inMap.get("op_svc_kei_no"));` [➔ KEY_OP_SVC_KEI_NO="key_op_svc_kei_no"] \| |

##### Block 3 — 🔀 IF `(inMap == null || inMap.get("gene_add_dtm") == null || "".equals(inMap.get("gene_add_dtm")))` (L26459)

> 📌 オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM);` [➔ KEY_GENE_ADD_DTM="key_gene_add_dtm"] \| |

##### Block 4 — ↪️ ELSE `(else)` (L26464)

> 📌 オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0351A010CBSMsg.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")))` (L26469)

> 📌 オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD);` [➔ KEY_RSV_APLY_YMD="key_rsv_aply_ymd"] \| |

##### Block 6 — ↪️ ELSE `(else)` (L26474)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0351A010CBSMsg.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)

### editResultRP_EKK0401B001CBS()

---

#### 1. 役割

SC（サービスコンポーネント）から返却された `EKK0401B001CBS` のレスポンスデータ（CAANMsg配列）を、業務データ（param）内のデータマップへ展開・格納する処理。サブオプションサービス契約一覧の各明細（オプションサービス契約番号、サブオプションサービス契約番号、世代登録年月日時分秒、サブオプションサービス契約ステータス、サブオプションサービスコード、料金コースコード、料金プランコード等）をリスト形式で格納し、エラー情報は `editErrorInfo_EKK0401B001CBS` を通じてparamへ設定する。エラーがあればコントロールマップでエラーリストをチェックし、存在すれば例外をスローする。  
本メソッドは `EKK0401B001CBSMsg1List` のリストデータ整形・格納およびエラー管理の共通処理として呼ばれる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0401B001CBS（msgList, param）"] --> S1["Step1: CAANMsg[] templates = msgList.get（TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg parentTemplate = templates[0]"]
  S2 --> S3["Step3: CAANMsg[] templateArray = parentTemplate.getMsgData（）.get（EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST）"]
  S3 --> S4["Step4: ArrayList dataList = dataMap.get（'EKK0401B001CBSMsg1List'）"]
  S4 --> IF1{"dataMap == null"}
  IF1 -->|"Yes"| S5["Step5: dataMap = new HashMap（）; param.setData（HAKKOSODCCWORKMAP, dataMap）"]
  IF1 -->|"No"| S6
  S5 --> S7
  S6 --> S7
  S7["Step6: dataList == null の場合 new ArrayList（） を生成"]
  S7 --> IF2{"templateArray != null"}
  IF2 -->|"Yes"| S8["Step7: for （int i = 0; i < templateArray.length; i++） 各明細処理"]
  IF2 -->|"No"| S15
  S8 --> S9["Step8: childTemplate = templateArray[i]; dataListに空HashMap追加"]
  S9 --> S10["Step9: 各フィールドをchildMapに格納（null時は空文字）"]
  S10 --> S11["Step10: オプションサービス契約番号・サブオプションサービス契約番号・世代登録日時・ステータス・コード・料金コースコード・料金プランコード"]
  S11 --> S12["Step11: dataMap.put（'EKK0401B001CBSMsg1List', dataList）"]
  S12 --> S15
  S15["Step12: param = editErrorInfo_EKK0401B001CBS（param, templates, return_code）"]
  S15 --> S16["Step13: errList = param.getControlMapData（ERROR_INFO）"]
  S16 --> IF3{"errList == null"}
  IF3 -->|"Yes"| S17["Step14: errList = new ArrayList（）"]
  IF3 -->|"No"| S18
  S17 --> S19
  S18 --> S19
  S19["Step15: param.setControlMapData（ERROR_INFO, TemplateErrorUtil.getErrorInfo（msgList, errList））"]
  S19 --> IF4{"errList != null && !errList.isEmpty（）"}
  IF4 -->|"Yes"| S20["Step16: throw CCException （return_code, templates[0].getInt（STATUS））"]
  IF4 -->|"No"| RET["return param"]

  S1 -.- NOTE1["TEMPLATE_LIST_KEY = 'templateList'"]
  S3 -.- NOTE2["EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST = 'EKK0401B001CBSMsg1List'"]
  S4 -.- NOTE3["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S16 -.- NOTE4["ERROR_INFO = 'ERROR_INFO'"]
  S19 -.- NOTE5["TemplateErrorUtil: エラー情報整形ユーティリティ"]
  S20 -.- NOTE6["CCException: 共通業務例外 / SCCallException: サービスコンポーネント呼出例外"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. SCから返却されたCAANMsg配列（テンプレートリスト）を取得。
2. 親テンプレートを抽出し、サブオプションサービス契約一覧照会明細の配列を取得。
3. 業務データ用のデータマップ（HAKKOSODCCWORKMAP）・データリストを取得し、なければ新規生成・セット。
4. 明細配列が存在する場合、forループで各明細（childTemplate）を処理し、必要なだけ空のHashMapをdataListに追加。
5. 各明細のフィールド（オプションサービス契約番号、サブオプションサービス契約番号、世代登録日時、ステータス、コード、料金コースコード、料金プランコード）をchildMapにセット。値がnullの場合は空文字を格納。
6. dataMapにリストを再セット。
7. エラー情報の設定としてeditErrorInfo_EKK0401B001CBSを呼び出し、paramに反映。
8. コントロールマップからエラーリスト（ERROR_INFO）を取得し、なければ新規生成して設定。
9. エラーリストをTemplateErrorUtilで整形しコントロールマップに反映。
10. エラーがあれば共通例外をスローし、なければparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                         |
| --- | ------------ | -------------------------- | ------------------------------------------------ |
| 1   | msgList      | Map<?, ?>                  | SC戻り値マップ（テンプレート・リターンコード等）  |
| 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_EKK0401B001CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0401B001CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSbOpSvcKeiList` | private | サブオプションサービス契約一覧照会<br> <br> サブオプションサービス契約一覧照会サービスインターフェイスにより<br> オプションサービス契約番号に紐づくサブオプションサービス契約の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0401B001CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L24677)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(dataList == null)` (L24685)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList = new ArrayList();` |

##### Block 3 — 🔀 IF `(templateArray != null)` (L24690)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `CAANMsg childTemplate = templateArray[i];` |
| 2 | ⚡ EXEC | `dataList.add(new HashMap());` |
| 3 | 📦 VAR | `HashMap childMap = (HashMap)dataList.get(i);` |
| 4 | 📋 SET | `childMap.put("op_svc_kei_no", "");` |
| 5 | 📋 SET | `childMap.put("op_svc_kei_no", childTemplate.getString(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));` [➔ OP_SVC_KEI_NO="op_svc_kei_no"] \| |
| 6 | 📋 SET | `childMap.put("sbop_svc_kei_no", "");` |
| 7 | 📋 SET | `childMap.put("sbop_svc_kei_no", childTemplate.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));` [➔ SBOP_SVC_KEI_NO="sbop_svc_kei_no"] \| |
| 8 | 📋 SET | `childMap.put("gene_add_dtm", "");` |

###### · Block 3.1 — 🔁 FOR `(for)` (L24692)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 3.1.1 — 🔀 IF `(i >= dataList.size())` (L24695)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.add(new HashMap());` |

###### ·· Block 3.1.2 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO))` [OP_SVC_KEI_NO="op_svc_kei_no"] (L24703)

> 📌 ← サブオプションサービス契約一覧照会明細.オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("op_svc_kei_no", "");` |

###### ·· Block 3.1.3 — ↪️ ELSE `(else)` (L24708)

> 📌 サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.サブオプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("op_svc_kei_no", childTemplate.getString(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));` [➔ OP_SVC_KEI_NO="op_svc_kei_no"] \| |

###### ·· Block 3.1.4 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO))` [SBOP_SVC_KEI_NO="sbop_svc_kei_no"] (L24714)

> 📌 ← サブオプションサービス契約一覧照会明細.サブオプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("sbop_svc_kei_no", "");` |

###### ·· Block 3.1.5 — ↪️ ELSE `(else)` (L24719)

> 📌 サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("sbop_svc_kei_no", childTemplate.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));` [➔ SBOP_SVC_KEI_NO="sbop_svc_kei_no"] \| |

###### ·· Block 3.1.6 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.GENE_ADD_DTM))` [GENE_ADD_DTM="gene_add_dtm"] (L24725)

> 📌 ← サブオプションサービス契約一覧照会明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", "");` |

###### ·· Block 3.1.7 — ↪️ ELSE `(else)` (L24730)

> 📌 サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.サブオプションサービス契約ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0401B001CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |

###### ·· Block 3.1.8 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT))` [SBOP_SVC_KEI_STAT="sbop_svc_kei_stat"] (L24736)

> 📌 ← サブオプションサービス契約一覧照会明細.サブオプションサービス契約ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("sbop_svc_kei_stat", "");` |

###### ·· Block 3.1.9 — ↪️ ELSE `(else)` (L24741)

> 📌 サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.サブオプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("sbop_svc_kei_stat", childTemplate.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT));` [➔ SBOP_SVC_KEI_STAT="sbop_svc_kei_stat"] \| |

###### ·· Block 3.1.10 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.SBOP_SVC_CD))` [SBOP_SVC_CD="sbop_svc_cd"] (L24747)

> 📌 ← サブオプションサービス契約一覧照会明細.サブオプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("sbop_svc_cd", "");` |

###### ·· Block 3.1.11 — ↪️ ELSE `(else)` (L24752)

> 📌 サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("sbop_svc_cd", childTemplate.getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD));` [➔ SBOP_SVC_CD="sbop_svc_cd"] \| |

###### ·· Block 3.1.12 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.PCRS_CD))` [PCRS_CD="pcrs_cd"] (L24758)

> 📌 ← サブオプションサービス契約一覧照会明細.料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_cd", "");` |

###### ·· Block 3.1.13 — ↪️ ELSE `(else)` (L24763)

> 📌 サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.料金プランコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_cd", childTemplate.getString(EKK0401B001CBSMsg1List.PCRS_CD));` [➔ PCRS_CD="pcrs_cd"] \| |

###### ·· Block 3.1.14 — 🔀 IF `(childTemplate.isNull(EKK0401B001CBSMsg1List.PPLAN_CD))` (L24769)

> 📌 ← サブオプションサービス契約一覧照会明細.料金プランコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_cd", "");` |

###### ·· Block 3.1.15 — ↪️ ELSE `(else)` (L24774)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_cd", childTemplate.getString(EKK0401B001CBSMsg1List.PPLAN_CD));` [➔ PPLAN_CD="pplan_cd"] \| |
| 2 | 📋 SET | `dataMap.put("EKK0401B001CBSMsg1List", dataList);` |
| 3 | ⚡ EXEC | `param = editErrorInfo_EKK0401B001CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L24786)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L24794)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0401B001CBSMsg.STATUS)));` |

> **合計**: 21 blocks (3 depth levels)

### editInMsg_EKK0341B002CBS()

---

#### 1. 役割

`EKK0341B002CBS`（機器提供サービス契約一覧照会（サービス契約番号））のSCインプットデータを構築する処理。主にリクエストパラメータ（param）から電文ID、ユースケースID、オペレーションID、呼び出し区分、依頼先ホスト名、IPアドレス、画面ID、オペレータIDなどの共通部をテンプレートにセットし、ユーザデータ領域（HAKKOSODCCWORKMAP）からサービス契約番号・機器提供サービスコード・機器提供サービス契約番号・ソート区分等をKey項目としてテンプレートにマッピングする。未設定項目はsetNullで初期化する。  
本メソッドは、SC入力メッセージ編集の共通処理として、他メソッドから呼び出される。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editInMsg_EKK0341B002CBS（param）"] --> S1["Step1: paramMap = new HashMap"]
  S1 --> S2["Step2: 共通部（電文ID・ユースケースID・オペレーションID・呼び出し区分）をセット"]
  S2 --> S3["Step3: コントロールマップから依頼先ホスト名・IPアドレス・画面ID・オペレータIDをセット"]
  S3 --> S4["Step4: CAANMsg template = new CAANMsg（EKK0341B002CBSMsg.class.getName（））"]
  S4 --> S5["Step5: テンプレートID, 機能コード（一覧照会）セット"]
  S5 --> S6["Step6: editBasicCmn（param, template） で共通部設定"]
  S6 --> S7["Step7: ユーザデータ情報 inMap = param.getData（HAKKOSODCCWORKMAP）"]
  S7 --> IF1{"inMap == null or inMap.get（'svc_kei_no'） == null or ''"}
  IF1 -->|"Yes"| S8["Step8: template.setNull（KEY_SVC_KEI_NO）"]
  IF1 -->|"No"| S9["Step9: template.set（KEY_SVC_KEI_NO, inMap.get（'svc_kei_no'））"]
  S8 --> IF2
  S9 --> IF2
  IF2{"inMap == null or inMap.get（'kktk_svc_cd'） == null or ''"}
  IF2 -->|"Yes"| S10["Step10: template.setNull（KEY_KKTK_SVC_CD）"]
  IF2 -->|"No"| S11["Step11: template.set（KEY_KKTK_SVC_CD, inMap.get（'kktk_svc_cd'））"]
  S10 --> IF3
  S11 --> IF3
  IF3{"inMap == null or inMap.get（'kktk_svc_kei_no'） == null or ''"}
  IF3 -->|"Yes"| S12["Step12: template.setNull（KEY_KKTK_SVC_KEI_NO）"]
  IF3 -->|"No"| S13["Step13: template.set（KEY_KKTK_SVC_KEI_NO, inMap.get（'kktk_svc_kei_no'））"]
  S12 --> IF4
  S13 --> IF4
  IF4{"inMap == null or inMap.get（'sort_kbn'） == null or ''"}
  IF4 -->|"Yes"| S14["Step14: template.setNull（KEY_SORT_KBN）"]
  IF4 -->|"No"| S15["Step15: template.set（KEY_SORT_KBN, inMap.get（'sort_kbn'））"]
  S14 --> S16
  S15 --> S16
  S16["Step16: paramMap.put（TEMPLATE_LIST_KEY, templates）"]
  S16 --> RET["return paramMap"]

  S7 -.- NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S8 -.- NOTE2["KEY_SVC_KEI_NO = 'svc_kei_no'"]
  S10 -.- NOTE3["KEY_KKTK_SVC_CD = 'kktk_svc_cd'"]
  S12 -.- NOTE4["KEY_KKTK_SVC_KEI_NO = 'kktk_svc_kei_no'"]
  S14 -.- NOTE5["KEY_SORT_KBN = 'sort_kbn'"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. paramMap（HashMap）を初期化。
2. 電文ID・ユースケースID・オペレーションID・サービス呼び出し区分をセット。
3. コントロールマップから依頼先ホスト名・IPアドレス・画面ID・オペレータIDをセット。
4. CAANMsgのテンプレートを生成。
5. テンプレートID、機能コード（一覧照会）をセット。
6. 共通部（editBasicCmn）を設定。
7. ユーザデータ情報（HAKKOSODCCWORKMAP）を取得。
8. サービス契約番号（svc_kei_no）、機器提供サービスコード（kktk_svc_cd）、機器提供サービス契約番号（kktk_svc_kei_no）、ソート区分（sort_kbn）をinMapから取得し、値がなければsetNull、あればsetでテンプレートにマッピング。
9. テンプレート配列をparamMapに格納し返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                        |
| --- | ------------ | -------------------------- | ----------------------------------------------- |
| 1   | param        | IRequestParameterReadOnly  | リクエスト（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 → editInMsg_EKK0341B002CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editInMsg_EKK0341B002CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getKktkSvcKeiList` | private | 機器提供サービス契約一覧照会（サービス契約番号）<br> <br> 機器提供サービス契約一覧照会（サービス契約番号）サービスインターフェイスにより<br> サービス契約番号に紐づく機器提供サービス契約の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editInMsg_EKK0341B002CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")))` (L25539)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0341B002CBSMsg.KEY_SVC_KEI_NO);` [➔ KEY_SVC_KEI_NO="key_svc_kei_no"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L25544)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0341B002CBSMsg.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("kktk_svc_cd") == null || "".equals(inMap.get("kktk_svc_cd")))` (L25549)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD);` [➔ KEY_KKTK_SVC_CD="key_kktk_svc_cd"] \| |

##### Block 4 — ↪️ ELSE `(else)` (L25554)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0341B002CBSMsg.KEY_KKTK_SVC_CD, (String)inMap.get("kktk_svc_cd"));` [➔ KEY_KKTK_SVC_CD="key_kktk_svc_cd"] \| |

##### Block 5 — 🔀 IF `(inMap == null || inMap.get("kktk_svc_kei_no") == null || "".equals(inMap.get("kktk_svc_kei_no")))` (L25559)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO);` [➔ KEY_KKTK_SVC_KEI_NO="key_kktk_svc_kei_no"] \| |

##### Block 6 — ↪️ ELSE `(else)` (L25564)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO, (String)inMap.get("kktk_svc_kei_no"));` [➔ KEY_KKTK_SVC_KEI_NO="key_kktk_svc_kei_no"] \| |

##### Block 7 — 🔀 IF `(inMap == null || inMap.get("sort_kbn") == null || "".equals(inMap.get("sort_kbn")))` (L25569)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0341B002CBSMsg.KEY_SORT_KBN);` [➔ KEY_SORT_KBN="key_sort_kbn"] \| |

##### Block 8 — ↪️ ELSE `(else)` (L25574)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0341B002CBSMsg.KEY_SORT_KBN, (String)inMap.get("sort_kbn"));` [➔ KEY_SORT_KBN="key_sort_kbn"] \| |
| 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"] \| |

> **合計**: 8 blocks (1 depth levels)

### editResultRP_EKK0341B002CBS()

---

#### 1. 役割

SC（サービスコンポーネント）から返却された `EKK0341B002CBS` のレスポンスデータ（CAANMsg配列）を、業務データ（param）内のデータマップへ展開・格納する処理。機器提供サービス契約一覧の各明細（世代登録年月日時分秒、機器提供サービス契約番号、機器提供サービスコード、機器製造番号、サービス契約番号、サービス契約内訳番号、機器提供サービス契約ステータス、料金グループコード、料金コースコード、料金プランコード、宅内機器型式コード等）をリスト形式で格納し、エラー情報は `editErrorInfo_EKK0341B002CBS` を通じてparamへ設定する。エラーがあればコントロールマップでエラーリストをチェックし、存在すれば例外をスローする。  
本メソッドは `EKK0341B002CBSMsg1List` のリストデータ整形・格納およびエラー管理の共通処理として呼ばれる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editResultRP_EKK0341B002CBS（msgList, param）"] --> S1["Step1: CAANMsg[] templates = msgList.get（TEMPLATE_LIST_KEY）"]
  S1 --> S2["Step2: CAANMsg parentTemplate = templates[0]"]
  S2 --> S3["Step3: CAANMsg[] templateArray = parentTemplate.getMsgData（）.get（EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST）"]
  S3 --> S4["Step4: ArrayList dataList = dataMap.get（'EKK0341B002CBSMsg1List'）"]
  S4 --> IF1{"dataMap == null"}
  IF1 -->|"Yes"| S5["Step5: dataMap = new HashMap（）; param.setData（HAKKOSODCCWORKMAP, dataMap）"]
  IF1 -->|"No"| S6
  S5 --> S7
  S6 --> S7
  S7["Step6: dataList == null の場合 new ArrayList（） を生成"]
  S7 --> IF2{"templateArray != null"}
  IF2 -->|"Yes"| S8["Step7: for （int i = 0; i < templateArray.length; i++） 各明細処理"]
  IF2 -->|"No"| S25
  S8 --> S9["Step8: childTemplate = templateArray[i]; dataListに空HashMap追加"]
  S9 --> S10["Step9: 各フィールドをchildMapに格納（null時は空文字）"]
  S10 --> S11["Step10: 世代登録年月日時分秒・機器提供サービス契約番号・機器提供サービスコード・機器製造番号・サービス契約番号・サービス契約内訳番号・機器提供サービス契約ステータス・料金グループコード・料金コースコード・料金プランコード・宅内機器型式コード"]
  S11 --> S12["Step11: dataMap.put（'EKK0341B002CBSMsg1List', dataList）"]
  S12 --> S25
  S25["Step12: param = editErrorInfo_EKK0341B002CBS（param, templates, return_code）"]
  S25 --> S26["Step13: errList = param.getControlMapData（ERROR_INFO）"]
  S26 --> IF3{"errList == null"}
  IF3 -->|"Yes"| S27["Step14: errList = new ArrayList（）"]
  IF3 -->|"No"| S28
  S27 --> S29
  S28 --> S29
  S29["Step15: param.setControlMapData（ERROR_INFO, TemplateErrorUtil.getErrorInfo（msgList, errList））"]
  S29 --> IF4{"errList != null && !errList.isEmpty（）"}
  IF4 -->|"Yes"| S30["Step16: throw CCException （return_code, templates[0].getInt（STATUS））"]
  IF4 -->|"No"| RET["return param"]

  S1 -.- NOTE1["TEMPLATE_LIST_KEY = 'templateList'"]
  S3 -.- NOTE2["EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST = 'EKK0341B002CBSMsg1List'"]
  S4 -.- NOTE3["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S26 -.- NOTE4["ERROR_INFO = 'ERROR_INFO'"]
  S29 -.- NOTE5["TemplateErrorUtil: エラー情報整形ユーティリティ"]
  S30 -.- NOTE6["CCException: 共通業務例外 / SCCallException: サービスコンポーネント呼出例外"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. SCから返却されたCAANMsg配列（テンプレートリスト）を取得。
2. 親テンプレートを抽出し、機器提供サービス契約一覧照会明細の配列を取得。
3. 業務データ用のデータマップ（HAKKOSODCCWORKMAP）・データリストを取得し、なければ新規生成・セット。
4. 明細配列が存在する場合、forループで各明細（childTemplate）を処理し、必要なだけ空のHashMapをdataListに追加。
5. 各明細のフィールド（世代登録年月日時分秒、機器提供サービス契約番号、機器提供サービスコード、機器製造番号、サービス契約番号、サービス契約内訳番号、機器提供サービス契約ステータス、料金グループコード、料金コースコード、料金プランコード、宅内機器型式コード）をchildMapにセット。値がnullの場合は空文字を格納。
6. dataMapにリストを再セット。
7. エラー情報の設定としてeditErrorInfo_EKK0341B002CBSを呼び出し、paramに反映。
8. コントロールマップからエラーリスト（ERROR_INFO）を取得し、なければ新規生成して設定。
9. エラーリストをTemplateErrorUtilで整形しコントロールマップに反映。
10. エラーがあれば共通例外をスローし、なければparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                         |
| --- | ------------ | -------------------------- | ------------------------------------------------ |
| 1   | msgList      | Map<?, ?>                  | SC戻り値マップ（テンプレート・リターンコード等）  |
| 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_EKK0341B002CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editResultRP_EKK0341B002CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getKktkSvcKeiList` | private | 機器提供サービス契約一覧照会（サービス契約番号）<br> <br> 機器提供サービス契約一覧照会（サービス契約番号）サービスインターフェイスにより<br> サービス契約番号に紐づく機器提供サービス契約の一覧を取得します。<br> <br> |

---

#### 📋 Per-Branch 詳細ブロック — `editResultRP_EKK0341B002CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap == null)` (L25613)

> 📌 業務データ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, dataMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 2 — 🔀 IF `(dataList == null)` (L25621)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList = new ArrayList();` |

##### Block 3 — 🔀 IF `(templateArray != null)` (L25626)

| # | 種別 | 処理内容 |
|---|---|---|
| 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(EKK0341B002CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |
| 6 | 📋 SET | `childMap.put("kktk_svc_kei_no", "");` |
| 7 | 📋 SET | `childMap.put("kktk_svc_kei_no", childTemplate.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));` [➔ KKTK_SVC_KEI_NO="kktk_svc_kei_no"] \| |
| 8 | 📋 SET | `childMap.put("kktk_svc_cd", "");` |

###### · Block 3.1 — 🔁 FOR `(for)` (L25628)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 3.1.1 — 🔀 IF `(i >= dataList.size())` (L25631)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.add(new HashMap());` |

###### ·· Block 3.1.2 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.GENE_ADD_DTM))` [GENE_ADD_DTM="gene_add_dtm"] (L25640)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.世代登録年月日時分秒

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", "");` |

###### ·· Block 3.1.3 — ↪️ ELSE `(else)` (L25645)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("gene_add_dtm", childTemplate.getString(EKK0341B002CBSMsg1List.GENE_ADD_DTM));` [➔ GENE_ADD_DTM="gene_add_dtm"] \| |

###### ·· Block 3.1.4 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO))` [KKTK_SVC_KEI_NO="kktk_svc_kei_no"] (L25651)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kktk_svc_kei_no", "");` |

###### ·· Block 3.1.5 — ↪️ ELSE `(else)` (L25656)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kktk_svc_kei_no", childTemplate.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));` [➔ KKTK_SVC_KEI_NO="kktk_svc_kei_no"] \| |

###### ·· Block 3.1.6 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_CD))` [KKTK_SVC_CD="kktk_svc_cd"] (L25662)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kktk_svc_cd", "");` |

###### ·· Block 3.1.7 — ↪️ ELSE `(else)` (L25667)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器製造番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kktk_svc_cd", childTemplate.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD));` [➔ KKTK_SVC_CD="kktk_svc_cd"] \| |

###### ·· Block 3.1.8 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.KIKI_SEIZO_NO))` [KIKI_SEIZO_NO="kiki_seizo_no"] (L25673)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.機器製造番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kiki_seizo_no", "");` |

###### ·· Block 3.1.9 — ↪️ ELSE `(else)` (L25678)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kiki_seizo_no", childTemplate.getString(EKK0341B002CBSMsg1List.KIKI_SEIZO_NO));` [➔ KIKI_SEIZO_NO="kiki_seizo_no"] \| |

###### ·· Block 3.1.10 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.SVC_KEI_NO))` [SVC_KEI_NO="svc_kei_no"] (L25684)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_no", "");` |

###### ·· Block 3.1.11 — ↪️ ELSE `(else)` (L25689)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.サービス契約内訳番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_no", childTemplate.getString(EKK0341B002CBSMsg1List.SVC_KEI_NO));` [➔ SVC_KEI_NO="svc_kei_no"] \| |

###### ·· Block 3.1.12 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.SVC_KEI_UCWK_NO))` [SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] (L25695)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.サービス契約内訳番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_no", "");` |

###### ·· Block 3.1.13 — ↪️ ELSE `(else)` (L25700)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("svc_kei_ucwk_no", childTemplate.getString(EKK0341B002CBSMsg1List.SVC_KEI_UCWK_NO));` [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |

###### ·· Block 3.1.14 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT))` [KKTK_SVC_KEI_STAT="kktk_svc_kei_stat"] (L25706)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約ステータス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kktk_svc_kei_stat", "");` |

###### ·· Block 3.1.15 — ↪️ ELSE `(else)` (L25711)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.料金グループコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("kktk_svc_kei_stat", childTemplate.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT));` [➔ KKTK_SVC_KEI_STAT="kktk_svc_kei_stat"] \| |

###### ·· Block 3.1.16 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.PRC_GRP_CD))` (L25717)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.料金グループコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("prc_grp_cd", "");` |

###### ·· Block 3.1.17 — ↪️ ELSE `(else)` (L25722)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("prc_grp_cd", childTemplate.getString(EKK0341B002CBSMsg1List.PRC_GRP_CD));` [➔ PRC_GRP_CD="prc_grp_cd"] \| |

###### ·· Block 3.1.18 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.PCRS_CD))` [PCRS_CD="pcrs_cd"] (L25728)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.料金コースコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_cd", "");` |

###### ·· Block 3.1.19 — ↪️ ELSE `(else)` (L25733)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.料金プランコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pcrs_cd", childTemplate.getString(EKK0341B002CBSMsg1List.PCRS_CD));` [➔ PCRS_CD="pcrs_cd"] \| |

###### ·· Block 3.1.20 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.PPLAN_CD))` (L25739)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.料金プランコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_cd", "");` |

###### ·· Block 3.1.21 — ↪️ ELSE `(else)` (L25744)

> 📌 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.宅内機器型式コード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("pplan_cd", childTemplate.getString(EKK0341B002CBSMsg1List.PPLAN_CD));` [➔ PPLAN_CD="pplan_cd"] \| |

###### ·· Block 3.1.22 — 🔀 IF `(childTemplate.isNull(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD))` [TAKNKIKI_MODEL_CD="taknkiki_model_cd"] (L25749)

> 📌 ← 機器提供サービス契約一覧照会（サービス契約番号）明細.宅内機器型式コード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("taknkiki_model_cd", "");` |

###### ·· Block 3.1.23 — ↪️ ELSE `(else)` (L25754)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `childMap.put("taknkiki_model_cd", childTemplate.getString(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD));` [➔ TAKNKIKI_MODEL_CD="taknkiki_model_cd"] \| |
| 2 | 📋 SET | `dataMap.put("EKK0341B002CBSMsg1List", dataList);` |
| 3 | ⚡ EXEC | `param = editErrorInfo_EKK0341B002CBS(param, templates, (Integer)return_code);` |

##### Block 4 — 🔀 IF `(errList == null)` (L25766)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 5 — 🔀 IF `(errList != null && !errList.isEmpty())` (L25774)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0341B002CBSMsg.STATUS)));` |

> **合計**: 29 blocks (3 depth levels)

### editErrorInfo_EKK0361A010CBS()

---

#### 1. 役割

`EKK0361A010CBS` のエラー情報を業務データ（param）に設定する処理。CAANMsgからエラーコードやステータスを判定し、コントロールマップへエラーコード・エラーメッセージをセットする。オプションサービス契約＜ISP＞一意照会におけるエラー情報（オプションサービス契約番号・世代登録年月日時分秒のエラー項目）を業務データマップに格納する。エラー発生時はテンプレートステータスを最優先としてエラー情報を上書きし、エラーが存在する場合でも例外はスローせずparamを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["editErrorInfo_EKK0361A010CBS（param, templates, returnCode）"] --> S1["Step1: CAANMsg template = templates[0]"]
  S1 --> S2["Step2: int templateStatus = template.getInt（STATUS）"]
  S2 --> IF1{"returnCode != 0"}
  IF1 -->|"Yes"| S3["Step3: templateStatus = 9000"]
  IF1 -->|"No"| S4
  S3 --> S4
  S4["Step4: RETURN_MESSAGE_xxxx 存在チェック"]
  S4 --> IF2{"JCMAPLConstMgr.getString（'RETURN_MESSAGE_' + format（templateStatus）） == null"}
  IF2 -->|"Yes"| S5["Step5: templateStatus = 0"]
  IF2 -->|"No"| S6
  S5 --> S6
  S6["Step6: bpStatus = param.getControlMapData（RETURN_CODE）"]
  S6 --> IF3{"templateStatus > bpStatus"}
  IF3 -->|"Yes"| S7["Step7: param.setControlMapData（RETURN_CODE, formatStatus） / RETURN_MESSAGE"]
  IF3 -->|"No"| S8
  S7 --> S9
  S8 --> S9
  S9["Step8: inMap = param.getData（HAKKOSODCCWORKMAP）"]
  S9 --> IF4{"inMap == null"}
  IF4 -->|"Yes"| S10["Step9: inMap = new HashMap（）; param.setData（HAKKOSODCCWORKMAP, inMap）"]
  IF4 -->|"No"| S11
  S10 --> S11
  S11["Step10: オプションサービス契約番号エラー → inMap['op_svc_kei_no_err']"]
  S11 --> S12["Step11: 世代登録年月日時分秒エラー → inMap['gene_add_dtm_err']"]
  S12 --> RET["return param"]

  S1 -.- NOTE1["STATUS = 'status'"]
  S6 -.- NOTE2["RETURN_CODE = 'returnCode'"]
  S9 -.- NOTE3["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S11 -.- NOTE4["KEY_OP_SVC_KEI_NO_ERR = 'op_svc_kei_no_err'"]
  S12 -.- NOTE5["KEY_GENE_ADD_DTM_ERR = 'gene_add_dtm_err'"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. テンプレート（templates[0]）からステータスを取得。
2. returnCodeが0でなければtemplateStatusを9000にセット。
3. JCMAPLConstMgrでテンプレートステータスに対応するエラーメッセージが存在しなければtemplateStatusを0に。
4. bpStatus（コントロールマップのRETURN_CODE）と比較し、templateStatusの方が大きければRETURN_CODE・RETURN_MESSAGEをparamにセット。
5. 業務データマップ（HAKKOSODCCWORKMAP）がなければ新規生成しセット。
6. オプションサービス契約番号エラー（KEY_OP_SVC_KEI_NO_ERR）、世代登録年月日時分秒エラー（KEY_GENE_ADD_DTM_ERR）が存在する場合はinMapに格納。
7. 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_EKK0361A010CBS` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → editErrorInfo_EKK0361A010CBS` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `editResultRP_EKK0361A010CBS` | private | 下りマッピング（オプションサービス契約＜ISP＞一意照会） <br> サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングします<br> <br> |
---

#### 📋 Per-Branch 詳細ブロック — `editErrorInfo_EKK0361A010CBS()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L24517)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L24521)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L24528)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L24533)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L24537)

> 📌 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)` (L24550)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inMap = new HashMap();` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

##### Block 7 — 🔀 IF `(!template.isNull(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR))` [KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] (L24557)

> 📌 オプションサービス契約＜ＩＳＰ＞一意照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("op_svc_kei_no_err", template.getString(EKK0361A010CBSMsg.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"))` (L24559)

> 📌 オプションサービス契約＜ＩＳＰ＞一意照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("op_svc_kei_no_err", template.getString(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR));` [➔ KEY_OP_SVC_KEI_NO_ERR="key_op_svc_kei_no_err"] \| |

##### Block 8 — 🔀 IF `(!template.isNull(EKK0361A010CBSMsg.KEY_GENE_ADD_DTM_ERR))` [KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] (L24565)

> 📌 オプションサービス契約＜ＩＳＰ＞一意照会マップ.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("gene_add_dtm_err", template.getString(EKK0361A010CBSMsg.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"))` (L24567)

> 📌 オプションサービス契約＜ＩＳＰ＞一意照会マップ.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `inMap.put("gene_add_dtm_err", template.getString(EKK0361A010CBSMsg.KEY_GENE_ADD_DTM_ERR));` [➔ KEY_GENE_ADD_DTM_ERR="key_gene_add_dtm_err"] \| |

> **合計**: 10 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_EKK0161B004CBS()` (L25122) — 13 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L25128 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L25132 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L25139 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L25144 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L25148 |
| 6 | 🔀 IF | D0 | (inMap == null) | サービス契約内訳一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 のエラー情報返却 | - | - | L25161 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0161B004CBSMsg.KEY_SVC_KEI_NO_ERR)) | - | - | - | L25168 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("svc_kei_no_err")) | サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード のエラー情報返却 | - | - | L25170 |
| 9 | 🔀 IF | D0 | (!template.isNull(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR)) | - | - | - | L25177 |
| 10 | · 🔀 IF | D1 | (!inMap.containsKey("pcrs_cd_err")) | サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ のエラー情報返却 | - | - | L25179 |
| 11 | 🔀 IF | D0 | (!template.isNull(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR)) | - | - | - | L25186 |
| 12 | · 🔀 IF | D1 | (!inMap.containsKey("svc_prd_flg_err")) | - | - | - | L25188 |
| 13 | ↩️ RETURN | D0 | param | - | - | - | L25193 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0161B004CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L25128"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L25132"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L25139"| B2
  B3["ELSE"]
  CF0 -->|"L25144"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L25148"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L25161"| B5
  subgraph SG6["IF: （!template.isNull（EKK0161B004CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'svc_kei_no_err…"]
  end
  CF0 -->|"L25168"| SG6
  subgraph SG7["IF: （!template.isNull（EKK0161B004CBSMsg.KEY_…"]
    direction TB
    C7_0["IF: （!inMap.containsKey（'pcrs_cd_err'））"]
  end
  CF0 -->|"L25177"| SG7
  subgraph SG8["IF: （!template.isNull（EKK0161B004CBSMsg.KEY_…"]
    direction TB
    C8_0["IF: （!inMap.containsKey（'svc_prd_flg_er…"]
  end
  CF0 -->|"L25186"| SG8
  B9["RETURN: param"]
  CF0 -->|"L25193"| B9
```

### `editErrorInfo_EKK0361A010CBS()` (L24511) — 11 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L24517 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L24521 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L24528 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L24533 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L24537 |
| 6 | 🔀 IF | D0 | (inMap == null) | オプションサービス契約＜ＩＳＰ＞一意照会マップ.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 のエラー情報返却 | - | - | L24550 |
| 7 | 🔀 IF | D0 | (!template.isNull(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)) | オプションサービス契約＜ＩＳＰ＞一意照会マップ.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却 | - | - | L24557 |
| 8 | · 🔀 IF | D1 | (!inMap.containsKey("op_svc_kei_no_err")) | オプションサービス契約＜ＩＳＰ＞一意照会マップ.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却 | - | - | L24559 |
| 9 | 🔀 IF | D0 | (!template.isNull(EKK0361A010CBSMsg.KEY_GENE_ADD_DTM_ERR)) | - | - | - | L24565 |
| 10 | · 🔀 IF | D1 | (!inMap.containsKey("gene_add_dtm_err")) | - | - | - | L24567 |
| 11 | ↩️ RETURN | D0 | param | - | - | - | L24572 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK0361A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L24517"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L24521"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L24528"| B2
  B3["ELSE"]
  CF0 -->|"L24533"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L24537"| B4
  B5["IF: （inMap == null）"]
  CF0 -->|"L24550"| B5
  subgraph SG6["IF: （!template.isNull（EKK0361A010CBSMsg.KEY_…"]
    direction TB
    C6_0["IF: （!inMap.containsKey（'op_svc_kei_no_…"]
  end
  CF0 -->|"L24557"| SG6
  subgraph SG7["IF: （!template.isNull（EKK0361A010CBSMsg.KEY_…"]
    direction TB
    C7_0["IF: （!inMap.containsKey（'gene_add_dtm_e…"]
  end
  CF0 -->|"L24565"| SG7
  B8["RETURN: param"]
  CF0 -->|"L24572"| B8
```

### `editErrorInfo_EKK1081C011CBS()` (L26005) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L26010 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L26014 |
| 3 | 🔀 IF | D0 | (obj == null) | - | - | - | L26021 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L26026 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L26030 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L26039 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editErrorInfo_EKK1081C011CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L26010"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L26014"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L26021"| B2
  B3["ELSE"]
  CF0 -->|"L26026"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L26030"| B4
  B5["RETURN: param"]
  CF0 -->|"L26039"| B5
```

### `editInMsg_EKK0161B004CBS()` (L24879) — 7 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("svc_kei_no") == null ｜｜ "".equals(inMap.get("svc_kei_no"))) | サービス契約内訳一覧照会マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 | - | - | L24928 |
| 2 | 🔀 ELSE | D0 | (else) | サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード | - | - | L24933 |
| 3 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("pcrs_cd") == null ｜｜ "".equals(inMap.get("pcrs_cd"))) | サービス契約内訳一覧照会マップ.料金コースコード → ＫＥＹ＿料金コースコード | - | - | L24938 |
| 4 | 🔀 ELSE | D0 | (else) | サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ | - | - | L24943 |
| 5 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("svc_prd_flg") == null ｜｜ "".equals(inMap.get("svc_prd_flg"))) | サービス契約内訳一覧照会マップ.サービス期間中フラグ → ＫＥＹ＿サービス期間中フラグ | - | - | L24948 |
| 6 | 🔀 ELSE | D0 | (else) | - | - | - | L24953 |
| 7 | ↩️ RETURN | D0 | paramMap | - | - | - | L24961 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editInMsg_EKK0161B004CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inMap == null || inMap.get（'svc_kei_no'…"]
  CF0 -->|"L24928"| B0
  B1["ELSE"]
  CF0 -->|"L24933"| B1
  B2["IF: （inMap == null || inMap.get（'pcrs_cd'） =…"]
  CF0 -->|"L24938"| B2
  B3["ELSE"]
  CF0 -->|"L24943"| B3
  B4["IF: （inMap == null || inMap.get（'svc_prd_flg…"]
  CF0 -->|"L24948"| B4
  B5["ELSE"]
  CF0 -->|"L24953"| B5
  B6["RETURN: paramMap"]
  CF0 -->|"L24961"| B6
```

### `editInMsg_EKK0341B002CBS()` (L25490) — 9 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("svc_kei_no") == null ｜｜ "".equals(inMap.get("svc_kei_no"))) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.サービス契約番号 → ＫＥＹ＿サービス契約番号 | - | - | L25539 |
| 2 | 🔀 ELSE | D0 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード | - | - | L25544 |
| 3 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("kktk_svc_cd") == null ｜｜ "".equals(inMap.get("kktk_svc_cd"))) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービスコード → ＫＥＹ＿機器提供サービスコード | - | - | L25549 |
| 4 | 🔀 ELSE | D0 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 | - | - | L25554 |
| 5 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("kktk_svc_kei_no") == null ｜｜ "".equals(inMap.get("kktk_svc_kei_no"))) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約番号 → ＫＥＹ＿機器提供サービス契約番号 | - | - | L25559 |
| 6 | 🔀 ELSE | D0 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分 | - | - | L25564 |
| 7 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("sort_kbn") == null ｜｜ "".equals(inMap.get("sort_kbn"))) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.ソート区分 → ＫＥＹ＿ソート区分 | - | - | L25569 |
| 8 | 🔀 ELSE | D0 | (else) | - | - | - | L25574 |
| 9 | ↩️ RETURN | D0 | paramMap | - | - | - | L25582 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editInMsg_EKK0341B002CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inMap == null || inMap.get（'svc_kei_no'…"]
  CF0 -->|"L25539"| B0
  B1["ELSE"]
  CF0 -->|"L25544"| B1
  B2["IF: （inMap == null || inMap.get（'kktk_svc_cd…"]
  CF0 -->|"L25549"| B2
  B3["ELSE"]
  CF0 -->|"L25554"| B3
  B4["IF: （inMap == null || inMap.get（'kktk_svc_ke…"]
  CF0 -->|"L25559"| B4
  B5["ELSE"]
  CF0 -->|"L25564"| B5
  B6["IF: （inMap == null || inMap.get（'sort_kbn'） …"]
  CF0 -->|"L25569"| B6
  B7["ELSE"]
  CF0 -->|"L25574"| B7
  B8["RETURN: paramMap"]
  CF0 -->|"L25582"| B8
```

### `editInMsg_EKK0351A010CBS()` (L26400) — 7 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("op_svc_kei_no") == null ｜｜ "".equals(inMap.get("op_svc_kei_no"))) | オプションサービス契約一意照会.オプションサービス契約番号 → ＫＥＹ＿オプションサービス契約番号 | - | - | L26449 |
| 2 | 🔀 ELSE | D0 | (else) | オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 | - | - | L26454 |
| 3 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("gene_add_dtm") == null ｜｜ "".equals(inMap.get("gene_add_dtm"))) | オプションサービス契約一意照会.世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 | - | - | L26459 |
| 4 | 🔀 ELSE | D0 | (else) | オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 | - | - | L26464 |
| 5 | 🔀 IF | D0 | (inMap == null ｜｜ inMap.get("rsv_aply_ymd") == null ｜｜ "".equals(inMap.get("rsv_aply_ymd"))) | オプションサービス契約一意照会.予約適用年月日 → ＫＥＹ＿予約適用年月日 | - | - | L26469 |
| 6 | 🔀 ELSE | D0 | (else) | - | - | - | L26474 |
| 7 | ↩️ RETURN | D0 | paramMap | - | - | - | L26482 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editInMsg_EKK0351A010CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inMap == null || inMap.get（'op_svc_kei_…"]
  CF0 -->|"L26449"| B0
  B1["ELSE"]
  CF0 -->|"L26454"| B1
  B2["IF: （inMap == null || inMap.get（'gene_add_dt…"]
  CF0 -->|"L26459"| B2
  B3["ELSE"]
  CF0 -->|"L26464"| B3
  B4["IF: （inMap == null || inMap.get（'rsv_aply_ym…"]
  CF0 -->|"L26469"| B4
  B5["ELSE"]
  CF0 -->|"L26474"| B5
  B6["RETURN: paramMap"]
  CF0 -->|"L26482"| B6
```

### `editResultRP_EKK0161B004CBS()` (L24974) — 23 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | - | - | - | L24992 |
| 2 | 🔀 IF | D0 | (dataList == null) | - | - | - | L25000 |
| 3 | 🔀 IF | D0 | (templateArray != null) | - | - | `editErrorInfo_EKK0161B004CBS()` | L25005 |
| 4 | · 🔁 FOR | D1 | (for-loop) | - | - | `editErrorInfo_EKK0161B004CBS()` | L25007 |
| 5 | ·· 🔀 IF | D2 | (i >= dataList.size()) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約内訳番号 ← サービス契約内訳一覧照会明細.サービス契約内訳番号 | - | - | L25010 |
| 6 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO)) | - | SVC_KEI_UCWK_NO=svc_kei_ucwk_no | - | L25017 |
| 7 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.世代登録年月日時分秒 ← サービス契約内訳一覧照会明細.世代登録年月日時分秒 | - | - | L25022 |
| 8 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.GENE_ADD_DTM)) | - | GENE_ADD_DTM=gene_add_dtm | - | L25027 |
| 9 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約内訳ステータス | - | - | L25032 |
| 10 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT)) | - | - | - | L25038 |
| 11 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.サービス契約番号 ← サービス契約内訳一覧照会明細.サービス契約番号 | - | - | L25043 |
| 12 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.SVC_KEI_NO)) | - | SVC_KEI_NO=svc_kei_no | - | L25048 |
| 13 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.申込明細番号 ← サービス契約内訳一覧照会明細.申込明細番号 | - | - | L25053 |
| 14 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.MSKM_DTL_NO)) | - | MSKM_DTL_NO=mskm_dtl_no | - | L25058 |
| 15 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.料金コースコード ← サービス契約内訳一覧照会明細.料金コースコード | - | - | L25063 |
| 16 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.PCRS_CD)) | - | PCRS_CD=pcrs_cd | - | L25068 |
| 17 | ·· 🔀 ELSE | D2 | (else) | サービス契約内訳一覧照会マップ.サービス契約内訳一覧照会明細.料金プランコード ← サービス契約内訳一覧照会明細.料金プランコード | - | - | L25073 |
| 18 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0161B004CBSMsg1List.PPLAN_CD)) | - | PPLAN_CD= | - | L25078 |
| 19 | ·· 🔀 ELSE | D2 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK0161B004CBS()` | L25083 |
| 20 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L25095 |
| 21 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L25103 |
| 22 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0161B004CBSMsg.STATUS))) | - | - | - | L25105 |
| 23 | ↩️ RETURN | D0 | param | - | - | - | L25108 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0161B004CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L24992"| B0
  B1["IF: （dataList == null）"]
  CF0 -->|"L25000"| B1
  subgraph SG2["IF: （templateArray != null）"]
    direction TB
    C2_0["FOR: …"]
  end
  CF0 -->|"L25005"| SG2
  B3["IF: （errList == null）"]
  CF0 -->|"L25095"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L25103"| SG4
  B5["RETURN: param"]
  CF0 -->|"L25108"| B5
```

### `editResultRP_EKK0341B002CBS()` (L25595) — 31 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | - | - | - | L25613 |
| 2 | 🔀 IF | D0 | (dataList == null) | - | - | - | L25621 |
| 3 | 🔀 IF | D0 | (templateArray != null) | - | - | `editErrorInfo_EKK0341B002CBS()` | L25626 |
| 4 | · 🔁 FOR | D1 | (for-loop) | - | - | `editErrorInfo_EKK0341B002CBS()` | L25628 |
| 5 | ·· 🔀 IF | D2 | (i >= dataList.size()) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.世代登録年月日時分秒 | - | - | L25631 |
| 6 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.GENE_ADD_DTM)) | - | GENE_ADD_DTM=gene_add_dtm | - | L25640 |
| 7 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約番号 | - | - | L25645 |
| 8 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO)) | - | KKTK_SVC_KEI_NO=kktk_svc_kei_no | - | L25651 |
| 9 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービスコード | - | - | L25656 |
| 10 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_CD)) | - | KKTK_SVC_CD=kktk_svc_cd | - | L25662 |
| 11 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器製造番号 | - | - | L25667 |
| 12 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.KIKI_SEIZO_NO)) | - | KIKI_SEIZO_NO=kiki_seizo_no | - | L25673 |
| 13 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.サービス契約番号 | - | - | L25678 |
| 14 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.SVC_KEI_NO)) | - | SVC_KEI_NO=svc_kei_no | - | L25684 |
| 15 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.サービス契約内訳番号 | - | - | L25689 |
| 16 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.SVC_KEI_UCWK_NO)) | - | SVC_KEI_UCWK_NO=svc_kei_ucwk_no | - | L25695 |
| 17 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.機器提供サービス契約ステータス | - | - | L25700 |
| 18 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT)) | - | - | - | L25706 |
| 19 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.料金グループコード | - | - | L25711 |
| 20 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.PRC_GRP_CD)) | - | PRC_GRP_CD= | - | L25717 |
| 21 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.料金コースコード | - | - | L25722 |
| 22 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.PCRS_CD)) | - | PCRS_CD=pcrs_cd | - | L25728 |
| 23 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.料金プランコード | - | - | L25733 |
| 24 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.PPLAN_CD)) | - | PPLAN_CD= | - | L25739 |
| 25 | ·· 🔀 ELSE | D2 | (else) | 機器提供サービス契約一覧照会（サービス契約番号）マップ.機器提供サービス契約一覧照会（サービス契約番号）明細.宅内機器型式コード | - | - | L25744 |
| 26 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD)) | - | TAKNKIKI_MODEL_CD=taknkiki_model_cd | - | L25749 |
| 27 | ·· 🔀 ELSE | D2 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK0341B002CBS()` | L25754 |
| 28 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L25766 |
| 29 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L25774 |
| 30 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0341B002CBSMsg.STATUS))) | - | - | - | L25776 |
| 31 | ↩️ RETURN | D0 | param | - | - | - | L25779 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0341B002CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L25613"| B0
  B1["IF: （dataList == null）"]
  CF0 -->|"L25621"| B1
  subgraph SG2["IF: （templateArray != null）"]
    direction TB
    C2_0["FOR: …"]
  end
  CF0 -->|"L25626"| SG2
  B3["IF: （errList == null）"]
  CF0 -->|"L25766"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L25774"| SG4
  B5["RETURN: param"]
  CF0 -->|"L25779"| B5
```

### `editResultRP_EKK0401B001CBS()` (L24659) — 23 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | - | - | - | L24677 |
| 2 | 🔀 IF | D0 | (dataList == null) | - | - | - | L24685 |
| 3 | 🔀 IF | D0 | (templateArray != null) | - | - | `editErrorInfo_EKK0401B001CBS()` | L24690 |
| 4 | · 🔁 FOR | D1 | (for-loop) | - | - | `editErrorInfo_EKK0401B001CBS()` | L24692 |
| 5 | ·· 🔀 IF | D2 | (i >= dataList.size()) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.オプションサービス契約番号 | - | - | L24695 |
| 6 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO)) | - | OP_SVC_KEI_NO=op_svc_kei_no | - | L24703 |
| 7 | ·· 🔀 ELSE | D2 | (else) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.サブオプションサービス契約番号 | - | - | L24708 |
| 8 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO)) | - | SBOP_SVC_KEI_NO=sbop_svc_kei_no | - | L24714 |
| 9 | ·· 🔀 ELSE | D2 | (else) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.世代登録年月日時分秒 | - | - | L24719 |
| 10 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.GENE_ADD_DTM)) | - | GENE_ADD_DTM=gene_add_dtm | - | L24725 |
| 11 | ·· 🔀 ELSE | D2 | (else) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.サブオプションサービス契約ステータス | - | - | L24730 |
| 12 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT)) | - | - | - | L24736 |
| 13 | ·· 🔀 ELSE | D2 | (else) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.サブオプションサービスコード | - | - | L24741 |
| 14 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.SBOP_SVC_CD)) | - | - | - | L24747 |
| 15 | ·· 🔀 ELSE | D2 | (else) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.料金コースコード | - | - | L24752 |
| 16 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.PCRS_CD)) | - | PCRS_CD=pcrs_cd | - | L24758 |
| 17 | ·· 🔀 ELSE | D2 | (else) | サブオプションサービス契約一覧照会マップ.サブオプションサービス契約一覧照会明細.料金プランコード | - | - | L24763 |
| 18 | ·· 🔀 IF | D2 | (childTemplate.isNull(EKK0401B001CBSMsg1List.PPLAN_CD)) | - | PPLAN_CD= | - | L24769 |
| 19 | ·· 🔀 ELSE | D2 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK0401B001CBS()` | L24774 |
| 20 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L24786 |
| 21 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L24794 |
| 22 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK0401B001CBSMsg.STATUS))) | - | - | - | L24796 |
| 23 | ↩️ RETURN | D0 | param | - | - | - | L24799 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK0401B001CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L24677"| B0
  B1["IF: （dataList == null）"]
  CF0 -->|"L24685"| B1
  subgraph SG2["IF: （templateArray != null）"]
    direction TB
    C2_0["FOR: …"]
  end
  CF0 -->|"L24690"| SG2
  B3["IF: （errList == null）"]
  CF0 -->|"L24786"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L24794"| SG4
  B5["RETURN: param"]
  CF0 -->|"L24799"| B5
```

### `editResultRP_EKK1081C011CBS()` (L25941) — 7 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap == null) | 同一処理番号取得 | - | - | L25957 |
| 2 | 🔀 IF | D0 | (parentTemplate.isNull(EKK1081C011CBSMsg.SAME_TRN_NO)) | - | SAME_TRN_NO=same_trn_no | - | L25964 |
| 3 | 🔀 ELSE | D0 | (else) | エラー情報の設定 | - | `editErrorInfo_EKK1081C011CBS()` | L25969 |
| 4 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L25978 |
| 5 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L25986 |
| 6 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)return_code).toString(), templates[0].getInt(EKK1081C011CBSMsg.STATUS))) | - | - | - | L25988 |
| 7 | ↩️ RETURN | D0 | param | - | - | - | L25991 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["editResultRP_EKK1081C011CBS()"] --> CF0{"制御フロー分岐"}
  B0["IF: （dataMap == null）"]
  CF0 -->|"L25957"| B0
  B1["IF: （parentTemplate.isNull（EKK1081C011CBSMsg…"]
  CF0 -->|"L25964"| B1
  B2["ELSE"]
  CF0 -->|"L25969"| B2
  B3["IF: （errList == null）"]
  CF0 -->|"L25978"| B3
  subgraph SG4["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C4_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L25986"| SG4
  B5["RETURN: param"]
  CF0 -->|"L25991"| B5
```

> **制御フロー合計**: 10 methods, 137 branches
