# ⑥ 業務ロジック — Query (Get): 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-getKK0351Hash"></a>
### getKK0351Hash()

---

#### 1. 役割

EKK0351A010（オプションサービス契約一意照会）を実行し、指定したオプションサービス契約番号（op_svc_kei_no）に対する契約情報（HashMap）を取得する。具体的には、入力パラメータとしてオプションサービス契約番号と運用日をSCに渡し、正常終了時はレスポンスから該当契約情報（TEMPLATE_ID_EKK0351A010）を返却する。異常終了時は例外をスローする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getKK0351Hash（param, handle, op_svc_kei_no）"] --> S1["Step1: inHashOp2生成（OP_SVC_KEI_NO, OPE_DATEを設定）"]
  S1 -.-> NOTE1["OP_SVC_KEI_NO = 'op_svc_kei_no'（オプションサービス契約番号）"]
  S1 -.-> NOTE2["OPE_DATE = 運用日"]
  S1 --> S2["Step2: callEKK0351A010SC（param, handle, inHashOp2, resultHashOp2, FUNC_CODE_2）を実行"]
  S2 -.-> NOTE_FUNC_CODE["FUNC_CODE_2 = '2'（機能コード）"]
  S2 --> IF1{'"statusCode != 0"'}

  IF1 -.-> NOTE_ERR["statusCode != 0 の場合は例外スロー"]

  IF1 -->|"Yes"| S3["throw new CCException..."]
  IF1 -->|"No"| S4["Step3: SCレスポンスからTEMPLATE_ID_EKK0351A010を取得"]
  S4 -.-> NOTE_TEMPLATE["TEMPLATE_ID_EKK0351A010 = 'EKK0351A010'（オプションサービス契約一意照会）"]
  S4 --> RET["return eKK0351A010SCHash"]

  style IF1 fill:#ffcc00
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_ERR fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_FUNC_CODE fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_TEMPLATE fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. inHashOp2（HashMap）を生成し、`OP_SVC_KEI_NO`（オプションサービス契約番号）と`OPE_DATE`（予約適用日: JKKBpCommon.getOpeDate(null)）をセット。
2. `callEKK0351A010SC()`（機能コード: `FUNC_CODE_2 = "2"`）を呼び出し、SC（サービスコンポーネント）でオプションサービス契約一意照会を実施。
3. ステータスコード（statusCode）が0でない場合は、`CCException`（業務エラー）をスローする。
4. SCレスポンス（resultHashOp2）から`TEMPLATE_ID_EKK0351A010`（= "EKK0351A010"）の値を取得し、HashMapとして返却。

---

#### 3. パラメータ分析

| No  | パラメータ名    | 型                           | 業務説明                                        |
| --- | --------------- | ---------------------------- | ----------------------------------------------- |
| 1   | param           | IRequestParameterReadWrite   | 処理中パラメータ（リクエスト/レスポンス兼用）    |
| 2   | handle          | SessionHandle                | セッションハンドル                              |
| 3   | op_svc_kei_no   | String                       | オプションサービス契約番号                      |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEKK0351A010SC` | EKK0351A010SC | KK_T_OP_SVC_KEI, KK_M_OP_SVC, KK_T_IDO_RSV, KK_M_PCRS, KK_M_PPLAN, CK_T_CUST, ZM_M_CD_NM_KANRI, KK_T_OPSVKEI_ISP, KK_T_SVC_KEI_UCWK, KK_T_WRISVC_TG_KEI, KK_T_WRIB_SVC_KEI, KK_M_PCRS_SBOP_SVC, KK_M_OP_HKTGI_PSBJKN, KK_T_OPSVKEI_SUPPORT, AC_M_TUWA_SBT, KK_M_PCRS_OP_SVC, KK_T_CSNT_OPSVKEI, KK_T_SVC_KEI, KK_T_KKTK_SVC_KEI, KK_T_OPSVKEI_TV, KK_T_SVKEIUW_EOH_TEL, KK_T_OPSVKEI_TEL, C021, KK0821, KK_T_MSKM_DTL, ZM_M_USER | (オプションサービス契約一意照会SIFを呼び出し) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getKK0351Hash` | `callEKK0351A010SC [R] KK_T_OP_SVC_KEI/KK_M_OP_SVC/KK_T_IDO_RSV/KK_M_PCRS/KK_M_PPLAN/CK_T_CUST/ZM_M_CD_NM_KANRI/KK_T_OPSVKEI_ISP/KK_T_SVC_KEI_UCWK/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_PCRS_SBOP_SVC/KK_M_OP_HKTGI_PSBJKN/KK_T_OPSVKEI_SUPPORT/AC_M_TUWA_SBT/KK_M_PCRS_OP_SVC/KK_T_CSNT_OPSVKEI/KK_T_SVC_KEI/KK_T_KKTK_SVC_KEI/KK_T_OPSVKEI_TV/KK_T_SVKEIUW_EOH_TEL/KK_T_OPSVKEI_TEL/C021/KK0821/KK_T_MSKM_DTL/ZM_M_USER (オプションサービス契約一意照会SIFを呼び出し)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `stpRlsOdrCtrl` | private | 中断解除オーダ制御処理<br> |
| 2 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getKK0351Hash()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(0 != statusCode)` (L28339)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

> **合計**: 1 blocks (1 depth levels)

### getSameTrnNo()

---

#### 1. 役割

同一処理番号（same_trn_no）を取得する。具体的には、editInMsg_EKK1081C011CBSで上りマッピングを行い、ServiceComponentRequestInvokerを用いてSCを呼び出し、editResultRP_EKK1081C011CBSで結果を下りマッピングする。その後、paramに格納されたワークマップからsame_trn_noを取得する。呼び出し元は複数メソッド（内部共通処理）となる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSameTrnNo（handle, param）"] --> S1["Step1: editInMsg_EKK1081C011CBS（param）で上りマッピング"]
  S1 --> S2["Step2: ServiceComponentRequestInvokerインスタンス生成"]
  S2 --> S3["Step3: scCall.run（paramMap, handle）でSC呼出"]
  S3 --> S4["Step4: editResultRP_EKK1081C011CBS（result, param）で下りマッピング"]
  S4 --> S5["Step5: param.getData（HAKKOSODCCWORKMAP）からdataMap取得"]
  S5 -.-> NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'（作業マップキー）"]
  S5 --> IF1{'"dataMap != null"'}
  IF1 -.-> NOTE2["dataMapにsame_trn_noが存在する場合"]
  IF1 -->|"Yes"| S6["Step6: same_trn_noを取得"]
  IF1 -->|"No"| S7["Step7: same_trn_no空文字"]
  S6 --> RET["return param"]
  S7 --> RET

  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. editInMsg_EKK1081C011CBSでparamを上りマッピングする。
2. ServiceComponentRequestInvokerインスタンスを生成。
3. SC呼び出し（run）を実行。
4. editResultRP_EKK1081C011CBSでparamに下りマッピング。
5. paramからHAKKOSODCCWORKMAP（"HakkoSODCCWORK"）キーでdataMap取得。
6. dataMapがnullでなければ、same_trn_noを取り出し。
7. 取得したsame_trn_noを返却。なければ空文字。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| ? | CBS経由SC | EKK1081C011CBS | KK_T_ODR_HAKKO_JOKEN, KK_T_ODR_INF_SKSI_WK | 同一処理番号採番処理<br> <br> 同一処理番号採番サービスインターフェイスにより<br> 同一処理番号を採番します… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSameTrnNo` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getSameTrnNo()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap != null)` (L21935)

> 📌 同一処理番号取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `same_trn_no = (String)dataMap.get("same_trn_no");` |

> **合計**: 1 blocks (1 depth levels)

### getSvcKeiUtwk()

---

#### 1. 役割

サービス契約内訳照会（Wi-Fiスポットを含む）を行い、サービス契約内訳番号ごとにEKK0161A010（サービス契約内訳一意照会）を実行し、Wi-Fiスポットの有無判定を行い、Wi-Fiスポットが複数存在する場合はwifi_flgをTrueに設定する。作業マップ（HAKKOSODCCWORKMAP）を参照し、各内訳をループして詳細情報を取得する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSvcKeiUtwk（param, handle）"] --> S1["Step1: param.getData（HAKKOSODCCWORKMAP）で作業マップ取得"]
  S1 -.-> NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'（作業マップキー）"]
  S1 --> IF1{'"iMap != null"'}
  IF1 -->|"Yes"| S2["Step2: iMap.get（'EKK0161B003CBSMsg1List'）で内訳リスト取得"]
  S2 --> S3["Step3: 各内訳番号（svc_kei_ucwk_no）ごとにcallEKK0161A010SC（）を呼び出し"]
  S3 -.-> NOTE2["SVC_KEI_UCWK_NO = 'svc_kei_ucwk_no'（サービス契約内訳番号）"]
  S3 --> IF2{'"（pcrsCdWifi == A45 or A30） and （ucwkStat in 020-100）"'}
  IF2 -.-> NOTE3["PCRS_CD_FREE_WIFI = 'A45'（無料Wi-Fi）"]
  IF2 -.-> NOTE4["PCRS_CD_WIFISPOT = 'A30'（Wi-Fiスポット）"]
  IF2 -.-> NOTE5["SVC_KEI_STAT_020 = '020'（照査済） SVC_KEI_STAT_100 = '100'（サービス提供中）"]
  IF2 -->|"Yes"| S4["Step4: wifiCountをインクリメント"]
  IF2 -->|"No"| S5["Step5: 何もしない"]
  S4 --> IF3{'"wifiCount > 1"'}
  IF3 -->|"Yes"| S6["Step6: wifi_flg = true"]
  IF3 -->|"No"| S7["Step7: wifi_flgは変更なし"]
  S6 --> RET["return param"]
  S7 --> RET
  S5 --> RET

  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. paramからHAKKOSODCCWORKMAP（"HakkoSODCCWORK"）を取得。
