# ⑥ 業務ロジック — Query (Get): 8 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-getKktkSvcKeiList"></a>

---

#### 📋 Per-Branch 詳細ブロック — `getKktkSvcKeiList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(0 != statusCode)` (L22950)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

##### Block 2 — 🔁 FOR `(for)` (L22964)

> 📌 if(msgListKktk != null && msgListKktk.length > 0)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `eKK0341B002Hash = msgListKktk[i].getMsgData();` |

###### · Block 2.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(kktk_svc_kei_stat))` [SVC_KEI_STAT_920="920"] (L22972)

> 📌 オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

##### Block 1 — 🔀 IF `(dataMap != null)` (L23034)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔁 FOR `(for)` (L23037)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L23040)

> 📌 ↓↓↓2013-03-01変更　ロット２ST2-2013-0000764対応（巻３で追加された機器のZ5オーダが出ない）↓↓↓

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String pcrsCd = (String)childMap.get(EKK0341B002CBSMsg1List.PCRS_CD);` // 機器提供サービス契約の料金コース [➔ PCRS_CD="pcrs_cd"] \| |

###### ··· Block 1.1.1.1 — 🔀 IF `(null == ekk0791a010List || 1 > ekk0791a010List.size())` (L23052)

> 📌 機器提供サービス契約の料金コース

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ··· Block 1.1.1.2 — 🔀 IF `(kktkSvcCd.equals(JKKHakkoSODConstCC.KKTK_SVC_CD_MOB_UQ))` [KKTK_SVC_CD_MOB_UQ="C017"] (L23059)

> 📌 機器提供サービスコードが「eoモバイル機器　ＵＱ用」ならＯＫ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `kktk_svc_kei_no[index_cui] = (String)childMap.get("kktk_svc_kei_no");` |
| 2 | 📥 GET | `kktk_svc_kei_gadtm[index_cui] = (String)childMap.get("gene_add_dtm");` |
| 3 | 📥 GET | `taknkiki_model_cd[index_cui] = (String)childMap.get("taknkiki_model_cd");` |
| 4 | 📥 GET | `kiki_seizo_no[index_cui] = (String)childMap.get("kiki_seizo_no");` |
| 5 | 📥 GET | `kktk_svc_kei_no[index_dev] = (String)childMap.get("kktk_svc_kei_no");` |
| 6 | 📥 GET | `kktk_svc_kei_gadtm[index_dev] = (String)childMap.get("gene_add_dtm");` |
| 7 | 📥 GET | `taknkiki_model_cd[index_dev] = (String)childMap.get("taknkiki_model_cd");` |
| 8 | 📥 GET | `kiki_seizo_no[index_dev] = (String)childMap.get("kiki_seizo_no");` |

> **合計**: 8 blocks (4 depth levels)

### getKktkSvcKeiList(SessionHandle handle, IRequestParameterReadWrite param)

---

#### 1. 役割

機器提供サービス契約一覧照会処理。  
具体的には、リクエストパラメータからサービス契約番号などの必要情報を取得し、SC（サービスコンポーネント）で「機器提供サービス契約一覧照会（EKK0341B002）」を実行する。取得結果を下りマッピングして、各機器提供サービス（UQ WiMAX等）に該当する契約情報（CUI, DEV等）を配列にセットする。  
本メソッドは機器提供サービス契約に紐づく機器型式コードや製造番号も配列で管理し、UQ WiMAX等の特定条件を満たす場合のみ、対象データを設定する共通処理である。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getKktkSvcKeiList（handle, param）"] --> S1["Step1: 上りマッピング editInMsg_EKK0341B002CBS（param）"]
  S1 --> S2["Step2: SC呼び出し ServiceComponentRequestInvoker.run（paramMap, handle）"]
  S2 --> S3["Step3: 下りマッピング editResultRP_EKK0341B002CBS（result, param）"]
  S3 --> S4["Step4: dataMap取得 param.getData（HAKKOSODCCWORKMAP）"]
  S4 -.- NOTE_HAKKOSODCCWORKMAP["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK' （作業マップ）"]
  S4 --> IF1{"'dataMap != null'"}
  IF1 -->|"Yes"| S5["Step5: dataList取得 dataMap.get（EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST）"]
  S5 -.- NOTE_EKK0341B002CBSMsg1LIST["EKK0341B002CBSMsg1LIST = 'EKK0341B002CBSMsg1List' （機器提供サービス契約一覧）"]
  S5 --> S6["Step6: 配列初期化 taknkiki_model_cd, kiki_seizo_no, kktk_svc_kei_no, ..."]
  S6 --> FOR1["for （各childMap in dataList）"]
  FOR1 --> IF2{"childMap != null"}
  IF2 -->|"Yes"| S7["Step7: 料金コースコード取得 childMap.get（EKK0341B002CBSMsg1List.PCRS_CD）"]
  S7 -.- NOTE_PCRS_CD["PCRS_CD = 'pcrs_cd' （料金コースコード）"]
  S7 --> S8["Step8: callEKK0791A010SC（param, handle, pcrsCd, JKKBpCommon.getOpeDate（null））"]
  S8 --> IF3{"ekk0791a010List == null or size < 1"}
  IF3 -->|"Yes"| FOR1
  IF3 -->|"No"| S9["Step9: kktkSvcCd取得 ekk0791a010List[0].get（EKK0791A010CBSMsg1List.KKTK_SVC_CD）"]
  S9 -.- NOTE_KKTK_SVC_CD["KKTK_SVC_CD = 'kktk_svc_cd' （機器提供サービスコード）"]
  S9 --> IF4{"kktkSvcCd.equals（KKTK_SVC_CD_MOB_UQ）"}
  IF4 -.- NOTE_KKTK_SVC_CD_MOB_UQ["KKTK_SVC_CD_MOB_UQ = 'C017' （eoモバイル機器 UQ用）"]
  IF4 -->|"Yes"| S10["Step10: 各配列（CUI, DEV）に値をセット"]
  IF4 -->|"No"| FOR1
  S10 --> FOR1
  FOR1 --> S11["Step11: 全ループ終了"]
  S11 --> RET["return param"]
  IF1 -->|"No"| RET

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

**処理ステップ詳細:**

1. 上りマッピング `editInMsg_EKK0341B002CBS(param)` を実行し、SC呼び出し用パラメータを作成。
2. サービスコンポーネント呼び出し部品 `ServiceComponentRequestInvoker.run(paramMap, handle)` を利用して照会を実行。
3. 下りマッピング `editResultRP_EKK0341B002CBS(result, param)` で取得データを格納。
4. 取得したデータは `param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)` から `dataMap` として取得。
5. `dataMap` が存在する場合、`EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST` から `dataList` を取得。
6. 配列（`taknkiki_model_cd`, `kiki_seizo_no`, `kktk_svc_kei_no`, ...）をサイズ3で初期化。
7. `dataList` の各要素ごとにループし、`childMap` がnullでない場合に処理を行う。
8. `childMap` から `pcrsCd`（料金コースコード）を取得し、`callEKK0791A010SC(param, handle, pcrsCd, JKKBpCommon.getOpeDate(null))` でSC呼び出し、取得リスト `ekk0791a010List` を得る。
9. 取得リストがnullまたは空の場合は次のループへ。
10. リストが存在する場合、先頭要素の `EKK0791A010CBSMsg1List.KKTK_SVC_CD` を取得し、`KKTK_SVC_CD_MOB_UQ`（"C017"）と一致すればCUI/DEVの各配列に機器関連情報をセット。
11. すべてのループ処理が終わればparamを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEKK0341B002SC` | EKK0341B002SC | KK_T_KKTK_SVC_KEI, KK_T_KAISEN_TG_SVKEI, KK_T_SVKEI_KAISEN_UW, KK_T_KKOP_SVC_KEI, KK_M_KKTK_SVC, ZM_M_TAKNKIKI_MODEL, KK_T_WRISVC_TG_KEI, KK_T_WRIB_SVC_KEI, KK_T_KAP_KEI, KK_M_KAP_PLAN, KU_T_KOJIAK, KK_M_PPLAN, KK_T_MSKM_DTL, KK_M_PCRS, ZM_M_CD_NM_KANRI, KK_T_SVC_KEI_UCWK, KU_T_KJAK_TG_TKKIKI, KK_M_PRC_GRP, DK_M_SOKO, DK_T_HAISO_TG_BPIN, DK_T_HAISO, DK_T_HMPIN_KIKI, KK_T_KAKINS, KU_T_SVKEI_KOJIAK, KK_M_KIKI_ATKN_TGMDL, KK_M_KKMDL_TG_PCRS, ZM_M_MAKER, CK_T_CUST, ZM_M_KOJI_COMP_SLF, ZM_M_YTK_SK_OFFC_SLF, KK_T_SVC_KEI, KK_T_OP_SVC_KEI, KK_T_IDO_RSV, KK_M_PCRS_OP_SVC, KK_M_OP_SVC, KK_T_OPSVKEI_TV, KU_T_MKSYICHI_AKI_IF, KK_M_SVCBT_TKMDL_KHO, CH_M_PRC_SCHDL_TEIGI, C021 | (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し) |
| R | `callEKK0791A010SC` | EKK0791A010SC | - | (EKK0791A010 料金コース一意照会を実行します) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getKktkSvcKeiList` | `callEKK0341B002SC [R] KK_T_KKTK_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_SVKEI_KAISEN_UW/KK_T_KKOP_SVC_KEI/KK_M_KKTK_SVC/ZM_M_TAKNKIKI_MODEL/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_T_KAP_KEI/KK_M_KAP_PLAN/KU_T_KOJIAK/KK_M_PPLAN/KK_T_MSKM_DTL/KK_M_PCRS/ZM_M_CD_NM_KANRI/KK_T_SVC_KEI_UCWK/KU_T_KJAK_TG_TKKIKI/KK_M_PRC_GRP/DK_M_SOKO/DK_T_HAISO_TG_BPIN/DK_T_HAISO/DK_T_HMPIN_KIKI/KK_T_KAKINS/KU_T_SVKEI_KOJIAK/KK_M_KIKI_ATKN_TGMDL/KK_M_KKMDL_TG_PCRS/ZM_M_MAKER/CK_T_CUST/ZM_M_KOJI_COMP_SLF/ZM_M_YTK_SK_OFFC_SLF/KK_T_SVC_KEI/KK_T_OP_SVC_KEI/KK_T_IDO_RSV/KK_M_PCRS_OP_SVC/KK_M_OP_SVC/KK_T_OPSVKEI_TV/KU_T_MKSYICHI_AKI_IF/KK_M_SVCBT_TKMDL_KHO/CH_M_PRC_SCHDL_TEIGI/C021 (機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し)`<br>`callEKK0791A010SC [R] - (EKK0791A010 料金コース一意照会を実行します)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newEoMobile` | private | モバイルサービス新規契約処理<br> <br> (1)料金グループが「ｅｏモバイル（ＥＭ）」または「ｅｏモバイル（ＵＱ－ＷｉＭＡＸ）」の場合(2)(3)、それ以外の場合は(3)の処理を行う。<br> (2)料金グループが「ｅｏモバイル（ＥＭ… |
| 2 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getKktkSvcKeiList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(0 != statusCode)` (L22950)

