# ⑥ 業務ロジック — Service Call (SC): 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-callEKK1041A010SC"></a>
### callEKK1041A010SC()

---

#### 1. 役割

オーダ設定一意照会SIFを呼び出す業務処理を行うメソッドである。具体的には、入力パラメータを基にサービスインターフェース呼び出し用の共通データを生成し、EKK1041A010用のリクエストメッセージを作成・編集する。その後、ServiceComponentRequestInvokerによってSIFを呼び出し、結果メッセージ群を取得。取得したレスポンスをテンプレートIDでハッシュマッピングし、結果をresultHashに格納する。SC（サービスコンポーネント）呼び出しの成否（ステータスコード）により条件分岐し、正常終了時のみ結果を格納し、最終的にステータスコードを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK1041A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通の情報を設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK1041A010用のCAANMsgテンプレート生成"]
  S2 --> S3["Step3: mappingEKK1041A010SCInMsg（template, inHash, funcCode）で入力データをマッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: 結果メッセージ（CAANMsg[]）を取得"]
  S8 --> S9["Step9: テンプレートからステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK1041A010, mappingEKK1041A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` を呼び出し、サービスインターフェース呼出共通情報を`HashMap<String, Object>`型で生成する。
2. EKK1041A010のリクエストメッセージインスタンス（CAANMsg）を作成する。
3. `mappingEKK1041A010SCInMsg(template, inHash, funcCode)` を呼び出し、テンプレートに対し入力パラメータをマッピングする。
4. `editBasicCmn(param, template)` を呼び出し、業務パラメータなどの共通部をテンプレートにセットする。
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})` でリクエスト用クラスの設定を行う。
6. `ServiceComponentRequestInvoker` インスタンスを生成し、SC呼び出しクラスとする。
7. `scCall.run(sIFRequest, handle)` でSIF（サービスインターフェース）を呼び出す。
8. 戻り値の`Map<?, ?>`から`JCMConstants.TEMPLATE_LIST_KEY`でCAANMsg[]（結果メッセージ群）を取得する。
9. `template.getInt(JCMConstants.STATUS_INT_KEY)` でステータスコードを取得する。
10. ステータスコード（status）が0の場合（正常終了時）は、`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK1041A010, mappingEKK1041A010SCOutMsg(resultMsgs))` でテンプレートIDをキーにマッピングした結果を格納する。
11. 正常終了でない場合（status != 0）は何もせず、statusを返す。
12. 最終的にstatusを返却する。

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                 |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------ |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                   |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                   |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                    |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                 |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK1041A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `checkTakinoRT` | protected | 多機能ルーター情報ルータ機能有無チェック<br> <br> サービス契約番号に紐付いている多機能ルータのルータ機能設定有無 <br> <br> |
| 2 | `chkOdrSette` | private | ルーターオプション変更オーダ出力判定処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK1041A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L29456)

> 📌 ステータスが0以外はエラーとなっている

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### callEKK0251B003SCCAAMsg()

---

#### 1. 役割

サービス契約回線内訳一覧照会（現在利用中）SIFを呼び出すメソッドである。具体的には、paramからサービスインターフェース呼出用共通情報を生成し、EKK0251B003用のリクエストテンプレートを作成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerによりSIFを呼び出す。レスポンスのCAANMsg[]を取得し、正常終了時のみテンプレートIDでマッピングした結果をresultHashに格納する。最終的に処理結果のステータスコードを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0251B003SCCAAMsg（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0251B003テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0251B003SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: 結果CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0251B003, mappingEKK0251B003SCOutCAAMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF呼出共通情報を設定
2. `EKK0251B003CBSMsg`クラス名でCAANMsgテンプレートを生成
3. `mappingEKK0251B003SCInMsg(template, inHash, funcCode)`で入力マッピング
4. `editBasicCmn(param, template)` で共通部（業務パラメータ等）をテンプレートにセット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})` でリクエストクラス設定
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. 結果としてCAANMsg[]を取得
9. テンプレートからステータスコードを取得
10. ステータスコードが0の場合、`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0251B003, mappingEKK0251B003SCOutCAAMsg(resultMsgs))`
11. ステータスコードが0でない場合、何もせずstatusを返す
12. statusを返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0251B003SCCAAMsg` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `checkTakinoRT` | protected | 多機能ルーター情報ルータ機能有無チェック<br> <br> サービス契約番号に紐付いている多機能ルータのルータ機能設定有無 <br> <br> |
| 2 | `rtOpChgDivOdrCtrl` | private | ルーターオプション変更オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0251B003SCCAAMsg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L29190)

> 📌 ステータスが0以外はエラーとなっている

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### callEKK0161B004SC()

---

#### 1. 役割

サービス契約内訳一覧照会SIFを呼び出す業務処理メソッド。具体的には、paramからサービスインターフェース呼出共通情報を作成し、EKK0161B004用CAANMsgテンプレートを生成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerでSIF（サービスIF）を呼び出す。戻り値のCAANMsg[]を取得し、正常終了時のみテンプレートIDでマッピングした結果をresultHashに格納する。処理結果のステータスコードを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0161B004SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0161B004テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0161B004SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: 結果CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0161B004, mappingEKK0161B004SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` で共通情報セット
2. EKK0161B004のCAANMsgテンプレート生成
3. `mappingEKK0161B004SCInMsg()` で入力マッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. 戻り値でCAANMsg[]を取得
9. テンプレートよりステータスコード取得
10. ステータスコードが0ならresultHashにセット
11. ステータス0でなければ何もせずstatus返却
12. status返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B004SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `courseChgeOdrCtrl` | private | コース変更オーダ制御処理<br> |
| 2 | `getCourseChgSvcKeiUcwk` | private | コース変更中のサービス契約内訳を取得します。 <br> |
| 3 | `opHktgiOdrCtrl` | private | オプション引継オーダ制御処理<br> |
| 4 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 5 | `vLanIdChgOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0161B004SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L28228)

> 📌 ステータスが0以外はエラーとなっている

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### callEKK0411A010SC()

---

#### 1. 役割

サブオプションサービス契約＜ISP＞一意照会SIFを呼び出すメソッド。具体的には、paramからサービスインターフェース呼出共通情報を作成し、EKK0411A010用のCAANMsgテンプレート生成。入力パラメータをマッピングし、ServiceComponentRequestInvokerでSIF呼出し、CAANMsg[]の結果を取得。正常終了の場合はテンプレートIDでマッピングした結果をresultHashへ格納。エラー情報のマッピングやコントロールマップへの設定、エラー時のExceptionスローも行う。SC呼出の成否（ステータスコード）により分岐し、statusを返却。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0411A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0411A010テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0411A010SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: 結果CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0411A010, mappingEKK0411A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> S12["Step12: param = editErrorInfoEKK0411A010CBS（param, resultMsgs, status）"]
  S12 --> S13["Step13: エラー情報のコントロールマップ設定"]
  S13 --> IF2{"'errList != null && !errList.isEmpty（）'"}
  IF2 -.-> NOTE2["エラー発生時はExceptionスロー"]
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF2 -->|"Yes"| S14["Step14: throw new CCException（...）"]
  IF2 -->|"No"| RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` で共通情報セット