2. iMapがnullでなければ、"EKK0161B003CBSMsg1List"（サービス契約内訳一覧照会リスト）を取得。
3. 各内訳番号（svc_kei_ucwk_no）ごとに、callEKK0161A010SC()でEKK0161A010（サービス契約内訳一意照会）を呼び出す。
4. 取得したpcrsCdWifi（料金コースコード）がA45（無料Wi-Fi）またはA30（Wi-Fiスポット）かつ、ucwkStat（サービス契約内訳ステータス）が020（照査済）から100（サービス提供中）の範囲内なら、wifiCountを1増やす。
5. すべての内訳でwifiCountが2以上になれば、wifi_flgをTrueに設定する。
6. paramを返却する。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                                |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEKK0161A010SC` | EKK0161A010SC | ZM_M_CD_NM_KANRI, KK_M_OP_SVC, KK_M_TMP_PAY_PRC, KK_T_SVC_KEI_UCWK, KK_T_SVKEIUW_EOH_TEL, KK_T_KKTK_SVC_KEI, KK_M_KKTK_SVC, KK_T_OP_SVC_KEI, TU_T_BMP_KOJI, TU_T_DOBANITEN, KK_T_ICJKN_SETTE, TU_T_DNWACHOMSK, TU_T_DNWACHOMSK_NYO, KK_M_PCRS, KK_M_PPLAN, KK_T_IDO_RSV, KK_T_SVKEIUW_EOMOBA, KK_T_SVKEIUW_EOADSL, KK_T_SVKEIUW_HOSTING, KK_T_SVKEIUW_EOH_NET, KK_T_SVKEIUW_EOH_TV, KK_T_SVC_KEI, KK_T_MSKM_DTL, KK_T_MSKM, KK_M_PRC_GRP, KK_M_PPLAN_KTTANKA, KK_T_TK_HOSHIKI_KEI, KK_T_KAISEN_USE_KEI, KK_T_OWNR_KEI, KK_T_MANSION_BUKKEN, ZM_M_TAKNKIKI_MODEL, ZM_M_MAKER, C021, KK_T_KAISEN_TG_SVKEI, KK_T_KAKINS, KK_M_SVC, KK_T_SVKEI_KAISEN_UW | (サービス契約内訳一意照会SIFを呼び出し) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwk` | `callEKK0161A010SC [R] ZM_M_CD_NM_KANRI/KK_M_OP_SVC/KK_M_TMP_PAY_PRC/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_TEL/KK_T_KKTK_SVC_KEI/KK_M_KKTK_SVC/KK_T_OP_SVC_KEI/TU_T_BMP_KOJI/TU_T_DOBANITEN/KK_T_ICJKN_SETTE/TU_T_DNWACHOMSK/TU_T_DNWACHOMSK_NYO/KK_M_PCRS/KK_M_PPLAN/KK_T_IDO_RSV/KK_T_SVKEIUW_EOMOBA/KK_T_SVKEIUW_EOADSL/KK_T_SVKEIUW_HOSTING/KK_T_SVKEIUW_EOH_NET/KK_T_SVKEIUW_EOH_TV/KK_T_SVC_KEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_M_PRC_GRP/KK_M_PPLAN_KTTANKA/KK_T_TK_HOSHIKI_KEI/KK_T_KAISEN_USE_KEI/KK_T_OWNR_KEI/KK_T_MANSION_BUKKEN/ZM_M_TAKNKIKI_MODEL/ZM_M_MAKER/C021/KK_T_KAISEN_TG_SVKEI/KK_T_KAKINS/KK_M_SVC/KK_T_SVKEI_KAISEN_UW (サービス契約内訳一意照会SIFを呼び出し)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getSvcKeiUtwk()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(iMap != null)` (L22873)

> 📌 サービスオーダ発行CC作業マップ設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `ArrayList iList = (ArrayList)iMap.get("EKK0161B003CBSMsg1List");` |

###### · Block 1.1 — 🔁 FOR `(for)` (L22878)

> 📌 サービス契約内訳一覧照会（SYSID）で取得した件数分繰り返す

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(iChildMap != null)` (L22881)

> 📌 サービス契約内訳番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String svc_kei_ucwk_no = (String)iChildMap.get("svc_kei_ucwk_no");` // サービス契約内訳番号 |
| 2 | ⚡ EXEC | `HashMap<String, Object> inHashUcwk = new HashMap<String, Object>();` |
| 3 | ⚡ EXEC | `HashMap<String, Object> resultHashUcwk = new HashMap<String, Object>();` |
| 4 | 📋 SET | `inHashUcwk.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);` [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] |
| 5 | 📋 SET | `inHashUcwk.put(JKKHakkoSODConstCC.OPE_DATE, JCCBPCommon.getOpeDate(null));` [➔ OPE_DATE="ope_date"] |

###### ··· Block 1.1.1.1 — 🔀 IF `(0 != statusCode)` (L22890)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

###### ··· Block 1.1.1.2 — 🔀 IF `((JKKHakkoSODConstCC.PCRS_CD_FREE_WIFI.equals(pcrsCdWifi) || JKKHakkoSODConstCC.PCRS_CD_WIFISPOT.equals(pcrsCdWifi)) && JKKHakkoSODConstCC.SVC_KEI_STAT_020.compareTo(ucwkStat) <= 0 && JKKHakkoSODConstCC.SVC_KEI_STAT_100.compareTo(ucwkStat) >= 0)` [PCRS_CD_FREE_WIFI="A45", PCRS_CD_WIFISPOT="A30", SVC_KEI_STAT_020="020", SVC_KEI_STAT_100="100"] (L22902)

> 📌 if (JKKHakkoSODConstCC.PPLAN_CD_WIFI_MRYO.equals(pplan_cd))

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `wifiCount++;` |

###### · Block 1.2 — 🔀 IF `(wifiCount > 1)` (L22911)

> 📌 Wi-Fiスポット有無判定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `wifi_flg = true;` |

> **合計**: 6 blocks (4 depth levels)

### getSvcKeiInfo()

---

#### 1. 役割

サービス契約一意照会（EKK0081A010）を呼び出し、指定されたparamからサービス契約情報（gene_add_dtm, prc_grp_cd, pcrs_cd, svc_kei_statなど）を取得し返却する。サービス契約情報の詳細（世代登録年月日時分秒、料金グループコード、コースコード、課金状態など）をresultHashに格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSvcKeiInfo（handle, param）"] --> S1["Step1: editInMsg_EKK0081A010CBS（param）で上りマッピング"]
  S1 --> S2["Step2: ServiceComponentRequestInvokerインスタンス生成"]
  S2 --> S3["Step3: scCall.run（paramMap, handle）でSC呼出"]
  S3 --> S4["Step4: editResultRP_EKK0081A010CBS（result, param）で下りマッピング"]
  S4 --> S5["Step5: param.getData（HAKKOSODCCWORKMAP）からデータ取得"]
  S5 -.-> NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'（作業マップキー）"]
  S5 --> IF1{'"dataMap != null"'}
  IF1 -->|"Yes"| S6["Step6: dataListからchildMap（先頭レコード）取得"]
  S6 --> IF2{'"childMap != null"'}
  IF2 -->|"Yes"| S7["Step7: 各種フィールド（gene_add_dtm, mskm_dtl_no, prc_grp_cd, pcrs_cd, svc_kei_stat, ...）をresultHashに格納"]
  S7 --> RET["return resultHash"]
  IF2 -->|"No"| RET
  IF1 -->|"No"| RET

  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. editInMsg_EKK0081A010CBSでparamを上りマッピング。
