# ⑥ 業務ロジック — Other: 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-shkkaMap"></a>
### shkkaMap()

---

#### 1. 役割

`shkkaMap`は、引数で渡された`HashMap<String, Object>`型の`map`が`null`である場合に新しい`HashMap`インスタンスを生成して返却し、`null`でなければそのまま返却するユーティリティメソッドです。  
具体的には、システム内部でデータ格納用の`HashMap`を安全に初期化・返却する共通処理となっています。
本メソッドは、他の共通部品や業務処理ロジック内で、`null`チェックと初期化を一箇所で集約する目的で利用されます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["shkkaMap（map）"] --> IF1{"map == null"}
  IF1 -->|"Yes: nullの場合"| S1["Step1: map = new HashMap<String, Object>（）"]
  IF1 -->|"No: nullでない"| S2["Step2: そのままmapを利用"]
  S1 --> RET["return map"]
  S2 --> RET
  style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. 入力引数`map`が`null`かどうか判定する。
2. `null`の場合、新しい`HashMap<String, Object>`インスタンスを生成する。
3. `null`でなければ、引数の`map`をそのまま返却する。
4. 結果として、`null`でない`HashMap`参照を返却する。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                     | 業務説明                                        |
| --- | ------------ | ---------------------- | ----------------------------------------------- |
| 1   | map          | HashMap<String, Object>| 任意のオブジェクトマップ。null許容              |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → shkkaMap` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `adchgFixOdrCtrl` | private | 住所変更・確定オーダ制御処理<br> |
| 2 | `addIpv6SODAft` | private | IPV6オーダ発行処理_変更後オプションサービス<br> |
| 3 | `bmpDojiMskm` | private | 番ポ同時申込処理<br> |
| 4 | `bmpSipDslOdrCtrl` | private | 番ポ戻し（SIP解約・消去オーダ）制御処理<br> |
| 5 | `bmpSwitchOdrCtrl` | private | 番ポ切り替えオーダ制御処理<br> |
| 6 | `courseChgeOdrCtrl` | private | コース変更オーダ制御処理<br> |
| 7 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 8 | `hakkoSOD` | public | サービスオーダ発行処理 <br> パラメータの件数分<br> サービスオーダ登録処理を呼び出します。<br> <br> |
| 9 | `htelItntokiOdrCtrl` | private | 光電話移転トーキオーダ制御処理<br> |
| 10 | `htelNoAddOdrCtrl` | private | 光電話番号追加オーダ制御処理<br> |
| 11 | `htelNoChgeOdrCtrl` | private | 光電話番号変更オーダ制御処理<br> |
| 12 | `htelNoDslOdrCtrl` | private | 光電話番号解約オーダ制御処理<br> |
| 13 | `htelNoInfoChgeOdrCtrl` | private | 光電話番号情報変更オーダ制御処理<br> |
| 14 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 15 | `idpwShkkaSaifuriOdrCtrl` | private | IDPW初期化・再振オーダ制御処理<br> |
| 16 | `jdgOdr163` | private | コース変更での現ルータに対するルータ向け接続情報・変更ＳＯＤの登録処理をします |
| 17 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 18 | `keiTtdkChuHtelnoChgeOdrCtrl` | private | 契約手続中の光電話番号変更オーダ制御処理 |
| 19 | `newNet` | private | インターネットサービス新規契約処理<br> <br> (1)FTTH認証の新規登録を行う。<br> (2)Eメールの新規登録を行う。<br> (3)URLが設定されている場合、Myホームページ情報の新規登録を行う。<br> (4)メーリング… |
| 20 | `opHktgiOdrCtrl` | private | オプション引継オーダ制御処理<br> |
| 21 | `opSetOdrCtrl` | private | オプション設定オーダ制御処理<br> |
| 22 | `pauseRlsChgeOdrCtrl` | private | 休止変更・予約取消オーダ制御処理<br> |
| 23 | `pauseUkOdrCtrl` | private | 休止受付オーダ制御処理<br> |
| 24 | `rtOpChgDivOdrCtrl` | private | ルーターオプション変更オーダ制御処理<br> |
| 25 | `stpRlsOdrCtrl` | private | 中断解除オーダ制御処理<br> |
| 26 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |
| 27 | `taiikiSeigenOdrCtrl` | private | 帯域制限設定・解除オーダ制御処理<br> |
| 28 | `telNoChge` | private | 電話番号変更処理<br> |
| 29 | `vLanIdChgOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |
| 30 | `vLanIdVaChangeOdrCtrl` | private | VLAN-ID変更オーダ制御処理<br> |
| 31 | `wribInfoAddOdrCtrl` | private | 割引情報登録オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `shkkaMap()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(map == null)` (L31608)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `map = new HashMap<String, Object>();` |

> **合計**: 1 blocks (1 depth levels)


---

#### 📋 Per-Branch 詳細ブロック — `addTokiSOD()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(trgtList != null && trgtList.size() > 0)` (L33274)

> 📌 ANK-4494-00-00 STEP2 ADD START

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `trgtList.add(trgtData);` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.MAP_KEY_ITNTOKI_STA_END_LIST, trgtList);` [➔ MAP_KEY_ITNTOKI_STA_END_LIST="ItntokiStaEndList"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L33280)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `ArrayList<HashMap<String, Object>> trgtList2 = new ArrayList<HashMap<String, Object>>();` |
| 2 | ⚡ EXEC | `trgtList2.add(trgtData);` |
| 3 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.MAP_KEY_ITNTOKI_STA_END_LIST, trgtList2);` [➔ MAP_KEY_ITNTOKI_STA_END_LIST="ItntokiStaEndList"] \| |
| 4 | 📦 VAR | `int statusCode = 0;` // サービスインターフェイス実行ステータス |
| 5 | ⚡ EXEC | `HashMap<String, Object> inHashUcwkTel = new HashMap<String, Object>();` |
| 6 | ⚡ EXEC | `HashMap<String, Object> resultHashUcwkTel = new HashMap<String, Object>();` |
| 7 | 📋 SET | `inHashUcwkTel.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, this.svc_kei_ucwk_no[0]);` // サービス契約内訳番号 [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |
| 8 | 📋 SET | `inHashUcwkTel.put(JKKHakkoSODConstCC.GENE_ADD_DTM, this.svc_kei_ucwk_gadtm[0]);` // 変更後サービス契約内訳世代登録年月日時分秒 [➔ GENE_ADD_DTM="gene_add_dtm"] \| |

##### Block 3 — 🔀 IF `(0 != statusCode)` (L33297)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

##### Block 4 — 🔀 IF `(eKK0191A010Hash != null)` [KK0191A010H="KK0191A010H"] (L33304)

> 📌 番ポ有無

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `bmpUm = (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.BMP_UM);` // 番ポ有無 [➔ BMP_UM="bmp_um"] \| |

##### Block 5 — 🔀 IF `(!updFlg)` (L33314)

> 📌 判定のみを行う場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 🔙 RETURN | `return param;` |

##### Block 6 — 🔀 IF `(!JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_NON.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_NON="0"] (L33327)

> 📌 トーキの開始／終了がある場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `this.svc_kei_ucwk_gadtm[0] = (String)judgeRslt.get(JKKItntokiStaEndConstCC.SVC_KEI_UCWK_GENE_ADD_DTM);` [➔ SVC_KEI_UCWK_GENE_ADD_DTM="svc_kei_ucwk_gene_add_dtm"] \| |

##### Block 7 — 🔀 IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_STA.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_STA="1"] (L33335)

> 📌 移転先登録によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String dslTokiJssiChuCd = (String)judgeRslt.get(JKKItntokiStaEndConstCC.DSL_TOKI_JSSI_CHU_CD);` [➔ DSL_TOKI_JSSI_CHU_CD="dsl_toki_jssi_chu_cd"] \| |

###### · Block 7.1 — 🔀 IF `(JKKItntokiStaEndConstCC.DSL_TOKI_JSSI_CHU_CD_JSSI.equals(dslTokiJssiChuCd))` [DSL_TOKI_JSSI_CHU_CD_JSSI="1"] (L33340)

> 📌 移転元解約によるトーキが実施中の場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_221);` [➔ ODR_NAIYO_CD_221="221"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_222);` [➔ ODR_NAIYO_CD_222="222"] \| |

###### ·· Block 7.1.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33360)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

###### · Block 7.2 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33385)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_265);` [➔ ODR_NAIYO_CD_265="265"] \| |