2. EKK0411A010のCAANMsgテンプレート生成
3. `mappingEKK0411A010SCInMsg()` で入力マッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. 戻り値でCAANMsg[]を取得
9. テンプレートからステータスコード取得
10. ステータスコードが0ならresultHashにセット
11. ステータス0でなければ何もせずstatus返却
12. `editErrorInfoEKK0411A010CBS(param, resultMsgs, status)` でエラー情報セット
13. コントロールマップにエラー情報設定
14. エラーリストが空でなければExceptionスロー
15. 正常時はstatus返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0411A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0411A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L27648)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0411A010SCOutMsg(resultMsgs));` |

##### Block 2 — 🔀 IF `(errList == null)` (L27660)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 3 — 🔀 IF `(errList != null && !errList.isEmpty())` (L27668)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0411A010CBSMsg.STATUS)));` |

> **合計**: 3 blocks (1 depth levels)

### callEKK0161A010SC()

---

#### 1. 役割

サービス契約内訳一意照会SIFを呼び出す業務処理メソッド。paramからサービスインターフェース呼出共通情報を生成し、EKK0161A010用のCAANMsgテンプレートを作成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerでSIF呼出し、CAANMsg[]の結果を取得。正常終了時はテンプレートIDでマッピングした結果をresultHashへ格納。SC呼出の成否（ステータスコード）により条件分岐し、statusを返却。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0161A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0161A010テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0161A010SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: 結果CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0161A010, mappingEKK0161A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF共通情報を設定
2. EKK0161A010のCAANMsgテンプレートを生成
3. `mappingEKK0161A010SCInMsg()` で入力パラメータをテンプレートにマッピング
4. `editBasicCmn(param, template)` で共通部をセット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. CAANMsg[]（結果）を取得
9. ステータスコード取得
10. ステータスコードが0の場合は`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0161A010, mappingEKK0161A010SCOutMsg(resultMsgs))`
11. ステータスコードが0でなければstatus返却
12. status返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `countUpWiFiSpotSessions` | private | 有効なWi-Fiスポット　セッション数を求める |
| 2 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 3 | `getSvcKeiUtwk` | private | サービス契約内訳一意照会<br> <br> サービス契約内訳一意照会サービスインターフェイスにより<br> サービス契約内訳番号に紐づくサービス契約内訳情報を取得します。<br> サービス契約内訳一覧照会（SYSID）で取得した件数分繰り返… |
| 4 | `htelItntokiOdrCtrl` | private | 光電話移転トーキオーダ制御処理<br> |
| 5 | `htelNoChgeOdrCtrl` | private | 光電話番号変更オーダ制御処理<br> |
| 6 | `isBmpOpenZumi` | private | 番ポ開通済かを判定します。<BR> ＜前提条件＞<BR> ・番ポ有の場合に呼び出すこと。 |
| 7 | `isBmpOpenZumiDslNoDslNoChg` | private | 番ポ開通済かを判定します。(解約、光電話・番号解約、光電話・番号変更)<BR> ＜前提条件＞<BR> ・番ポ有、かつ、異動区分が解約、光電話・番号解約、光電話・番号変更の場合に呼び出すこと。 ＜処理概要＞ 当処理では＜前提条件＞の場合に、番… |
| 8 | `isUcwkStatCheck` | private | 対象内訳ステータスチェック |
| 9 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 10 | `searchSvcKeiUcwk` | private | サービス契約内訳一意照会処理 |
| 11 | `stpRlsOdrCtrl` | private | 中断解除オーダ制御処理<br> |
| 12 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |
| 13 | `telNoChge` | private | 電話番号変更処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0161A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L27833)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0161A010SCOutMsg(resultMsgs));` |

> **合計**: 1 blocks (1 depth levels)

### callEKK0351A010SC()

---

#### 1. 役割

オプションサービス契約一意照会SIFを呼び出すメソッドであり、業務処理としては、paramからサービスインターフェース呼出共通情報を生成し、EKK0351A010用のCAANMsgテンプレートを作成。入力パラメータをテンプレートにマッピング後、ServiceComponentRequestInvokerでSIFを呼び出す。取得したレスポンスデータは下りマッピング（editResultRP_EKK0351A010CBS）でparamへ反映される。また、CAANMsg[]の結果を取得し、正常終了時はテンプレートIDでマッピングした結果をresultHashへ格納する。最終的にstatusを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0351A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0351A010テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0351A010SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvoker（）.run（sIFRequest, handle）でSIF呼出"]
  S6 --> S7["Step7: editResultRP_EKK0351A010CBSでparamへ下りマッピング"]
  S7 --> S8["Step8: 結果CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0351A010, mappingEKK0351A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF共通情報を設定
2. EKK0351A010のCAANMsgテンプレートを生成
3. `mappingEKK0351A010SCInMsg()` で入力パラメータをテンプレートにマッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker().run(sIFRequest, handle)` でSIF呼出
7. `editResultRP_EKK0351A010CBS(sIFResult, param)` でレスポンスの下りマッピングを行い、paramに反映
8. CAANMsg[]（結果）を取得
9. ステータスコード取得
10. ステータスコードが0の場合は `resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0351A010, mappingEKK0351A010SCOutMsg(resultMsgs))`
11. ステータスコードが0でなければstatus返却
12. status返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `courseChgeOdrCtrl` | private | コース変更オーダ制御処理<br> |
| 2 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 3 | `getKK0351GeneAddDtm` | private | オプションサービス契約のカレントの世代登録年月日時分秒を取得します |
| 4 | `getKK0351Hash` | private | - |
| 5 | `getOpSvcKei4Eohtel` | private | eo光電話用、オプションサービス契約の照会 htelNoDslOdrCtrl メソッドの実装を抜き出して実装しました |
| 6 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 7 | `opHktgiOdrCtrl` | private | オプション引継オーダ制御処理<br> |
| 8 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 9 | `searchOpSvcKei` | private | オプションサービス契約一意照会処理 |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0351A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L28399)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0351A010SCOutMsg(resultMsgs));` |

> **合計**: 1 blocks (1 depth levels)

### callEKK0161B003SC()

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID単位）SIFを呼び出す業務処理メソッド。paramからサービスインターフェース呼出共通情報を生成し、EKK0161B003用のCAANMsgテンプレートを作成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerでSIF呼出し、CAANMsg[]の結果を取得。正常終了時はテンプレートIDでマッピングした結果をresultHashへ格納する。最終的にstatusを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0161B003SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0161B003テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0161B003SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: 結果CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0161B003, mappingEKK0161B003SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF呼出共通情報を設定
2. EKK0161B003のCAANMsgテンプレートを生成
3. `mappingEKK0161B003SCInMsg()` で入力パラメータをテンプレートにマッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. CAANMsg[]（結果）を取得
9. ステータスコード取得
10. ステータスコードが0の場合は`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0161B003, mappingEKK0161B003SCOutMsg(resultMsgs))`
11. ステータスコードが0でなければstatus返却
12. status返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0161B003SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `countUpWiFiSpotSessions` | private | 有効なWi-Fiスポット　セッション数を求める |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0161B003SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L28122)

> 📌 ステータスが0以外はエラーとなっている

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### callEKK0191A010SC()

---

#### 1. 役割

サービス契約内訳＜eo光電話＞一意照会SIFを呼び出す業務処理メソッド。paramからサービスインターフェース呼出共通情報を作成し、EKK0191A010用のCAANMsgテンプレートを生成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerでSIF呼出し、CAANMsg[]の結果を取得。レスポンスからリターンコード・テンプレートステータス等を取り出し、BP側のエラーマップやコントロールマップに反映する特殊処理を持つ。正常終了時はテンプレートIDでマッピングした結果をresultHashへ格納し、最終的にstatusを返却する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0191A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0191A010テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0191A010SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: CAANMsg[]取得"]
  S8 --> S9["Step9: テンプレートからステータスコード取得"]
  S9 --> S10["Step10: リターンコード・テンプレートステータスの取得とBP側エラーマップ反映"]
  S10 --> S11["Step11: コントロールマップにエラー情報設定"]
  S11 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S12["Step12: resultHash.put（TEMPLATE_ID_EKK0191A010, mappingEKK0191A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S13["Step13: 何もせずstatus返却"]
  S12 --> RET["return status"]
  S13 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF共通情報を設定
2. EKK0191A010のCAANMsgテンプレートを生成
3. `mappingEKK0191A010SCInMsg()` で入力パラメータをテンプレートにマッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. CAANMsg[]（結果）を取得
9. ステータスコード取得
10. リターンコードやテンプレートステータスを取得し、BP側エラーマップやコントロールマップに反映
    - `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus))` でメッセージセット等
11. コントロールマップにエラー情報設定
12. ステータスコードが0の場合は`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0191A010, mappingEKK0191A010SCOutMsg(resultMsgs))`
13. ステータスコード0でなければstatus返却
14. status返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `addTensoDenwaOp` | private | 転送電話オプション用ＳＯＤ登録 |
| 2 | `addTokiSOD` | private | トーキの開始／終了に必要なSODを登録します。<br> 移転トーキ開始終了部品の移転トーキ開始終了判定・更新処理を実行してトーキの開始／終了年月日を更新した後、 トーキの開始／終了に必要なSODをオーダ発行条件、オーダ情報作成ワークに登録し… |
| 3 | `bmpSipDslOdrCtrl` | private | 番ポ戻し（SIP解約・消去オーダ）制御処理<br> |
| 4 | `checkTakinoRT` | protected | 多機能ルーター情報ルータ機能有無チェック<br> <br> サービス契約番号に紐付いている多機能ルータのルータ機能設定有無 <br> <br> |
| 5 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 6 | `getZ1HakkoKh` | private | Z1オーダが発行可能な状態かを返します。 |
| 7 | `htelItntokiOdrCtrl` | private | 光電話移転トーキオーダ制御処理<br> |
| 8 | `htelNoChgeOdrCtrl` | private | 光電話番号変更オーダ制御処理<br> |
| 9 | `htelNoDslOdrCtrl` | private | 光電話番号解約オーダ制御処理<br> |
| 10 | `htelNoInfoChgeOdrCtrl` | private | 光電話番号情報変更オーダ制御処理<br> |
| 11 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 12 | `isBmpOpenZumi` | private | 番ポ開通済かを判定します。<BR> ＜前提条件＞<BR> ・番ポ有の場合に呼び出すこと。 |
| 13 | `isBmpOpenZumiDslNoDslNoChg` | private | 番ポ開通済かを判定します。(解約、光電話・番号解約、光電話・番号変更)<BR> ＜前提条件＞<BR> ・番ポ有、かつ、異動区分が解約、光電話・番号解約、光電話・番号変更の場合に呼び出すこと。 ＜処理概要＞ 当処理では＜前提条件＞の場合に、番… |
| 14 | `isKikiSeizoNoCheck` | private | 内訳に紐付く機器の機器製造製造番号が設定されているか判定します。 |
| 15 | `isTelnoSODJudge` | private | SOD発行条件パターンの提示を元に電話番号の状態を確認して判定します。 |
| 16 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 17 | `keiTtdkChuHtelnoChgeOdrCtrl` | private | 契約手続中の光電話番号変更オーダ制御処理 |
| 18 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 19 | `pauseRlsChgeOdrCtrl` | private | 休止変更・予約取消オーダ制御処理<br> |
| 20 | `pauseUkOdrCtrl` | private | 休止受付オーダ制御処理<br> |
| 21 | `searchSvcKeiUcwkEohtl` | private | サービス契約内訳＜eo光電話＞一意照会処理 |
| 22 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |
| 23 | `telNoChge` | private | 電話番号変更処理<br> |
| 24 | `vLanIdChgOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0191A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(returnCode != 0)` (L27968)

> 📌 リターンコード取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 9000;` |