2. ServiceComponentRequestInvokerインスタンス生成。
3. SC呼出（run）を実行。
4. editResultRP_EKK0081A010CBSでparamに下りマッピング。
5. paramからHAKKOSODCCWORKMAP（"HakkoSODCCWORK"）を取得。
6. 取得したdataListからchildMap（先頭レコード）を取得し、gene_add_dtm, mskm_dtl_no, prc_grp_cd, pcrs_cd, svc_kei_stat, svc_pause_ymd, svc_pause_rls_ymd, pause_stp_cd, pplan_cd, tk_hoshiki_kei_no などをresultHashに格納。
7. resultHashを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | CBS経由SC | EKK0081A010CBS | KK_T_SVC_KEI, C021 | サービス契約一意照会処理<br> <br> サービス契約一意照会サービスインターフェイスにより<br> サービス契約情報… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiInfo` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `adchgFixOdrCtrl` | private | 住所変更・確定オーダ制御処理<br> |
| 2 | `hakkoCourseChgSOD` | public | 料金プランコード変更(ネット)に伴うサービスオーダを発行します。 <br> 認証IDが変わらず、料金プランコードのみが変更となるコース変更(コース変更取消)の際に発行が必要なサービスオーダを オーダ発行条件、オーダ情報作成ワークに登録します… |
| 3 | `hakkoSOD` | public | サービスオーダ発行処理 <br> パラメータの件数分<br> サービスオーダ登録処理を呼び出します。<br> <br> |
| 4 | `koteiIpAd8DivOdrCtrl` | private | 固定IPアドレス８区分の制御処理<br> |
| 5 | `malwareBlockingDivOdrCtrl` | private | マルウェアブロッキングの制御処理<br> |
| 6 | `opHktgiOdrCtrl` | private | オプション引継オーダ制御処理<br> |
| 7 | `vLanIdVaChangeOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getSvcKeiInfo()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap != null)` (L21973)

> 📌 世代登録年月日時分秒取得

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔀 IF `(dataList.size() > 0)` (L21976)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L21979)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put("gene_add_dtm", (String)childMap.get("gene_add_dtm"));` |
| 2 | 📋 SET | `resultHash.put("mskm_dtl_no", (String)childMap.get("mskm_dtl_no"));` |
| 3 | 📋 SET | `resultHash.put("prc_grp_cd", (String)childMap.get("prc_grp_cd"));` |
| 4 | 📋 SET | `resultHash.put("pcrs_cd", (String)childMap.get("pcrs_cd"));` |
| 5 | 📋 SET | `resultHash.put("svc_kei_stat", (String)childMap.get("svc_kei_stat"));` |
| 6 | 📋 SET | `resultHash.put("svc_pause_ymd", (String)childMap.get("svc_pause_ymd"));` |
| 7 | 📋 SET | `resultHash.put("svc_pause_rls_ymd", (String)childMap.get("svc_pause_rls_ymd"));` |
| 8 | 📋 SET | `resultHash.put("pause_stp_cd", (String)childMap.get("pause_stp_cd"));` |
| 9 | 📋 SET | `resultHash.put("pplan_cd", (String)childMap.get("pplan_cd"));` |
| 10 | 📋 SET | `resultHash.put("tk_hoshiki_kei_no", (String)childMap.get("tk_hoshiki_kei_no"));` |

> **合計**: 3 blocks (3 depth levels)

### getSvcKeiList()

---

#### 1. 役割