##### Block 8 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_END.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_END="2"] (L33394)

> 📌 移転先登録によるトーキを終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_260);` [➔ ODR_NAIYO_CD_260="260"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_261);` [➔ ODR_NAIYO_CD_261="261"] \| |

###### · Block 8.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33413)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

##### Block 9 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_DSL_STA.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_DSL_STA="3"] (L33422)

> 📌 移転元解約によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_220);` [➔ ODR_NAIYO_CD_220="220"] \| |

###### · Block 9.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33439)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_265);` [➔ ODR_NAIYO_CD_265="265"] \| |

##### Block 10 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_DSL_END.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_DSL_END="4"] (L33448)

> 📌 移転元解約によるトーキを終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_221);` [➔ ODR_NAIYO_CD_221="221"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_222);` [➔ ODR_NAIYO_CD_222="222"] \| |

###### · Block 10.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33467)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

##### Block 11 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_PAUSE_STA.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_PAUSE_STA="5"] (L33476)

> 📌 休止によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_262);` [➔ ODR_NAIYO_CD_262="262"] \| |

##### Block 12 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_PAUSE_END.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_PAUSE_END="6"] (L33482)

> 📌 休止によるトーキの終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_263);` [➔ ODR_NAIYO_CD_263="263"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_264);` [➔ ODR_NAIYO_CD_264="264"] \| |

###### · Block 12.1 — 🔀 IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_STA.equals(itnmItntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_STA="1"] (L33510)

> 📌 移転先登録によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_259);` [➔ ODR_NAIYO_CD_259="259"] \| |

###### ·· Block 12.1.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33528)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_265);` [➔ ODR_NAIYO_CD_265="265"] \| |

###### · Block 12.2 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_END.equals(itnmItntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_END="2"] (L33537)

> 📌 移転先登録によるトーキを終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_260);` [➔ ODR_NAIYO_CD_260="260"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_261);` [➔ ODR_NAIYO_CD_261="261"] \| |

###### ·· Block 12.2.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33556)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

> **合計**: 22 blocks (3 depth levels)

### addTokiSOD(SessionHandle handle, IRequestParameterReadWrite param, String idoDiv, String idoDtlCd, boolean updFlg)

---

#### 1. 役割

トーキの開始／終了に必要なSOD（サービスオーダ）を登録するメソッドです。  
Javadoc記述:  
> トーキの開始／終了に必要なSODを登録します。移転トーキ開始終了部品の移転トーキ開始終了判定・更新処理を実行してトーキの開始／終了年月日を更新した後、トーキの開始／終了に必要なSODをオーダ発行条件、オーダ情報作成ワークに登録します。

具体的には、  
- 入力パラメータをもとに移転トーキ開始終了判定部品（`JKKBpCommon.judgeUpdItntokiStaEnd`）を呼び出し、開始・終了判定コードや対象サービス契約内訳情報を取得し、  
- 判定結果に応じて、SIPトーキ関連SOD（登録・解約・消去）、ENUM設定SODの追加登録を行います。  
- 移転先・移転元・休止等、全ての対象サービス契約内訳単位で繰り返し処理します。  
- `updFlg`が`false`の場合は判定のみ実施し、SODの追加登録は行いません。  
- 本メソッドは`addTokiSOD()`（オーバーロード）や`judgeTokiSOD()`から呼ばれる共通ロジックです。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["addTokiSOD（handle, param, idoDiv, idoDtlCd, updFlg）"]
    --> S1["Step1: trgtData（判定用データMap）を生成し、paramに格納"]
    S1 --> S2["Step2: trgtList（対象リスト）にtrgtDataを追加"]
    S2 --> S3["Step3: EKK0191A010（サービス契約内訳<eo光電話>一意照会）を呼出"]
    S3 --> S4["Step4: 番ポ有無（bmpUm）を取得"]
    S4 --> S5["Step5: judgeUpdItntokiStaEndを呼出しトーキ判定・更新"]
    S5 --> IF_UPD_FLG{"updFlg == false"}
    IF_UPD_FLG -->|"Yes: 判定のみ"| RET1["return param"]
    IF_UPD_FLG -->|"No: SOD登録処理へ"| S6["Step6: 判定結果取得・判定コード取得"]
    S6 --> IF_JUDGE_CD{"itntokiStaEndJudgeCdの値で分岐"}
    style IF_UPD_FLG fill:#ffcc00
    style IF_JUDGE_CD fill:#ffcc00

    subgraph JUDGE_BRANCH["判定コードごとのSOD処理"]
      direction TB
      A1["Case1: ITNTOKI_STA_END_JUDGE_CD_ITNS_STA（移転先登録による開始）"]
      A2["Case2: ITNTOKI_STA_END_JUDGE_CD_ITNS_END（移転先登録による終了）"]
      A3["Case3: ITNTOKI_STA_END_JUDGE_CD_DSL_STA（移転元解約による開始）"]
      A4["Case4: ITNTOKI_STA_END_JUDGE_CD_DSL_END（移転元解約による終了）"]
      A5["Case5: ITNTOKI_STA_END_JUDGE_CD_PAUSE_STA（休止による開始）"]
      A6["Case6: ITNTOKI_STA_END_JUDGE_CD_PAUSE_END（休止による終了）"]
      A7["Case7: その他（異動元サービス契約内訳リスト繰返し処理）"]
    end
    IF_JUDGE_CD -->|"判定値1~6: 各種SOD追加処理"| JUDGE_BRANCH
    JUDGE_BRANCH --> S7["Step7: 異動元サービス契約内訳リスト itnmSvcKeiUcwkListをforで処理"]
    S7 --> RET2["return param"]

    %% 定数ノート例
    S3 -.- NOTE_EKK0191["TEMPLATE_ID_EKK0191A010 = 'EKK0191A010'（サービス契約内訳<eo光電話>一意照会）"]
    S4 -.- NOTE_BMPUM["EKK0191A010CBSMsg1List.BMP_UM = 'bmp_um'（番ポ有無）"]
    S5 -.- NOTE_ITNTOKI["MAP_KEY_ITNTOKI_STA_END = 'ItntokiStaEnd'"]
    style NOTE_EKK0191 fill:#fff,stroke:#333,stroke-dasharray: 5 5
    style NOTE_BMPUM fill:#fff,stroke:#333,stroke-dasharray: 5 5
    style NOTE_ITNTOKI fill:#fff,stroke:#333,stroke-dasharray: 5 5