##### Block 2 — 🔀 IF `(JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)` [JCMAPLC="JCMAPLC", RETURN_MESSAGE_="return_message_"] (L27972)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `templateStatus = 0;` |

##### Block 3 — 🔀 IF `(obj == null)` (L27979)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = -1;` |

##### Block 4 — ↪️ ELSE `(else)` (L27984)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));` [➔ RETURN_CODE="returnCode" (リターンコード)] |

##### Block 5 — 🔀 IF `(templateStatus > bpStatus)` (L27988)

> 📌 BPにサービスコンポーネントのステータスを設定する。

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String formatStatus = String.format("%1$04d", templateStatus);` |
| 2 | 📦 VAR | `String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);` [➔ RETURN_MESSAGE_="return_message_"] |
| 3 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);` [➔ RETURN_CODE="returnCode" (リターンコード)] |
| 4 | ⚡ EXEC | `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);` [➔ RETURN_MESSAGE="returnMessage" (リターンメッセージ)] |

##### Block 6 — 🔀 IF `(errList == null)` (L27999)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 7 — 🔀 IF `(status == 0)` (L28008)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0191A010SCOutMsg(resultMsgs));` |

> **合計**: 7 blocks (1 depth levels)

### callEKK0341A010SC()

---

#### 1. 役割