サービス契約一意照会（EKK0081A010）を実行し、指定したサービス契約番号（svcKeiNo）に対する契約情報（HashMap）を取得する。入力パラメータとしてサービス契約番号と運用日をSCに渡し、正常終了時はレスポンスから該当契約情報（TEMPLATE_ID_EKK0081A010）を返却する。異常終了時は例外をスローする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSvcKeiList（param, handle, svcKeiNo）"] --> S1["Step1: inHash生成（SVC_KEI_NO, OPE_DATEを設定）"]
  S1 -.-> NOTE1["SVC_KEI_NO = 'svcKeiNo'（サービス契約番号）"]
  S1 -.-> NOTE2["OPE_DATE = 運用日"]
  S1 --> S2["Step2: callEKK0081A010SC（param, handle, inHash, resultHash, FUNC_CODE_2）を実行"]
  S2 -.-> NOTE_FUNC_CODE["FUNC_CODE_2 = '2'（機能コード）"]
  S2 --> IF1{'"statusCode != 0"'}

  IF1 -.-> NOTE_ERR["statusCode != 0 の場合は例外スロー"]

  IF1 -->|"Yes"| S3["throw new CCException..."]
  IF1 -->|"No"| S4["Step3: SCレスポンスからTEMPLATE_ID_EKK0081A010を取得"]
  S4 -.-> NOTE_TEMPLATE["TEMPLATE_ID_EKK0081A010 = 'EKK0081A010'（サービス契約一意照会）"]
  S4 --> RET["return eKK0081A010Map"]

  style IF1 fill:#ffcc00
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_FUNC_CODE fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_ERR fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE_TEMPLATE fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. inHash（HashMap）を生成し、`SVC_KEI_NO`（サービス契約番号）と`OPE_DATE`（運用日: JCCBPCommon.getOpeDate(null)）をセット。
2. `callEKK0081A010SC()`（機能コード: `FUNC_CODE_2 = "2"`）を呼び出し、SC（サービスコンポーネント）でサービス契約一意照会を実施。
3. ステータスコード（statusCode）が0でない場合は、`CCException`（業務エラー）をスローする。
4. SCレスポンス（resultHash）から`TEMPLATE_ID_EKK0081A010`（= "EKK0081A010"）の値を取得し、HashMapとして返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 3   | svcKeiNo     | String                     | サービス契約番号                                      |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEKK0081A010SC` | EKK0081A010SC | KK_T_IDO_RSV, KK_T_KAKINS, KK_T_SVC_KEI, KK_M_PRC_GRP, KK_T_SVC_KEI_UCWK, KK_T_SVKEIUW_EOH_NET, KK_T_KKTK_SVC_KEI, KK_M_PCRS, KK_M_PPLAN, DUAL, KK_T_OP_SVC_KEI, KK_T_WRISVC_TG_KEI, KK_T_WRIB_SVC_KEI, KK_M_EOPRMCL_SISAK, ZM_M_CD_NM_KANRI, KK_M_SVC, KK_T_OWNR_KEI, KK_T_SVKEI_KAISEN_UW, KK_T_KAISEN_TG_SVKEI, KK_T_MSKM_DTL, KK_T_MSKM, KK_T_SVC_KEI_EOH_TV, KK_T_SEIKY_KEI, CK_T_CUST, KK_M_WRISVC_TG_SVC, KK_T_KAP_KEI, KK_T_SVC_KEI_EOH_NET, KU_T_SVKEI_KOJIAK, KU_T_KOJIAK, KK_T_SVKEI_GRP_SETE, KK_T_SVC_KEI_EOH_TEL, KK_T_SEIOPSVC_KEI, KK_M_WRIB_SVC, KK_T_SBOP_SVC_KEI, KK_T_SVKEIUW_EOADSL, KK_T_OPSVKEI_ISP, CH_T_TOKUSOKU, KK_T_MSKM_AGNT, KK_M_AGNT, KK_T_ICJKN_SETTE, KK_M_TMP_PAY_PRC, CR_T_TAIO_KIROK, KU_T_KOJI_STEP_PRG, KK_M_OLD_ICS_CD_CHG, DK_T_HMPIN_KIKI, KK_T_MANSION_BUKKEN, KK_T_KAISEN_USE_KEI, KK_T_TK_HOSHIKI_KEI, ZM_M_WORK_PARAM_KNRI, CK_T_RRKS, KK_T_SVKEIUW_EOH_TEL, AC_M_TUWA_SBT, LEFT, KK_T_KOZA, KK_T_CRECARD, CK_T_CUST_HOJIN, KK_M_OP_SVC, KK_T_ADCHG, KK_T_ADCHG_DTL, KK_T_SUPPORT, CH_M_PRC_SCHDL_TEIGI, C021, KK_T_NTTORS_KEI | (サービス契約一意照会SIFを呼び出し) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiList` | `callEKK0081A010SC [R] KK_T_IDO_RSV/KK_T_KAKINS/KK_T_SVC_KEI/KK_M_PRC_GRP/KK_T_SVC_KEI_UCWK/KK_T_SVKEIUW_EOH_NET/KK_T_KKTK_SVC_KEI/KK_M_PCRS/KK_M_PPLAN/DUAL/KK_T_OP_SVC_KEI/KK_T_WRISVC_TG_KEI/KK_T_WRIB_SVC_KEI/KK_M_EOPRMCL_SISAK/ZM_M_CD_NM_KANRI/KK_M_SVC/KK_T_OWNR_KEI/KK_T_SVKEI_KAISEN_UW/KK_T_KAISEN_TG_SVKEI/KK_T_MSKM_DTL/KK_T_MSKM/KK_T_SVC_KEI_EOH_TV/KK_T_SEIKY_KEI/CK_T_CUST/KK_M_WRISVC_TG_SVC/KK_T_KAP_KEI/KK_T_SVC_KEI_EOH_NET/KU_T_SVKEI_KOJIAK/KU_T_KOJIAK/KK_T_SVKEI_GRP_SETE/KK_T_SVC_KEI_EOH_TEL/KK_T_SEIOPSVC_KEI/KK_M_WRIB_SVC/KK_T_SBOP_SVC_KEI/KK_T_SVKEIUW_EOADSL/KK_T_OPSVKEI_ISP/CH_T_TOKUSOKU/KK_T_MSKM_AGNT/KK_M_AGNT/KK_T_ICJKN_SETTE/KK_M_TMP_PAY_PRC/CR_T_TAIO_KIROK/KU_T_KOJI_STEP_PRG/KK_M_OLD_ICS_CD_CHG/DK_T_HMPIN_KIKI/KK_T_MANSION_BUKKEN/KK_T_KAISEN_USE_KEI/KK_T_TK_HOSHIKI_KEI/ZM_M_WORK_PARAM_KNRI/CK_T_RRKS/KK_T_SVKEIUW_EOH_TEL/AC_M_TUWA_SBT/LEFT/KK_T_KOZA/KK_T_CRECARD/CK_T_CUST_HOJIN/KK_M_OP_SVC/KK_T_ADCHG/KK_T_ADCHG_DTL/KK_T_SUPPORT/CH_M_PRC_SCHDL_TEIGI/C021/KK_T_NTTORS_KEI (サービス契約一意照会SIFを呼び出し)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `checkTakinoRT` | protected | 多機能ルーター情報ルータ機能有無チェック<br> <br> サービス契約番号に紐付いている多機能ルータのルータ機能設定有無 <br> <br> |
| 2 | `newNet` | private | インターネットサービス新規契約処理<br> <br> (1)FTTH認証の新規登録を行う。<br> (2)Eメールの新規登録を行う。<br> (3)URLが設定されている場合、Myホームページ情報の新規登録を行う。<br> (4)メーリング… |

---

#### 📋 Per-Branch 詳細ブロック — `getSvcKeiList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(0 != statusCode)` (L22028)

> 📌 サービス契約一意照会(機能コード:2)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

> **合計**: 1 blocks (1 depth levels)

### getOpSvcKeiList()

---

#### 1. 役割

オプションサービス契約一覧照会（EKK0351B002）・履歴一覧照会（EKK0351B003）を実行し、指定されたサービス契約内訳番号（svcKeiUcwkNo）に紐付く全オプションサービス契約について、契約情報（オプションサービスコード・契約番号・ステータス等）を取得・判定する。キャンセル/解約済み・オプション引継ぎオプションは除外し、Eメール・Myホームページ・メーリングリスト・ダイヤルアップ・マルチセッション・固定グローバルIPなどの存在フラグや契約番号・世代登録日時を管理する（各種フラグ/マップを設定）。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getOpSvcKeiList（handle, param, svcKeiUcwkNo）"] --> S1["Step1: editInMsg_EKK0351B002CBS（param, svcKeiUcwkNo）で上りマッピング"]
  S1 --> S2["Step2: ServiceComponentRequestInvokerインスタンス生成"]
  S2 --> S3["Step3: scCall.run（paramMap, handle）でEKK0351B002呼出"]
  S3 --> S4["Step4: editResultRP_EKK0351B002CBS（result, param）で下りマッピング"]
  S4 --> S5["Step5: paramMap/resultクリア、editInMsg_EKK0351B003CBS（param）で上りマッピング"]
  S5 --> S6["Step6: ServiceComponentRequestInvoker再生成・EKK0351B003呼出"]
  S6 --> S7["Step7: editResultRP_EKK0351B003CBS（result, param）で下りマッピング"]
  S7 --> S8["Step8: getShkIdoDiv（param）で全オプション最初の異動区分取得"]
  S8 --> IF1{'"dataMap != null"'}
  IF1 -->|"Yes"| S9["Step9: dataMap.get（EKK0351B002CBSMSG1LIST）でリスト取得"]
  S9 --> S10["Step10: 各childMapごとに下記判定を実施"]
  S10 --> IF2{'"op_svc_kei_stat == 920 （キャンセル） or 910 （解約）"'}
  IF2 -.-> NOTE1["SVC_KEI_STAT_920 = '920'（キャンセル済）"]
  IF2 -.-> NOTE2["SVC_KEI_STAT_910 = '910'（解約済）"]
  IF2 -->|"Yes, 除外"| S10
  IF2 -->|"No"| IF3{'"shkIdoDiv == IDO_DIV_OPHKTGI"'}
  IF3 -.-> NOTE3["IDO_DIV_OPHKTGI = '00003'（オプション引継）"]
  IF3 -->|"Yes, 除外"| S10
  IF3 -->|"No"| S11["Step11: op_svc_cdごとの処理"]
  S11 --> IF4{'"op_svc_cd == OP_SVC_CD_EMAIL"'}

  IF4 -.-> NOTE4["OP_SVC_CD_EMAIL = 'B001'（Eメール）"]
  IF4 -->|"Yes"| S12["Step12: op_svc_kei_no_ml_mapに世代情報保存、eml_flg=True"]
  IF4 -->|"No"| IF5{'"op_svc_cd == OP_SVC_CD_HP"'}

  IF5 -.-> NOTE5["OP_SVC_CD_HP = 'B002'（Myホームページ）"]
  IF5 -->|"Yes"| S13["Step13: op_svc_kei_no_hp, op_gadtm_hpを設定"]
  IF5 -->|"No"| IF6{'"op_svc_cd == OP_SVC_CD_MLIST"'}

  IF6 -.-> NOTE6["OP_SVC_CD_MLIST = 'B003'（メーリングリスト）"]
  IF6 -->|"Yes"| S14["Step14: op_svc_kei_no_mlist_map保存、mlist_flg=True"]
  IF6 -->|"No"| IF7{'"op_svc_cd == OP_SVC_CD_DUP"'}

  IF7 -.-> NOTE7["OP_SVC_CD_DUP = 'B020'（ダイヤルアップ）"]
  IF7 -->|"Yes"| S15["Step15: op_svc_kei_no_dial, op_gadtm_dial保存、dial_flg=True"]
  IF7 -->|"No"| IF8{'"op_svc_cd == OP_SVC_CD_MLTISE"'}

  IF8 -.-> NOTE8["OP_SVC_CD_MLTISE = 'B015'（マルチセッション）"]
  IF8 -->|"Yes"| S16["Step16: op_svc_kei_no_mltise, op_gadtm_mltise保存、mltise_flg=True"]
  IF8 -->|"No"| IF9{'"op_svc_cd == OP_SVC_CD_FIXIPAD"'}

  IF9 -.-> NOTE9["OP_SVC_CD_FIXIPAD = 'B004'（固定グローバルIP）"]
  IF9 -->|"Yes"| S17["Step17: op_svc_kei_no_fixipad, op_gadtm_fixipad保存、fixipad_flg=True"]
  IF9 -->|"No"| S18["Step18: 何もしない"]
  S12 --> S10
  S13 --> S10
  S14 --> S10
  S15 --> S10
  S16 --> S10
  S17 --> S10
  S18 --> S10

  S10 --> S19["全ループ完了後 return param"]

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
  style IF7 fill:#ffcc00
  style IF8 fill:#ffcc00
  style IF9 fill:#ffcc00
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE7 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE8 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE9 fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. editInMsg_EKK0351B002CBSでsvcKeiUcwkNoを上りマッピング。
2. ServiceComponentRequestInvokerを生成。
3. EKK0351B002呼出し・下りマッピング。
4. paramMap/resultクリア後、editInMsg_EKK0351B003CBSで履歴一覧照会上りマッピング。
5. EKK0351B003呼出し・下りマッピング。
6. getShkIdoDiv(param)でオプションごとの異動区分を取得。
7. 各オプションについて、キャンセル/解約済、オプション引継ぎの場合は除外。
8. 残るオプションについて、Eメール・Myホームページ・メーリングリスト・ダイヤルアップ・マルチセッション・固定グローバルIPの各コードごとに判定し、契約番号・世代登録日時等をマップやフラグに設定。
9. 全ループ完了後、paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3   | svcKeiUcwkNo | String                     | サービス契約内訳番号                                  |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `getOpSvcKeiGaDtm` | EKK0351A010CBS | KK_M_PCRS, KK_M_PPLAN, ZM_M_CD_NM_KANRI, KK_T_OP_SVC_KEI, KK_M_OP_SVC, CK_T_CUST | (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getOpSvcKeiList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap != null)` (L22093)

> 📌 取得したオプションサービス契約一覧の件数分繰り返す

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔁 FOR `(for)` (L22096)

> 📌 "EKK0351B002CBSMsg1List");

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L22099)

> 📌 オプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String op_svc_cd = (String)childMap.get("op_svc_cd");` // オプションサービスコード |
| 2 | 📦 VAR | `String op_svc_kei_no = (String)childMap.get("op_svc_kei_no");` // オプションサービス契約番号 |

###### ··· Block 1.1.1.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(op_svc_kei_stat))` [SVC_KEI_STAT_920="920"] (L22105)

> 📌 オプションサービス契約番号

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ··· Block 1.1.1.2 — 🔀 IF `(JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(shkIdoDiv))` [IDO_DIV_OPHKTGI="00003"] (L22115)

> 📌 登録系のSODを発行しない

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ··· Block 1.1.1.3 — 🔀 IF `(JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(op_svc_cd))` [OP_SVC_CD_EMAIL="B001"] (L22122)