> 📌 ユーザデータ情報

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

##### Block 2 — 🔁 FOR `(for)` (L22964)

> 📌 if(msgListKktk != null && msgListKktk.length > 0)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `eKK0341B002Hash = msgListKktk[i].getMsgData();` |

###### · Block 2.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(kktk_svc_kei_stat))` [SVC_KEI_STAT_920="920"] (L22972)

> 📌 オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

##### Block 1 — 🔀 IF `(dataMap != null)` (L23034)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔁 FOR `(for)` (L23037)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L23040)

> 📌 ↓↓↓2013-03-01変更　ロット２ST2-2013-0000764対応（巻３で追加された機器のZ5オーダが出ない）↓↓↓

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String pcrsCd = (String)childMap.get(EKK0341B002CBSMsg1List.PCRS_CD);` // 機器提供サービス契約の料金コース [➔ PCRS_CD="pcrs_cd"] \| |

###### ··· Block 1.1.1.1 — 🔀 IF `(null == ekk0791a010List || 1 > ekk0791a010List.size())` (L23052)

> 📌 機器提供サービス契約の料金コース

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ··· Block 1.1.1.2 — 🔀 IF `(kktkSvcCd.equals(JKKHakkoSODConstCC.KKTK_SVC_CD_MOB_UQ))` [KKTK_SVC_CD_MOB_UQ="C017"] (L23059)

> 📌 機器提供サービスコードが「eoモバイル機器　ＵＱ用」ならＯＫ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `kktk_svc_kei_no[index_cui] = (String)childMap.get("kktk_svc_kei_no");` |
| 2 | 📥 GET | `kktk_svc_kei_gadtm[index_cui] = (String)childMap.get("gene_add_dtm");` |
| 3 | 📥 GET | `taknkiki_model_cd[index_cui] = (String)childMap.get("taknkiki_model_cd");` |
| 4 | 📥 GET | `kiki_seizo_no[index_cui] = (String)childMap.get("kiki_seizo_no");` |
| 5 | 📥 GET | `kktk_svc_kei_no[index_dev] = (String)childMap.get("kktk_svc_kei_no");` |
| 6 | 📥 GET | `kktk_svc_kei_gadtm[index_dev] = (String)childMap.get("gene_add_dtm");` |
| 7 | 📥 GET | `taknkiki_model_cd[index_dev] = (String)childMap.get("taknkiki_model_cd");` |
| 8 | 📥 GET | `kiki_seizo_no[index_dev] = (String)childMap.get("kiki_seizo_no");` |

> **合計**: 8 blocks (4 depth levels)

### getSbOpSvcKeiList(SessionHandle handle, IRequestParameterReadWrite param)

---

#### 1. 役割

サブオプションサービス契約一覧（Ｅメール・Ｍｙホームページ等）を照会し、該当するサブオプションサービス（メールエイリアス、メール容量追加、メールウィルスチェック、ホームページ容量追加、ホームページアクセス分析）などの存在判定と管理情報を取得・格納する。  
具体的には、対象となるオプションサービス契約番号ごとにSC（EKK0401B001）を呼び出し、照会結果からサブオプションサービスの存在や契約状態（キャンセル済等）を判定し、内部フラグや管理用マップ（エイリアス、メール容量追加、ウィルスチェック等）に格納する。  
本メソッドは複数の内部メソッドから呼ばれる共通処理となっている。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSbOpSvcKeiList（handle, param）"] --> S1["Step1: param.getData（HAKKOSODCCWORKMAP） 取得"]
  S1 -.- NOTE_HAKKOSODCCWORKMAP["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK' （作業マップ）"]
  S1 --> IF1{"iMap != null"}
  IF1 -->|"Yes"| LOOP1["for （op_svc_kei_no_ml_mapの各entry）"]
  LOOP1 --> S2["Step2: iMap.put（'op_svc_kei_no', entry.key）"]
  S2 --> S3["Step3: 上りマッピング editInMsg_EKK0401B001CBS（param）"]
  S3 --> S4["Step4: SC呼び出し ServiceComponentRequestInvoker.run（paramMap, handle）"]
  S4 --> S5["Step5: 下りマッピング editResultRP_EKK0401B001CBS（result, param）"]
  S5 --> S6["Step6: dataMapからdataList（EKK0401B001CBSMsg1List）取得"]
  S6 -.- NOTE_EKK0401B001CBSMsg1List["EKK0401B001CBSMsg1List = サブオプションサービス契約一覧"]
  S6 --> LOOP2["for （dataListの各childMap）"]
  LOOP2 --> IF2{"childMap != null"}
  IF2 -->|"Yes"| S7["Step7: サブオプションサービスコード取得 childMap.get（'sbop_svc_cd'）"]
  S7 --> S8["Step8: サブオプションサービス契約番号、世代取得"]
  S8 --> IF3{"childMap.get（'sbop_svc_kei_stat'） == SVC_KEI_STAT_920"}
  IF3 -.- NOTE_SVC_KEI_STAT_920["SVC_KEI_STAT_920 = '920' （キャンセル済）"]
  IF3 -->|"Yes: キャンセル済"| LOOP2
  IF3 -->|"No: 有効"| IF4{"sbop_svc_cdの値"}
  IF4 -->|"D01 （メールエイリアス）"| S9["Step9: sbop_svckeino_alias_mapに格納、alias_flg = true"]
  IF4 -->|"D02 （メール容量追加）"| S10["Step10: mlcapa_flg_listに格納"]
  IF4 -->|"D03 （メールウィルスチェック）"| S11["Step11: sbop_svckeino_mlvirus_mapに格納、mlvirus_flg = true"]
  IF4 -->|"D04 （ホームページ容量追加）"| S12["Step12: hpcapa_flg = true"]
  IF4 -->|"D05 （ホームページアクセス分析）"| S13["Step13: hpaccess_flg = true"]
  IF4 -->|"その他"| LOOP2
  S9 --> LOOP2
  S10 --> LOOP2
  S11 --> LOOP2
  S12 --> LOOP2
  S13 --> LOOP2
  LOOP2 --> S14["dataList.clear（）, dataMap.put（'EKK0401B001CBSMsg1List', dataList）"]
  S14 --> LOOP1
  LOOP1 --> IF5{"op_svc_kei_no_hp != null && op_svc_kei_no_hp != ''"}
  IF5 -->|"Yes"| S15["Step15: 上記と同様にホームページサブオプションサービスを照会・判定"]
  IF5 -->|"No"| S16["Step16: return param"]
  IF1 -->|"No"| IF5
  IF5 --> S16

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
```

