# ⑥ 業務ロジック — Mapping (InMsg/OutMsg): 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-mappingEKK0351A010SCInMsg"></a>
### mappingEKK0351A010SCInMsg()

---

#### 1. 役割

オプションサービス契約一意照会（EKK0351A010）サービスIFの入力メッセージを構築するためのマッピング処理。  
具体的には、入力パラメータ（inHash）からテンプレート（CAANMsg）に必要なフィールドをセットする。機能コード（funcCode）の値によって分岐し、通常はオプションサービス契約番号と世代登録年月日時分秒を、予約適用日の場合は運用日付（OPE_DATE）をセットする。運用日付が空の場合は共通部品から取得する特殊パスがある。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0351A010SCInMsg（template, inHash, funcCode）"] --> S1["Step1: fillCAANMSGNullMapping（）で全項目をNullセット"]
  S1 --> S2["Step2: テンプレートID（EKK0351A010）をセット"]
  S2 --> S3["Step3: 機能コード（funcCode）をセット"]
  S3 --> S4["Step4: オプションサービス契約番号（OP_SVC_KEI_NO）をセット"]
  S4 --> IF1{"funcCodeがFUNC_CODE_1かFUNC_CODE_2か判定"}
  style IF1 fill:#ffcc00
  IF1 -.-> NOTE_FC1["FUNC_CODE_1 = '1'"]
  IF1 -.-> NOTE_FC2["FUNC_CODE_2 = '2'"]
  style NOTE_FC1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_FC2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"funcCode == FUNC_CODE_1"| S5a["Step5a: 世代登録年月日時分秒（GENE_ADD_DTM）をセット"]
  IF1 -->|"funcCode == FUNC_CODE_2"| S5b["Step5b: 予約適用日（KEY_RSV_APLY_YMD）にOPE_DATEをセット。空の場合はJKKBpCommon.getOpeDate（null）で取得しセット"]
  S5a --> END["完了"]
  S5b --> END
```

**処理ステップ詳細:**

1. fillCAANMSGNullMapping(template, new EKK0351A010CBSMsg().getContents()) を呼び出し、全ての項目をNull初期化する。
   - 業務目的: テンプレートの全フィールドを明示的に初期化することで、未設定値による不整合を防ぐ。
2. テンプレートID（SIFのID）として `TEMPLATE_ID_EKK0351A010 = "EKK0351A010"` をセットする。
3. 機能コード（funcCode）をテンプレートにセットする。
4. オプションサービス契約番号（OP_SVC_KEI_NO）をinHashから取得してテンプレートにセットする。
5. 機能コードによる分岐:
    - `FUNC_CODE_1 = "1"` の場合：世代登録年月日時分秒（GENE_ADD_DTM）をinHashから取得しセット。
    - `FUNC_CODE_2 = "2"` の場合：運用日付（OPE_DATE）をinHashから取得。値が空の場合はJKKBpCommon.getOpeDate(null)で取得し、予約適用日（KEY_RSV_APLY_YMD）にセットする。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                | 業務説明                                                    |
| --- | ------------ | ----------------- | ----------------------------------------------------------- |
| 1   | template     | CAANMsg           | マッピング対象となるサービスIF入力メッセージ                |
| 2   | inHash       | HashMap<String,Object> | 入力パラメータ。各種業務情報（契約番号や運用日付など）格納 |
| 3   | funcCode     | String            | 業務機能コード（分岐条件に利用）                            |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCInMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0351A010SC` | private | オプションサービス契約一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `mappingEKK0351A010SCInMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(JKKHakkoSODConstCC.FUNC_CODE_1.equals(funcCode))` [FUNC_CODE_1="1"] (L28431)

> 📌 機能コードにより分岐

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM, inHash.get(JKKHakkoSODConstCC.GENE_ADD_DTM));` [➔ KEY_GENE_ADD_DTM="key_gene_add_dtm", GENE_ADD_DTM="gene_add_dtm"] \| [➔ GENE_ADD_DTM="gene_add_dtm" (世代登録年月日時分秒)] |

##### Block 2 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.FUNC_CODE_2.equals(funcCode))` [FUNC_CODE_2="2"] (L28435)