> 📌 Ｅメール

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `String array[] = {getOpSvcKeiGaDtm(handle, param, op_svc_kei_no)};` |
| 2 | 📋 SET | `op_svc_kei_no_ml_map.put(op_svc_kei_no, array);` |
| 3 | 📦 VAR | `eml_flg = true;` |

###### ··· Block 1.1.1.4 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(op_svc_cd))` [OP_SVC_CD_HP="B002"] (L22145)

> 📌 Ｍｙホームページ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_hp = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_hp = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |

###### ··· Block 1.1.1.5 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(op_svc_cd))` [OP_SVC_CD_MLIST="B003"] (L22153)

> 📌 メーリングリスト

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `op_svc_kei_no_mlist_map.put(op_svc_kei_no, getOpSvcKeiGaDtm(handle, param, op_svc_kei_no));` |
| 2 | 📦 VAR | `mlist_flg = true;` |

###### ··· Block 1.1.1.6 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(op_svc_cd))` [OP_SVC_CD_DUP="B020"] (L22163)

> 📌 ダイヤルアップ接続

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_dial = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_dial = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |
| 3 | 📦 VAR | `dial_flg = true;` |

###### ··· Block 1.1.1.7 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(op_svc_cd))` [OP_SVC_CD_MLTISE="B015"] (L22173)

> 📌 マルチセッション

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_mltise = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_mltise = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |
| 3 | 📦 VAR | `mltise_flg = true;` |

###### ··· Block 1.1.1.8 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(op_svc_cd))` [OP_SVC_CD_FIXIPAD="B004"] (L22183)

> 📌 固定グローバルＩＰアドレス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_fixipad = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_fixipad = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |
| 3 | 📦 VAR | `fixipad_flg = true;` |

> **合計**: 11 blocks (4 depth levels)

### getOpSvcKeiIsp()

---

#### 1. 役割

指定されたオプションサービス契約番号群（Eメール・Myホームページ等）に対応するISP情報（メールアドレス、URLドメイン・アカウント）をSC（EKK0361A010）で個別に照会し、op_svc_kei_no_ml_map等の変数に情報を格納する。URL情報の有無によってurl_flgを設定する。内部的にはop_svc_kei_no_ml_map, op_svc_kei_no_hp等の変数状態によって分岐がある。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getOpSvcKeiIsp（handle, param）"] --> S1["Step1: param.getData（HAKKOSODCCWORKMAP）で作業マップ取得"]
  S1 -.-> NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S1 --> IF1{'"iMap != null"'}
  IF1 -->|"Yes: op_svc_kei_no_ml_mapをループ"| S2["Step2: 各Eメール契約番号でiMapにセット、SC呼出、editResultRP_EKK0361A010CBSで結果反映"]
  S2 --> S3["Step3: dataMap.get（'EKK0361A010CBSMsg1List'）からメールアドレス取得し、op_svc_kei_no_ml_mapに再格納"]
  S3 --> S4["Step4: dataListクリア"]
  S4 --> S5["Step5: op_svc_kei_no_hp!=nullならMyホームページ契約をSC呼出"]
  S5 --> IF2{'"dataMap!=null && url_domain, url_account共に空でなければurl_flg=True"'}
  IF2 -.-> NOTE2["url_domain, url_accountが空でなければurl_flg=True"]
  IF2 -->|"Yes"| S6["Step6: url_flg=True"]
  IF2 -->|"No"| S7["Step7: 何もしない"]
  S6 --> RET["return param"]
  S7 --> RET

  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. paramからHAKKOSODCCWORKMAP（"HakkoSODCCWORK"）を取得。
2. Eメール用のop_svc_kei_no_ml_mapをループし、iMapにop_svc_kei_noをセット、SC呼出（EKK0361A010）、editResultRP_EKK0361A010CBSでレスポンス反映。
3. dataMapから"EKK0361A010CBSMsg1List"のchildMapからmlad（メールアドレス）を取得し、op_svc_kei_no_ml_mapに再格納。
4. dataListをクリア。
5. op_svc_kei_no_hpがnullまたは空でなければ、Myホームページ契約を同様にSC呼出し、結果からurl_domainとurl_accountが両方非空の場合url_flgをTrueにする。
6. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | CBS経由SC | EKK0361A010CBS | KK_T_OPSVKEI_ISP | オプションサービス契約＜ISP＞一意照会<br> <br> オプションサービス契約＜ISP＞一意照会サービスインターフェ… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiIsp` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `getOpSvcKeiIsp()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(iMap != null)` (L22414)

> 📌 サービスオーダ発行CC作業マップ設定

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔁 FOR `(for)` (L22419)

> 📌 ST1-2012-0000319 2012/08/20 start

| # | 種別 | 処理内容 |
|---|---|---|
| 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_EKK0361A010CBS(param);` |
| 5 | 📞 CALL | `ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();` |
| 6 | ⚡ EXEC | `Map<?, ?> result = scCall.run(paramMap, handle);` |
| 7 | ⚡ EXEC | `editResultRP_EKK0361A010CBS(result, param);` [➔ RP_EKK0361A010CBS="rp_ekk0361a010cbs"] |

###### ·· Block 1.1.1 — 🔀 IF `(dataMap != null)` (L22441)

> 📌 メールアドレス取得

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ··· Block 1.1.1.1 — 🔀 IF `(dataList.size() > 0)` (L22444)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ···· Block 1.1.1.1.1 — 🔀 IF `(childMap != null)` (L22447)

> 📌 ST1-2012-0000319 2012/08/20 start

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `String array[] = {((String[])entry.getValue())[0], (String)childMap.get("mlad")};` |
| 2 | 📋 SET | `op_svc_kei_no_ml_map.put(entry.getKey(), array);` |

##### Block 2 — 🔀 IF `(op_svc_kei_no_hp != null && !"".equals(op_svc_kei_no_hp))` (L22463)

> 📌 オプションサービス契約番号（Ｍｙホームページ）がNULLでない、かつ空文字でない

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `iMap = (HashMap)param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP);` [➔ HAKKOSODCCWORKMAP="HakkoSODCCWORK"] \| |

###### · Block 2.1 — 🔀 IF `(iMap != null)` (L22469)

> 📌 サービスオーダ発行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_EKK0361A010CBS(param);` |
| 4 | 📞 CALL | `ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();` |
| 5 | ⚡ EXEC | `Map<?, ?> result = scCall.run(paramMap, handle);` |
| 6 | ⚡ EXEC | `editResultRP_EKK0361A010CBS(result, param);` [➔ RP_EKK0361A010CBS="rp_ekk0361a010cbs"] |

###### ·· Block 2.1.1 — 🔀 IF `(dataMap != null)` (L22491)

> 📌 NULLでない、かつ空文字でなければ、URL設定フラグを「True」にする。

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ··· Block 2.1.1.1 — 🔀 IF `(dataList.size() > 0)` (L22494)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ···· Block 2.1.1.1.1 — 🔀 IF `(childMap != null)` (L22497)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String url_domain = (String)childMap.get("url_domain");` |
| 2 | 📦 VAR | `String url_account = (String)childMap.get("url_account");` |

###### ····· Block 2.1.1.1.1.1 — 🔀 IF `(url_domain != null && !"".equals(url_domain) && url_account != null && !"".equals(url_account))` (L22502)

> 📌 ← `url_account = (String)childMap.get("url_account")`

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `url_account != null && !"".equals(url_account))` |
| 2 | 📦 VAR | `url_flg = true;` |

> **合計**: 11 blocks (6 depth levels)

### getSvcKeiUtwkListSysid()

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID）を実行し、paramにSCの結果（editResultRP_EKK0161B003CBS）を格納する。入力はparamとhandleのみで、SYSIDベースで上りマッピング後、SC呼出・下りマッピングを行う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getSvcKeiUtwkListSysid（param, handle）"] --> S1["Step1: editInMsg_EKK0161B003CBS（param）で上りマッピング"]
  S1 --> S2["Step2: ServiceComponentRequestInvokerインスタンス生成"]
  S2 --> S3["Step3: scCall.run（paramMap, handle）でSC呼出"]
  S3 --> S4["Step4: editResultRP_EKK0161B003CBS（result, param）で下りマッピング"]
  S4 --> RET["return param"]
```

**処理ステップ詳細:**

1. editInMsg_EKK0161B003CBSでparamを上りマッピング。
2. ServiceComponentRequestInvokerインスタンス生成。
3. SC呼出（run）を実行。
4. editResultRP_EKK0161B003CBSでparamに下りマッピング。
5. paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                                |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | CBS経由SC | EKK0161B003CBS | KK_M_SVC, KK_M_PRC_GRP, KK_M_PCRS, KK_M_PPLAN, KK_T_SVKEIUW_EOH_TEL, KK_T_KKTK_SVC_KEI, KK_T_SVC_KEI, KK_T_SVC_KEI_UCWK, KK_T_KAISEN_TG_SVKEI, KK_T_SVKEI_KAISEN_UW, KK_T_KAKINS | サービス契約内訳一覧照会（SYSID）<br> <br> サービス契約内訳一覧照会（SYSID）サービスインターフェイス… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getSvcKeiUtwkListSysid` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `newKeiOdrCtrl` | private | 新規契約オーダ制御処理<br> |
### getOpSvcKeiGaDtm()