**処理ステップ詳細:**

1. 業務データマップを `param.getData(JKKHakkoSODCCWORKMAP)` から取得。
2. `iMap`（業務データマップ）がnullでなければ、`op_svc_kei_no_ml_map` の各エントリ（メールアドレス単位のオプションサービス契約番号）についてループ。
3. 各エントリごとに `iMap.put("op_svc_kei_no", entry.key)` でオプションサービス契約番号をセットし、`param`に格納。
4. 上りマッピング `editInMsg_EKK0401B001CBS(param)` でリクエストを作成し、SC呼び出し実行。
5. 下りマッピング `editResultRP_EKK0401B001CBS(result, param)` でデータを格納。
6. dataMap（`JKKHakkoSODCC.HAKKOSODCCWORKMAP`）から `EKK0401B001CBSMsg1List`（サブオプションサービス契約一覧）を取得。
7. 各childMapごとに
   - サブオプションサービスコード（sbop_svc_cd）、契約番号、世代登録日時等を取得
   - 契約ステータスが `SVC_KEI_STAT_920`（キャンセル済）の場合はスキップ（continue）
   - サブオプションサービスコード（D01:メールエイリアス、D02:メール容量追加、D03:メールウィルスチェック等）ごとに、該当フラグや管理マップに格納
8. データリストをクリアして、マップに再格納
9. `op_svc_kei_no_hp`（Ｍｙホームページ）の場合も同様の処理を繰り返す
10. 最終的にparamを返却

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | CBS経由SC | EKK0401B001CBS | KK_T_SBOP_SVC_KEI, C021 | サブオプションサービス契約一覧照会<br> <br> サブオプションサービス契約一覧照会サービスインターフェイスにより<… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSbOpSvcKeiList` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getSbOpSvcKeiList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(iMap != null)` (L22535)

> 📌 サービスオーダ発行CC作業マップ設定

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔁 FOR `(for)` (L22541)

> 📌 オプションサービス契約番号（Ｅメール）がある

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `Map.Entry<String, String> entry = (Map.Entry)it.next();` |
| 2 | 📋 SET | `iMap.put("op_svc_kei_no", entry.getKey());` // オプションサービス契約番号（Ｅメール） |
| 3 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, iMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |
| 4 | ⚡ EXEC | `HashMap<String, Object> paramMap = editInMsg_EKK0401B001CBS(param);` |
| 5 | 📞 CALL | `ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();` |
| 6 | ⚡ EXEC | `Map<?, ?> result = scCall.run(paramMap, handle);` |
| 7 | ⚡ EXEC | `editResultRP_EKK0401B001CBS(result, param);` [➔ RP_EKK0401B001CBS="rp_ekk0401b001cbs"] |