> 📌 ↓↓↓2013-07-19変更　巻３KT1-2013-0000728（フェムトセル取込でドメインエラーになった）↓↓↓

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 2.1 — 🔀 IF `(isBlank(inOpeDate))` (L28440)

> 📌 template.set(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, inHash.get(JKKHakkoSODConstCC.OPE_DATE));

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `inOpeDate = JKKBpCommon.getOpeDate(null);` |

> **合計**: 3 blocks (2 depth levels)

### mappingEKK0351B002SCInMsg()

---

#### 1. 役割

オプションサービス契約一覧照会（EKK0351B002）サービスIFの入力メッセージを構築するためのマッピング処理。
具体的には、入力パラメータ（inHash）から、サービス契約番号・サービス契約内訳番号・オプションサービスコード・基準年月日等をテンプレート（CAANMsg）にセットする。全ての項目のNull初期化も行う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0351B002SCInMsg（template, inHash, funcCode）"] --> S1["Step1: fillCAANMSGNullMapping（）で全項目をNullセット"]
  S1 --> S2["Step2: テンプレートID（EKK0351B002）をセット"]
  S2 --> S3["Step3: 機能コード（funcCode）をセット"]
  S3 --> S4["Step4: サービス契約番号（SVC_KEI_NO）をセット"]
  S4 --> S5["Step5: サービス契約内訳番号（SVC_KEI_UCWK_NO）をセット"]
  S5 --> S6["Step6: オプションサービスコード（OP_SVC_CD）をセット"]
  S6 --> S7["Step7: 基準年月日（OPE_DATE）をセット"]
  S7 --> END["完了"]
  S4 -.- NOTE_SVC_KEI_NO["SVC_KEI_NO = 'svc_kei_no' （サービス契約番号）"]
  S5 -.- NOTE_SVC_KEI_UCWK_NO["SVC_KEI_UCWK_NO = 'svc_kei_ucwk_no' （サービス契約内訳番号）"]
  S6 -.- NOTE_OP_SVC_CD["OP_SVC_CD = 'op_svc_cd' （オプションサービスコード）"]
  S7 -.- NOTE_OPE_DATE["OPE_DATE = 'ope_date' （基準年月日）"]
  style NOTE_SVC_KEI_NO fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_SVC_KEI_UCWK_NO fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_OP_SVC_CD fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_OPE_DATE fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. fillCAANMSGNullMapping(template, new EKK0351B002CBSMsg().getContents()) で全項目をNullセット。
2. テンプレートID（TEMPLATE_ID_EKK0351B002 = "EKK0351B002"）をセット。
3. 機能コード（funcCode）をセット。
4. サービス契約番号（SVC_KEI_NO = "svc_kei_no"）をinHashから取得しセット。
5. サービス契約内訳番号（SVC_KEI_UCWK_NO = "svc_kei_ucwk_no"）をinHashからセット。
6. オプションサービスコード（OP_SVC_CD = "op_svc_cd"）をinHashからセット。
7. 基準年月日（OPE_DATE = "ope_date"）をinHashからセット。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                | 業務説明                                                    |
| --- | ------------ | ----------------- | ----------------------------------------------------------- |
| 1   | template     | CAANMsg           | マッピング対象となるサービスIF入力メッセージ                |
| 2   | inHash       | HashMap<String,Object> | 入力パラメータ（契約番号や基準日等を格納）                 |
| 3   | funcCode     | String            | 業務機能コード                                              |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B002SCInMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0351B002SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |
### mappingEKK0251B003SCOutCAAMsg()

---

#### 1. 役割

