# ⑥ 業務ロジック — 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-callEZM0411A010SC"></a>
### callEZM0411A010SC()

---

#### 1. 役割

EZM0411A010（宅内機器型式一意照会SIF）を呼び出す業務ロジックである。  
具体的には、IRequestParameterReadWrite param から入力共通情報を編集し、CAANMsgテンプレートを生成し、mappingEZM0411A010SCInMsgでリクエスト内容を設定、editBasicCmnで基本情報をセット後、ServiceComponentRequestInvokerを使ってサービスIF（SC）を呼び出す。  
SCの実行結果からCAANMsg[]を取得し、正常時はresultHashにEZM0411A010の結果をマッピングする。  
エラー情報はeditErrorInfoEZM0411A010CBSでparamに設定し、エラーリストが存在すればCCExceptionをthrowする。  
本メソッドは複数の内部・外部メソッドから呼び出される共通処理である。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEZM0411A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EZM0411A010CBSMsg）"]
  S2 --> S3["Step3: mappingEZM0411A010SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EZM0411A010, mappingEZM0411A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: editErrorInfoEZM0411A010CBS（param, resultMsgs, status）"]
  S10 --> S11
  S11 --> S12["Step12: param.getControlMapData（SCControlMapKeys.ERROR_INFO）でエラーリスト取得"]
  S12 --> IF2{"errList == null"}
  IF2 -->|"Yes"| S13["Step13: errList = new ArrayList<Object>（）"]
  IF2 -->|"No"| S14["Step14: 既存のerrListを使用"]
  S13 --> S15["Step15: param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（sIFResult, errList））"]
  S14 --> S15
  S15 --> IF3{"errList != null && !errList.isEmpty（）"}
  IF3 -->|"Yes: エラーあり"| S16["Step16: throw new CCException（…, new SCCallException（…, （（Integer）status）.toString（）, resultMsgs[0].getInt（EZM0411A010CBSMsg.STATUS）））"]
  IF3 -->|"No: エラーなし"| S17["Step17: return status"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  S16 -.- NOTE_ERR["エラー時例外: CCException, SCCallException"]
  S10 -.- NOTE2["TEMPLATE_ID_EZM0411A010 = 'EZM0411A010'"]
  S5 -.- NOTE3["JCMConstants.TEMPLATE_LIST_KEY = テンプレートリストキー"]
  S15 -.- NOTE4["SCControlMapKeys.ERROR_INFO = エラー情報キー"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` を呼び出して、paramからサービスIF共通情報（ユーザデータ、依頼元情報など）を編集し、リクエストマップを初期化する。
2. `CAANMsg` オブジェクト（テンプレート）を `EZM0411A010CBSMsg` クラスで生成する。
3. `mappingEZM0411A010SCInMsg(template, inHash, funcCode)` を呼び出し、inHashおよびfuncCodeの値をCAANMsgテンプレートにマッピングする（具体的なフィールドはmappingメソッドで定義）。
4. `editBasicCmn(param, template)` でparamからの基本情報をテンプレートにセットする（例：依頼元区分・サービスID等）。
5. テンプレートを `sIFRequest` の `JCMConstants.TEMPLATE_LIST_KEY` キーでリクエスト用マップに格納する。
6. `ServiceComponentRequestInvoker` のインスタンスを生成する。
7. `scCall.run(sIFRequest, handle)` でサービスIFを呼び出し、結果をsIFResultで受け取る。
8. sIFResultから `CAANMsg[]`（resultMsgs）を取得する。
9. テンプレートから `JCMConstants.STATUS_INT_KEY` を取得し、status（int型：0=正常、0以外=異常）を判定する。
10. status==0の場合は、`resultHash` の `TEMPLATE_ID_EZM0411A010` キーに `mappingEZM0411A010SCOutMsg(resultMsgs)` の結果を格納する。
11. `editErrorInfoEZM0411A010CBS(param, resultMsgs, status)` を呼び出し、paramにエラー情報をセットする。
12. `param.getControlMapData(SCControlMapKeys.ERROR_INFO)` でエラー情報リスト(errList)を取得。
13. errListがnullの場合は新しいArrayListを生成。
14. `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(sIFResult, errList))` でエラー情報をコントロールマップに設定。
15. errListが空でなければ `CCException`（中に `SCCallException`）をthrowし、呼出元に例外通知。
16. エラーがなければ `status` を返却する。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | SC呼出結果格納マップ                      |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### callEKK0191B001SC()

---

#### 1. 役割

サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し、指定したサービス契約番号の契約内訳情報一覧を取得する業務ロジックである。  
具体的には、paramから共通情報を編集し、EKK0191B001CBSMsgテンプレートを作成、サービス契約番号・機能コード等のパラメータをセットしてServiceComponentRequestInvokerでSCを呼び出す。  
正常時は取得した内訳一覧をCAANMsg[]としてresultHashに格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0191B001SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0191B001CBSMsg）"]
  S2 --> S3["Step3: fillCAANMSGNullMapping（template, new EKK0191B001CBSMsg（）.getContents（））"]
  S3 --> S4["Step4: template.set（TEMPLATEID, 'EKK0191B001'）"]
  S4 --> S5["Step5: template.set（FUNC_CODE, funcCode）"]
  S5 --> S6["Step6: template.set（KEY_SVC_KEI_NO, inHash.get（SVC_KEI_NO））"]
  S6 --> S7["Step7: editBasicCmn（param, template）"]
  S7 --> S8["Step8: sIFRequest.put（JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template}）"]
  S8 --> S9["Step9: ServiceComponentRequestInvoker生成"]
  S9 --> S10["Step10: sIFResult = scCall.run（sIFRequest, handle）"]
  S10 --> S11["Step11: resultMsgs = sIFResultからCAANMsg[]取得"]
  S11 --> S12["Step12: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S12 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S13["Step13: resultMsgs[0].getMsgData（）.get（EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST）で一覧取得"]
  S13 --> S14["Step14: resultHash.put（'EKK0191B001', msgList）"]
  IF1 -->|"No: 異常"| S15["Step15: 何も格納せずreturn"]
  S14 --> RET["return status"]
  S15 --> RET
  style IF1 fill:#ffcc00
  S4 -.- NOTE2["TEMPLATEID = 'EKK0191B001'"]
  S5 -.- NOTE3["FUNC_CODE = SC呼出機能コード"]
  S6 -.- NOTE4["SVC_KEI_NO = 'svc_kei_no'（サービス契約番号）"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報を編集し、リクエスト用マップを初期化する。
2. `CAANMsg` のテンプレート（EKK0191B001CBSMsg）を生成。
3. `fillCAANMSGNullMapping(template, new EKK0191B001CBSMsg().getContents())` で全条件のNullマッピングを実施。
4. `template.set(EKK0191B001CBSMsg.TEMPLATEID, "EKK0191B001")` でテンプレートIDをセット。
5. `template.set(EKK0191B001CBSMsg.FUNC_CODE, funcCode)` でSC呼出機能コードをセット。
6. `template.set(EKK0191B001CBSMsg.KEY_SVC_KEI_NO, inHash.get(JKKHakkoSODConstCC.SVC_KEI_NO))` でサービス契約番号をセット。
7. `editBasicCmn(param, template)` でparamの基本情報をテンプレートにセット。
8. テンプレートを `sIFRequest` の `JCMConstants.TEMPLATE_LIST_KEY` でリクエストマップに格納。
9. `ServiceComponentRequestInvoker` を生成。
10. `scCall.run(sIFRequest, handle)` でSCを呼び出し、sIFResultで結果を受領。
11. sIFResultから `CAANMsg[]`（resultMsgs）を取得。
12. テンプレートから `JCMConstants.STATUS_INT_KEY` でstatusを取得。
13. status==0の場合、resultMsgs[0]の `EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST` で一覧データ（CAANMsg[]）を取得し、resultHashの "EKK0191B001" キーに格納。
14. statusが0以外の場合は何も格納せずそのままstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0191B001SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `htelNoInfoChgeOdrCtrl` | private | 光電話番号情報変更オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0191B001SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L29954)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `CAANMsg msg = resultMsgs[0];` |
| 2 | 📥 GET | `CAANMsg[] msgList = (CAANMsg[])msg.getMsgData().get(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);` |
| 3 | 📋 SET | `resultHash.put("EKK0191B001", msgList);` |

> **合計**: 1 blocks (1 depth levels)

### callEKK0341B008SC()

---

#### 1. 役割

機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出す業務ロジックである（2012-11/21仕様変更あり）。  
具体的にはparamから共通情報を編集し、EKK0341B022CBSMsgテンプレートに対してinHash・funcCodeをマッピングし、ServiceComponentRequestInvokerでSC呼び出し。  
正常時はresultHashにEKK0341B022の結果をマッピングする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0341B008SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0341B022CBSMsg）"]
  S2 --> S3["Step3: mappingEKK0341B022SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0341B022, mappingEKK0341B022SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: 何も格納せずreturn"]
  S10 --> RET["return status"]
  S11 --> RET
  style IF1 fill:#ffcc00
  S10 -.- NOTE2["TEMPLATE_ID_EKK0341B022 = 'EKK0341B022'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK0341B022CBSMsg）を生成。
3. `mappingEKK0341B022SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. sIFResultからCAANMsg[]（resultMsgs）取得。
9. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
10. status==0の場合はresultHashにTEMPLATE_ID_EKK0341B022でmappingEKK0341B022SCOutMsg(resultMsgs)を格納。
11. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0341B008SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 2 | `getVAkikiInfo` | private | VA機器を取得します |
| 3 | `htelNoChgeOdrCtrl` | private | 光電話番号変更オーダ制御処理<br> |
| 4 | `htelNoDslOdrCtrl` | private | 光電話番号解約オーダ制御処理<br> |
| 5 | `htelNoInfoChgeOdrCtrl` | private | 光電話番号情報変更オーダ制御処理<br> |
| 6 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 7 | `jdgIpv6` | private | IPV6判定処理<br> |
| 8 | `jdgOdr163` | private | コース変更での現ルータに対するルータ向け接続情報・変更ＳＯＤの登録処理をします |
| 9 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 10 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 11 | `telNoChge` | private | 電話番号変更処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0341B008SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L29757)