###### ·· Block 1.1.1 — 🔀 IF `(dataMap != null)` (L22563)

> 📌 取得したサブオプションサービス契約一覧の件数分繰り返す

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ··· Block 1.1.1.1 — 🔁 FOR `(for)` (L22566)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ···· Block 1.1.1.1.1 — 🔀 IF `(childMap != null)` (L22569)

> 📌 サブオプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String sbop_svc_cd = (String)childMap.get("sbop_svc_cd");` // サブオプションサービスコード |
| 2 | 📦 VAR | `String sbop_svc_kei_no = (String)childMap.get("sbop_svc_kei_no");` // サブオプションサービス契約番号 |
| 3 | 📦 VAR | `String sbopsvkei_gadtm = (String)childMap.get("gene_add_dtm");` // 世代登録年月日時分秒 |

###### ····· Block 1.1.1.1.1.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(sbop_svc_kei_stat))` [SVC_KEI_STAT_920="920"] (L22576)

> 📌 オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ····· Block 1.1.1.1.1.2 — 🔀 IF `(JKKHakkoSODConstCC.SBOP_SVC_CD_ALIAS.equals(sbop_svc_cd))` [SBOP_SVC_CD_ALIAS="D01"] (L22582)

> 📌 メールエイリアス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `String array[] = {sbop_svc_kei_no,sbopsvkei_gadtm};` |
| 2 | 📋 SET | `sbop_svckeino_alias_map.put(entry.getKey()+SEP+i, array);` |
| 3 | 📦 VAR | `alias_flg = true;` |

###### ····· Block 1.1.1.1.1.3 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.SBOP_SVC_CD_MLCAPA.equals(sbop_svc_cd))` [SBOP_SVC_CD_MLCAPA="D02"] (L22591)

> 📌 メール容量追加

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `mlcapa_flg_list.add(entry.getKey() + SEP + sbop_svc_kei_no);` |

###### ····· Block 1.1.1.1.1.4 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.SBOP_SVC_CD_VIRUS.equals(sbop_svc_cd))` [SBOP_SVC_CD_VIRUS="D03"] (L22600)

> 📌 メールウィルスチェック

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `String array[] = {sbop_svc_kei_no,sbopsvkei_gadtm};` |
| 2 | 📋 SET | `sbop_svckeino_mlvirus_map.put(entry.getKey()+SEP+i, array);` |
| 3 | 📦 VAR | `mlvirus_flg = true;` |

##### Block 2 — 🔀 IF `(op_svc_kei_no_hp != null && !"".equals(op_svc_kei_no_hp))` (L22619)

> 📌 オプションサービス契約番号（Ｍｙホームページ）がNULLでない、かつ空文字でない

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `iMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

###### · Block 2.1 — 🔀 IF `(iMap != null)` (L22625)

> 📌 サービスオーダ発行CC作業マップ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `iMap.put("op_svc_kei_no", op_svc_kei_no_hp);` // オプションサービス契約番号（Ｍｙホームページ） |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, iMap);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |
| 3 | ⚡ EXEC | `HashMap<String, Object> paramMap = editInMsg_EKK0401B001CBS(param);` |
| 4 | 📞 CALL | `ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();` |
| 5 | ⚡ EXEC | `Map<?, ?> result = scCall.run(paramMap, handle);` |
| 6 | ⚡ EXEC | `editResultRP_EKK0401B001CBS(result, param);` [➔ RP_EKK0401B001CBS="rp_ekk0401b001cbs"] |

###### ·· Block 2.1.1 — 🔀 IF `(dataMap != null)` (L22646)

> 📌 取得したサブオプションサービス契約一覧の件数分繰り返す

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ··· Block 2.1.1.1 — 🔁 FOR `(for)` (L22649)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ···· Block 2.1.1.1.1 — 🔀 IF `(childMap != null)` (L22652)

> 📌 サブオプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String sbop_svc_cd = (String)childMap.get("sbop_svc_cd");` // サブオプションサービスコード |

###### ····· Block 2.1.1.1.1.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(sbop_svc_kei_stat))` [SVC_KEI_STAT_920="920"] (L22657)

> 📌 オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ····· Block 2.1.1.1.1.2 — 🔀 IF `(JKKHakkoSODConstCC.SBOP_SVC_CD_HPCAPA.equals(sbop_svc_cd))` [SBOP_SVC_CD_HPCAPA="D04"] (L22663)

> 📌 ホームページ容量追加

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `hpcapa_flg = true;` |

###### ····· Block 2.1.1.1.1.3 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.SBOP_SVC_CD_HPACCESS.equals(sbop_svc_cd))` [SBOP_SVC_CD_HPACCESS="D05"] (L22669)

> 📌 ホームページアクセス分析

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `hpaccess_flg = true;` |

> **合計**: 17 blocks (6 depth levels)

### getSvcKeiUtwkList(SessionHandle handle, IRequestParameterReadWrite param)

---

#### 1. 役割