---

#### 1. 役割

指定されたオプションサービス契約番号（op_svc_kei_no）に対して、オプションサービス契約一意照会（EKK0351A010）を実行し、該当契約の世代登録年月日時分秒（gene_add_dtm）を返却する。paramの作業マップに契約番号をセットしてSC呼出し、レスポンスからgene_add_dtmを抽出する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getOpSvcKeiGaDtm（handle, param, op_svc_kei_no）"] --> S1["Step1: param.getData（HAKKOSODCCWORKMAP）で作業マップ取得"]
  S1 -.-> NOTE1["HAKKOSODCCWORKMAP = 'HakkoSODCCWORK'"]
  S1 --> S2["Step2: iMapにop_svc_kei_noをセット"]
  S2 --> S3["Step3: editInMsg_EKK0351A010CBS（param）で上りマッピング"]
  S3 --> S4["Step4: ServiceComponentRequestInvokerインスタンス生成"]
  S4 --> S5["Step5: scCall.run（paramMap, handle）でSC呼出"]
  S5 --> S6["Step6: editResultRP_EKK0351A010CBS（result, param）で下りマッピング"]
  S6 --> S7["Step7: dataMap.get（'EKK0351A010CBSMsg1List'）からgene_add_dtm取得"]
  S7 --> RET["return opsvckei_gadtm"]
  S2 -.-> NOTE2["op_svc_kei_no = 'op_svc_kei_no'（オプションサービス契約番号）"]
  S7 -.-> NOTE3["gene_add_dtm = 'gene_add_dtm'（世代登録年月日時分秒）"]

  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. paramからHAKKOSODCCWORKMAP（"HakkoSODCCWORK"）を取得。
2. iMapにop_svc_kei_no（オプションサービス契約番号）をセット。
3. editInMsg_EKK0351A010CBSでparamを上りマッピング。
4. ServiceComponentRequestInvokerインスタンス生成。
5. SC呼出（run）を実行。
6. editResultRP_EKK0351A010CBSでparamに下りマッピング。
7. dataMapから"EKK0351A010CBSMsg1List"のchildMapからgene_add_dtm（世代登録年月日時分秒）を取得し返却。

---

#### 3. パラメータ分析

| No  | パラメータ名   | 型                         | 業務説明                                              |
| --- | ------------- | -------------------------- | ----------------------------------------------------- |
| 1   | handle        | SessionHandle              | セッション管理ハンドル                                |
| 2   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3   | op_svc_kei_no | String                     | オプションサービス契約番号                            |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | CBS経由SC | EKK0351A010CBS | KK_M_OP_SVC, KK_M_PCRS, KK_M_PPLAN, CK_T_CUST, ZM_M_CD_NM_KANRI, KK_T_OP_SVC_KEI | オプションサービス契約一意照会処理<br> <br> オプションサービス契約一意照会サービスインターフェイスにより<br… |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiGaDtm` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getOpSvcKeiList` | private | オプションサービス契約一覧照会（サービス契約番号）<br> <br> オプションサービス契約一覧照会（サービス契約番号）サービスインターフェイスにより<br> サービス契約番号に紐づくオプションサービス契約の一覧を取得します。<br> <b… |
| 2 | `getOpSvcKeiNotDslList` | private | オプションサービス契約一覧照会（サービス契約番号）<br> <br> オプションサービス契約一覧照会（サービス契約番号）サービスインターフェイスにより<br> サービス契約番号に紐づく解約済ではないオプションサービス契約の一覧を取得します。… |

---

#### 📋 Per-Branch 詳細ブロック — `getOpSvcKeiGaDtm()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap != null)` (L22377)

> 📌 世代登録年月日時分秒取得

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔀 IF `(dataList.size() > 0)` (L22380)

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L22383)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `opsvckei_gadtm = (String)childMap.get("gene_add_dtm");` |

> **合計**: 3 blocks (3 depth levels)

### getOpSvcKeiNotDslList()

---

#### 1. 役割

指定されたサービス契約内訳番号（svcKeiUcwkNo）に紐付く全オプションサービス契約について、キャンセル済・解約済・オプション引継ぎを除く有効なオプション契約情報を取得する。Eメール・Myホームページ・メーリングリスト・ダイヤルアップ・マルチセッション・固定グローバルIPの存在フラグおよび契約番号・世代登録日時等を管理用変数に設定する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["getOpSvcKeiNotDslList（handle, param, svcKeiUcwkNo）"] --> S1["Step1: editInMsg_EKK0351B002CBS（param, svcKeiUcwkNo）で上りマッピング"]
  S1 --> S2["Step2: ServiceComponentRequestInvokerインスタンス生成"]
  S2 --> S3["Step3: scCall.run（paramMap, handle）でEKK0351B002呼出"]
  S3 --> S4["Step4: editResultRP_EKK0351B002CBS（result, param）で下りマッピング"]
  S4 --> S5["Step5: paramMap/resultクリア、editInMsg_EKK0351B003CBS（param）で上りマッピング"]
  S5 --> S6["Step6: ServiceComponentRequestInvoker再生成・EKK0351B003呼出"]
  S6 --> S7["Step7: editResultRP_EKK0351B003CBS（result, param）で下りマッピング"]
  S7 --> S8["Step8: getShkIdoDiv（param）で全オプション最初の異動区分取得"]
  S8 --> IF1{'"dataMap != null"'}
  IF1 -->|"Yes"| S9["Step9: dataMap.get（EKK0351B002CBSMSG1LIST）でリスト取得"]
  S9 --> S10["Step10: 各childMapごとに下記判定を実施"]
  S10 --> IF2{'"op_svc_kei_stat == 920 or 910"'}
  IF2 -.-> NOTE1["SVC_KEI_STAT_920 = '920'（キャンセル済）"]
  IF2 -.-> NOTE2["SVC_KEI_STAT_910 = '910'（解約済）"]
  IF2 -->|"Yes, 除外"| S10
  IF2 -->|"No"| IF3{'"shkIdoDiv == IDO_DIV_OPHKTGI"'}
  IF3 -.-> NOTE3["IDO_DIV_OPHKTGI = '00003'（オプション引継）"]
  IF3 -->|"Yes, 除外"| S10
  IF3 -->|"No"| S11["Step11: op_svc_cdごとの処理"]
  S11 --> IF4{'"op_svc_cd == OP_SVC_CD_EMAIL"'}

  IF4 -.-> NOTE4["OP_SVC_CD_EMAIL = 'B001'（Eメール）"]
  IF4 -->|"Yes"| S12["Step12: op_svc_kei_no_ml_mapに世代情報保存、eml_flg=True"]
  IF4 -->|"No"| IF5{'"op_svc_cd == OP_SVC_CD_HP"'}

  IF5 -.-> NOTE5["OP_SVC_CD_HP = 'B002'（Myホームページ）"]
  IF5 -->|"Yes"| S13["Step13: op_svc_kei_no_hp, op_gadtm_hpを設定"]
  IF5 -->|"No"| IF6{'"op_svc_cd == OP_SVC_CD_MLIST"'}

  IF6 -.-> NOTE6["OP_SVC_CD_MLIST = 'B003'（メーリングリスト）"]
  IF6 -->|"Yes"| S14["Step14: op_svc_kei_no_mlist_map保存、mlist_flg=True"]
  IF6 -->|"No"| IF7{'"op_svc_cd == OP_SVC_CD_DUP"'}

  IF7 -.-> NOTE7["OP_SVC_CD_DUP = 'B020'（ダイヤルアップ）"]
  IF7 -->|"Yes"| S15["Step15: op_svc_kei_no_dial, op_gadtm_dial保存、dial_flg=True"]
  IF7 -->|"No"| IF8{'"op_svc_cd == OP_SVC_CD_MLTISE"'}

  IF8 -.-> NOTE8["OP_SVC_CD_MLTISE = 'B015'（マルチセッション）"]
  IF8 -->|"Yes"| S16["Step16: op_svc_kei_no_mltise, op_gadtm_mltise保存、mltise_flg=True"]
  IF8 -->|"No"| IF9{'"op_svc_cd == OP_SVC_CD_FIXIPAD"'}

  IF9 -.-> NOTE9["OP_SVC_CD_FIXIPAD = 'B004'（固定グローバルIP）"]
  IF9 -->|"Yes"| S17["Step17: op_svc_kei_no_fixipad, op_gadtm_fixipad保存、fixipad_flg=True"]
  IF9 -->|"No"| S18["Step18: 何もしない"]
  S12 --> S10
  S13 --> S10
  S14 --> S10
  S15 --> S10
  S16 --> S10
  S17 --> S10
  S18 --> S10

  S10 --> S19["全ループ完了後 return param"]

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
  style IF7 fill:#ffcc00
  style IF8 fill:#ffcc00
  style IF9 fill:#ffcc00
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE3 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE4 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE5 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE6 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE7 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE8 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  style NOTE9 fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. editInMsg_EKK0351B002CBSでsvcKeiUcwkNoを上りマッピング。
2. ServiceComponentRequestInvokerを生成。
3. EKK0351B002呼出し・下りマッピング。
4. paramMap/resultクリア後、editInMsg_EKK0351B003CBSで履歴一覧照会上りマッピング。
5. EKK0351B003呼出し・下りマッピング。
6. getShkIdoDiv(param)でオプションごとの異動区分を取得。
7. 各オプションについて、キャンセル/解約済、オプション引継ぎの場合は除外。
8. 残るオプションについて、Eメール・Myホームページ・メーリングリスト・ダイヤルアップ・マルチセッション・固定グローバルIPの各コードごとに判定し、契約番号・世代登録日時等をマップやフラグに設定。
9. 全ループ完了後、paramを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3   | svcKeiUcwkNo | String                     | サービス契約内訳番号                                  |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `getOpSvcKeiGaDtm` | EKK0351A010CBS | KK_M_PCRS, KK_M_PPLAN, ZM_M_CD_NM_KANRI, KK_T_OP_SVC_KEI, KK_M_OP_SVC, CK_T_CUST | (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → getOpSvcKeiNotDslList` | `getOpSvcKeiGaDtm [R] EKK0351A010CBS [KK_M_PCRS/KK_M_PPLAN/ZM_M_CD_NM_KANRI/KK_T_OP_SVC_KEI/KK_M_OP_SVC/CK_T_CUST] (オプションサービス契約一意照会処理    オプションサービス契約一意照会サービスインターフェイスにより  オプションサービス契約情報（世代登録年月日時分秒）を取得します。)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `taiikiSeigenOdrCtrl` | private | 帯域制限設定・解除オーダ制御処理<br> |
---
---

#### 📋 Per-Branch 詳細ブロック — `getOpSvcKeiNotDslList()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(dataMap != null)` (L22253)

> 📌 取得したオプションサービス契約一覧の件数分繰り返す

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔁 FOR `(for)` (L22256)

> 📌 "EKK0351B002CBSMsg1List");

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### ·· Block 1.1.1 — 🔀 IF `(childMap != null)` (L22259)