サービス契約回線内訳一覧照会（現在利用中）（EKK0251B003）サービスIFの出力メッセージ（CAANMsg）から、サービス契約回線内訳一覧照会明細リスト（EKK0251B003CBSMsg1List）を抽出して返却する。
具体的には、結果配列（resultMsgs）の最初の要素から getMsgData() メソッドでデータを取得し、EKK0251B003CBSMsg1List キーで CAANMsg[] リストを抽出して返す。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0251B003SCOutCAAMsg（resultMsgs）"] --> S1["Step1: resultMsgs[0] からCAANMsg msgを取得"]
  S1 --> S2["Step2: msg.getMsgData（）.get（EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST） でCAANMsg[]リスト抽出"]
  S2 --> S3["Step3: CAANMsg[]リストをそのまま返却"]
  S3 --> END["完了"]
  S2 -.- NOTE_LIST["EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST = 'EKK0251B003CBSMsg1List' （サービス契約回線内訳一覧照会明細リスト）"]
  style NOTE_LIST fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. resultMsgs[0] のCAANMsgオブジェクト（msg）を取得。
2. msg.getMsgData().get(EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST) でサービス契約回線内訳一覧照会明細リスト（CAANMsg[]）を取得。
3. 取得したCAANMsg[]リストを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型         | 業務説明                        |
| --- | ------------ | ---------- | ------------------------------- |
| 1   | resultMsgs   | CAANMsg[]  | サービスIF（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 → mappingEKK0251B003SCOutCAAMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0251B003SCOutCAAMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0251B003SCCAAMsg` | private | サービス契約回線内訳（現在利用中）SIFを呼び出し |
### mappingEKK0351B010SCInMsg()

---

#### 1. 役割

オプションサービス契約一覧照会（EKK0351B010）サービスIFの入力メッセージを構築するためのマッピング処理。
具体的には、入力パラメータ（inHash）からサービス契約番号・オプションサービスコードをテンプレート（CAANMsg）へセットする。存在しない場合はNullを明示的にセット。機器提供サービス契約番号は常にNullで初期化する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0351B010SCInMsg（template, inHash, funcCode）"] --> S1["Step1: テンプレートID（EKK0351B010）をセット"]
  S1 --> S2["Step2: 機能コード（funcCode）をセット"]
  S2 --> IF1{"inHashにSVC_KEI_NOキーが存在するか"}
  style IF1 fill:#ffcc00
  IF1 -.-> NOTE_SVC_KEI_NO["SVC_KEI_NO = 'svc_kei_no' （サービス契約番号）"]
  IF1 -->|"Yes"| S3a["Step3a: サービス契約番号（SVC_KEI_NO）をセット"]
  IF1 -->|"No"| S3b["Step3b: サービス契約番号（SVC_KEI_NO）をNullセット"]
  S3a --> IF2
  S3b --> IF2
  IF2{"inHashにOP_SVC_CDキーが存在するか"}
  style IF2 fill:#ffcc00
  IF2 -.-> NOTE_OP_SVC_CD["OP_SVC_CD = 'op_svc_cd' （オプションサービスコード）"]
  IF2 -->|"Yes"| S4a["Step4a: オプションサービスコード（OP_SVC_CD）をセット"]
  IF2 -->|"No"| S4b["Step4b: オプションサービスコード（OP_SVC_CD）をNullセット"]
  S4a --> S5
  S4b --> S5
  S5["Step5: 機器提供サービス契約番号をNullセット"]
  S5 --> END["完了"]
```

**処理ステップ詳細:**

1. テンプレートID（TEMPLATE_ID_EKK0351B010 = "EKK0351B010"）をセット。
2. 機能コード（funcCode）をセット。
3. サービス契約番号（SVC_KEI_NO = "svc_kei_no"）がinHashに存在すればセット、なければNullセット。
4. オプションサービスコード（OP_SVC_CD = "op_svc_cd"）がinHashに存在すればセット、なければNullセット。
5. 機器提供サービス契約番号は常にNullでセット。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                | 業務説明                                                    |
| --- | ------------ | ----------------- | ----------------------------------------------------------- |
| 1   | template     | CAANMsg           | サービスIF入力メッセージ                                    |
| 2   | inHash       | HashMap<String,Object> | 入力パラメータ（契約番号やオプションサービスコード等）     |
| 3   | funcCode     | String            | 機能コード                                                  |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351B010SCInMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0351B010SC` | private | オプションサービス契約一覧照会（サービス契約番号）SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `mappingEKK0351B010SCInMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(inHash.containsKey(JKKHakkoSODConstCC.SVC_KEI_NO))` [SVC_KEI_NO="svc_kei_no"] (L28867)

> 📌 サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0351B010CBSMsg.KEY_SVC_KEI_NO, inHash.get(JKKHakkoSODConstCC.SVC_KEI_NO));` [➔ KEY_SVC_KEI_NO="key_svc_kei_no", SVC_KEI_NO="svc_kei_no"] \| [➔ SVC_KEI_NO="svc_kei_no" (サービス契約番号)] |