機器提供サービス契約一意照会SIFを呼び出すメソッド。paramからサービスインターフェース呼出共通情報を作成し、EKK0341A010用のCAANMsgテンプレートを生成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerでSIF呼出し、CAANMsg[]の結果を取得。正常終了時はテンプレートIDでマッピングした結果をresultHashへ格納。さらに、editErrorInfoEKK0341A010CBSでエラー情報をparamに設定し、エラーがある場合はExceptionをスローする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0341A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0341A010テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0341A010SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0341A010, mappingEKK0341A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> S12["Step12: param = editErrorInfoEKK0341A010CBS（param, resultMsgs, status）"]
  S12 --> S13["Step13: コントロールマップにエラー情報設定"]
  S13 --> IF2{"'errList != null && !errList.isEmpty（）'"}
  IF2 -.-> NOTE2["エラー発生時はExceptionスロー"]
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF2 -->|"Yes"| S14["Step14: throw new CCException（...）"]
  IF2 -->|"No"| RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF共通情報を設定
2. EKK0341A010のCAANMsgテンプレート生成
3. `mappingEKK0341A010SCInMsg()` で入力マッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. CAANMsg[]（結果）を取得
9. ステータスコード取得
10. ステータスコードが0の場合は`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0341A010, mappingEKK0341A010SCOutMsg(resultMsgs))`
11. ステータスコード0でなければstatus返却
12. `editErrorInfoEKK0341A010CBS(param, resultMsgs, status)` でエラー情報設定
13. コントロールマップにエラー情報設定
14. エラーリストが空でなければExceptionスロー
15. 正常時はstatus返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getShuriKokanBfKiki` | public | 対象機器が修理交換中の場合に、修理交換前の機器情報を返します。 <br> |
| 2 | `jdgOdr163` | private | コース変更での現ルータに対するルータ向け接続情報・変更ＳＯＤの登録処理をします |
| 3 | `vLanIdChgOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |
| 4 | `vLanIdVaChangeOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0341A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L27272)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0341A010SCOutMsg(resultMsgs));` |