サービス契約内訳一覧照会処理。  
具体的には、リクエストパラメータからサービス契約番号等を取得し、SC（EKK0161B004）を呼び出してサービス契約内訳一覧を照会する。取得データをキャンセル済・解約済内訳を除外して配列化し、WiFi/WiMAX用のインデックスも特定する。WiFiやWiMAXの内訳が存在する場合には、その位置を index_wifi/index_cui/index_dev で管理する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSvcKeiUtwkList（handle, param）"] --> S1["Step1: 上りマッピング editInMsg_EKK0161B004CBS（param）"]
  S1 --> S2["Step2: SC呼び出し ServiceComponentRequestInvoker.run（paramMap, handle）"]
  S2 --> S3["Step3: 下りマッピング editResultRP_EKK0161B004CBS（result, param）"]
  S3 --> S4["Step4: dataMap = param.getData（HAKKOSODCCWORKMAP）"]
  S4 -.- NOTE_HAKKOSODCCWORKMAP["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK' （作業マップ）"]
  S4 --> IF1{"'dataMap != null'"}
  IF1 -->|"Yes"| S5["Step5: dataList = dataMap.get（'EKK0161B004CBSMsg1List'）"]
  S5 -.- NOTE_EKK0161B004CBSMsg1List["EKK0161B004CBSMsg1List = サービス契約内訳一覧"]
  S5 --> S6["Step6: キャンセル済/解約済内訳をtrimKeysへ記録"]
  S6 --> S7["Step7: trimKeysでdataListから対象内訳をremove"]
  S7 --> IF2{"dataList.size（） > 0"}
  IF2 -->|"Yes"| S8["Step8: svc_kei_ucwk_no, svc_kei_ucwk_gadtm配列をdataList.size分で初期化"]
  IF2 -->|"No"| S9["Step9: 配列を1で初期化、値は空文字"]
  S8 --> S10["Step10: 各childMapごとにsvc_kei_ucwk_no, svc_kei_ucwk_gadtmを格納"]
  S10 --> S11["Step11: pcrsCdでWiFi/WiMAXのindexを設定"]
  S11 --> RET["return param"]
  S9 --> RET
  IF1 -->|"No"| S9

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. 上りマッピング `editInMsg_EKK0161B004CBS(param)` でリクエスト構築。
2. SC呼び出し部品 `ServiceComponentRequestInvoker.run(paramMap, handle)` で照会実行。
3. 下りマッピング `editResultRP_EKK0161B004CBS(result, param)` でデータ格納。
4. `param.getData(JKKHakkoSODCCWORKMAP)` からdataMapを取得。
5. dataMapが存在する場合、`EKK0161B004CBSMsg1List` から dataList を取得。
6. 各childMapごとに、キャンセル済/解約済(`SVC_KEI_STAT_920`または`SVC_KEI_STAT_910`)の内訳は trimKeys に記録し、後でdataListから除去。
7. dataListからtrimKeysに該当するものをremove。
8. dataListのサイズでsvc_kei_ucwk_no, svc_kei_ucwk_gadtm配列を初期化し、空の場合はサイズ1で空文字設定。
9. 各childMapから `svc_kei_ucwk_no`, `svc_kei_ucwk_gadtm` を順次格納。
10. さらにpcrsCdでWiFi/WiMAXのindex (index_wifi, index_cui, index_dev) を設定。
11. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | CBS経由SC | EKK0161B004CBS | KK_T_SVC_KEI_UCWK | サービス契約内訳一覧照会<br> <br> サービス契約内訳一覧照会サービスインターフェイスにより<br> サービス契約… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkList` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `addTensoDenwaOp` | private | 転送電話オプション用ＳＯＤ登録 |
| 2 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |
| 3 | `rtOpChgDivOdrCtrl` | private | ルーターオプション変更オーダ制御処理<br> |
| 4 | `taiikiSeigenOdrCtrl` | private | 帯域制限設定・解除オーダ制御処理<br> |
| 5 | `vLanIdVaChangeOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |
| 6 | `wribInfoAddOdrCtrl` | private | 割引情報登録オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getSvcKeiUtwkList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap != null)` (L22711)

> 📌 取得したサービス契約内訳一覧の件数分繰り返す

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `ArrayList dataList = (ArrayList)dataMap.get("EKK0161B004CBSMsg1List");` |
| 2 | ⚡ EXEC | `ArrayList<String> trimKeys = new ArrayList<String>();` |

###### · Block 1.1 — 🔁 FOR `(for)` (L22732)

> 📌 ↑↑↑2013-03-06移動(元)　ロット２IKK-2013-0000284関連対応（見直し）↑↑↑

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L22735)

> 📌 ST2-2012-0000361 2012/03/12 ADD START

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ··· Block 1.1.1.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(svcKeiUcwkStat) || JKKHakkoSODConstCC.SVC_KEI_STAT_910.equals(svcKeiUcwkStat))` [SVC_KEI_STAT_920="920", SVC_KEI_STAT_910="910"] (L22740)

> 📌 キャンセル済、解約済の場合は対象としない

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `trimKeys.add((String)childMap.get("svc_kei_ucwk_no"));` |

###### ·· Block 1.1.2 — 🔁 FOR `(for)` (L22756)

> 📌 キャンセル済／解約済の分を除く

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.remove(i);` |
| 2 | ⚡ EXEC | `break;` |

###### ··· Block 1.1.2.1 — 🔀 IF `(rmKey.equals(((HashMap)dataList.get(i)).get("svc_kei_ucwk_no")))` (L22758)

> 📌 ← `i = 0`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `dataList.remove(i);` |
| 2 | ⚡ EXEC | `break;` |

###### · Block 1.2 — 🔀 IF `(dataList.size() > 0)` (L22767)

> 📌 ↓↓↓2013-03-06移動(先)　ロット２IKK-2013-0000284関連対応（見直し）↓↓↓

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `svc_kei_ucwk_no = new String[dataList.size()];` |
| 2 | ⚡ EXEC | `svc_kei_ucwk_gadtm = new String[dataList.size()];` |

###### · Block 1.3 — ↪️ ELSE `(else)` (L22773)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `svc_kei_ucwk_no = new String[1];` |
| 2 | ⚡ EXEC | `svc_kei_ucwk_no[0] = "";` |
| 3 | ⚡ EXEC | `svc_kei_ucwk_gadtm = new String[1];` |
| 4 | ⚡ EXEC | `svc_kei_ucwk_gadtm[0] = "";` |
| 5 | 📦 VAR | `int idx = 0;` |

###### · Block 1.4 — 🔁 FOR `(for)` (L22784)

> 📌 ↓↓↓2013-03-06追加　ロット２IKK-2013-0000284関連対応（見直し）↓↓↓

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.4.1 — 🔀 IF `(childMap != null)` (L22787)

> 📌 ↑↑↑2013-03-06追加　ロット２IKK-2013-0000284関連対応（見直し）↑↑↑

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `svc_kei_ucwk_no[idx] = (String)childMap.get("svc_kei_ucwk_no");` |
| 2 | 📥 GET | `svc_kei_ucwk_gadtm[idx] = (String)childMap.get("gene_add_dtm");` |
| 3 | 📦 VAR | `String pcrsCd = (String)childMap.get("pcrs_cd");` |

###### ··· Block 1.4.1.1 — 🔀 IF `(JKKHakkoSODConstCC.PCRS_CD_FREE_WIFI.equals(pcrsCd))` [PCRS_CD_FREE_WIFI="A45"] (L22798)

> 📌 WiFiの内訳の添え字を保持する

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `index_wifi = idx;` |

###### ··· Block 1.4.1.2 — 🔀 IF `(JKKHakkoSODConstCC.PCRS_CD_WIMAX.equals(pcrsCd))` [PCRS_CD_WIMAX="A46"] (L22804)

> 📌 WiMaxの内訳の添え字を保持する

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `index_cui = idx;` |
| 2 | ⚡ EXEC | `index_dev = idx;` |

##### Block 2 — ↪️ ELSE `(else)` (L22815)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `svc_kei_ucwk_no = new String[1];` |
| 2 | ⚡ EXEC | `svc_kei_ucwk_no[0] = "";` |
| 3 | ⚡ EXEC | `svc_kei_ucwk_gadtm = new String[1];` |
| 4 | ⚡ EXEC | `svc_kei_ucwk_gadtm[0] = "";` |

> **合計**: 13 blocks (4 depth levels)

### getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)

---

#### 1. 役割

SC呼び出し用のリクエストパラメータマップを初期化して返却する共通処理。  
具体的には、空のHashMapを生成し、SC呼び出しのパラメータとして返却する（ダミー・テンプレート用途）。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getInvokeCBS（handle, param, fixedText）"] --> S1["Step1: HashMap paramMap = new HashMap（）"]
  S1 --> S2["Step2: return paramMap"]
```