##### Block 2 — ↪️ ELSE `(else)` (L28872)

> 📌 オプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0351B010CBSMsg.KEY_SVC_KEI_NO);` [➔ KEY_SVC_KEI_NO="key_svc_kei_no"] \| |

##### Block 3 — 🔀 IF `(inHash.containsKey(JKKHakkoSODConstCC.OP_SVC_CD))` [OP_SVC_CD="op_svc_cd"] (L28877)

> 📌 オプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0351B010CBSMsg.KEY_OP_SVC_CD, inHash.get(JKKHakkoSODConstCC.OP_SVC_CD));` [➔ KEY_OP_SVC_CD="key_op_svc_cd", OP_SVC_CD="op_svc_cd"] \| [➔ OP_SVC_CD="op_svc_cd" (オプションサービスコード)] |

##### Block 4 — ↪️ ELSE `(else)` (L28882)

> 📌 機器提供サービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `template.setNull(EKK0351B010CBSMsg.KEY_OP_SVC_CD);` [➔ KEY_OP_SVC_CD="key_op_svc_cd"] \| |

> **合計**: 4 blocks (1 depth levels)

### mappingEKK0341B504SCInMsg()

---

#### 1. 役割

機器提供サービス契約一覧照会（サービス契約回線内訳）（EKK0341B504）サービスIFの入力メッセージを構築するためのマッピング処理。
具体的には、入力パラメータ（inHash）からサービス契約回線内訳番号をテンプレート（CAANMsg）へセットする。全フィールドをNull初期化してからテンプレートID、機能コードもセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0341B504SCInMsg（template, inHash, funcCode）"] --> S1["Step1: fillCAANMSGNullMapping（）で全項目をNullセット"]
  S1 --> S2["Step2: テンプレートID（EKK0341B504）をセット"]
  S2 --> S3["Step3: 機能コード（funcCode）をセット"]
  S3 --> S4["Step4: サービス契約回線内訳番号（SVC_KEI_KAISEN_UCWK_NO）をセット"]
  S4 --> END["完了"]
  S4 -.- NOTE_SVC_KEI_KAISEN_UCWK_NO["SVC_KEI_KAISEN_UCWK_NO = 'svc_kei_kaisen_ucwk_no' （サービス契約回線内訳番号）"]
  style NOTE_SVC_KEI_KAISEN_UCWK_NO fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. fillCAANMSGNullMapping(template, new EKK0341B504CBSMsg().getContents()) により全フィールドNull初期化。