```

**処理ステップ詳細:**

1. 入力パラメータ（サービス契約番号・内訳番号・異動区分・明細番号など）を用いて、`trgtData`マップを生成し、`param`に格納する。
2. 対象データリスト`trgtList`（MAP_KEY_ITNTOKI_STA_END_LIST）に`trgtData`追加し、`param`に再格納。
3. サービス契約内訳情報取得のため、`callEKK0191A010SC()`を呼び出し、レスポンスから`bmpUm`（番ポ有無）を取得。
4. トーキ開始終了判定・更新処理（`JKKBpCommon.judgeUpdItntokiStaEnd`）実行し、判定結果を`param`へ格納。
5. `updFlg == false`の場合は、判定のみでここでreturn。
6. 判定結果から`itntokiStaEndJudgeCd`を取得。  
   - 各判定値ごとに処理分岐（SIPトーキ登録・解約・消去、ENUM設定・消去）。
   - 番ポ有無や電話番号取得事業者条件によりENUM SOD追加。
7. 異動元サービス契約内訳リスト`itnmSvcKeiUcwkList`がある場合、各内訳ごとに同様のトーキ開始/終了処理を繰り返す。
8. 最後に異動前の情報をクリアし、異動対象のサービス契約内訳情報に戻して終了。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                                          |
| --- | ------------ | -------------------------- | ----------------------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                            |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ）             |
| 3   | idoDiv       | String                     | 異動区分（例: 新規、コース変更等）                                |
| 4   | idoDtlCd     | String                     | 異動詳細コード                                                    |
| 5   | updFlg       | boolean                    | 更新フラグ（true: SOD登録まで行う、false: 判定のみ）              |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| R | `callEKK0191A010SC` | EKK0191A010SC | - | (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し) |
| R | `callEKK0361A010SC` | EKK0361A010SC | KK_T_OPSVKEI_ISP, KK_T_OP_SVC_KEI, KK_T_SBOP_SVC_KEI, KK_T_KAISEN_TG_SVKEI, KK_T_KKTK_SVC_KEI, ZM_M_TAKNKIKI_MODEL | (オプションサービス契約＜ISP＞一意照会SIFを呼び出し) |
| C | `executeOdrHakkoJokenAdd` | EKK1081D010CBS | KK_T_ODR_INF_SKSI_WK, KK_T_ODR_HAKKO_JOKEN | (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録) |
| C | `executeOdrInfoSakseiWkAdd` | - | - | (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → addTokiSOD` | `callEKK0191A010SC [R] - (サービス契約内訳＜eo光電話＞一意照会SIFを呼び出し)`<br>`callEKK0361A010SC [R] KK_T_OPSVKEI_ISP/KK_T_OP_SVC_KEI/KK_T_SBOP_SVC_KEI/KK_T_KAISEN_TG_SVKEI/KK_T_KKTK_SVC_KEI/ZM_M_TAKNKIKI_MODEL (オプションサービス契約＜ISP＞一意照会SIFを呼び出し)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)`<br>`executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `bmpDojiMskm` | private | 番ポ同時申込処理<br> |
| 2 | `dslOdrCtrl` | private | 解約オーダ制御処理<br> |
| 3 | `htelNoDslOdrCtrl` | private | 光電話番号解約オーダ制御処理<br> |
| 4 | `htelNoKaihkOdrCtrl` | private | 光電話番号回復オーダ制御処理<br> |
| 5 | `kaihkOdrCtrl` | private | 回復オーダ制御処理<br> |
| 6 | `pauseRlsChgeOdrCtrl` | private | 休止変更・予約取消オーダ制御処理<br> |
| 7 | `pauseUkOdrCtrl` | private | 休止受付オーダ制御処理<br> |
| 8 | `stpUkOdrCtrl` | private | 中断受付オーダ制御処理<br> |

---

#### 📋 Per-Branch 詳細ブロック — `addTokiSOD()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(trgtList != null && trgtList.size() > 0)` (L33274)

> 📌 ANK-4494-00-00 STEP2 ADD START

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `trgtList.add(trgtData);` |
| 2 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.MAP_KEY_ITNTOKI_STA_END_LIST, trgtList);` [➔ MAP_KEY_ITNTOKI_STA_END_LIST="ItntokiStaEndList"] \| |

##### Block 2 — ↪️ ELSE `(else)` (L33280)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `ArrayList<HashMap<String, Object>> trgtList2 = new ArrayList<HashMap<String, Object>>();` |
| 2 | ⚡ EXEC | `trgtList2.add(trgtData);` |
| 3 | ⚡ EXEC | `param.setData(JKKHakkoSODConstCC.MAP_KEY_ITNTOKI_STA_END_LIST, trgtList2);` [➔ MAP_KEY_ITNTOKI_STA_END_LIST="ItntokiStaEndList"] \| |
| 4 | 📦 VAR | `int statusCode = 0;` // サービスインターフェイス実行ステータス |
| 5 | ⚡ EXEC | `HashMap<String, Object> inHashUcwkTel = new HashMap<String, Object>();` |
| 6 | ⚡ EXEC | `HashMap<String, Object> resultHashUcwkTel = new HashMap<String, Object>();` |
| 7 | 📋 SET | `inHashUcwkTel.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, this.svc_kei_ucwk_no[0]);` // サービス契約内訳番号 [➔ SVC_KEI_UCWK_NO="svc_kei_ucwk_no"] \| |
| 8 | 📋 SET | `inHashUcwkTel.put(JKKHakkoSODConstCC.GENE_ADD_DTM, this.svc_kei_ucwk_gadtm[0]);` // 変更後サービス契約内訳世代登録年月日時分秒 [➔ GENE_ADD_DTM="gene_add_dtm"] \| |

##### Block 3 — 🔀 IF `(0 != statusCode)` (L33297)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 💥 THROW | `throw new CCException("", new SCCallException("", String.valueOf(statusCode), statusCode));` |

##### Block 4 — 🔀 IF `(eKK0191A010Hash != null)` [KK0191A010H="KK0191A010H"] (L33304)

> 📌 番ポ有無

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `bmpUm = (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.BMP_UM);` // 番ポ有無 [➔ BMP_UM="bmp_um"] \| |

##### Block 5 — 🔀 IF `(!updFlg)` (L33314)

> 📌 判定のみを行う場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 🔙 RETURN | `return param;` |

##### Block 6 — 🔀 IF `(!JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_NON.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_NON="0"] (L33327)

> 📌 トーキの開始／終了がある場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `this.svc_kei_ucwk_gadtm[0] = (String)judgeRslt.get(JKKItntokiStaEndConstCC.SVC_KEI_UCWK_GENE_ADD_DTM);` [➔ SVC_KEI_UCWK_GENE_ADD_DTM="svc_kei_ucwk_gene_add_dtm"] \| |

##### Block 7 — 🔀 IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_STA.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_STA="1"] (L33335)

> 📌 移転先登録によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📦 VAR | `String dslTokiJssiChuCd = (String)judgeRslt.get(JKKItntokiStaEndConstCC.DSL_TOKI_JSSI_CHU_CD);` [➔ DSL_TOKI_JSSI_CHU_CD="dsl_toki_jssi_chu_cd"] \| |

###### · Block 7.1 — 🔀 IF `(JKKItntokiStaEndConstCC.DSL_TOKI_JSSI_CHU_CD_JSSI.equals(dslTokiJssiChuCd))` [DSL_TOKI_JSSI_CHU_CD_JSSI="1"] (L33340)

> 📌 移転元解約によるトーキが実施中の場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_221);` [➔ ODR_NAIYO_CD_221="221"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_222);` [➔ ODR_NAIYO_CD_222="222"] \| |

###### ·· Block 7.1.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33360)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

###### · Block 7.2 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33385)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_265);` [➔ ODR_NAIYO_CD_265="265"] \| |

##### Block 8 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_END.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_END="2"] (L33394)

> 📌 移転先登録によるトーキを終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_260);` [➔ ODR_NAIYO_CD_260="260"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_261);` [➔ ODR_NAIYO_CD_261="261"] \| |

###### · Block 8.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33413)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

##### Block 9 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_DSL_STA.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_DSL_STA="3"] (L33422)

> 📌 移転元解約によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_220);` [➔ ODR_NAIYO_CD_220="220"] \| |

###### · Block 9.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33439)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_265);` [➔ ODR_NAIYO_CD_265="265"] \| |

##### Block 10 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_DSL_END.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_DSL_END="4"] (L33448)

> 📌 移転元解約によるトーキを終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_221);` [➔ ODR_NAIYO_CD_221="221"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_222);` [➔ ODR_NAIYO_CD_222="222"] \| |

###### · Block 10.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33467)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

##### Block 11 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_PAUSE_STA.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_PAUSE_STA="5"] (L33476)

> 📌 休止によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_262);` [➔ ODR_NAIYO_CD_262="262"] \| |

##### Block 12 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_PAUSE_END.equals(itntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_PAUSE_END="6"] (L33482)

> 📌 休止によるトーキの終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_263);` [➔ ODR_NAIYO_CD_263="263"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_264);` [➔ ODR_NAIYO_CD_264="264"] \| |

###### · Block 12.1 — 🔀 IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_STA.equals(itnmItntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_STA="1"] (L33510)

> 📌 移転先登録によるトーキを開始する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_259);` [➔ ODR_NAIYO_CD_259="259"] \| |

###### ·· Block 12.1.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33528)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_265);` [➔ ODR_NAIYO_CD_265="265"] \| |