> 📌 ステータスが0以外はエラーとなっている

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### callEKK0341B002SC()

---

#### 1. 役割

機器提供サービス契約一覧照会（サービス契約番号）SIFを呼び出し、指定サービス契約番号に紐づく機器提供サービス契約情報一覧を取得する業務ロジックである。  
具体的にはparamから共通情報を編集し、EKK0341B002CBSMsgテンプレートに対してinHash・funcCodeをマッピングし、ServiceComponentRequestInvokerでSC呼び出し。  
正常時はresultHashにEKK0341B002の結果をマッピングする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0341B002SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0341B002CBSMsg）"]
  S2 --> S3["Step3: mappingEKK0341B002SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0341B002, mappingEKK0341B002SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: 何も格納せずreturn"]
  S10 --> RET["return status"]
  S11 --> RET
  style IF1 fill:#ffcc00
  S10 -.- NOTE2["TEMPLATE_ID_EKK0341B002 = 'EKK0341B002'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK0341B002CBSMsg）を生成。
3. `mappingEKK0341B002SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. sIFResultからCAANMsg[]（resultMsgs）取得。
9. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
10. status==0の場合はresultHashにTEMPLATE_ID_EKK0341B002でmappingEKK0341B002SCOutMsg(resultMsgs)を格納。
11. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### callEKK0351B010SC()

---

#### 1. 役割

オプションサービス契約一覧照会 SIF（EKK0351B010）を呼び出し、該当サービス契約に紐づくオプションサービス契約の一覧情報を取得する業務ロジックである。  
paramから共通情報を編集し、EKK0351B010CBSMsgテンプレートにinHash・funcCodeをマッピング、SC呼出しを行う。  
下りのマッピング処理 editResultRP_EKK0351B010SC でレスポンスをparamへ格納し、正常時はresultHashにEKK0351B010一覧をセットする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0351B010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0351B010CBSMsg）"]
  S2 --> S3["Step3: mappingEKK0351B010SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: editResultRP_EKK0351B010SC（sIFResult, param）"]
  S8 --> S9["Step9: resultMsgs = sIFResultからCAANMsg[]取得"]
  S9 --> S10["Step10: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S10 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S11["Step11: resultHash.put（TEMPLATE_ID_EKK0351B010, mappingListingSvcCompoOutMsg（resultMsgs, EKK0351B010CBSMsg.EKK0351B010CBSMSG1LIST））"]
  IF1 -->|"No: 異常"| S12["Step12: 何も格納せずreturn"]
  S11 --> RET["return status"]
  S12 --> RET
  style IF1 fill:#ffcc00
  S11 -.- NOTE2["TEMPLATE_ID_EKK0351B010 = 'EKK0351B010'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK0351B010CBSMsg）を生成。
3. `mappingEKK0351B010SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. `editResultRP_EKK0351B010SC(sIFResult, param)` でSCのレスポンスをparamに格納。
9. sIFResultからCAANMsg[]（resultMsgs）取得。
10. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
11. status==0の場合はresultHashにTEMPLATE_ID_EKK0351B010でmappingListingSvcCompoOutMsg(resultMsgs, EKK0351B010CBSMsg.EKK0351B010CBSMSG1LIST)を格納。
12. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `hakkoCourseChgSOD` | public | 料金プランコード変更(ネット)に伴うサービスオーダを発行します。 <br> 認証IDが変わらず、料金プランコードのみが変更となるコース変更(コース変更取消)の際に発行が必要なサービスオーダを オーダ発行条件、オーダ情報作成ワークに登録します… |
| 2 | `koteiIpAd8DivOdrCtrl` | private | 固定IPアドレス８区分の制御処理<br> |
| 3 | `malwareBlockingDivOdrCtrl` | private | マルウェアブロッキングの制御処理<br> |
| 4 | `pauseRlsChgeOdrCtrl` | private | 休止変更・予約取消オーダ制御処理<br> |
| 5 | `pauseUkOdrCtrl` | private | 休止受付オーダ制御処理<br> |
| 6 | `stpRlsOdrCtrl` | private | 中断解除オーダ制御処理<br> |
| 7 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0351B010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L28837)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingListingSvcCompoOutMsg(resultMsgs, EKK0351B010CBSMsg.EKK0351B010CBSMSG1LIST));` |

> **合計**: 1 blocks (1 depth levels)

### callEKK0361A010SC()

---

#### 1. 役割

オプションサービス契約＜ISP＞一意照会SIF（EKK0361A010）を呼び出してISPオプションサービス契約の詳細を取得する業務ロジックである。  
paramから共通情報を編集し、EKK0361A010CBSMsgテンプレートに対してinHash・funcCodeをマッピングし、SC呼び出しを行う。  
正常時はresultHashにEKK0361A010の結果をマッピングし、エラー時はeditErrorInfoEKK0361A010CBSでparamにエラー情報を設定、エラーリストが空でなければ例外をthrowする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0361A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0361A010CBSMsg）"]
  S2 --> S3["Step3: mappingEKK0361A010SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0361A010, mappingEKK0361A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: 何も格納せず進む"]
  S10 --> S12
  S11 --> S12
  S12["Step12: editErrorInfoEKK0361A010CBS（param, resultMsgs, status）"]
  S12 --> S13["Step13: param.getControlMapData（SCControlMapKeys.ERROR_INFO）でエラーリスト取得"]
  S13 --> IF2{"errList == null"}
  IF2 -->|"Yes"| S14["Step14: errList = new ArrayList<Object>（）"]
  IF2 -->|"No"| S15["Step15: 既存のerrListを使用"]
  S14 --> S16["Step16: param.setControlMapData（SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo（sIFResult, errList））"]
  S15 --> S16
  S16 --> IF3{"errList != null && !errList.isEmpty（）"}
  IF3 -->|"Yes: エラーあり"| S17["Step17: throw new CCException（…, new SCCallException（…, （（Integer）status）.toString（）, resultMsgs[0].getInt（EKK0361A010CBSMsg.STATUS）））"]
  IF3 -->|"No: エラーなし"| S18["Step18: return status"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  S10 -.- NOTE2["TEMPLATE_ID_EKK0361A010 = 'EKK0361A010'"]
  S16 -.- NOTE3["SCControlMapKeys.ERROR_INFO = エラー情報キー"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報を編集し、リクエスト用マップを初期化する。
2. `CAANMsg` テンプレート（EKK0361A010CBSMsg）を生成。
3. `mappingEKK0361A010SCInMsg(template, inHash, funcCode)` でinHash・funcCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` でparamの基本情報をテンプレートにセット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、sIFResultで結果を受領。
8. sIFResultからCAANMsg[]（resultMsgs）を取得。
9. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
10. status==0の場合、resultHashのTEMPLATE_ID_EKK0361A010キーにmappingEKK0361A010SCOutMsg(resultMsgs)を格納。
11. それ以外は何も格納せず進む。
12. `editErrorInfoEKK0361A010CBS(param, resultMsgs, status)` でparamにエラー情報を設定。
13. `param.getControlMapData(SCControlMapKeys.ERROR_INFO)` でエラーリスト取得。
14. errListがnullならArrayList<Object>を新規生成。
15. そうでなければ既存errList使用。
16. `param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(sIFResult, errList))` でエラー情報をセット。
17. errListが空でなければCCException（SCCallException含む）をthrow。
18. エラーなしの場合はstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0361A010SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `addSOD` | private | オーダ発行条件・オーダ情報作成ワーク登録判定・登録処理<br> <br> 渡されたオーダ内容コードから、必要な情報をマッピングして<br> 各オーダテーブルへの登録を行う。<br> <br> 【使用するサービスIF】<br> ・オーダ発行条… |
| 2 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 3 | `getEKK0361A010Info` | private | EKK0361A010 オプションサービス契約<ISP>一意照会取得処理<br> |
| 4 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 5 | `opHktgiOdrCtrl` | private | オプション引継オーダ制御処理<br> |
| 6 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 7 | `wribInfoAddOdrCtrl` | private | 割引情報登録オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0361A010SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L28528)