2. テンプレートID（TEMPLATE_ID_EKK0341B504 = "EKK0341B504"）をセット。
3. 機能コード（funcCode）をセット。
4. サービス契約回線内訳番号（SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no"）をセット。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                | 業務説明                                                        |
| --- | ------------ | ----------------- | --------------------------------------------------------------- |
| 1   | template     | CAANMsg           | サービスIF入力メッセージ                                        |
| 2   | inHash       | HashMap<String,Object> | 入力パラメータ（サービス契約回線内訳番号を含む）               |
| 3   | funcCode     | String            | 機能コード                                                      |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0341B504SCInMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0341B504SC` | private | 機器提供サービス契約一覧照会（サービス契約回線内訳）SIFを呼び出し |
### mappingEKK0361A010SCOutMsg()

---

#### 1. 役割

オプションサービス契約＜ISP＞一意照会（EKK0361A010）サービスIFの出力メッセージ（CAANMsg[]）から、照会結果の1件目の明細（EKK0361A010CBSMsg1List）をHashMapとして抽出し返却する。
具体的には、最初のCAANMsgからメッセージリストを取り出し、1件以上なら1件目のデータを返却。0件なら空のHashMapを返却。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0361A010SCOutMsg（resultMsgs）"] --> S1["Step1: resultMsgs[0] のCAANMsgを取得"]
  S1 --> S2["Step2: msg.getMsgData（）.get（EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST） でCAANMsg[]リスト取得"]
  S2 --> IF1{"msgListがnullまたは空か判定"}
  style IF1 fill:#ffcc00
  IF1 -->|"Yes: 空"| S3a["Step3a: 空のHashMapを返却"]
  IF1 -->|"No: 1件以上"| S3b["Step3b: msgList[0].getMsgData（）を返却"]
  S3a --> END["完了"]
  S3b --> END
  S2 -.- NOTE_LIST["EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST = 'EKK0361A010CBSMsg1List' （オプションサービス契約ISP一意照会明細リスト）"]
  style NOTE_LIST fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. resultMsgs[0] のCAANMsgオブジェクト（msg）を取得。
2. msg.getMsgData().get(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST) で明細リスト（CAANMsg[]）を取得。
3. msgListがnullまたは空の場合は空のHashMapを返却。1件以上の場合はmsgList[0].getMsgData()（1件目の明細データ）を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型         | 業務説明                                              |
| --- | ------------ | ---------- | ----------------------------------------------------- |
| 1   | resultMsgs   | CAANMsg[]  | サービスIF（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 → mappingEKK0361A010SCOutMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0361A010SCOutMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0361A010SC` | private | オプションサービス契約＜ISP＞一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `mappingEKK0361A010SCOutMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(null == msgList || 0 == msgList.length)` (L28607)

> 📌 結果の取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retHash = new HashMap<String, Object>();` |

##### Block 2 — ↪️ ELSE `(else)` (L28612)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retHash = msgList[0].getMsgData();` |

> **合計**: 2 blocks (1 depth levels)

### mappingEKK0351A010SCOutMsg()

---

#### 1. 役割

オプションサービス契約一意照会（EKK0351A010）サービスIFの出力メッセージ（CAANMsg[]）から、1件目の明細データをHashMapとして抽出し返却する。
具体的には、最初のCAANMsgからメッセージリストを取り出し、1件以上なら1件目のデータを返却。0件なら空のHashMapを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0351A010SCOutMsg（resultMsgs）"] --> S1["Step1: resultMsgs[0] のCAANMsgを取得"]
  S1 --> S2["Step2: msg.getMsgData（）.get（EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST） でCAANMsg[]リスト取得"]
  S2 --> IF1{"msgListがnullまたは空か判定"}
  style IF1 fill:#ffcc00
  IF1 -->|"Yes: 空"| S3a["Step3a: 空のHashMapを返却"]
  IF1 -->|"No: 1件以上"| S3b["Step3b: msgList[0].getMsgData（）を返却"]
  S3a --> END["完了"]
  S3b --> END
  S2 -.- NOTE_LIST["EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST = 'EKK0351A010CBSMsg1List' （オプションサービス契約一意照会明細リスト）"]
  style NOTE_LIST fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. resultMsgs[0] のCAANMsgオブジェクト（msg）を取得。
2. msg.getMsgData().get(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST) で明細リスト（CAANMsg[]）を取得。
3. msgListがnullまたは空の場合は空のHashMapを返却。1件以上の場合はmsgList[0].getMsgData()（1件目の明細データ）を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型         | 業務説明                                              |
| --- | ------------ | ---------- | ----------------------------------------------------- |
| 1   | resultMsgs   | CAANMsg[]  | サービスIF（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 → mappingEKK0351A010SCOutMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0351A010SCOutMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0351A010SC` | private | オプションサービス契約一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `mappingEKK0351A010SCOutMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(null == msgList || 0 == msgList.length)` (L28467)

> 📌 結果の取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retHash = new HashMap<String, Object>();` |

##### Block 2 — ↪️ ELSE `(else)` (L28472)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retHash = msgList[0].getMsgData();` |

> **合計**: 2 blocks (1 depth levels)