###### · Block 12.2 — 🔀 ELSE-IF `(JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_ITNS_END.equals(itnmItntokiStaEndJudgeCd))` [ITNTOKI_STA_END_JUDGE_CD_ITNS_END="2"] (L33537)

> 📌 移転先登録によるトーキを終了する場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_260);` [➔ ODR_NAIYO_CD_260="260"] \| |
| 2 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_261);` [➔ ODR_NAIYO_CD_261="261"] \| |

###### ·· Block 12.2.1 — 🔀 IF `(!isTajgsTelNo(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)) && isMonaiBmp(handle, param, (String)eKK0191A010Hash.get(EKK0191A010CBSMsg1List.TELNO)))` [KK0191A010H="KK0191A010H", TELNO="telno"] (L33556)

> 📌 電話番号取得事業者が自社　かつ　網内番ポの場合

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_266);` [➔ ODR_NAIYO_CD_266="266"] \| |

> **合計**: 22 blocks (3 depth levels)

### chgOpsvKeiJdg(String chbfOpSvcKeiNo, String chbfOpSvcKeiGeneAddDtm, String chafOpSvcKeiNo, String chafOpSvcKeiGeneAddDtm)

---

#### 1. 役割

オプションサービス契約情報の「変更前」と「変更後」の契約番号・世代登録日時が全て一致するか判定するメソッドです。  
具体的には、変更前後の各値が全て一致していれば`false`（=前回と同一）、1つでも異なれば`true`（=変更があった）を返すシンプルな判定ロジックです。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["chgOpsvKeiJdg（chbfOpSvcKeiNo, chbfOpSvcKeiGeneAddDtm, chafOpSvcKeiNo, chafOpSvcKeiGeneAddDtm）"]
    --> IF1{"全ての値が前回値と一致するか？"}
  IF1 -->|"Yes: 完全一致"| S1["Step1: return false"]
  IF1 -->|"No: 1つでも不一致"| S2["Step2: return true"]
  style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. 引数（変更前後の契約番号・世代日時）がすべて`this.mae_recode_...`フィールド値と一致するか判定。
2. すべて一致する場合は`false`（変更なし）を返却。
3. いずれかが異なる場合は`true`（変更あり）を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名              | 型      | 業務説明                                         |
| --- | ------------------------- | ------- | ------------------------------------------------ |
| 1   | chbfOpSvcKeiNo            | String  | 変更前オプションサービス契約番号                 |
| 2   | chbfOpSvcKeiGeneAddDtm    | String  | 変更前オプションサービス契約世代登録日時         |
| 3   | chafOpSvcKeiNo            | String  | 変更後オプションサービス契約番号                 |
| 4   | chafOpSvcKeiGeneAddDtm    | 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 → chgOpsvKeiJdg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → chgOpsvKeiJdg` | - |

---

#### 📋 Per-Branch 詳細ブロック — `chgOpsvKeiJdg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(this.mae_recode_chbf_op_svc_kei_no.equals(chbfOpSvcKeiNo) && this.mae_recode_chbf_op_svc_kei_gene_add_dtm.equals(chbfOpSvcKeiGeneAddDtm) && this.mae_recode_chaf_op_svc_kei_no.equals(chafOpSvcKeiNo) && this.mae_recode_chaf_op_svc_kei_gene_add_dtm.equals(chafOpSvcKeiGeneAddDtm))` (L31573)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 🔙 RETURN | `return false;` |

> **合計**: 1 blocks (1 depth levels)

### sameTrnJdg(IRequestParameterReadOnly param, String fixedText, String svcKeiNo, String opSvcKeiNo, String opSvcGeneAddDtm)

---

#### 1. 役割

指定したサービス契約番号・オプションサービス契約番号・世代登録日時に一致するデータが、ユーザデータ配下のリストにいくつ存在するかカウントするロジックです。  
具体的には、ユーザデータ（`param.getData(fixedText)`）から対象データリスト（`TRGT_DATA_LIST`）を取得し、  
- サービス契約情報（`SVC_KEI_INFO`）、オプションサービス契約情報（`OPSVKEI_INFO`）の各項目値が全て一致し、かつサブオプション契約番号が空でない場合にカウントアップします。  
- 最終的に該当件数（retCount）を返却します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["sameTrnJdg（param, fixedText, svcKeiNo, opSvcKeiNo, opSvcGeneAddDtm）"]
    --> S1["Step1: param.getData（fixedText）からinMapを取得"]
    S1 --> S2["Step2: inMap.get（'TRGT_DATA_LIST'）でdataList取得"]
    S2 --> FOR1["for dataList内の各sodMap"]
    FOR1 --> IF1{"SVC_KEI_INFO/OPSVKEI_INFOがnull?"}
    IF1 -->|"Yes: null"| CONT1["continue"]
    IF1 -->|"No: 値あり"| IF2{"svcKeiNo/契約番号、opSvcKeiNo/契約番号、opSvcGeneAddDtm/世代登録日時、サブオプション契約番号≠空 すべて一致？"}
    IF2 -->|"Yes: 全一致"| S3["retCount++"]
    IF2 -->|"No: 不一致"| CONT2["continue"]
    S3 --> NEXT["次要素へ"]
    CONT2 --> NEXT
    CONT1 --> NEXT
    NEXT --> END["return retCount"]
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. `param.getData(fixedText)`でユーザデータマップ`inMap`を取得。
2. `inMap`から`TRGT_DATA_LIST`（定数）でデータリスト取得。
3. 各`dataList`要素（sodMap）についてループ。
4. サービス契約情報（SVC_KEI_INFO = "svc_kei_info"）、オプションサービス契約情報（OPSVKEI_INFO = "opsvkei_info"）がnullならスキップ。
5. `svcKeiNo`・`opSvcKeiNo`・`opSvcGeneAddDtm`が一致し、かつサブオプション契約番号が空でなければ`retCount`をインクリメント。
6. 最後に`retCount`を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名     | 型                         | 業務説明                                       |
| --- | ---------------- | -------------------------- | ---------------------------------------------- |
| 1   | param            | IRequestParameterReadOnly  | ユーザデータ情報参照用パラメータ               |
| 2   | fixedText        | String                     | データ取得用の固定テキストキー                 |
| 3   | svcKeiNo         | String                     | サービス契約番号                               |
| 4   | opSvcKeiNo       | String                     | オプションサービス契約番号                     |
| 5   | opSvcGeneAddDtm  | 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 → sameTrnJdg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → sameTrnJdg` | - |

---

#### 📋 Per-Branch 詳細ブロック — `sameTrnJdg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔁 FOR `(for)` (L31536)

> 📌 対象データリスト取得

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 1.1 — 🔀 IF `(sodMap != null)` (L31539)

> 📌 パラメータ取得

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📥 GET | `svc_kei_info_Map = (HashMap<String, Object>)sodMap.get(JKKHakkoSODConstCC.SVC_KEI_INFO);` // サービス契約情報 [➔ SVC_KEI_INFO="svc_kei_info"] \| |
| 2 | 📥 GET | `opsvkei_info_Map = (HashMap<String, Object>)sodMap.get(JKKHakkoSODConstCC.OPSVKEI_INFO);` // オプションサービス契約情報 [➔ OPSVKEI_INFO="opsvkei_info"] \| |

###### ·· Block 1.1.1 — 🔀 IF `(svc_kei_info_Map == null || opsvkei_info_Map == null)` (L31545)

> 📌 取得値チェック

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `continue;` |

###### · Block 1.2 — 🔀 IF `(svcKeiNo.equals(svc_kei_info_Map.get(JKKHakkoSODConstCC.INFO_SVC_KEI_NO)) && opSvcKeiNo.equals(opsvkei_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_NO)) && opSvcGeneAddDtm.equals(opsvkei_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM)) && !isBlank((String)opsvkei_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_SBOPSVKEI_NO)))` [INFO_SVC_KEI_NO="svc_kei_no", INFO_CHAF_OPSVKEI_NO="chaf_opsvkei_no", INFO_CHAF_OPSVKEI_GENE_ADD_DTM="chaf_opsvkei_gene_add_dtm", INFO_CHAF_SBOPSVKEI_NO="chaf_sbopsvkei_no"] (L31551)

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 4 blocks (3 depth levels)