> 📌 オプションサービスコード

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String op_svc_cd = (String)childMap.get("op_svc_cd");` // オプションサービスコード |
| 2 | 📦 VAR | `String op_svc_kei_no = (String)childMap.get("op_svc_kei_no");` // オプションサービス契約番号 |
| 3 | 📦 VAR | `String op_svc_kei_stat = (String)childMap.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);` // オプションサービス契約番号 [➔ OP_SVC_KEI_STAT="op_svc_kei_stat"] \| |

###### ··· Block 1.1.1.1 — 🔀 IF `(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(op_svc_kei_stat) || JKKHakkoSODConstCC.SVC_KEI_STAT_910.equals(op_svc_kei_stat))` [SVC_KEI_STAT_920="920", SVC_KEI_STAT_910="910"] (L22265)

> 📌 キャンセル済および解約済のオプションサービス契約は対象外とする

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ··· Block 1.1.1.2 — 🔀 IF `(JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(shkIdoDiv))` [IDO_DIV_OPHKTGI="00003"] (L22273)

> 📌 登録系のSODを発行しない

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### ··· Block 1.1.1.3 — 🔀 IF `(JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(op_svc_cd))` [OP_SVC_CD_EMAIL="B001"] (L22278)

> 📌 Ｅメール

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `String array[] = {getOpSvcKeiGaDtm(handle, param, op_svc_kei_no)};` |
| 2 | 📋 SET | `op_svc_kei_no_ml_map.put(op_svc_kei_no, array);` |
| 3 | 📦 VAR | `eml_flg = true;` |

###### ··· Block 1.1.1.4 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(op_svc_cd))` [OP_SVC_CD_HP="B002"] (L22287)

> 📌 Ｍｙホームページ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_hp = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_hp = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |

###### ··· Block 1.1.1.5 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(op_svc_cd))` [OP_SVC_CD_MLIST="B003"] (L22295)

> 📌 メーリングリスト

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `op_svc_kei_no_mlist_map.put(op_svc_kei_no, getOpSvcKeiGaDtm(handle, param, op_svc_kei_no));` |
| 2 | 📦 VAR | `mlist_flg = true;` |

###### ··· Block 1.1.1.6 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(op_svc_cd))` [OP_SVC_CD_DUP="B020"] (L22303)

> 📌 ダイヤルアップ接続

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_dial = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_dial = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |
| 3 | 📦 VAR | `dial_flg = true;` |

###### ··· Block 1.1.1.7 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(op_svc_cd))` [OP_SVC_CD_MLTISE="B015"] (L22313)

> 📌 マルチセッション

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_mltise = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_mltise = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |
| 3 | 📦 VAR | `mltise_flg = true;` |

###### ··· Block 1.1.1.8 — 🔀 ELSE-IF `(JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(op_svc_cd))` [OP_SVC_CD_FIXIPAD="B004"] (L22323)

> 📌 固定グローバルＩＰアドレス

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `op_svc_kei_no_fixipad = op_svc_kei_no;` |
| 2 | ⚡ EXEC | `op_gadtm_fixipad = getOpSvcKeiGaDtm(handle, param, op_svc_kei_no);` |
| 3 | 📦 VAR | `fixipad_flg = true;` |

> **合計**: 11 blocks (4 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)

### `getKK0351Hash()` (L28330) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (0 != statusCode) | - | TEMPLATE_ID_EKK0351A010=EKK0351A010 | - | L28339 |
| 2 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode)) | - | TEMPLATE_ID_EKK0351A010=EKK0351A010 | - | L28341 |
| 3 | ↩️ RETURN | D0 | eKK0351A010SCHash | - | - | - | L28346 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getKK0351Hash()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （0 != statusCode）"]
    direction TB
    C0_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L28339"| SG0
  B1["RETURN: eKK0351A010SCHash"]
  CF0 -->|"L28346"| B1
```

### `getOpSvcKeiGaDtm()` (L22352) — 4 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap != null) | - | - | - | L22377 |
| 2 | · 🔀 IF | D1 | (dataList.size() > 0) | - | - | - | L22380 |
| 3 | ·· 🔀 IF | D2 | (childMap != null) | - | - | - | L22383 |
| 4 | ↩️ RETURN | D0 | opsvckei_gadtm | - | - | - | L22390 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getOpSvcKeiGaDtm()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （dataMap != null）"]
    direction TB
    C0_0["IF: （dataList.size（） > 0）"]
  end
  CF0 -->|"L22377"| SG0
  B1["RETURN: opsvckei_gadtm"]
  CF0 -->|"L22390"| B1
```

### `getOpSvcKeiIsp()` (L22407) — 12 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (iMap != null) | サービスオーダ発行CC作業マップ設定 | - | - | L22414 |
| 2 | · 🔁 FOR | D1 | (for-loop) | ST1-2012-0000319 2012/08/20 start | - | - | L22419 |
| 3 | ·· 🔀 IF | D2 | (dataMap != null) | メールアドレス取得 | - | - | L22441 |
| 4 | ··· 🔀 IF | D3 | (dataList.size() > 0) | ST1-2012-0000319 2012/08/20 start | - | - | L22444 |
| 5 | ···· 🔀 IF | D4 | (childMap != null) | ST1-2012-0000319 2012/08/20 start | - | - | L22447 |
| 6 | 🔀 IF | D0 | (op_svc_kei_no_hp != null && !"".equals(op_svc_kei_no_hp)) | オプションサービス契約番号（Ｍｙホームページ）がNULLでない、かつ空文字でない | - | `editInMsg_EKK0361A010CBS()`, `editResultRP_EKK0361A010CBS()` | L22463 |
| 7 | · 🔀 IF | D1 | (iMap != null) | サービスオーダ発行CC作業マップ設定 | - | `editInMsg_EKK0361A010CBS()`, `editResultRP_EKK0361A010CBS()` | L22469 |
| 8 | ·· 🔀 IF | D2 | (dataMap != null) | NULLでない、かつ空文字でなければ、URL設定フラグを「True」にする。 | - | - | L22491 |
| 9 | ··· 🔀 IF | D3 | (dataList.size() > 0) | - | - | - | L22494 |
| 10 | ···· 🔀 IF | D4 | (childMap != null) | - | - | - | L22497 |
| 11 | ····· 🔀 IF | D5 | (url_domain != null && !"".equals(url_domain) && url_account != null && !"".equals(url_account)) | - | - | - | L22502 |
| 12 | ↩️ RETURN | D0 | param | - | - | - | L22514 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getOpSvcKeiIsp()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （iMap != null）"]
    direction TB
    C0_0["FOR: …"]
  end
  CF0 -->|"L22414"| SG0
  subgraph SG1["IF: （op_svc_kei_no_hp != null && !''.equals（…"]
    direction TB
    C1_0["IF: （iMap != null）"]
  end
  CF0 -->|"L22463"| SG1
  B2["RETURN: param"]
  CF0 -->|"L22514"| B2