### mappingEKK0161B003SCInMsg()

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID）（EKK0161B003）サービスIFの入力メッセージを構築するためのマッピング処理。
具体的には、入力パラメータ（inHash）からSYSIDをテンプレート（CAANMsg）へセットし、Null初期化と機能コードもセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0161B003SCInMsg（template, inHash, funcCode）"] --> S1["Step1: fillCAANMSGNullMapping（）で全項目をNullセット"]
  S1 --> S2["Step2: テンプレートID（EKK0161B003）をセット"]
  S2 --> S3["Step3: 機能コード（funcCode）をセット"]
  S3 --> S4["Step4: SYSIDをセット"]
  S4 --> END["完了"]
  S4 -.- NOTE_SYSID["SYSID = 'sysid' （サービス契約内訳一覧照会（SYSID））"]
  style NOTE_SYSID fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. fillCAANMSGNullMapping(template, new EKK0161B003CBSMsg().getContents()) で全項目をNullセット。
2. テンプレートID（TEMPLATE_ID_EKK0161B003 = "EKK0161B003"）をセット。
3. 機能コード（funcCode）をセット。
4. SYSID（SYSID = "sysid"）をinHashからセット。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                | 業務説明                                                    |
| --- | ------------ | ----------------- | ----------------------------------------------------------- |
| 1   | template     | CAANMsg           | サービスIF入力メッセージ                                    |
| 2   | inHash       | HashMap<String,Object> | 入力パラメータ（SYSIDを含む）                              |
| 3   | funcCode     | String            | 機能コード                                                  |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0161B003SCInMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0161B003SC` | private | サービス契約内訳一覧照会（SYSID）SIFを呼び出し |
### mappingEKK0191A010SCOutMsg()

---

#### 1. 役割

サービス契約内訳＜eo光電話＞一意照会（EKK0191A010）サービスIFの出力メッセージ（CAANMsg[]）から、1件目の明細データをHashMapとして抽出し返却する。
具体的には、最初のCAANMsgからメッセージリストを取り出し、1件以上なら1件目のデータを返却。0件なら空のHashMapを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0191A010SCOutMsg（resultMsgs）"] --> S1["Step1: resultMsgs[0] のCAANMsgを取得"]
  S1 --> S2["Step2: msg.getMsgData（）.get（EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST） でCAANMsg[]リスト取得"]
  S2 --> IF1{"msgListがnullまたは空か判定"}
  style IF1 fill:#ffcc00
  IF1 -->|"Yes: 空"| S3a["Step3a: 空のHashMapを返却"]
  IF1 -->|"No: 1件以上"| S3b["Step3b: msgList[0].getMsgData（）を返却"]
  S3a --> END["完了"]
  S3b --> END
  S2 -.- NOTE_LIST["EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST = 'EKK0191A010CBSMsg1List' （サービス契約内訳＜eo光電話＞一意照会明細リスト）"]
  style NOTE_LIST fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. resultMsgs[0] のCAANMsgオブジェクト（msg）を取得。
2. msg.getMsgData().get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST) で明細リスト（CAANMsg[]）を取得。
3. msgListがnullまたは空の場合は空のHashMapを返却。1件以上の場合はmsgList[0].getMsgData()（1件目の明細データ）を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型         | 業務説明                                              |
| --- | ------------ | ---------- | ----------------------------------------------------- |
| 1   | resultMsgs   | CAANMsg[]  | サービスIF（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 → mappingEKK0191A010SCOutMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCOutMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0191A010SC` | protected | サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し |

---

#### 📋 Per-Branch 詳細ブロック — `mappingEKK0191A010SCOutMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(null == msgList || 0 == msgList.length)` (L28062)