**処理ステップ詳細:**

1. 新しいHashMap（paramMap）を生成。
2. これをそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3   | fixedText    | 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` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS` | - |
### getSame_trn_no(IRequestParameterReadWrite param, SessionHandle handle, String fixedText, String[] same_trn_no)

---

#### 1. 役割

同一処理番号（SAME_TRN_NO）の採番を行う。  
具体的には、同一処理番号採番SIF（EKK1081C011）を呼び出し、取得した番号を配列 `same_trn_no[0]` に格納し返却する。  
本メソッドは `getSame_trn_no(param, handle)` など他メソッドから呼ばれる共通処理である。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSame_trn_no（param, handle, fixedText, same_trn_no）"] --> S1["Step1: inHash, resultHash 初期化"]
  S1 --> S2["Step2: callEKK1081C011SC（param, handle, inHash, resultHash, FUNC_CODE_1）"]
  S2 -.- NOTE_FUNC_CODE_1["FUNC_CODE_1 = '1'"]
  S2 --> S3["Step3: same_trn_no[0] = resultHash.get（TEMPLATE_ID_EKK1081C011）.get（SAME_TRN_NO）"]
  S3 -.- NOTE_TEMPLATE_ID_EKK1081C011["TEMPLATE_ID_EKK1081C011 = 'EKK1081C011'"]
  S3 -.- NOTE_SAME_TRN_NO["SAME_TRN_NO = 'same_trn_no'"]
  S3 --> S4["Step4: return param"]
```

**処理ステップ詳細:**

1. inHash, resultHashを初期化。
2. `callEKK1081C011SC(param, handle, inHash, resultHash, FUNC_CODE_1)` で同一処理番号採番SIFを呼び出す。
3. 結果 `resultHash` から `TEMPLATE_ID_EKK1081C011` 内の `SAME_TRN_NO` を取得し、配列の先頭にセット。
4. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                                   |
| --- | ------------ | -------------------------- | ---------------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ）      |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                                     |
| 3   | fixedText    | String                     | 固定文字列（用途はダミー）                                 |
| 4   | same_trn_no  | String[]                   | 同一処理番号格納用配列（取得結果を[0]にセットして返却）    |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEKK1081C011SC` | EKK1081C011SC | KK_T_ODR_HAKKO_JOKEN, KK_T_ODR_INF_SKSI_WK | (同一処理番号取得SIFを呼び出し) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSame_trn_no` | `callEKK1081C011SC [R] KK_T_ODR_HAKKO_JOKEN/KK_T_ODR_INF_SKSI_WK (同一処理番号取得SIFを呼び出し)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `addSODUQWIMAXKaitoriNew` | private | UQ WIMAXの買取時の新規登録処理<br> <br> UQ WIMAXの買取時の新規登録について、オーダ発行条件とオーダ情報作成ワークを登録します。<br> ※CUIとDEVで内訳情報、機器情報共に同じものが設定されているため、機器提供… |
| 2 | `addTensoDenwaOp` | private | 転送電話オプション用ＳＯＤ登録 |
| 3 | `bmpDojiMskm` | private | 番ポ同時申込処理<br> |
| 4 | `bmpSipDslOdrCtrl` | private | 番ポ戻し（SIP解約・消去オーダ）制御処理<br> |
| 5 | `courseChgeOdrCtrl` | private | コース変更オーダ制御処理<br> |
| 6 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 7 | `hakkoCourseChgSOD` | public | 料金プランコード変更(ネット)に伴うサービスオーダを発行します。 <br> 認証IDが変わらず、料金プランコードのみが変更となるコース変更(コース変更取消)の際に発行が必要なサービスオーダを オーダ発行条件、オーダ情報作成ワークに登録します… |
| 8 | `htelItntokiOdrCtrl` | private | 光電話移転トーキオーダ制御処理<br> |
| 9 | `htelNoAddOdrCtrl` | private | 光電話番号追加オーダ制御処理<br> |
| 10 | `htelNoDslOdrCtrl` | private | 光電話番号解約オーダ制御処理<br> |
| 11 | `htelNoInfoChgeOdrCtrl` | private | 光電話番号情報変更オーダ制御処理<br> |
| 12 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 13 | `idpwShkkaSaifuriOdrCtrl` | private | IDPW初期化・再振オーダ制御処理<br> |
| 14 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 15 | `keiTtdkChuHtelnoChgeOdrCtrl` | private | 契約手続中の光電話番号変更オーダ制御処理 |
| 16 | `koteiIpAd8DivOdrCtrl` | private | 固定IPアドレス８区分の制御処理<br> |
| 17 | `malwareBlockingDivOdrCtrl` | private | マルウェアブロッキングの制御処理<br> |
| 18 | `opHktgiOdrCtrl` | private | オプション引継オーダ制御処理<br> |
| 19 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 20 | `pauseRlsChgeOdrCtrl` | private | 休止変更・予約取消オーダ制御処理<br> |
| 21 | `pauseUkOdrCtrl` | private | 休止受付オーダ制御処理<br> |
| 22 | `rtOpChgDivOdrCtrl` | private | ルーターオプション変更オーダ制御処理<br> |
| 23 | `stpRlsOdrCtrl` | private | 中断解除オーダ制御処理<br> |
| 24 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |
| 25 | `taiikiSeigenOdrCtrl` | private | 帯域制限設定・解除オーダ制御処理<br> |
| 26 | `telNoChge` | private | 電話番号変更処理<br> |
| 27 | `vLanIdChgOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |
| 28 | `vLanIdVaChangeOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |
### getDummySvcKeiNo(SessionHandle handle, IRequestParameterReadWrite param)

---

#### 1. 役割