> 📌 ステータスが0以外はエラーとなっている

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📋 SET | `resultHash.put(` |
| 2 | ⚡ EXEC | `mappingEKK0361A010SCOutMsg(resultMsgs));` |

##### Block 2 — 🔀 IF `(errList == null)` (L28541)

> 📌 エラー情報のマップを取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `errList = new ArrayList<Object>();` |

##### Block 3 — 🔀 IF `(errList != null && !errList.isEmpty())` (L28549)

> 📌 エラー発生時はExceptionを設定

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0361A010CBSMsg.STATUS)));` |

> **合計**: 3 blocks (1 depth levels)

### callEKK2811A010SC()

---

#### 1. 役割

機器オプションサービス契約一意照会SIF（EKK2811A010）を呼び出し、指定情報に紐づく機器オプションサービス契約情報を取得する業務ロジックである。  
paramから共通情報を編集し、EKK2811A010CBSMsgテンプレートにinHash・funcCodeをマッピングしてSC呼出を行う。  
正常時はresultHashにEKK2811A010の結果をマッピングする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK2811A010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK2811A010CBSMsg）"]
  S2 --> S3["Step3: mappingEKK2811A010SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK2811A010, mappingEKK2811A010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: 何も格納せずreturn"]
  S10 --> RET["return status"]
  S11 --> RET
  style IF1 fill:#ffcc00
  S10 -.- NOTE2["TEMPLATE_ID_EKK2811A010 = 'EKK2811A010'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK2811A010CBSMsg）を生成。
3. `mappingEKK2811A010SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. sIFResultからCAANMsg[]（resultMsgs）取得。
9. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
10. status==0の場合はresultHashにTEMPLATE_ID_EKK2811A010でmappingEKK2811A010SCOutMsg(resultMsgs)を格納。
11. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### callEKK2811B010SC()