> 📌 結果の取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retHash = new HashMap<String, Object>();` |

##### Block 2 — ↪️ ELSE `(else)` (L28067)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `retHash = msgList[0].getMsgData();` |

> **合計**: 2 blocks (1 depth levels)

### mappingEKK0191A010SCInMsg()

---

#### 1. 役割

サービス契約内訳＜eo光電話＞一意照会（EKK0191A010）サービスIFの入力メッセージを構築するためのマッピング処理。
具体的には、入力パラメータ（inHash）からサービス契約内訳番号・世代登録年月日時分秒（機能コード1時）をテンプレート（CAANMsg）へセットする。全項目のNull初期化も行う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["mappingEKK0191A010SCInMsg（template, inHash, funcCode）"] --> S1["Step1: fillCAANMSGNullMapping（）で全項目をNullセット"]
  S1 --> S2["Step2: テンプレートID（EKK0191A010）をセット"]
  S2 --> S3["Step3: 機能コード（funcCode）をセット"]
  S3 --> S4["Step4: サービス契約内訳番号（SVC_KEI_UCWK_NO）をセット"]
  S4 --> IF1{"funcCode == FUNC_CODE_1 か判定"}
  style IF1 fill:#ffcc00
  IF1 -.-> NOTE_FC1["FUNC_CODE_1 = '1'"]
  IF1 -->|"Yes"| S5a["Step5a: 世代登録年月日時分秒（GENE_ADD_DTM）をセット"]
  IF1 -->|"No"| S5b["Step5b: 何もせず終了"]
  S5a --> END["完了"]
  S5b --> END
  S4 -.- NOTE_SVC_KEI_UCWK_NO["SVC_KEI_UCWK_NO = 'svc_kei_ucwk_no' （サービス契約内訳番号）"]
  S5a -.- NOTE_GENE_ADD_DTM["GENE_ADD_DTM = 'gene_add_dtm' （世代登録年月日時分秒）"]
  style NOTE_SVC_KEI_UCWK_NO fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_GENE_ADD_DTM fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. fillCAANMSGNullMapping(template, new EKK0191A010CBSMsg().getContents()) で全項目をNullセット。
2. テンプレートID（TEMPLATE_ID_EKK0191A010 = "EKK0191A010"）をセット。
3. 機能コード（funcCode）をセット。
4. サービス契約内訳番号（SVC_KEI_UCWK_NO = "svc_kei_ucwk_no"）をセット。
5. 機能コードが FUNC_CODE_1 = "1" の場合、世代登録年月日時分秒（GENE_ADD_DTM = "gene_add_dtm"）をセット。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                | 業務説明                                                    |
| --- | ------------ | ----------------- | ----------------------------------------------------------- |
| 1   | template     | CAANMsg           | サービスIF入力メッセージ                                    |
| 2   | inHash       | HashMap<String,Object> | 入力パラメータ（契約内訳番号や世代登録日時等）             |
| 3   | funcCode     | String            | 機能コード                                                  |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → mappingEKK0191A010SCInMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0191A010SC` | protected | サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し |
---
---

#### 📋 Per-Branch 詳細ブロック — `mappingEKK0191A010SCInMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(JKKHakkoSODConstCC.FUNC_CODE_1.equals(funcCode))` [FUNC_CODE_1="1"] (L28038)

> 📌 機能コードにより分岐

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `template.set(EKK0191A010CBSMsg.KEY_GENE_ADD_DTM, inHash.get(JKKHakkoSODConstCC.GENE_ADD_DTM));` [➔ KEY_GENE_ADD_DTM="key_gene_add_dtm", GENE_ADD_DTM="gene_add_dtm"] \| [➔ GENE_ADD_DTM="gene_add_dtm" (世代登録年月日時分秒)] |

> **合計**: 1 blocks (1 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)

### `mappingEKK0191A010SCOutMsg()` (L28049) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (null == msgList ｜｜ 0 == msgList.length) | 結果の取得 | - | - | L28062 |
| 2 | 🔀 ELSE | D0 | (else) | - | - | - | L28067 |
| 3 | ↩️ RETURN | D0 | retHash | - | - | - | L28070 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["mappingEKK0191A010SCOutMsg()"] --> CF0{"制御フロー分岐"}
  B0["IF: （null == msgList || 0 == msgList.length）"]
  CF0 -->|"L28062"| B0
  B1["ELSE"]
  CF0 -->|"L28067"| B1
  B2["RETURN: retHash"]
  CF0 -->|"L28070"| B2