ダミーサービス契約番号の取得処理。  
具体的には、業務パラメータ一意照会検索（EZM0321A010_SC）を2回（個人用・法人用）呼び出し、それぞれのダミーサービス契約番号をリストに格納して返却する。  
本メソッドは複数のメソッドからダミー契約番号を取得する共通処理として使用される。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getDummySvcKeiNo（handle, param）"] --> S1["Step1: returnList = new ArrayList<String>（）"]
  S1 --> S2["Step2: inHashWorkParamKojin.put（KEY_WORK_PARAM_ID, 'SC_ENUMSOD_DMSKNO_KN'）"]
  S2 -.- NOTE_KEY_WORK_PARAM_ID_KN["KEY_WORK_PARAM_ID = 'key_work_param_id'"]
  S2 --> S3["Step3: dummySvcKeiNoKojin = callEZM0321A010_SC（param, handle, inHashWorkParamKojin, FUNC_CODE_1）"]
  S3 -.- NOTE_FUNC_CODE_1["FUNC_CODE_1 = '1'"]
  S3 --> S4["Step4: inHashWorkParamHojin.put（KEY_WORK_PARAM_ID, 'SC_ENUMSOD_DMSKNO_HN'）"]
  S4 -.- NOTE_KEY_WORK_PARAM_ID_HN["KEY_WORK_PARAM_ID = 'key_work_param_id'"]
  S4 --> S5["Step5: dummySvcKeiNoHojin = callEZM0321A010_SC（param, handle, inHashWorkParamHojin, FUNC_CODE_1）"]
  S5 --> S6["Step6: returnList.add（dummySvcKeiNoKojin）, returnList.add（dummySvcKeiNoHojin）"]
  S6 --> RET["return returnList"]

  style S2 fill:#ddf
  style S4 fill:#ddf
```

**処理ステップ詳細:**

1. 戻り値用のArrayList<String>を生成。
2. inHashWorkParamKojinに `KEY_WORK_PARAM_ID = "key_work_param_id"` で `SC_ENUMSOD_DMSKNO_KN` をセット。
3. `callEZM0321A010_SC(param, handle, inHashWorkParamKojin, FUNC_CODE_1)` で個人用ダミーサービス契約番号を取得。
4. inHashWorkParamHojinに `KEY_WORK_PARAM_ID = "key_work_param_id"` で `SC_ENUMSOD_DMSKNO_HN` をセット。
5. `callEZM0321A010_SC(param, handle, inHashWorkParamHojin, FUNC_CODE_1)` で法人用ダミーサービス契約番号を取得。
6. 取得した両番号をリストに追加し返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEZM0321A010_SC` | - | - | (業務パラメータ一意照会検索を呼び出す。) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getDummySvcKeiNo` | `callEZM0321A010_SC [R] - (業務パラメータ一意照会検索を呼び出す。)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `hakkoSOD` | public | サービスオーダ発行処理 <br> パラメータの件数分<br> サービスオーダ登録処理を呼び出します。<br> <br> |
---

---

## 📋 全分岐詳細 (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)

### `getKktkSvcKeiList()` (L22999) — 6 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap != null) | - | PCRS_CD=pcrs_cd, KKTK_SVC_CD=kktk_svc_cd | `callEKK0791A010SC()` | L23034 |
| 2 | · 🔁 FOR | D1 | (for-loop) | ↓↓↓2013-03-01変更　ロット２ST2-2013-0000764対応（巻３で追加された機器のZ5オーダが出ない）↓↓↓ | PCRS_CD=pcrs_cd, KKTK_SVC_CD=kktk_svc_cd | `callEKK0791A010SC()` | L23037 |
| 3 | ·· 🔀 IF | D2 | (childMap != null) | ↓↓↓2013-03-01変更　ロット２ST2-2013-0000764対応（巻３で追加された機器のZ5オーダが出ない）↓↓↓ | PCRS_CD=pcrs_cd, KKTK_SVC_CD=kktk_svc_cd | `callEKK0791A010SC()` | L23040 |
| 4 | ··· 🔀 IF | D3 | (null == ekk0791a010List ｜｜ 1 > ekk0791a010List.size()) | 機器提供サービス契約の料金コース | KKTK_SVC_CD=kktk_svc_cd | - | L23052 |
| 5 | ··· 🔀 IF | D3 | (kktkSvcCd.equals(JKKHakkoSODConstCC.KKTK_SVC_CD_MOB_UQ)) | ↑↑↑2013-03-01変更　ロット２ST2-2013-0000764対応（巻３で追加された機器のZ5オーダが出ない）↑↑↑ | KKTK_SVC_CD_MOB_UQ=C017 | - | L23059 |
| 6 | ↩️ RETURN | D0 | param | - | - | - | L23077 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getKktkSvcKeiList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （dataMap != null）"]
    direction TB
    C0_0["FOR: …"]
  end
  CF0 -->|"L23034"| SG0
  B1["RETURN: param"]
  CF0 -->|"L23077"| B1
```

### `getKktkSvcKeiList()` (L22934) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (0 != statusCode) | 0でない場合はエラー | TEMPLATE_ID_EKK0341B002=EKK0341B002, KKTK_SVC_KEI_NO=kktk_svc_kei_no, GENE_ADD_DTM=gene_add_dtm | - | L22950 |
| 2 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode)) | 0でない場合はエラー | TEMPLATE_ID_EKK0341B002=EKK0341B002, KKTK_SVC_KEI_NO=kktk_svc_kei_no, GENE_ADD_DTM=gene_add_dtm | - | L22953 |
| 3 | 🔁 FOR | D0 | (for-loop) | ↑↑↑2013-01-28追加　ロット２KT1-2013-0000105（キャンセル済のＥメールはＳＯＤ発行しない）↑↑↑ | KKTK_SVC_KEI_NO=kktk_svc_kei_no, GENE_ADD_DTM=gene_add_dtm | - | L22964 |
| 4 | · 🔀 IF | D1 | (JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(kktk_svc_kei_stat)) | オプションサービス契約番号 | SVC_KEI_STAT_920=920, KKTK_SVC_KEI_NO=kktk_svc_kei_no, GENE_ADD_DTM=gene_add_dtm | - | L22972 |
| 5 | ↩️ RETURN | D0 | param | - | - | `editInMsg_EKK0341B002CBS()`, `editResultRP_EKK0341B002CBS()`, `callEKK0791A010SC()` | L22984 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getKktkSvcKeiList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （0 != statusCode）"]
    direction TB
    C0_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L22950"| SG0
  subgraph SG1["FOR: …"]
    direction TB
    C1_0["IF: （JKKHakkoSODConstCC.SVC_KEI_STAT_92…"]
  end
  CF0 -->|"L22964"| SG1
  B2["RETURN: param"]
  CF0 -->|"L22984"| B2
```