### judgeTokiSOD(SessionHandle handle, IRequestParameterReadWrite param, String idoDiv, String idoDtlCd)

---

#### 1. 役割

本メソッドは、トーキ開始終了判定のみを行う共通処理であり、  
`addTokiSOD(handle, param, idoDiv, idoDtlCd, false)`（`updFlg = false`）を呼び出します。  
判定のみ（SOD登録なし）で利用される用途です。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["judgeTokiSOD（handle, param, idoDiv, idoDtlCd）"]
    --> S1["Step1: addTokiSOD（handle, param, idoDiv, idoDtlCd, false）呼出"]
    S1 --> RET["return param"]
```

**処理ステップ詳細:**

1. 内部実装`addTokiSOD(handle, param, idoDiv, idoDtlCd, false)`を呼び出す（判定のみ、SOD登録なし）。
2. 結果の`param`をそのまま返却。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型                         | 業務説明                                              |
| --- | ------------ | -------------------------- | ----------------------------------------------------- |
| 1   | handle       | SessionHandle              | セッション管理ハンドル                                |
| 2   | param        | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3   | idoDiv       | String                     | 異動区分                                              |
| 4   | idoDtlCd     | 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 → judgeTokiSOD` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → judgeTokiSOD` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `pauseUkOdrCtrl` | private | 休止受付オーダ制御処理<br> |
### chgSvcKeiJdg(String chSvcKeiNo)

---

#### 1. 役割

サービス契約番号が前回処理時と同じかどうかを判定するメソッドです。  
具体的には、直前の記録値`this.mae_recode_ch_svc_kei_no`と引数`chSvcKeiNo`が一致すれば`false`（変更なし）、  
異なれば`true`（変更あり）を返却します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["chgSvcKeiJdg（chSvcKeiNo）"]
    --> IF1{"this.mae_recode_ch_svc_kei_no.equals（chSvcKeiNo）"}
  IF1 -->|"Yes: 一致"| S1["Step1: return false"]
  IF1 -->|"No: 不一致"| S2["Step2: return true"]
  style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. フィールド`this.mae_recode_ch_svc_kei_no`と引数`chSvcKeiNo`が等しいか判定。
2. 等しい場合は`false`（変更なし）を返却。
3. 異なる場合は`true`（変更あり）を返却。

---

#### 3. パラメータ分析

| No  | パラメータ名   | 型      | 業務説明                     |
| --- | ------------- | ------- | ---------------------------- |
| 1   | chSvcKeiNo    | 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 → chgSvcKeiJdg` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → chgSvcKeiJdg` | - |

---

#### 📋 Per-Branch 詳細ブロック — `chgSvcKeiJdg()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(this.mae_recode_ch_svc_kei_no.equals(chSvcKeiNo))` (L31592)

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 🔙 RETURN | `return false;` |

> **合計**: 1 blocks (1 depth levels)

### fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)

---

#### 1. 役割

CAANMsgオブジェクトの全フィールドに対して、指定項目リスト（`contents`）をループし、  
各項目を`null`でマッピング（セット）する初期化ユーティリティです。  
具体的には、SCリクエストやレスポンステンプレートのフィールド初期化時に利用されます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["fillCAANMSGNullMapping（msg, contents）"]
    --> FOR1["for contents配列の各要素element"]
    FOR1 --> S1["Step1: msg.setNull（（String）element） で各フィールドをnullで初期化"]
    S1 --> END["完了"]
```

**処理ステップ詳細:**

1. `contents`の各要素（項目名）についてループ。
2. 各項目を`msg.setNull()`でnullに設定。
3. すべての項目に対して初期化を行い、完了。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型           | 業務説明                                  |
| --- | ------------ | ------------ | ----------------------------------------- |
| 1   | msg          | CAANMsg      | SCリクエスト/レスポンス用メッセージオブジェクト |
| 2   | contents     | Object[][]   | 初期化対象の項目名リスト                  |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → fillCAANMSGNullMapping` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callEKK0091A010_SC` | private | サービス契約一意照会SIFを呼び出し |
| 2 | `callEKK0191B001_2SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 3 | `callEKK0191B001SC` | private | サービス契約内訳<eo光電話>一覧照会（サービス契約番号）SIFを呼び出し |
| 4 | `callEKK0881A010_SC` | private | 回線使用契約一意照会SIFを呼び出し |
| 5 | `callEKK2091A010SC` | private | 住所変更一意照会を呼び出す |
| 6 | `callEKK2101B001SC` | private | 住所変更明細一覧照会 |
| 7 | `callEKK2101B002SC` | private | 住所変更明細一覧照会（変更前識別番号）の取得 |
| 8 | `callEKU0011A010SC` | private | 工事案件一意照会 |
| 9 | `callEKU0081B010SC` | private | サービス契約＿工事案件一覧照会 |
| 10 | `editInMsgEDK0301B060` | private | EDK0301B060_返品機器取消一覧照会処理 サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 11 | `editInMsgEKK0341B001` | private | EKK0341B001_機器提供サービス契約一覧照会（機器製造番号） サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 12 | `editInMsgEKK0341B008` | private | EKK0341B008_機器提供サービス契約一覧照会 サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 13 | `editInMsgEKK0341B021` | private | EKK0341B021_機器提供サービス契約一覧照会（予約） サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 14 | `editInMsgEKK0341B029` | private | EKK0341B029_機器提供サービス契約一覧照会（機器変更番号） サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする |
| 15 | `mappingEKK0081A010SCInMsg` | private | templateに対してEKK0081A010の条件に関する部分を設定する |
| 16 | `mappingEKK0161A010SCInMsg` | private | templateに対してEKK0161A010の条件に関する部分を設定する |
| 17 | `mappingEKK0161B003SCInMsg` | private | templateに対してEKK0161B003の条件に関する部分を設定する |
| 18 | `mappingEKK0161B004SCInMsg` | private | templateに対してEKK0161B004の条件に関する部分を設定する |
| 19 | `mappingEKK0161B008SCInMsg` | private | templateに対してEKK0161B008の条件に関する部分を設定する |
| 20 | `mappingEKK0161B011SCInMsg` | private | templateに対してEKK0161B011の条件に関する部分を設定する |
| 21 | `mappingEKK0191A010SCInMsg` | private | templateに対してEKK0191A010の条件に関する部分を設定する |
| 22 | `mappingEKK0251B001SCInMsg` | private | templateに対してEKK0251B001の条件に関する部分を設定する |
| 23 | `mappingEKK0251B003SCInMsg` | private | templateに対してEKK0251B003の条件に関する部分を設定する |
| 24 | `mappingEKK0341A010SCInMsg` | private | templateに対してEKK0341A010の条件に関する部分を設定する |
| 25 | `mappingEKK0341B002SCInMsg` | private | templateに対してEKK0341B002の条件に関する部分を設定する |
| 26 | `mappingEKK0341B022_02SCInMsg` | private | templateに対してEKK0341B008の条件に関する部分を設定する |
| 27 | `mappingEKK0341B022SCInMsg` | private | templateに対してEKK0341B008の条件に関する部分を設定する |
| 28 | `mappingEKK0341B504SCInMsg` | private | templateに対してEKK0341B504の条件に関する部分を設定する |
| 29 | `mappingEKK0351A010SCInMsg` | private | templateに対してEKK0351A010の条件に関する部分を設定する |
| 30 | `mappingEKK0351B002SCInMsg` | private | templateに対してEKK0351B002の条件に関する部分を設定する |
| 31 | `mappingEKK0401A010SCInMsg` | private | templateに対してEKK0401A010の条件に関する部分を設定する |
| 32 | `mappingEKK0411A010SCInMsg` | private | templateに対してEKK0411A010の条件に関する部分を設定する |
| 33 | `mappingEKK0791A010SCInMsg` | private | EKK0791A010 オーダ設定一覧照会S-IF　入力マッピング<br> <br> |
| 34 | `mappingEKK1041A010SCInMsg` | private | templateに対してEKK1041A010の条件に関する部分を設定する |
| 35 | `mappingEKK1081C011SCInMsg` | private | templateに対してEKK1081C011の条件に関する部分を設定する |
| 36 | `mappingEKK1681B001SCInMsg` | private | templateに対してEKK1681B001の条件に関する部分を設定する |
| 37 | `mappingEKK2811A010SCInMsg` | private | templateに対してEKK2811A010の条件に関する部分を設定する |
| 38 | `mappingEKK2811B010SCInMsg` | private | templateに対してEKK2811B010の条件に関する部分を設定する |
| 39 | `mappingETU0011B010SCInMsg` | private | templateに対してETU0011B010の条件に関する部分を設定する |
| 40 | `mappingEZM0121A010SCInMsg` | private | templateに対してEZM0121A010の条件に関する部分を設定する |
| 41 | `mappingEZM0411A010SCInMsg` | private | templateに対してEZM0411A010の条件に関する部分を設定する |

---

#### 📋 Per-Branch 詳細ブロック — `fillCAANMSGNullMapping()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔁 FOR `(for)` (L31116)