```

### `mappingEKK0351A010SCInMsg()` (L28415) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (JKKHakkoSODConstCC.FUNC_CODE_1.equals(funcCode)) | 機能コードにより分岐 | FUNC_CODE_1=1, GENE_ADD_DTM=gene_add_dtm, OPE_DATE=ope_date | - | L28431 |
| 2 | 🔀 ELSE-IF | D0 | (JKKHakkoSODConstCC.FUNC_CODE_2.equals(funcCode)) | ↓↓↓2013-07-19変更　巻３KT1-2013-0000728（フェムトセル取込でドメインエラーになった）↓↓↓ | FUNC_CODE_2=2, OPE_DATE=ope_date | - | L28435 |
| 3 | · 🔀 IF | D1 | (isBlank(inOpeDate)) | template.set(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, inHash.get(JKKHakkoSODConstCC.OPE_DATE)); | - | - | L28440 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["mappingEKK0351A010SCInMsg()"] --> CF0{"制御フロー分岐"}
  B0["IF: （FUNC_CODE_1（=1）.equals（f…"]
  CF0 -->|"L28431"| B0
  subgraph SG1["ELSE-IF: （FUNC_CODE_2（=2）.equals（f…"]
    direction TB
    C1_0["IF: （isBlank（inOpeDate））"]
  end
  CF0 -->|"L28435"| SG1
```

### `mappingEKK0351A010SCOutMsg()` (L28453) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (null == msgList ｜｜ 0 == msgList.length) | 結果の取得 | - | - | L28467 |
| 2 | 🔀 ELSE | D0 | (else) | - | - | - | L28472 |
| 3 | ↩️ RETURN | D0 | retHash | - | - | - | L28475 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["mappingEKK0351A010SCOutMsg()"] --> CF0{"制御フロー分岐"}
  B0["IF: （null == msgList || 0 == msgList.length）"]
  CF0 -->|"L28467"| B0
  B1["ELSE"]
  CF0 -->|"L28472"| B1
  B2["RETURN: retHash"]
  CF0 -->|"L28475"| B2
```

### `mappingEKK0351B010SCInMsg()` (L28855) — 4 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (inHash.containsKey(JKKHakkoSODConstCC.SVC_KEI_NO)) | サービス契約番号 | SVC_KEI_NO=svc_kei_no, OP_SVC_CD=op_svc_cd | - | L28867 |
| 2 | 🔀 ELSE | D0 | (else) | オプションサービスコード | OP_SVC_CD=op_svc_cd | - | L28872 |
| 3 | 🔀 IF | D0 | (inHash.containsKey(JKKHakkoSODConstCC.OP_SVC_CD)) | オプションサービスコード | OP_SVC_CD=op_svc_cd | - | L28877 |
| 4 | 🔀 ELSE | D0 | (else) | 機器提供サービス契約番号 | - | - | L28882 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["mappingEKK0351B010SCInMsg()"] --> CF0{"制御フロー分岐"}
  B0["IF: （inHash.containsKey（JKKHakkoSODConstCC.S…"]
  CF0 -->|"L28867"| B0
  B1["ELSE"]
  CF0 -->|"L28872"| B1
  B2["IF: （inHash.containsKey（JKKHakkoSODConstCC.O…"]
  CF0 -->|"L28877"| B2
  B3["ELSE"]
  CF0 -->|"L28882"| B3
```

### `mappingEKK0361A010SCOutMsg()` (L28593) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (null == msgList ｜｜ 0 == msgList.length) | 結果の取得 | - | - | L28607 |
| 2 | 🔀 ELSE | D0 | (else) | - | - | - | L28612 |
| 3 | ↩️ RETURN | D0 | retHash | - | - | - | L28617 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["mappingEKK0361A010SCOutMsg()"] --> CF0{"制御フロー分岐"}
  B0["IF: （null == msgList || 0 == msgList.length）"]
  CF0 -->|"L28607"| B0
  B1["ELSE"]
  CF0 -->|"L28612"| B1
  B2["RETURN: retHash"]
  CF0 -->|"L28617"| B2
```

> **制御フロー合計**: 5 methods, 16 branches