##### Block 2 — 🔀 IF `(errList == null)` (L27284)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 3 — 🔀 IF `(errList != null && !errList.isEmpty())` (L27292)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0341A010CBSMsg.STATUS)));` |

> **合計**: 3 blocks (1 depth levels)

### callEKK0081A010SC()

---

#### 1. 役割

サービス契約一意照会SIFを呼び出す業務処理メソッド。paramからサービスインターフェース呼出共通情報を作成し、EKK0081A010用CAANMsgテンプレート生成。入力パラメータをテンプレートにマッピングし、ServiceComponentRequestInvokerでSIF呼出し、CAANMsg[]の結果を取得。正常終了時はテンプレートIDでマッピングした結果をresultHashへ格納。editErrorInfoEKK0081A010CBSでエラー情報をparamに設定し、エラーがある場合はExceptionをスローする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0081A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: サービスIF共通情報設定 （editInMsgCmn）"]
  S1 --> S2["Step2: EKK0081A010テンプレート生成"]
  S2 --> S3["Step3: mappingEKK0081A010SCInMsg（template, inHash, funcCode）で入力マッピング"]
  S3 --> S4["Step4: editBasicCmn（param, template）で共通部セット"]
  S4 --> S5["Step5: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S5 --> S6["Step6: ServiceComponentRequestInvokerインスタンス生成"]
  S6 --> S7["Step7: scCall.run（sIFRequest, handle）でSIF呼出"]
  S7 --> S8["Step8: CAANMsg[]取得"]
  S8 --> S9["Step9: ステータスコード取得"]
  S9 --> IF1{"'status == 0' の判定"}
  IF1 -.-> NOTE1["JCMConstants.STATUS_INT_KEY: ステータスコード"]
  style NOTE1 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF1 -->|"Yes: 正常終了"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0081A010, mappingEKK0081A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: エラー"| S11["Step11: 何もせずstatus返却"]
  S10 --> S12["Step12: param = editErrorInfoEKK0081A010CBS（param, resultMsgs, status）"]
  S12 --> S13["Step13: コントロールマップにエラー情報設定"]
  S13 --> IF2{"'errList != null && !errList.isEmpty（）'"}
  IF2 -.-> NOTE2["エラー発生時はExceptionスロー"]
  style NOTE2 fill:#fff,stroke:#333,stroke-dasharray: 5 5
  IF2 -->|"Yes"| S14["Step14: throw new CCException（...）"]
  IF2 -->|"No"| RET["return status"]
  S11 --> RET
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でサービスIF共通情報を設定
2. EKK0081A010のCAANMsgテンプレートを生成
3. `mappingEKK0081A010SCInMsg()` で入力マッピング
4. `editBasicCmn(param, template)` で共通部セット
5. `sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template})`
6. `ServiceComponentRequestInvoker`インスタンス生成
7. `scCall.run(sIFRequest, handle)` でSIF呼出
8. CAANMsg[]（結果）を取得
9. ステータスコード取得
10. ステータスコードが0の場合は`resultHash.put(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0081A010, mappingEKK0081A010SCOutMsg(resultMsgs))`
11. ステータスコード0でなければstatus返却
12. `editErrorInfoEKK0081A010CBS(param, resultMsgs, status)` でエラー情報設定
13. コントロールマップにエラー情報設定
14. エラーリストが空でなければExceptionスロー
15. 正常時はstatus返却

---

#### 3. パラメータ分析

| No  | パラメータ名  | 型                         | 業務説明                                                                  |
| --- | ------------- | -------------------------- | ------------------------------------------------------------------------- |
| 1   | param         | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ。業務データのコンテナ                    |
| 2   | handle        | SessionHandle              | セッション管理ハンドル                                                    |
| 3   | inHash        | HashMap<String, Object>    | 呼出しパラメータ（入力データセット）                                     |
| 4   | resultHash    | HashMap<String, Object>    | 呼出し結果データの格納先                                                  |
| 5   | funcCode      | String                     | 機能コード（業務用途に応じた処理切替用）                                 |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0081A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `getSvcKeiList` | private | サービス契約一意照会 |
| 2 | `pauseJdg` | private | 休止判定処理 |
---
---

#### 📋 Per-Branch 詳細ブロック — `callEKK0081A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L27087)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0081A010SCOutMsg(resultMsgs));` |

##### Block 2 — 🔀 IF `(errList == null)` (L27099)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 3 — 🔀 IF `(errList != null && !errList.isEmpty())` (L27107)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0081A010CBSMsg.STATUS)));` |

> **合計**: 3 blocks (1 depth levels)



---

## 📋 全分岐詳細 (deterministic per-branch table)

> 以下のテーブルはソースコードから deterministic に生成されたものです。全条件分岐を網羅します。

### 📞 Screen/Batch 呼び出し元 (External Entry Points)

> このクラスを呼び出すScreen/Batchの一覧です（クラスレベルの呼び出し元）。
> **「呼出チェーン」列**: CC直接エントリメソッド → IntraClass経由 → 本チャンクの対象メソッド（**太字**）の実際の呼出パス。
> ※ 例: `CCエントリメソッド → 中間メソッド → **対象メソッド**` — 左端がCC入口、太字が本チャンクの対象メソッド。
> **「種別」列**: BPCheck＝業務確認チェック, Batch＝バッチ処理, Operation＝オペレーション, CC＝制御クラス。

| # | Screen/Batch | 種別 | 呼び出しクラス | 呼び出しメソッド | 呼出チェーン（CC入口 → IntraClass → 対象） |
|---|---|---|---|---|---|
| 1 | `KKSV0004` | BPCheck | `KKSV0004OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 2 | `KKSV0008` | BPCheck | `KKSV0008OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 3 | `KKSV0009` | BPCheck | `KKSV0009OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 4 | `KKSV0031` | BPCheck | `KKSV0031OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 5 | `KKSV0073` | BPCheck | `KKSV0073OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 6 | `KKSV0136` | BPCheck | `KKSV0136OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 7 | `KKSV0162` | BPCheck | `KKSV0162OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 8 | `KKSV0428` | BPCheck | `KKSV0428OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 9 | `KKSV0429` | BPCheck | `KKSV0429OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 10 | `KKSV0430` | BPCheck | `KKSV0430OPBPCheck` | `invokeCheck` | `getInvokeCBS` |

## ③.6 制御フロー分岐 (Control Flow Branching)

### `callEKK0081A010SC()` (L27046) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (status == 0) | エラー情報のマップを取得 | - | `mappingEKK0081A010SCOutMsg()`, `editErrorInfoEKK0081A010CBS()` | L27087 |
| 2 | 🔀 IF | D0 | (errList == null) | エラー発生時はExceptionを設定 | - | - | L27099 |
| 3 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L27107 |
| 4 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0081A010CBSMsg.STATUS))) | - | - | - | L27109 |
| 5 | ↩️ RETURN | D0 | status | - | - | - | L27112 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["callEKK0081A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （status == 0）"]
  CF0 -->|"L27087"| B0
  B1["IF: （errList == null）"]
  CF0 -->|"L27099"| B1
  subgraph SG2["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C2_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L27107"| SG2
  B3["RETURN: status"]
  CF0 -->|"L27112"| B3
```

### `callEKK0191A010SC()` (L27924) — 8 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (returnCode != 0) | - | - | - | L27968 |
| 2 | 🔀 IF | D0 | (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null) | - | - | - | L27972 |
| 3 | 🔀 IF | D0 | (obj == null) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27979 |
| 4 | 🔀 ELSE | D0 | (else) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27984 |
| 5 | 🔀 IF | D0 | (templateStatus > bpStatus) | BPにサービスコンポーネントのステータスを設定する。 | - | - | L27988 |
| 6 | 🔀 IF | D0 | (errList == null) | コントロールマップに設定 | - | - | L27999 |
| 7 | 🔀 IF | D0 | (status == 0) | - | - | `mappingEKK0191A010SCOutMsg()` | L28008 |
| 8 | ↩️ RETURN | D0 | status | - | - | - | L28014 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["callEKK0191A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （returnCode != 0）"]
  CF0 -->|"L27968"| B0
  B1["IF: （JCMAPLConstMgr.getString（'RETURN_MESSAG…"]
  CF0 -->|"L27972"| B1
  B2["IF: （obj == null）"]
  CF0 -->|"L27979"| B2
  B3["ELSE"]
  CF0 -->|"L27984"| B3
  B4["IF: （templateStatus > bpStatus）"]
  CF0 -->|"L27988"| B4
  B5["IF: （errList == null）"]
  CF0 -->|"L27999"| B5
  B6["IF: （status == 0）"]
  CF0 -->|"L28008"| B6
  B7["RETURN: status"]
  CF0 -->|"L28014"| B7
```

### `callEKK0341A010SC()` (L27231) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (status == 0) | エラー情報のマップを取得 | - | `mappingEKK0341A010SCOutMsg()`, `editErrorInfoEKK0341A010CBS()` | L27272 |
| 2 | 🔀 IF | D0 | (errList == null) | エラー発生時はExceptionを設定 | - | - | L27284 |
| 3 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L27292 |
| 4 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0341A010CBSMsg.STATUS))) | - | - | - | L27294 |
| 5 | ↩️ RETURN | D0 | status | - | - | - | L27297 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["callEKK0341A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （status == 0）"]
  CF0 -->|"L27272"| B0
  B1["IF: （errList == null）"]
  CF0 -->|"L27284"| B1
  subgraph SG2["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C2_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L27292"| SG2
  B3["RETURN: status"]
  CF0 -->|"L27297"| B3
```

### `callEKK0411A010SC()` (L27607) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (status == 0) | エラー情報のマップを取得 | - | `mappingEKK0411A010SCOutMsg()`, `editErrorInfoEKK0411A010CBS()` | L27648 |
| 2 | 🔀 IF | D0 | (errList == null) | エラー発生時はExceptionを設定 | - | - | L27660 |
| 3 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L27668 |
| 4 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0411A010CBSMsg.STATUS))) | - | - | - | L27670 |
| 5 | ↩️ RETURN | D0 | status | - | - | - | L27673 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["callEKK0411A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （status == 0）"]
  CF0 -->|"L27648"| B0
  B1["IF: （errList == null）"]
  CF0 -->|"L27660"| B1
  subgraph SG2["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C2_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L27668"| SG2
  B3["RETURN: status"]
  CF0 -->|"L27673"| B3
```

> **制御フロー合計**: 4 methods, 23 branches