> 📌 要素ごとのループ

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `Object element = null;` |
| 2 | ⚡ EXEC | `element = contents[i][0];` |
| 3 | ⚡ EXEC | `msg.setNull((String)element);` |

> **合計**: 1 blocks (1 depth levels)

### errChk(Map<?, ?> msgList)

---

#### 1. 役割

サービスIF等の呼出結果に対して、リターンコードまたはテンプレートステータスが正常終了（0）以外の場合に、  
`SCCallException`をthrowするエラーハンドリング処理です。  
具体的には、CAANMsg配列とリターンコード、テンプレートステータスを取得し、エラー時は例外を発生させます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["errChk（msgList）"]
    --> S1["Step1: msgListからCAANMsg[] templates, templateを取得"]
    S1 --> S2["Step2: リターンコード（returnCode）、テンプレートステータス（templateStatus）取得"]
    S2 --> IF1{"（returnCode != 0） || （templateStatus != 0）"}
    IF1 -->|"Yes: エラー発生"| S3["Step3: SCCallExceptionをthrow"]
    IF1 -->|"No: 正常終了"| END["正常終了（何もしない）"]
    style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. `msgList`からCAANMsg配列（`templates`）、先頭テンプレート（`template`）を取得。
2. `msgList`から`returnCode`、`template`から`templateStatus`を取得。
3. いずれかが0以外の場合は`SCCallException`をthrow。
4. 正常時は何もせず抜ける。

---

#### 3. パラメータ分析

| No  | パラメータ名 | 型      | 業務説明                                   |
| --- | ------------ | ------- | ------------------------------------------ |
| 1   | msgList      | Map<?, ?> | サービスIF呼出結果マップ（リターンコード・テンプレート含む） |

---

#### 4. CRUD操作 / 呼出サービス

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

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → errChk` | - |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `callSvcInter` | private | サービスインターフェース呼び出し処理です。 <br> |

---

#### 📋 Per-Branch 詳細ブロック — `errChk()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `((0 != returnCode.intValue()) || (0 != templateStatus))` (L31247)

> 📌 ← `templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY)`

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 1 blocks (1 depth levels)

### hakkouIpv6(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> eKK0361A010Info)

---

#### 1. 役割

IPV6 SOD発行に関する内部処理を行うメソッドです。  
Javadoc:  
> IPV6 SOD発行内部処理

具体的には、  
- `sod_pattern_ipv6` の値（1: 登録、2: 変更、3: 解約）に応じて、  
  - 登録: `ODR_NAIYO_CD_155`  
  - 変更: `ODR_NAIYO_CD_156`  
  - 解約: `ODR_NAIYO_CD_158`  
 いずれかのSOD（サービスオーダ）を追加登録します。  
- 多機能ルーター（BBR/MRT）の場合などは、`bbr_mrt_skbt_flg`の値に応じて、  
  - 追加オーダ（`ODR_NAIYO_CD_404_IPv6`）、または`ODR_NAIYO_CD_163`も追加します。  
- 条件により、`tsuikabunAddSOD`や`addTakinoSOD`を呼びます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
---
config:
  securityLevel: loose
  flowchart:
    useMaxWidth: false
    htmlLabels: true
    curve: basis
---
flowchart TD
  START["hakkouIpv6（handle, param, eKK0361A010Info）"]
    --> IF1{"sod_pattern_ipv6 の値"}
    IF1 -->|"1: 登録"| S1["Step1: yokyu_sbt = YOKYU_SBT_CD_NEW = '02' （新規） / tsuikabunAddSOD（..., ODR_NAIYO_CD_155 = '155'）"]
    S1 --> IF_BBR1{"bbr_mrt_skbt_flg == 2 or 1"}
    IF_BBR1 -->|"2"| S2["addTakinoSOD（..., ODR_NAIYO_CD_404_IPv6 = '404_IPv6'）"]
    IF_BBR1 -->|"1"| S3["yokyu_sbt = YOKYU_SBT_CD_CHG = '04' （変更） / tsuikabunAddSOD（..., ODR_NAIYO_CD_163 = '163'）"]
    IF1 -->|"2: 変更"| S4["Step2: yokyu_sbt = YOKYU_SBT_CD_CHG = '04' （変更） / tsuikabunAddSOD（..., ODR_NAIYO_CD_156 = '156'）"]
    S4 --> IF_BBR2{"bbr_mrt_skbt_flg == 2 or 1"}
    IF_BBR2 -->|"2"| S5["addTakinoSOD（..., ODR_NAIYO_CD_404_IPv6 = '404_IPv6'）"]
    IF_BBR2 -->|"1"| S6["yokyu_sbt = YOKYU_SBT_CD_CHG = '04' （変更） / tsuikabunAddSOD（..., ODR_NAIYO_CD_163 = '163'）"]
    IF1 -->|"3: 解約"| S7["Step3: tsuikabunAddSOD（..., ODR_NAIYO_CD_158 = '158'）"]
    S7 --> IF_BBR3{"bbr_mrt_skbt_flg == 2 or 1"}
    IF_BBR3 -->|"2"| S8["addTakinoSOD（..., ODR_NAIYO_CD_404_IPv6 = '404_IPv6'）"]
    IF_BBR3 -->|"1"| S9["（何もしない）"]
    style IF1 fill:#ffcc00
    style IF_BBR1 fill:#ffcc00
    style IF_BBR2 fill:#ffcc00
    style IF_BBR3 fill:#ffcc00