```

### `getOpSvcKeiList()` (L22052) — 12 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap != null) | 取得したオプションサービス契約一覧の件数分繰り返す | EKK0351B002CBSMSG1LIST=EKK0351B002CBSMsg1List | `getOpSvcKeiGaDtm()` | L22093 |
| 2 | · 🔁 FOR | D1 | (for-loop) | "EKK0351B002CBSMsg1List"); | - | `getOpSvcKeiGaDtm()` | L22096 |
| 3 | ·· 🔀 IF | D2 | (childMap != null) | オプションサービスコード | - | `getOpSvcKeiGaDtm()` | L22099 |
| 4 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(op_svc_kei_stat)) | オプションサービス契約番号 | SVC_KEI_STAT_920=920 | - | L22105 |
| 5 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(shkIdoDiv)) | 登録系のSODを発行しない | IDO_DIV_OPHKTGI=00003 | - | L22115 |
| 6 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(op_svc_cd)) | Ｅメール | OP_SVC_CD_EMAIL=B001 | `getOpSvcKeiGaDtm()` | L22122 |
| 7 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(op_svc_cd)) | Ｍｙホームページ | OP_SVC_CD_HP=B002 | - | L22145 |
| 8 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(op_svc_cd)) | メーリングリスト | OP_SVC_CD_MLIST=B003 | - | L22153 |
| 9 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(op_svc_cd)) | ダイヤルアップ接続 | OP_SVC_CD_DUP=B020 | - | L22163 |
| 10 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(op_svc_cd)) | マルチセッション | OP_SVC_CD_MLTISE=B015 | - | L22173 |
| 11 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(op_svc_cd)) | 固定グローバルＩＰアドレス | OP_SVC_CD_FIXIPAD=B004 | - | L22183 |
| 12 | ↩️ RETURN | D0 | param | - | - | - | L22196 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getOpSvcKeiList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （dataMap != null）"]
    direction TB
    C0_0["FOR: …"]
  end
  CF0 -->|"L22093"| SG0
  B1["RETURN: param"]
  CF0 -->|"L22196"| B1
```

### `getOpSvcKeiNotDslList()` (L22214) — 12 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap != null) | 取得したオプションサービス契約一覧の件数分繰り返す | EKK0351B002CBSMSG1LIST=EKK0351B002CBSMsg1List | `getOpSvcKeiGaDtm()` | L22253 |
| 2 | · 🔁 FOR | D1 | (for-loop) | "EKK0351B002CBSMsg1List"); | - | `getOpSvcKeiGaDtm()` | L22256 |
| 3 | ·· 🔀 IF | D2 | (childMap != null) | オプションサービスコード | - | `getOpSvcKeiGaDtm()` | L22259 |
| 4 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(op_svc_kei_stat) ｜｜ JKKHakkoSODConstCC.SVC_KEI_STAT_910.equals(op_svc_kei_stat)) | キャンセル済および解約済のオプションサービス契約は対象外とする | SVC_KEI_STAT_920=920, SVC_KEI_STAT_910=910 | - | L22265 |
| 5 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(shkIdoDiv)) | 登録系のSODを発行しない | IDO_DIV_OPHKTGI=00003 | - | L22273 |
| 6 | ··· 🔀 IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(op_svc_cd)) | Ｅメール | OP_SVC_CD_EMAIL=B001 | `getOpSvcKeiGaDtm()` | L22278 |
| 7 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(op_svc_cd)) | Ｍｙホームページ | OP_SVC_CD_HP=B002 | - | L22287 |
| 8 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(op_svc_cd)) | メーリングリスト | OP_SVC_CD_MLIST=B003 | - | L22295 |
| 9 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(op_svc_cd)) | ダイヤルアップ接続 | OP_SVC_CD_DUP=B020 | - | L22303 |
| 10 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(op_svc_cd)) | マルチセッション | OP_SVC_CD_MLTISE=B015 | - | L22313 |
| 11 | ··· 🔀 ELSE-IF | D3 | (JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(op_svc_cd)) | 固定グローバルＩＰアドレス | OP_SVC_CD_FIXIPAD=B004 | - | L22323 |
| 12 | ↩️ RETURN | D0 | param | - | - | - | L22336 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getOpSvcKeiNotDslList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （dataMap != null）"]
    direction TB
    C0_0["FOR: …"]
  end
  CF0 -->|"L22253"| SG0
  B1["RETURN: param"]
  CF0 -->|"L22336"| B1
```

### `getSvcKeiInfo()` (L21954) — 4 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (dataMap != null) | 世代登録年月日時分秒取得 | - | - | L21973 |
| 2 | · 🔀 IF | D1 | (dataList.size() > 0) | - | - | - | L21976 |
| 3 | ·· 🔀 IF | D2 | (childMap != null) | - | - | - | L21979 |
| 4 | ↩️ RETURN | D0 | resultHash | - | - | - | L21999 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getSvcKeiInfo()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （dataMap != null）"]
    direction TB
    C0_0["IF: （dataList.size（） > 0）"]
  end
  CF0 -->|"L21973"| SG0
  B1["RETURN: resultHash"]
  CF0 -->|"L21999"| B1
```

### `getSvcKeiList()` (L22009) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (0 != statusCode) | 0でない場合はエラー | TEMPLATE_ID_EKK0081A010=EKK0081A010 | - | L22028 |
| 2 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode)) | 必要情報の取得 | - | - | L22031 |
| 3 | ↩️ RETURN | D0 | eKK0081A010Map | - | - | - | L22037 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getSvcKeiList()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （0 != statusCode）"]
    direction TB
    C0_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L22028"| SG0
  B1["RETURN: eKK0081A010Map"]
  CF0 -->|"L22037"| B1
```

### `getSvcKeiUtwk()` (L22867) — 8 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (iMap != null) | サービスオーダ発行CC作業マップ設定 | TEMPLATE_ID_EKK0161A010=EKK0161A010, PPLAN_CD=, PCRS_CD=pcrs_cd | `getOpeDate()`, `callEKK0161A010SC()` | L22873 |
| 2 | · 🔁 FOR | D1 | (for-loop) | サービス契約内訳一覧照会（SYSID）で取得した件数分繰り返す | TEMPLATE_ID_EKK0161A010=EKK0161A010, PPLAN_CD=, PCRS_CD=pcrs_cd | `getOpeDate()`, `callEKK0161A010SC()` | L22878 |
| 3 | ·· 🔀 IF | D2 | (iChildMap != null) | サービス契約内訳番号 | TEMPLATE_ID_EKK0161A010=EKK0161A010, PPLAN_CD=, PCRS_CD=pcrs_cd | `getOpeDate()`, `callEKK0161A010SC()` | L22881 |
| 4 | ··· 🔀 IF | D3 | (0 != statusCode) | ↓↓↓2012-10-24変更　ロット１ST1-2012-0000808（Wi-Fiスポット中断SOD不具合）対応↓↓↓ | TEMPLATE_ID_EKK0161A010=EKK0161A010, PPLAN_CD=, PCRS_CD=pcrs_cd | - | L22890 |
| 5 | ···· ⚠️ THROW | D4 | new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode)) | ↓↓↓2012-10-24変更　ロット１ST1-2012-0000808（Wi-Fiスポット中断SOD不具合）対応↓↓↓ | TEMPLATE_ID_EKK0161A010=EKK0161A010, PPLAN_CD=, PCRS_CD=pcrs_cd | - | L22892 |
| 6 | ··· 🔀 IF | D3 | ((JKKHakkoSODConstCC.PCRS_CD_FREE_WIFI.equals(pcrsCdWifi) ｜｜ JKKHakkoSODConstCC.PCRS_CD_WIFISPOT.equals(pcrsCdWifi)) && JKKHakkoSODConstCC.SVC_KEI_STAT_020.compareTo(ucwkStat) <= 0 && JKKHakkoSODConstCC.SVC_KEI_STAT_100.compareTo(ucwkStat) >= 0) | if (JKKHakkoSODConstCC.PPLAN_CD_WIFI_MRYO.equals(pplan_cd)) | PCRS_CD_FREE_WIFI=A45, PCRS_CD_WIFISPOT=A30, SVC_KEI_STAT_020=020, SVC_KEI_STAT_100=100 | - | L22902 |
| 7 | · 🔀 IF | D1 | (wifiCount > 1) | Wi-Fiスポット有無判定 | - | - | L22911 |
| 8 | ↩️ RETURN | D0 | param | - | - | - | L22918 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["getSvcKeiUtwk()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （iMap != null）"]
    direction TB
    C0_0["FOR: …"]
    C0_1["IF: （wifiCount > 1）"]
  end
  CF0 -->|"L22873"| SG0
  B1["RETURN: param"]
  CF0 -->|"L22918"| B1
```

> **制御フロー合計**: 8 methods, 58 branches