---

#### 1. 役割

機器オプションサービス契約一覧照会（機器提供サービス契約番号）SIF（EKK2811B010）を呼び出し、機器提供サービス契約番号に紐づく機器オプションサービス契約の一覧情報を取得する業務ロジックである。  
paramから共通情報を編集し、EKK2811B010CBSMsgテンプレートに対してinHash・funcCodeをマッピング、SC呼出しを行う。  
正常時はresultHashにEKK2811B010の結果をマッピングする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK2811B010SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK2811B010CBSMsg）"]
  S2 --> S3["Step3: mappingEKK2811B010SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK2811B010, mappingEKK2811B010SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: 何も格納せずreturn"]
  S10 --> RET["return status"]
  S11 --> RET
  style IF1 fill:#ffcc00
  S10 -.- NOTE2["TEMPLATE_ID_EKK2811B010 = 'EKK2811B010'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK2811B010CBSMsg）を生成。
3. `mappingEKK2811B010SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. sIFResultからCAANMsg[]（resultMsgs）取得。
9. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
10. status==0の場合はresultHashにTEMPLATE_ID_EKK2811B010でmappingEKK2811B010SCOutMsg(resultMsgs)を格納。
11. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

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

### callEKK0351B002SC()

---

#### 1. 役割

オプションサービス契約一覧照会（サービス契約）SIF（EKK0351B002）を呼び出し、サービス契約番号に対応するオプションサービス契約一覧を取得する業務ロジックである。  
paramから共通情報を編集し、EKK0351B002CBSMsgテンプレートにinHash・funcCodeをマッピング、SC呼び出しを行う。  
下りマッピング editResultRP_EKK0351B002CBS でparamにレスポンスを格納し、正常時はresultHashにEKK0351B002の一覧を格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0351B002SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0351B002CBSMsg）"]
  S2 --> S3["Step3: mappingEKK0351B002SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: editResultRP_EKK0351B002CBS（sIFResult, param）"]
  S8 --> S9["Step9: resultMsgs = sIFResultからCAANMsg[]取得"]
  S9 --> S10["Step10: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S10 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S11["Step11: resultHash.put（TEMPLATE_ID_EKK0351B002, mappingListingSvcCompoOutMsg（resultMsgs, EKK0351B002CBSMsg.EKK0351B002CBSMSG1LIST））"]
  IF1 -->|"No: 異常"| S12["Step12: 何も格納せずreturn"]
  S11 --> RET["return status"]
  S12 --> RET
  style IF1 fill:#ffcc00
  S11 -.- NOTE2["TEMPLATE_ID_EKK0351B002 = 'EKK0351B002'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK0351B002CBSMsg）を生成。
3. `mappingEKK0351B002SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. `editResultRP_EKK0351B002CBS(sIFResult, param)` でSCレスポンスをparamに格納。
9. sIFResultからCAANMsg[]（resultMsgs）取得。
10. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
11. status==0の場合はresultHashにTEMPLATE_ID_EKK0351B002でmappingListingSvcCompoOutMsg(resultMsgs, EKK0351B002CBSMsg.EKK0351B002CBSMSG1LIST)を格納。
12. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → callEKK0351B002SC` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `addIpv6SODAft` | private | IPV6オーダ発行処理_変更後オプションサービス<br> |
| 2 | `addTensoDenwaOp` | private | 転送電話オプション用ＳＯＤ登録 |
| 3 | `bmpDojiMskm` | private | 番ポ同時申込処理<br> |
| 4 | `courseChgeOdrCtrl` | private | コース変更オーダ制御処理<br> |
| 5 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 6 | `getOpSvcKei4Eohtel` | private | eo光電話用、オプションサービス契約の照会 htelNoDslOdrCtrl メソッドの実装を抜き出して実装しました |
| 7 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 8 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 9 | `keiTtdkChuHtelnoChgeOdrCtrl` | private | 契約手続中の光電話番号変更オーダ制御処理 |
| 10 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 11 | `setChgePWForDialup` | private | ダイアルアップ接続 PW変更処理<br> |
| 12 | `setChgePWForIPv6` | private | IPv6 PW変更処理<br> |
| 13 | `setChgePWForMltiSe` | private | マルチセッション PW変更処理<br> |
| 14 | `telNoChge` | private | 電話番号変更処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `callEKK0351B002SC()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(status == 0)` (L29015)

> 📌 ステータスが0以外はエラーとなっている

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### callEKK0341B504SC()

---

#### 1. 役割

機器提供サービス契約一覧照会（サービス契約回線内訳）SIF（EKK0341B504）を呼び出し、指定サービス契約回線内訳に紐づく機器提供サービス契約情報を一覧取得する業務ロジックである。  
paramから共通情報を編集し、EKK0341B504CBSMsgテンプレートにinHash・funcCodeをマッピング、SC呼び出しを行う。  
正常時はresultHashにEKK0341B504の結果をマッピングする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["callEKK0341B504SC（param, handle, inHash, resultHash, funcCode）"] --> S1["Step1: editInMsgCmn（param）で共通情報編集"]
  S1 --> S2["Step2: CAANMsgテンプレート生成（EKK0341B504CBSMsg）"]
  S2 --> S3["Step3: mappingEKK0341B504SCInMsg（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: sIFResult = scCall.run（sIFRequest, handle）"]
  S7 --> S8["Step8: resultMsgs = sIFResultからCAANMsg[]取得"]
  S8 --> S9["Step9: template.getInt（JCMConstants.STATUS_INT_KEY）でstatus取得"]
  S9 --> IF1{"status == 0"}
  IF1 -.- NOTE1["JCMConstants.STATUS_INT_KEY = ステータスコード"]
  IF1 -->|"Yes: 正常"| S10["Step10: resultHash.put（TEMPLATE_ID_EKK0341B504, mappingEKK0341B504SCOutMsg（resultMsgs））"]
  IF1 -->|"No: 異常"| S11["Step11: 何も格納せずreturn"]
  S10 --> RET["return status"]
  S11 --> RET
  style IF1 fill:#ffcc00
  S10 -.- NOTE2["TEMPLATE_ID_EKK0341B504 = 'EKK0341B504'"]
```

**処理ステップ詳細:**

1. `editInMsgCmn(param)` でparamから共通情報編集、リクエスト用マップを初期化。
2. `CAANMsg` テンプレート（EKK0341B504CBSMsg）を生成。
3. `mappingEKK0341B504SCInMsg(template, inHash, funcCode)` でinHashとfuncCodeをテンプレートにマッピング。
4. `editBasicCmn(param, template)` で基本情報セット。
5. テンプレートをsIFRequestのJCMConstants.TEMPLATE_LIST_KEYでマップに格納。
6. `ServiceComponentRequestInvoker` を生成。
7. `scCall.run(sIFRequest, handle)` でSC呼び出し、結果取得。
8. sIFResultからCAANMsg[]（resultMsgs）取得。
9. テンプレートからJCMConstants.STATUS_INT_KEYでstatusを取得。
10. status==0の場合はresultHashにTEMPLATE_ID_EKK0341B504でmappingEKK0341B504SCOutMsg(resultMsgs)を格納。
11. それ以外は何も格納せずstatusを返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                  |
| --- | ------------ | -------------------------- | ----------------------------------------- |
| 1   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ           |
| 2   | handle       | SessionHandle              | セッション管理ハンドル                    |
| 3   | inHash       | HashMap<String, Object>    | 入力パラメータマップ                      |
| 4   | resultHash   | HashMap<String, Object>    | 結果格納マップ                            |
| 5   | funcCode     | String                     | SC呼出機能コード                          |

---

#### 4. CRUD操作 / 呼出サービス

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

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



---

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

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

### 📞 Screen/Batch 呼び出し元 (External Entry Points)

> このクラスを呼び出すScreen/Batchの一覧です（クラスレベルの呼び出し元）。
> **「呼出チェーン」列**: CC直接エントリメソッド → IntraClass経由 → 本チャンクの対象メソッド（**太字**）の実際の呼出パス。
> ※ 例: `CCエントリメソッド → 中間メソッド → **対象メソッド**` — 左端がCC入口、太字が本チャンクの対象メソッド。
> **「種別」列**: BPCheck＝業務確認チェック, Batch＝バッチ処理, Operation＝オペレーション, CC＝制御クラス。

| # | Screen/Batch | 種別 | 呼び出しクラス | 呼び出しメソッド | 呼出チェーン（CC入口 → IntraClass → 対象） |
|---|---|---|---|---|---|
| 1 | `KKSV0004` | BPCheck | `KKSV0004OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 2 | `KKSV0008` | BPCheck | `KKSV0008OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 3 | `KKSV0009` | BPCheck | `KKSV0009OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 4 | `KKSV0031` | BPCheck | `KKSV0031OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 5 | `KKSV0073` | BPCheck | `KKSV0073OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 6 | `KKSV0136` | BPCheck | `KKSV0136OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 7 | `KKSV0162` | BPCheck | `KKSV0162OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 8 | `KKSV0428` | BPCheck | `KKSV0428OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 9 | `KKSV0429` | BPCheck | `KKSV0429OPBPCheck` | `invokeCheck` | `getInvokeCBS` |
| 10 | `KKSV0430` | BPCheck | `KKSV0430OPBPCheck` | `invokeCheck` | `getInvokeCBS` |

## ③.6 制御フロー分岐 (Control Flow Branching)

### `callEKK0361A010SC()` (L28488) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (status == 0) | エラー情報のマップを取得 | - | `mappingEKK0361A010SCOutMsg()`, `editErrorInfoEKK0361A010CBS()` | L28528 |
| 2 | 🔀 IF | D0 | (errList == null) | エラー発生時はExceptionを設定 | - | - | L28541 |
| 3 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L28549 |
| 4 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EKK0361A010CBSMsg.STATUS))) | - | - | - | L28551 |
| 5 | ↩️ RETURN | D0 | status | - | - | - | L28554 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["callEKK0361A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （status == 0）"]
  CF0 -->|"L28528"| B0
  B1["IF: （errList == null）"]
  CF0 -->|"L28541"| B1
  subgraph SG2["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C2_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L28549"| SG2
  B3["RETURN: status"]
  CF0 -->|"L28554"| B3
```

### `callEZM0411A010SC()` (L30506) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (status == 0) | エラー情報のマップを取得 | - | `mappingEZM0411A010SCOutMsg()`, `editErrorInfoEZM0411A010CBS()` | L30547 |
| 2 | 🔀 IF | D0 | (errList == null) | エラー発生時はExceptionを設定 | - | - | L30559 |
| 3 | 🔀 IF | D0 | (errList != null && !errList.isEmpty()) | - | - | - | L30567 |
| 4 | · ⚠️ THROW | D1 | new CCException("", new SCCallException("", ((Integer)status).toString(), resultMsgs[0].getInt(EZM0411A010CBSMsg.STATUS))) | - | - | - | L30569 |
| 5 | ↩️ RETURN | D0 | status | - | - | - | L30572 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["callEZM0411A010SC()"] --> CF0{"制御フロー分岐"}
  B0["IF: （status == 0）"]
  CF0 -->|"L30547"| B0
  B1["IF: （errList == null）"]
  CF0 -->|"L30559"| B1
  subgraph SG2["IF: （errList != null && !errList.isEmpty（））"]
    direction TB
    C2_0["THROW: new CCException（'', new SCCall…"]
  end
  CF0 -->|"L30567"| SG2
  B3["RETURN: status"]
  CF0 -->|"L30572"| B3
```

> **制御フロー合計**: 2 methods, 10 branches