```

**処理ステップ詳細:**

1. `sod_pattern_ipv6`の値で分岐。
   - 1（登録）:  
     - `yokyu_sbt`を新規（`YOKYU_SBT_CD_NEW = "02"`）に設定。
     - `tsuikabunAddSOD(..., ODR_NAIYO_CD_155 = "155")`でIPV6登録SOD追加。
     - `bbr_mrt_skbt_flg == 2`の場合は`addTakinoSOD(..., ODR_NAIYO_CD_404_IPv6)`も追加。
     - `bbr_mrt_skbt_flg == 1`の場合は`yokyu_sbt`を変更（`YOKYU_SBT_CD_CHG = "04"`）にして`tsuikabunAddSOD(..., ODR_NAIYO_CD_163 = "163")`で追加。
   - 2（変更）:  
     - `yokyu_sbt`を変更（`YOKYU_SBT_CD_CHG = "04"`）に設定。
     - `tsuikabunAddSOD(..., ODR_NAIYO_CD_156 = "156")`でIPV6変更SOD追加。
     - `bbr_mrt_skbt_flg == 2`の場合は`addTakinoSOD(..., ODR_NAIYO_CD_404_IPv6)`も追加。
     - `bbr_mrt_skbt_flg == 1`の場合は`yokyu_sbt`を変更（`YOKYU_SBT_CD_CHG = "04"`）にして`tsuikabunAddSOD(..., ODR_NAIYO_CD_163 = "163")`で追加。
   - 3（解約）:  
     - 解約オーダ（`ODR_NAIYO_CD_157 = "157"`）は発行せず、消去オーダ（`ODR_NAIYO_CD_158 = "158"`）のみ追加。
     - `bbr_mrt_skbt_flg == 2`の場合は`addTakinoSOD(..., ODR_NAIYO_CD_404_IPv6)`も追加。
     - `bbr_mrt_skbt_flg == 1`の場合は特別な処理なし。

---

#### 3. パラメータ分析

| No  | パラメータ名      | 型                         | 業務説明                                                   |
| --- | ----------------- | -------------------------- | ---------------------------------------------------------- |
| 1   | handle            | SessionHandle              | セッション管理ハンドル                                     |
| 2   | param             | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ）      |
| 3   | eKK0361A010Info   | HashMap<String, Object>    | オプションサービス契約<ISP>一意照会結果情報（IPV6情報含む）|

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC / CBS | SCコード | エンティティ / DB | 操作説明 |
| ---- | -------- | -------- | ----------------- | -------- |
| C | `executeOdrInfoSakseiWkAdd` | - | - | (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録) |
| C | `executeOdrHakkoJokenAdd` | EKK1081D010CBS | KK_T_ODR_INF_SKSI_WK, KK_T_ODR_HAKKO_JOKEN | (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録) |
#### 5. 依存トレース (Dependency Trace)

| # | 呼出元 (Screen/Batch) | 呼出チェーン (Full Path → 本メソッド) | 終端 (SC → CRUD → エンティティ) |
|---|---|---|---|
| 1 | `Screen:KKSV0004` | `KKSV0004OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 2 | `Screen:KKSV0008` | `KKSV0008OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 3 | `Screen:KKSV0009` | `KKSV0009OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 4 | `Screen:KKSV0031` | `KKSV0031OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 5 | `Screen:KKSV0073` | `KKSV0073OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 6 | `Screen:KKSV0136` | `KKSV0136OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 7 | `Screen:KKSV0162` | `KKSV0162OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 8 | `Screen:KKSV0428` | `KKSV0428OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 9 | `Screen:KKSV0429` | `KKSV0429OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |
| 10 | `Screen:KKSV0430` | `KKSV0430OPBPCheck.invokeCheck → getInvokeCBS → hakkouIpv6` | `executeOdrInfoSakseiWkAdd [C] - (オーダ情報作成ワーク登録実行処理    オーダ情報作成ワーク登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ情報作成ワーク登録)`<br>`executeOdrHakkoJokenAdd [C] EKK1081D010CBS [KK_T_ODR_INF_SKSI_WK/KK_T_ODR_HAKKO_JOKEN] (オーダ発行条件登録実行処理    オーダ発行条件登録サービスIFを実行します。    【使用するサービスIF】  ・オーダ発行条件登録)` |

##### 5.1 内部呼出元 (Internal Callers)

> 同クラス内で本メソッドを呼び出す内部メソッドの一覧です。

| # | 呼出元メソッド (Internal Caller) | 可視性 | 説明 (Javadoc抜粋) |
|---|---|---|---|
| 1 | `jdgIpv6` | private | IPV6判定処理<br> |
---
---

#### 📋 Per-Branch 詳細ブロック — `hakkouIpv6()`

> 各分岐を制御フロー構造に従い、ブロック単位で表示します（depth に応じたネスト）。

##### Block 1 — 🔀 IF `(1 == this.sod_pattern_ipv6)` (L30434)

> 📌 2012-02-29 追加したprivateメソッド

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `this.yokyu_sbt = JKKHakkoSODConstCC.YOKYU_SBT_CD_NEW;` [➔ YOKYU_SBT_CD_NEW="02"] \| |
| 2 | 📞 CALL | `param = tsuikabunAddSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_155);` [➔ ODR_NAIYO_CD_155="155"] \| |

###### · Block 1.1 — 🔀 IF `( bbr_mrt_skbt_flg == 2 )` (L30441)

> 📌 ▼▼▼ 2013/11/22 2014年2月案件 多機能ルーター（機器追加）

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `addTakinoSOD()` |

###### · Block 1.2 — 🔀 ELSE-IF `( bbr_mrt_skbt_flg == 1 )` (L30444)

> 📌 ルーター向け接続情報・変更

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `this.yokyu_sbt = JKKHakkoSODConstCC.YOKYU_SBT_CD_CHG;` // OLSは変更で。 [➔ YOKYU_SBT_CD_CHG="04"] \| |
| 2 | 📞 CALL | `param = tsuikabunAddSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_163);` [➔ ODR_NAIYO_CD_163="163"] \| |

##### Block 2 — 🔀 ELSE-IF `(2 == this.sod_pattern_ipv6)` (L30452)

> 📌 ▲▲▲ 2013/11/22 2014年2月案件 多機能ルーター（機器追加）

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `this.yokyu_sbt = JKKHakkoSODConstCC.YOKYU_SBT_CD_CHG;` [➔ YOKYU_SBT_CD_CHG="04"] \| |
| 2 | 📞 CALL | `param = tsuikabunAddSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_156);` [➔ ODR_NAIYO_CD_156="156"] \| |

###### · Block 2.1 — 🔀 IF `( bbr_mrt_skbt_flg == 2 )` (L30459)

> 📌 ▼▼▼ 2013/11/22 2014年2月案件 多機能ルーター（機器追加）

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 2.2 — 🔀 ELSE-IF `( bbr_mrt_skbt_flg == 1 )` (L30462)

> 📌 ルーター向け接続情報・変更

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | ⚡ EXEC | `this.yokyu_sbt = JKKHakkoSODConstCC.YOKYU_SBT_CD_CHG;` // OLSは変更で。 [➔ YOKYU_SBT_CD_CHG="04"] \| |
| 2 | 📞 CALL | `param = tsuikabunAddSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_163);` [➔ ODR_NAIYO_CD_163="163"] \| |

##### Block 3 — 🔀 ELSE-IF `(3 == this.sod_pattern_ipv6)` (L30470)

> 📌 ▲▲▲ 2013/11/22 2014年2月案件 多機能ルーター（機器追加）

| # | 種別 | 処理内容 |
|---|---|---|
| 1 | 📞 CALL | `param = tsuikabunAddSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_158);` [➔ ODR_NAIYO_CD_158="158"] \| |

###### · Block 3.1 — 🔀 IF `( bbr_mrt_skbt_flg == 2 )` (L30480)

> 📌 ▼▼▼ 2013/11/22 2014年2月案件 多機能ルーター（機器追加）

> （直接の処理内容なし — ネストされた子ブロックを参照）

###### · Block 3.2 — 🔀 ELSE-IF `( bbr_mrt_skbt_flg == 1 )` (L30483)

> 📌 // ルーター向け接続情報・変更

> （直接の処理内容なし — ネストされた子ブロックを参照）