### `getSbOpSvcKeiList()` (L22528) — 18 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (iMap != null) | サービスオーダ発行CC作業マップ設定 | - | - | L22535 |
| 2 | · 🔁 FOR | D1 | (for-loop) | オプションサービス契約番号（Ｅメール）がある | - | - | L22541 |
| 3 | ·· 🔀 IF | D2 | (dataMap != null) | 取得したサブオプションサービス契約一覧の件数分繰り返す | - | - | L22563 |
| 4 | ··· 🔁 FOR | D3 | (for-loop) | サブオプションサービスコード | - | - | L22566 |
| 5 | ···· 🔀 IF | D4 | (childMap != null) | サブオプションサービスコード | - | - | L22569 |
| 6 | ····· 🔀 IF | D5 | (JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(sbop_svc_kei_stat)) | オプションサービス契約番号 | SVC_KEI_STAT_920=920 | - | L22576 |
| 7 | ····· 🔀 IF | D5 | (JKKHakkoSODConstCC.SBOP_SVC_CD_ALIAS.equals(sbop_svc_cd)) | メールエイリアス | SBOP_SVC_CD_ALIAS=D01 | - | L22582 |
| 8 | ····· 🔀 ELSE-IF | D5 | (JKKHakkoSODConstCC.SBOP_SVC_CD_MLCAPA.equals(sbop_svc_cd)) | メール容量追加 | SBOP_SVC_CD_MLCAPA=D02 | - | L22591 |
| 9 | ····· 🔀 ELSE-IF | D5 | (JKKHakkoSODConstCC.SBOP_SVC_CD_VIRUS.equals(sbop_svc_cd)) | メールウィルスチェック | SBOP_SVC_CD_VIRUS=D03 | - | L22600 |
| 10 | 🔀 IF | D0 | (op_svc_kei_no_hp != null && !"".equals(op_svc_kei_no_hp)) | オプションサービス契約番号（Ｍｙホームページ）がNULLでない、かつ空文字でない | - | `editInMsg_EKK0401B001CBS()`, `editResultRP_EKK0401B001CBS()` | L22619 |
| 11 | · 🔀 IF | D1 | (iMap != null) | サービスオーダ発行CC作業マップ設定 | - | `editInMsg_EKK0401B001CBS()`, `editResultRP_EKK0401B001CBS()` | L22625 |
| 12 | ·· 🔀 IF | D2 | (dataMap != null) | 取得したサブオプションサービス契約一覧の件数分繰り返す | - | - | L22646 |
| 13 | ··· 🔁 FOR | D3 | (for-loop) | サブオプションサービスコード | - | - | L22649 |
| 14 | ···· 🔀 IF | D4 | (childMap != null) | サブオプションサービスコード | - | - | L22652 |
| 15 | ····· 🔀 IF | D5 | (JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(sbop_svc_kei_stat)) | オプションサービス契約番号 | SVC_KEI_STAT_920=920 | - | L22657 |
| 16 | ····· 🔀 IF | D5 | (JKKHakkoSODConstCC.SBOP_SVC_CD_HPCAPA.equals(sbop_svc_cd)) | ホームページ容量追加 | SBOP_SVC_CD_HPCAPA=D04 | - | L22663 |
| 17 | ····· 🔀 ELSE-IF | D5 | (JKKHakkoSODConstCC.SBOP_SVC_CD_HPACCESS.equals(sbop_svc_cd)) | ホームページアクセス分析 | SBOP_SVC_CD_HPACCESS=D05 | - | L22669 |
| 18 | ↩️ RETURN | D0 | param | - | - | - | L22679 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getSbOpSvcKeiList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （iMap != null）"]
    direction TB
    C0_0["FOR: …"]
  end
  CF0 -->|"L22535"| SG0
  subgraph SG1["IF: （op_svc_kei_no_hp != null && !''.equals（…"]
    direction TB
    C1_0["IF: （iMap != null）"]
  end
  CF0 -->|"L22619"| SG1
  B2["RETURN: param"]
  CF0 -->|"L22679"| B2
```

### `getSvcKeiUtwkList()` (L22693) — 15 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap != null) | 取得したサービス契約内訳一覧の件数分繰り返す | - | - | L22711 |
| 2 | · 🔁 FOR | D1 | (for-loop) | ↑↑↑2013-03-06移動(元)　ロット２IKK-2013-0000284関連対応（見直し）↑↑↑ | - | - | L22732 |
| 3 | ·· 🔀 IF | D2 | (childMap != null) | ST2-2012-0000361 2012/03/12 ADD START | - | - | L22735 |
| 4 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(svcKeiUcwkStat) ｜｜ JKKHakkoSODConstCC.SVC_KEI_STAT_910.equals(svcKeiUcwkStat)) | キャンセル済、解約済の場合は対象としない | SVC_KEI_STAT_920=920, SVC_KEI_STAT_910=910 | - | L22740 |
| 5 | · 🔁 FOR | D1 | rmKey | キャンセル済／解約済の分を除く | - | - | L22754 |
| 6 | ·· 🔁 FOR | D2 | (for-loop) | - | - | - | L22756 |
| 7 | ··· 🔀 IF | D3 | (rmKey.equals(((HashMap)dataList.get(i)).get("svc_kei_ucwk_no"))) | - | - | - | L22758 |
| 8 | · 🔀 IF | D1 | (dataList.size() > 0) | ↓↓↓2013-03-06移動(先)　ロット２IKK-2013-0000284関連対応（見直し）↓↓↓ | - | - | L22767 |
| 9 | · 🔀 ELSE | D1 | (else) | ST2-2012-0000361 2012/03/12 ADD START | - | - | L22773 |
| 10 | · 🔁 FOR | D1 | (for-loop) | ↓↓↓2013-03-06追加　ロット２IKK-2013-0000284関連対応（見直し）↓↓↓ | - | - | L22784 |
| 11 | ·· 🔀 IF | D2 | (childMap != null) | ↑↑↑2013-03-06追加　ロット２IKK-2013-0000284関連対応（見直し）↑↑↑ | - | - | L22787 |
| 12 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.PCRS_CD_FREE_WIFI.equals(pcrsCd)) | WiFiの内訳の添え字を保持する | PCRS_CD_FREE_WIFI=A45 | - | L22798 |
| 13 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.PCRS_CD_WIMAX.equals(pcrsCd)) | WiMaxの内訳の添え字を保持する | PCRS_CD_WIMAX=A46 | - | L22804 |
| 14 | 🔀 ELSE | D0 | (else) | - | - | - | L22815 |
| 15 | ↩️ RETURN | D0 | param | - | - | - | L22822 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getSvcKeiUtwkList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （dataMap != null）"]
    direction TB
    C0_0["FOR: …"]
    C0_1["FOR: rmKey"]
    C0_2["IF: （dataList.size（） > 0）"]
    C0_3["ELSE"]
    C0_4["FOR: …"]
  end
  CF0 -->|"L22711"| SG0
  B1["ELSE"]
  CF0 -->|"L22815"| B1
  B2["RETURN: param"]
  CF0 -->|"L22822"| B2
```

> **制御フロー合計**: 4 methods, 44 branches