> **合計**: 9 blocks (2 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 条件ディスパッチ (Condition Dispatch Mapping)

### `addTokiSOD()` (L33258) — 10 branches

| # | 異動区分コード | 意味 (業務名称) | 対応メソッド | 行番号 |
|---|---|---|---|---|
| 1 | `0` | 移転トーキ開始終了判定コード : 移転元解約・休止によるトーキを開始／終了しない | - | L33327 |
| 2 | `1` | 移転トーキ開始終了判定コード : 移転先登録によるトーキの開始 | `addSOD()` | L33335 |
| 3 | `1` | 移転元解約トーキ実施中コード : 移転元解約によるトーキが実施中 | `addSOD()` | L33340 |
| 4 | `2` | 移転トーキ開始終了判定コード : 移転先登録によるトーキの終了 | `addSOD()` | L33394 |
| 5 | `3` | 移転トーキ開始終了判定コード : 移転元解約によるトーキの開始 | `addSOD()` | L33422 |
| 6 | `4` | 移転トーキ開始終了判定コード : 移転元解約によるトーキの終了 | `addSOD()` | L33448 |
| 7 | `5` | 移転トーキ開始終了判定コード : 休止によるトーキの開始 | `addSOD()` | L33476 |
| 8 | `6` | 移転トーキ開始終了判定コード : 休止によるトーキの終了 | `addSOD()` | L33482 |
| 9 | `1` | 移転トーキ開始終了判定コード : 移転先登録によるトーキの開始 | `addSOD()` | L33510 |
| 10 | `2` | 移転トーキ開始終了判定コード : 移転先登録によるトーキの終了 | `addSOD()` | L33537 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart LR
  A["addTokiSOD()"] --> B{"itntokiStaEndJudgeCd?"}
  subgraph SG0["_other_系"]
    direction TB
  end

  subgraph SG1["addSOD系"]
    direction TB
  end

  B -->|"0: （処理なし）"| SG0
  B -->|"1〜6: addSOD()"| SG1
```

> **合計**: 1 dispatchers, 10 branches

## ③.6 制御フロー分岐 (Control Flow Branching)

### `chgOpsvKeiJdg()` (L31571) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (this.mae_recode_chbf_op_svc_kei_no.equals(chbfOpSvcKeiNo) && this.mae_recode_chbf_op_svc_kei_gene_add_dtm.equals(chbfOpSvcKeiGeneAddDtm) && this.mae_recode_chaf_op_svc_kei_no.equals(chafOpSvcKeiNo) && this.mae_recode_chaf_op_svc_kei_gene_add_dtm.equals(chafOpSvcKeiGeneAddDtm)) | - | - | - | L31573 |
| 2 | · ↩️ RETURN | D1 | false | - | - | - | L31578 |
| 3 | ↩️ RETURN | D0 | true | - | - | - | L31581 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["chgOpsvKeiJdg()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （this.mae_recode_chbf_op_svc_kei_no.equa…"]
    direction TB
    C0_0["RETURN: false"]
  end
  CF0 -->|"L31573"| SG0
  B1["RETURN: true"]
  CF0 -->|"L31581"| B1
```

### `chgSvcKeiJdg()` (L31590) — 3 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (this.mae_recode_ch_svc_kei_no.equals(chSvcKeiNo)) | - | - | - | L31592 |
| 2 | · ↩️ RETURN | D1 | false | - | - | - | L31594 |
| 3 | ↩️ RETURN | D0 | true | - | - | - | L31597 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["chgSvcKeiJdg()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （this.mae_recode_ch_svc_kei_no.equals（ch…"]
    direction TB
    C0_0["RETURN: false"]
  end
  CF0 -->|"L31592"| SG0
  B1["RETURN: true"]
  CF0 -->|"L31597"| B1
```

### `hakkouIpv6()` (L30428) — 10 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔀 IF | D0 | (1 == this.sod_pattern_ipv6) | IPV6・登録 | - | `addTakinoSOD()`, `tsuikabunAddSOD()` | L30434 |
| 2 | · 🔀 IF | D1 | ( bbr_mrt_skbt_flg == 2 ) | ルーター向け接続情報・変更 | - | `addTakinoSOD()` | L30441 |
| 3 | · 🔀 ELSE-IF | D1 | ( bbr_mrt_skbt_flg == 1 ) | ルーター向け接続情報・変更 | - | `tsuikabunAddSOD()` | L30444 |
| 4 | 🔀 ELSE-IF | D0 | (2 == this.sod_pattern_ipv6) | IPV6・変更 | - | - | L30452 |
| 5 | · 🔀 IF | D1 | ( bbr_mrt_skbt_flg == 2 ) | ルーター向け接続情報・変更 | - | - | L30459 |
| 6 | · 🔀 ELSE-IF | D1 | ( bbr_mrt_skbt_flg == 1 ) | ルーター向け接続情報・変更 | - | - | L30462 |
| 7 | 🔀 ELSE-IF | D0 | (3 == this.sod_pattern_ipv6) | ST2-2012-0001703 2012/09/21 DEL START | - | - | L30470 |
| 8 | · 🔀 IF | D1 | ( bbr_mrt_skbt_flg == 2 ) | // ルーター向け接続情報・変更 | - | - | L30480 |
| 9 | · 🔀 ELSE-IF | D1 | ( bbr_mrt_skbt_flg == 1 ) | // ルーター向け接続情報・変更 | - | - | L30483 |
| 10 | ↩️ RETURN | D0 | (return) | - | - | - | L30492 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["hakkouIpv6()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["IF: （1 == this.sod_pattern_ipv6）"]
    direction TB
    C0_0["IF: （ bbr_mrt_skbt_flg == 2 ）"]
    C0_1["ELSE-IF: （ bbr_mrt_skbt_flg == 1 ）"]
  end
  CF0 -->|"L30434"| SG0
  subgraph SG1["ELSE-IF: （2 == this.sod_pattern_ipv6）"]
    direction TB
    C1_0["IF: （ bbr_mrt_skbt_flg == 2 ）"]
    C1_1["ELSE-IF: （ bbr_mrt_skbt_flg == 1 ）"]
  end
  CF0 -->|"L30452"| SG1
  subgraph SG2["ELSE-IF: （3 == this.sod_pattern_ipv6）"]
    direction TB
    C2_0["IF: （ bbr_mrt_skbt_flg == 2 ）"]
    C2_1["ELSE-IF: （ bbr_mrt_skbt_flg == 1 ）"]
  end
  CF0 -->|"L30470"| SG2
  B3["RETURN: …"]
  CF0 -->|"L30492"| B3
```

### `sameTrnJdg()` (L31525) — 5 branches

| # | 種別 | 深度 | 条件 | 説明 | 定数値 | 呼出メソッド | 行番号 |
|---|---|---|---|---|---|---|---|
| 1 | 🔁 FOR | D0 | (for-loop) | 対象データリスト取得 | SVC_KEI_INFO=svc_kei_info, OPSVKEI_INFO=opsvkei_info, INFO_SVC_KEI_NO=svc_kei_no, INFO_CHAF_OPSVKEI_NO=chaf_opsvkei_no, INFO_CHAF_OPSVKEI_GENE_ADD_DTM=chaf_opsvkei_gene_add_dtm | - | L31536 |
| 2 | · 🔀 IF | D1 | (sodMap != null) | パラメータ取得 | SVC_KEI_INFO=svc_kei_info, OPSVKEI_INFO=opsvkei_info, INFO_SVC_KEI_NO=svc_kei_no, INFO_CHAF_OPSVKEI_NO=chaf_opsvkei_no, INFO_CHAF_OPSVKEI_GENE_ADD_DTM=chaf_opsvkei_gene_add_dtm | - | L31539 |
| 3 | ·· 🔀 IF | D2 | (svc_kei_info_Map == null ｜｜ opsvkei_info_Map == null) | 取得値チェック | INFO_SVC_KEI_NO=svc_kei_no, INFO_CHAF_OPSVKEI_NO=chaf_opsvkei_no, INFO_CHAF_OPSVKEI_GENE_ADD_DTM=chaf_opsvkei_gene_add_dtm, INFO_CHAF_SBOPSVKEI_NO=chaf_sbopsvkei_no | - | L31545 |
| 4 | · 🔀 IF | D1 | (svcKeiNo.equals(svc_kei_info_Map.get(JKKHakkoSODConstCC.INFO_SVC_KEI_NO)) && opSvcKeiNo.equals(opsvkei_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_NO)) && opSvcGeneAddDtm.equals(opsvkei_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM)) && !isBlank((String)opsvkei_info_Map.get(JKKHakkoSODConstCC.INFO_CHAF_SBOPSVKEI_NO))) | - | INFO_SVC_KEI_NO=svc_kei_no, INFO_CHAF_OPSVKEI_NO=chaf_opsvkei_no, INFO_CHAF_OPSVKEI_GENE_ADD_DTM=chaf_opsvkei_gene_add_dtm, INFO_CHAF_SBOPSVKEI_NO=chaf_sbopsvkei_no | - | L31551 |
| 5 | ↩️ RETURN | D0 | retCount | - | - | - | L31559 |

```mermaid
%%{init: {"securityLevel": "loose"}}%%
flowchart TD
  START["sameTrnJdg()"] --> CF0{"制御フロー分岐"}
  subgraph SG0["FOR: …"]
    direction TB
    C0_0["IF: （sodMap != null）"]
    C0_1["IF: （svcKeiNo.equals（svc_kei_info_Map.g…"]
  end
  CF0 -->|"L31536"| SG0
  B1["RETURN: retCount"]
  CF0 -->|"L31559"| B1
```

> **制御フロー合計**: 4 methods, 21 branches
