#  業務ロジック  Part 7/12

### getOpSvcKei4Eohtel()

#### 呼出元 (Reverse Call Tree) — 6 direct callers

```
getOpSvcKei4Eohtel() ← gọi bởi:
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── useStpOdrCtrl()    [trực tiếp]
├── htelNoDslOdrCtrl()
│   └── hakkoSOD()
└── stpUkOdrCtrl()
    ├── hakkoSOD()
    ├── bmpSwitchOdrCtrl()
    │   └── hakkoSOD()
    ├── kaihkOdrCtrl()
    │   └── hakkoSOD()
    └── useStpOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected ArrayList<HashMap<String, Object>> getOpSvcKei4Eohtel(IRequestParameterReadWrite param, SessionHandle handle, String svc_kei_ucwk_no, String op_svc_cd)`
> **戻り値:** `ArrayList<HashMap<String, Object>>`

---

#### 1. 役割

eo光電話用のオプションサービス契約情報を照会し、該当契約の詳細情報を返す。  
複数契約・世代対応・サービスコード判定を含む、詳細な業務照会ロジック。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getOpSvcKei4Eohtel(param, handle, svc_kei_ucwk_no, op_svc_cd)"]
    --> S1["Step1: inHashOpにサービス契約内訳番号/オプションサービスコードをセット"]
    --> IF1{"op_svc_cd != null"}
    IF1 -- "Yes/No" --> S2["Step2: callEKK0351B002SCでオプションサービス契約一覧照会"]
    S2 --> IF2{"statusCode != 0"}
    IF2 -- "Yes" --> S_ERR["CCException発生"]
    IF2 -- "No" --> FOR1["for msgList[i] in 結果"]
    FOR1 --> IF3{"オプションサービスコード一致判定（該当/標準）"}
    IF3 -- "Yes" --> S3["契約番号・世代登録日時分秒をinHashOp2にセット"]
    S3 --> S4["callEKK0351A010SCで一意照会"]
    S4 --> IF4{"statusCode != 0"}
    IF4 -- "Yes" --> S_ERR2["CCException発生"]
    IF4 -- "No" --> S5["retListに追加"]
    S5 --> RET["return retList"]
    S_ERR & S_ERR2 --> RET
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
    style IF3 fill:#ffcc00
    style IF4 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `op_svc_cd != null` | - | 対象コードありパス |
| 2 | `statusCode != 0 (EKK0351B002SC)` | - | CCException発生 |
| 3 | `((op_svc_cd != null && op_svc_cd.equals(tgtOpSvcCd)) || (op_svc_cd == null && ...))` | - | 一意照会パス |
| 4 | `statusCode != 0 (EKK0351A010SC)` | - | CCException発生 |
| 5 | return | - | 結果返却 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 2 | handle | SessionHandle | セッション管理ハンドル |
| 3 | svc_kei_ucwk_no | String | サービス契約内訳番号 |
| 4 | op_svc_cd | String | オプションサービスコード |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧 | 一覧照会 |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約 | 一意照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- htelNoDslOdrCtrl, hakkoSOD, stpUkOdrCtrl, kaihkOdrCtrl等からの呼出

**呼出パス:**

```
htelNoDslOdrCtrl → getOpSvcKei4Eohtel
hakkoSOD → getOpSvcKei4Eohtel
→ callEKK0351B002SC [READ:一覧照会]
→ callEKK0351A010SC [READ:一意照会]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| callEKK0351B002SC | R | オプションサービス契約一覧 |
| callEKK0351A010SC | R | オプションサービス契約 |

---

---

---

### getOpSvcKeiGaDtm()

#### 呼出元 (Reverse Call Tree) — 6 direct callers

```
getOpSvcKeiGaDtm() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── taiikiSeigenOdrCtrl()    [trực tiếp]
├── getOpSvcKeiList()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
│       ├── hakkoSOD()
│       └── adchgFixOdrCtrl()
│           └── hakkoSOD()
└── getOpSvcKeiNotDslList()
    ├── hakkoSOD()
    └── taiikiSeigenOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected String getOpSvcKeiGaDtm(SessionHandle handle, IRequestParameterReadWrite param, String op_svc_kei_no)`
> **戻り値:** `String`

---

#### 1. 役割

指定されたオプションサービス契約番号に紐づく世代登録年月日時分秒（gene_add_dtm）を取得する。  
業務上は、同契約番号のバージョン管理や更新判定に用いる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getOpSvcKeiGaDtm(handle, param, op_svc_kei_no)"] --> S1["iMap取得(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
  S1 --> S2["iMapに 'op_svc_kei_no' をセット"]
  S2 --> S3["iMapをparamに格納"]
  S3 --> S4["editInMsg_EKK0351A010CBS(param)で上りマッピング"]
  S4 --> S5["scCall.run(paramMap, handle)でSC呼出"]
  S5 --> S6["editResultRP_EKK0351A010CBS(result, param)で下りマッピング"]
  S6 --> S7["取得結果をdataMap.get('EKK0351A010CBSMsg1List')で取得"]
  S7 --> IF1{"dataMap != null"}
  IF1 -- "Yes" --> S8["dataList.get(0)→childMap.get('gene_add_dtm')"]
  IF1 -- "No" --> S9["opsvckei_gadtm=null"]
  S8 --> RET["gene_add_dtm返却"]
  S9 --> RET
  style IF1 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `dataMap != null` | - | 結果処理 |
| 2 | `dataList.size() > 0` | - | 結果処理 |
| 3 | `childMap != null` | - | gene_add_dtm取得 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データ |
| 3 | op_svc_kei_no | String | オプションサービス契約番号 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | EKK0351A010CBS | EKK0351 | オプションサービス契約 | 一意照会（世代登録日時取得） |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- getOpSvcKeiList → getOpSvcKeiGaDtm

**呼出パス:**
```
getOpSvcKeiList → getOpSvcKeiGaDtm → editInMsg_EKK0351A010CBS → scCall.run → editResultRP_EKK0351A010CBS
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| EKK0351A010CBS | R | オプションサービス契約 |

---

---

### getOpSvcKeiIsp()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
getOpSvcKeiIsp() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── newKeiOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getOpSvcKeiIsp(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

オプションサービス契約（ISP、Eメール、Myホームページ）に関する一意照会を行い、該当サービス契約情報（メールアドレス、URL等）を取得する。  
業務コンポーネントの中で、契約者のISP関連オプション状況を精査し、その後のオーダー制御判断や情報連携の判定材料として利用する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getOpSvcKeiIsp(handle, param)"] --> S1["JKKHakkoSODConstCC.HAKKOSODCCWORKMAP よりiMapを取得"]
  S1 --> IF1{"iMap != null"}
  IF1 -- "Yes" --> S2["iMap内のオプションサービス契約番号ごとにループ"]
  S2 --> S3["iMapに 'op_svc_kei_no' をセット"]
  S3 --> S4["editInMsg_EKK0361A010CBS(param) で上りマッピング"]
  S4 --> S5["scCall.run(paramMap, handle) でSC呼出"]
  S5 --> S6["editResultRP_EKK0361A010CBS(result, param) で下りマッピング"]
  S6 --> S7["取得結果からメールアドレス等を抽出"]
  S7 --> S8["メールアドレス存在時は op_svc_kei_no_ml_map に記録"]
  IF1 -- "No" --> S9["（何もしない）"]
  S8 --> IF2{"op_svc_kei_no_hp != null && op_svc_kei_no_hp != \"\""}
  IF2 -- "Yes" --> S10["iMapに 'op_svc_kei_no' をセット"]
  S10 --> S11["editInMsg_EKK0361A010CBS(param) で上りマッピング"]
  S11 --> S12["scCall.run(paramMap, handle) でSC呼出"]
  S12 --> S13["editResultRP_EKK0361A010CBS(result, param) で下りマッピング"]
  S13 --> S14["取得結果からURLドメイン・アカウントを抽出"]
  S14 --> IF3{"url_domain, url_account 共に値あり"}
  IF3 -- "Yes" --> S15["URL設定フラグTrue"]
  IF3 -- "No" --> S16["URL設定フラグFalse"]
  S15 --> RET["paramを返却"]
  S16 --> RET
  IF2 -- "No" --> RET
  S9 --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `iMap != null` | - | オプションサービス契約ごとにループ |
| 2 | `dataMap != null` | - | 結果処理 |
| 3 | `dataList.size() > 0` | - | 結果処理 |
| 4 | `childMap != null` | - | 結果処理 |
| 5 | `op_svc_kei_no_hp != null && !"".equals(op_svc_kei_no_hp)` | - | Myホームページ判定 |
| 6 | `iMap != null` | - | Myホームページ用処理継続 |
| 7 | `dataMap != null` | - | Myホームページ結果処理 |
| 8 | `dataList.size() > 0` | - | Myホームページ結果処理 |
| 9 | `childMap != null` | - | Myホームページ結果処理 |
|10 | `url_domain != null && !"".equals(url_domain) && url_account != null && !"".equals(url_account)` | - | URL設定フラグTrue |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト・レスポンスの業務データ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | EKK0361A010CBS | EKK0361 | オプションサービス契約 | ISP（Eメール/Myホームページ）情報照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- newKeiOdrCtrl → getOpSvcKeiIsp

**呼出パス:**
```
newKeiOdrCtrl → getOpSvcKeiIsp → editInMsg_EKK0361A010CBS → scCall.run → editResultRP_EKK0361A010CBS
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| EKK0361A010CBS | R | オプションサービス契約 |

---

---

### getOpSvcKeiList()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
getOpSvcKeiList() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── newKeiOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getOpSvcKeiList(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiUcwkNo)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

指定されたサービス契約内訳番号に紐づく全オプションサービス契約の一覧（解約済みも含む）を取得する。  
オプションサービスの現状判定や後続業務の引数となるMap作成に用いる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getOpSvcKeiList(handle, param, svcKeiUcwkNo)"]
    --> S1["editInMsg_EKK0351B002CBS(param, svcKeiUcwkNo)で上りマッピング"]
    --> S2["scCall.run(paramMap, handle)でSC呼出"]
    --> S3["editResultRP_EKK0351B002CBS(result, param)で下りマッピング"]
    --> S4["paramMap.clear() / result.clear()"]
    --> S5["editInMsg_EKK0351B003CBS(param)で上りマッピング"]
    --> S6["scCall.run(paramMap, handle)でSC呼出"]
    --> S7["editResultRP_EKK0351B003CBS(result, param)で下りマッピング"]
    --> S8["getShkIdoDiv(param)で異動区分取得"]
    --> S9["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)から一覧取得"]
    --> IF1{"dataMap != null"}
    IF1 -- "Yes" --> S10["データ件数分ループ"]
    S10 --> IF2{"childMap != null"}
    IF2 -- "Yes" --> S11["オプションサービスコードごとに判定"]
    S11 --> S12["op_svc_cd判定: EMAIL/HP/MLIST/DUP/MLTISE/FIXIPAD"]
    S12 --> S13["getOpSvcKeiGaDtmでgene_add_dtmを取得"]
    S13 --> S14["各種存在フラグ・退避Map更新"]
    IF2 -- "No" --> S15["スキップ"]
    S14 --> RET["param返却"]
    IF1 -- "No" --> RET
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `dataMap != null` | - | 一覧ループ |
| 2 | `childMap != null` | - | サービス種別判定 |
| 3 | `JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(op_svc_kei_stat)` | - | 解約済判定 |
| 4 | `JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(shkIdoDiv)` | - | オプション引継 |
| 5 | `JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(op_svc_cd)` | - | Eメール |
| 6 | `JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(op_svc_cd)` | - | Myホームページ |
| 7 | `JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(op_svc_cd)` | - | メーリングリスト |
| 8 | `JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(op_svc_cd)` | - | ダイヤルアップ |
| 9 | `JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(op_svc_cd)` | - | マルチセッション |
|10 | `JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(op_svc_cd)` | - | 固定IPアドレス |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データ |
| 3 | svcKeiUcwkNo | String | サービス契約内訳番号 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | EKK0351B002CBS | EKK0351 | オプションサービス契約 | 一覧照会 |
| R    | EKK0351B003CBS | EKK0351 | オプションサービス契約 | 一覧照会（詳細） |
| R    | EKK0351A010CBS | EKK0351 | オプションサービス契約 | 一意照会（世代登録日時） |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- newKeiOdrCtrl → getOpSvcKeiList

**呼出パス:**
```
newKeiOdrCtrl → getOpSvcKeiList → editInMsg_EKK0351B002CBS → scCall.run → editResultRP_EKK0351B002CBS
                                            → editInMsg_EKK0351B003CBS → scCall.run → editResultRP_EKK0351B003CBS
                                            → getOpSvcKeiGaDtm
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| EKK0351B002CBS | R | オプションサービス契約 |
| EKK0351B003CBS | R | オプションサービス契約 |
| EKK0351A010CBS | R | オプションサービス契約 |

---

---

### getOpSvcKeiNotDslList()

#### 呼出元 (Reverse Call Tree) — 2 direct callers

```
getOpSvcKeiNotDslList() ← gọi bởi:
├── hakkoSOD()    [trực tiếp]
└── taiikiSeigenOdrCtrl()
    └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getOpSvcKeiNotDslList(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiUcwkNo)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

指定されたサービス契約内訳番号に紐づく「解約済ではない」オプションサービス契約の一覧を取得する。  
ネット契約オプション（Eメール等）が現在有効かを全件列挙し、後続の業務判断用に利用する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getOpSvcKeiNotDslList(handle, param, svcKeiUcwkNo)"] 
    --> S1["editInMsg_EKK0351B002CBS(param, svcKeiUcwkNo)で上りマッピング"]
    --> S2["scCall.run(paramMap, handle)でSC呼出"]
    --> S3["editResultRP_EKK0351B002CBS(result, param)で下りマッピング"]
    --> S4["paramMap.clear() / result.clear()"]
    --> S5["editInMsg_EKK0351B003CBS(param)で上りマッピング"]
    --> S6["scCall.run(paramMap, handle)でSC呼出"]
    --> S7["editResultRP_EKK0351B003CBS(result, param)で下りマッピング"]
    --> S8["getShkIdoDiv(param)で異動区分取得"]
    --> S9["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)から一覧取得"]
    --> IF1{"dataMap != null"}
    IF1 -- "Yes" --> S10["データ件数分ループ"]
    S10 --> IF2{"childMap != null"}
    IF2 -- "Yes" --> S11["オプションサービスコードごとに判定"]
    S11 --> S12["op_svc_cd判定: EMAIL/HP/MLIST/DUP/MLTISE/FIXIPAD"]
    S12 --> S13["getOpSvcKeiGaDtmでgene_add_dtmを取得"]
    S13 --> S14["各種存在フラグ・退避Map更新"]
    IF2 -- "No" --> S15["スキップ"]
    S14 --> RET["param返却"]
    IF1 -- "No" --> RET
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `dataMap != null` | - | 一覧ループ |
| 2 | `childMap != null` | - | サービス種別判定 |
| 3 | `JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(op_svc_kei_stat) || JKKHakkoSODConstCC.SVC_KEI_STAT_910.equals(op_svc_kei_stat)` | - | 解約済/キャンセル済スキップ |
| 4 | `JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(shkIdoDiv)` | - | オプション引継SOD発行抑止 |
| 5 | `JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(op_svc_cd)` | - | Eメール判定 |
| 6 | `JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(op_svc_cd)` | - | Myホームページ判定 |
| 7 | `JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(op_svc_cd)` | - | メーリングリスト判定 |
| 8 | `JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(op_svc_cd)` | - | ダイヤルアップ判定 |
| 9 | `JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(op_svc_cd)` | - | マルチセッション判定 |
|10 | `JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(op_svc_cd)` | - | 固定IPアドレス判定 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データ |
| 3 | svcKeiUcwkNo | String | サービス契約内訳番号 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | EKK0351B002CBS | EKK0351 | オプションサービス契約 | 一覧照会 |
| R    | EKK0351B003CBS | EKK0351 | オプションサービス契約 | 一覧照会（詳細） |
| R    | EKK0351A010CBS | EKK0351 | オプションサービス契約 | 一意照会（世代登録日時） |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- taiikiSeigenOdrCtrl → getOpSvcKeiNotDslList

**呼出パス:**
```
taiikiSeigenOdrCtrl → getOpSvcKeiNotDslList → editInMsg_EKK0351B002CBS → scCall.run → editResultRP_EKK0351B002CBS
                                                      → editInMsg_EKK0351B003CBS → scCall.run → editResultRP_EKK0351B003CBS
                                                      → getOpSvcKeiGaDtm
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| EKK0351B002CBS | R | オプションサービス契約 |
| EKK0351B003CBS | R | オプションサービス契約 |
| EKK0351A010CBS | R | オプションサービス契約 |

---

---

### getSame_trn_no()

#### 呼出元 (Reverse Call Tree) — 39 direct callers

```
getSame_trn_no() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── getSame_trn_no()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── keiTtdkChuHtelnoChgeOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newEoMobile()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── useStpOdrCtrl()    [trực tiếp]
├── useStpRlsOdrCtrl()    [trực tiếp]
├── addSODUQWIMAXKaitoriNew()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   ├── newKeiOdrCtrl()
│   └── newEoMobile()
│       ├── adchgFixOdrCtrl()
│       ├── hakkoSOD()
│       └── newKeiOdrCtrl()
├── addTensoDenwaOp()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
│       ├── adchgFixOdrCtrl()
│       └── hakkoSOD()
├── bmpDojiMskm()
│   ├── hakkoSOD()
│   ├── stpRlsOdrCtrl()
│   ├── useStpRlsOdrCtrl()
│   └── bmpSwitchOdrCtrl()
│       └── hakkoSOD()
├── bmpSipDslOdrCtrl()
│   └── hakkoSOD()
├── courseChgeOdrCtrl()
│   ├── hakkoSOD()
│   └── adchgFixOdrCtrl()
│       └── hakkoSOD()
├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── cnclOdrCtrl()
│   │   └── hakkoSOD()
│   ├── ksiDslFixOdrCtrl()
│   │   └── hakkoSOD()
│   └── ksiDslOdrCtrl()
│       └── hakkoSOD()
├── hakkoCourseChgSOD()
│   ├── adchgFixOdrCtrl()
│   ├── courseChgeOdrCtrl()
│   └── hakkoSOD()
├── htelItntokiOdrCtrl()
│   └── hakkoSOD()
├── htelNoAddOdrCtrl()
│   └── hakkoSOD()
├── htelNoDslOdrCtrl()
│   └── hakkoSOD()
├── htelNoInfoChgeOdrCtrl()
│   └── hakkoSOD()
├── htelNoKaihkOdrCtrl()
│   └── hakkoSOD()
├── idpwShkkaSaifuriOdrCtrl()
│   └── hakkoSOD()
├── kaihkOdrCtrl()
│   └── hakkoSOD()
├── koteiIpAd8DivOdrCtrl()
│   └── hakkoSOD()
├── malwareBlockingDivOdrCtrl()
│   └── hakkoSOD()
├── opHktgiOdrCtrl()
│   └── hakkoSOD()
├── opSetOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoDslOdrCtrl()
│   ├── htelNoInfoChgeOdrCtrl()
│   ├── htelNoKaihkOdrCtrl()
│   ├── kaihkOdrCtrl()
│   ├── ksiDslFixOdrCtrl()
│   └── ksiDslOdrCtrl()
├── pauseRlsChgeOdrCtrl()
│   └── hakkoSOD()
├── pauseUkOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   └── kaihkOdrCtrl()
├── rtOpChgDivOdrCtrl()
│   └── hakkoSOD()
├── stpRlsOdrCtrl()
│   ├── hakkoSOD()
│   └── useStpRlsOdrCtrl()
│       └── hakkoSOD()
├── stpUkOdrCtrl()
│   ├── bmpSwitchOdrCtrl()
│   ├── hakkoSOD()
│   ├── kaihkOdrCtrl()
│   └── useStpOdrCtrl()
│       └── hakkoSOD()
├── taiikiSeigenOdrCtrl()
│   └── hakkoSOD()
├── telNoChge()
│   ├── bmpSwitchOdrCtrl()
│   └── hakkoSOD()
├── vLanIdChgOdrCtrl()
│   └── hakkoSOD()
└── vLanIdVaChangeOdrCtrl()
    └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected String getSame_trn_no(IRequestParameterReadWrite param, SessionHandle handle)`
> **戻り値:** `String`

---

#### 1. 役割

同一処理番号（same_trn_no）の採番および取得を行うシンプルなメソッドです。  
複数オーダ発行や並行業務管理時の一意性確保のために利用されます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSame_trn_no(param, handle)"] --> S1["getSame_trn_no(param, handle, null, sameTrnNo) をコール"]
  S1 --> S2["同一処理番号の採番・取得"]
  S2 --> RET["return sameTrnNo[0]"]
```

**処理ステップ詳細:**

1. 補助メソッド `getSame_trn_no(param, handle, null, sameTrnNo)` を呼び出し。
2. sameTrnNo配列の先頭要素に採番された同一処理番号が格納される。
3. 取得したsameTrnNo[0]を返却。

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|----|-------|---------|--------|
| 1 | なし | - | 直列処理 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト・レスポンスパラメータ |
| 2 | handle | SessionHandle | セッション管理ハンドル |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1081C011SC | EKK1081 | 処理管理 | 同一処理番号採番照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- rtOpChgDivOdrCtrl
- malwareBlockingDivOdrCtrl
- koteiIpAd8DivOdrCtrl
- hakkoCourseChgSOD
- vLanIdVaChangeOdrCtrl
- bmpSipDslOdrCtrl
- keiTtdkChuHtelnoChgeOdrCtrl
- vLanIdChgOdrCtrl
- telNoChge
- bmpDojiMskm
- taiikiSeigenOdrCtrl
- addSODUQWIMAXKaitoriNew
- pauseUkOdrCtrl
- pauseRlsChgeOdrCtrl
- idpwShkkaSaifuriOdrCtrl
- opHktgiOdrCtrl
- htelNoInfoChgeOdrCtrl
- htelNoKaihkOdrCtrl
- htelItntokiOdrCtrl
- htelNoDslOdrCtrl
- htelNoAddOdrCtrl
- opSetOdrCtrl
- courseChgeOdrCtrl
- dslOdrCtrl
- kaihkOdrCtrl
- getSame_trn_no
- addTensoDenwaOp
- stpRlsOdrCtrl
- stpUkOdrCtrl
- hakkoSOD
- bmpSwitchOdrCtrl
- newEoMobile
- adchgFixOdrCtrl
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl
- newKeiOdrCtrl
- useStpRlsOdrCtrl
- useStpOdrCtrl

**呼出パス:**  
[業務各所] → getSame_trn_no → callEKK1081C011SC

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1081C011SC | R | 処理管理 |

---### getEKK1041B001result()

---

#### 1. 役割

EKK1041オーダ設定一覧照会の照会結果リストを取得するメソッドです。  
本メソッドは業務内で複数の制御メソッドから呼ばれ、EKK1041オーダ関連の作業領域から結果リストを取得する業務ロジックを担います。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getEKK1041B001result(param)"] --> S1["Step1: param.getMappingWorkArea() で作業エリアマップ取得"]
  S1 --> IF1{"workAreaMap == null"}
  IF1 -- "Yes" --> S2["新規HashMap生成しparam.setMappingWorkArea(workAreaMap)"]
  IF1 -- "No" --> S3["既存workAreaMap利用"]
  S2 --> S4["workAreaMap.get(\"WORK\") でworkMap取得"]
  S3 --> S4
  S4 --> IF2{"workMap == null"}
  IF2 -- "Yes" --> S5["新規HashMap生成し、workMap.put(getClass().getName() + '_' + EKK1041B001CBSMsg.EKK1041B001CBSMSG1LIST, workMap)"]
  IF2 -- "No" --> S6["既存workMap利用"]
  S5 --> S7["workMap.get(getClass().getName() + '_' + EKK1041B001CBSMsg.EKK1041B001CBSMSG1LIST) でリスト取得"]
  S6 --> S7
  S7 --> RET["return retList"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. `param.getMappingWorkArea()` を呼び、作業エリアマップ（workAreaMap）を取得
2. workAreaMapがnullの場合は新規HashMapを生成し、`param.setMappingWorkArea(workAreaMap)` でセット
3. workAreaMapから "WORK" キーでworkMapを取得
4. workMapがnullの場合は新規HashMapを生成し、`workMap.put(getClass().getName() + "_" + EKK1041B001CBSMsg.EKK1041B001CBSMSG1LIST, workMap)` でセット
5. workMapから `getClass().getName() + "_" + EKK1041B001CBSMsg.EKK1041B001CBSMSG1LIST` でリスト（retList）を取得し返却

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ）|

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 作業領域からのデータ取得のみ |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- isItenNoGuideTokiChu → getEKK1041B001result
- telNoChge → getEKK1041B001result
- htelNoDslOdrCtrl → getEKK1041B001result
- dslOdrCtrl → getEKK1041B001result
- bmpSwitchOdrCtrl → getEKK1041B001result
- hakkoSOD → getEKK1041B001result
- ksiDslOdrCtrl → getEKK1041B001result
- cnclOdrCtrl → getEKK1041B001result
- ksiDslFixOdrCtrl → getEKK1041B001result
- 他、上記経由の多段呼出

**呼出パス:**

```
[呼出元メソッド] → getEKK1041B001result → 作業領域からEKK1041B001CBSMsg1List取得 → 結果リスト返却
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| - | - | - |


---

---

### getSameTrnNo()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
getSameTrnNo() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── newKeiOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getSameTrnNo(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

同一処理番号の採番サービスインターフェイスを呼び出し、採番結果をparamへ格納する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSameTrnNo(handle, param)"]
    --> S1["editInMsg_EKK1081C011CBS(param)で上りマッピング"]
    --> S2["scCall.run(paramMap, handle)でSC呼出"]
    --> S3["editResultRP_EKK1081C011CBS(result, param)で下りマッピング"]
    --> S4["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
    --> IF1{"dataMap != null"}
    IF1 -- "Yes" --> S5["dataMap.get('same_trn_no')"]
    S5 --> RET["param返却"]
    IF1 -- "No" --> RET
    style IF1 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | dataMap != null | - | same_trn_no取得 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | EKK1081C011CBS | EKK1081 | 同一処理番号 | 採番 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- newKeiOdrCtrl → getSameTrnNo

**呼出パス:**
```
newKeiOdrCtrl → getSameTrnNo → editInMsg_EKK1081C011CBS → scCall.run → editResultRP_EKK1081C011CBS
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| EKK1081C011CBS | R | 同一処理番号 |

---

---

### getSbOpSvcKeiList()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
getSbOpSvcKeiList() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── newKeiOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getSbOpSvcKeiList(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サブオプションサービス契約一覧照会サービスインターフェイスを呼び出し、オプションサービス契約番号に紐づくサブオプションサービス契約の一覧を取得し、判定・振り分け・フラグ管理する複雑なメソッドです。  
メール・ホームページ等のサブオプション存在有無や世代管理、エイリアス・ウィルスチェック等の情報も取得・管理します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSbOpSvcKeiList(handle, param)"] --> S1["Step1: param.getData(HAKKOSODCCWORKMAP) でiMap取得"]
  S1 --> IF1{"iMap != null"}
  IF1 -- "Yes" --> L1["for(サブオプション契約毎)"]
  L1 --> S2["iMap.put('op_svc_kei_no', entry.getKey())"]
  S2 --> S3["param.setData(HAKKOSODCCWORKMAP, iMap)"]
  S3 --> S4["editInMsg_EKK0401B001CBS(param)"]
  S4 --> S5["scCall.run(paramMap, handle)"]
  S5 --> S6["editResultRP_EKK0401B001CBS(result, param)"]
  S6 --> S7["param.getData(HAKKOSODCCWORKMAP) でdataMap取得"]
  S7 --> IF2{"dataMap != null"}
  IF2 -- "Yes" --> L2["for(dataList item)"]
  L2 --> IF3{"childMap != null"}
  IF3 -- "Yes" --> S8["サブオプション判定（メール/容量/ウィルス/エイリアス）"]
  S8 --> IF4{"sbop_svc_cd == ALIAS"}
  IF4 -- "Yes" --> S9["sbop_svckeino_alias_mapへ格納"]
  IF4 -- "No" --> IF5{"sbop_svc_cd == MLCAPA"}
  IF5 -- "Yes" --> S10["mlcapa_flg_listへ格納"]
  IF5 -- "No" --> IF6{"sbop_svc_cd == VIRUS"}
  IF6 -- "Yes" --> S11["sbop_svckeino_mlvirus_mapへ格納"]
  IF6 -- "No" --> S15["他オプションの処理"]
  S11 --> S15
  S10 --> S15
  S9 --> S15
  S15 --> END
  IF3 -- "No" --> END
  IF2 -- "No" --> END
  IF1 -- "No" --> END

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
```

**処理ステップ詳細:**

1. 業務マップ（HAKKOSODCCWORKMAP）からサブオプション契約情報iMap取得
2. iMapがnullでなければfor文で契約単位に繰り返し
3. 各契約ごとにop_svc_kei_noをセットし編集・SC呼出
4. 結果からdataMap, dataListを取得し、サブオプション種別ごとに判定
   - メールエイリアス、容量追加、ウィルスチェック、ホームページ容量追加等、各種フラグ・マップへ格納
5. 途中、キャンセル済み契約除外やキャンセル済エイリアス除外等の分岐あり

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|----|-------|---------|--------|
| 1 | iMap != null | - | for文で契約毎処理 |
| 2 | dataMap != null | - | for文でdataList処理 |
| 3 | childMap != null | - | サブオプション種別判定 |
| 4 | sbop_svc_cd == ALIAS | JKKHakkoSODConstCC.SBOP_SVC_CD_ALIAS | alias_map格納 |
| 5 | sbop_svc_cd == MLCAPA | JKKHakkoSODConstCC.SBOP_SVC_CD_MLCAPA | mlcapa_flg_list格納 |
| 6 | sbop_svc_cd == VIRUS | JKKHakkoSODConstCC.SBOP_SVC_CD_VIRUS | mlvirus_map格納 |
| 7 | キャンセル済み契約は除外 | JKKHakkoSODConstCC.SVC_KEI_STAT_920 | 除外 |
| 8 | op_svc_kei_no_hp != null && != "" | - | ホームページ関連処理 |
| 9 | sbop_svc_cd == HPCAPA | JKKHakkoSODConstCC.SBOP_SVC_CD_HPCAPA | hp容量追加フラグ |
| 10 | sbop_svc_cd == HPACCESS | JKKHakkoSODConstCC.SBOP_SVC_CD_HPACCESS | hpアクセス分析フラグ |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト・レスポンスパラメータ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | run（editInMsg_EKK0401B001CBS, editResultRP_EKK0401B001CBS） | EKK0401 | サブオプションサービス契約 | 各契約番号単位で照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- newKeiOdrCtrl
- adchgFixOdrCtrl
- hakkoSOD

**呼出パス:**  
[契約・オーダ判定] → getSbOpSvcKeiList → editInMsg_EKK0401B001CBS → run → editResultRP_EKK0401B001CBS

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| run | R | サブオプションサービス契約 |

---

---

### getShkIdoDiv()

#### 呼出元 (Reverse Call Tree) — 6 direct callers

```
getShkIdoDiv() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── taiikiSeigenOdrCtrl()    [trực tiếp]
├── getOpSvcKeiList()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
│       ├── hakkoSOD()
│       └── adchgFixOdrCtrl()
│           └── hakkoSOD()
└── getOpSvcKeiNotDslList()
    ├── hakkoSOD()
    └── taiikiSeigenOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected HashMap<String, String> getShkIdoDiv(IRequestParameterReadWrite param)`
> **戻り値:** `HashMap<String, String>`

---

#### 1. 役割

業務データ内のオプションサービス契約履歴一覧から各オプションサービス契約番号に対応する最初（＝最古）の異動区分を取得・返却する。履歴情報の並び順に依存して最古情報を抽出する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getShkIdoDiv(param)"] --> S1["Step1: paramからJKKHakkoSODConstCC.HAKKOSODCCWORKMAPでdataMap取得"]
  S1 --> IF1{"dataMap!=nullか"}
  IF1 -- "Yes" --> S2["Step2: dataMapからEKK0351B003CBSMSG1LISTでdataList取得"]
  S2 --> S3["Step3: dataList分繰り返し(for)"]
  S3 --> IF2{"childMap!=nullか"}
  IF2 -- "Yes" --> S4["Step4: op_svc_kei_no, ido_div抽出"]
  S4 --> S5["Step5: retMapにput(op_svc_kei_no, ido_div)"]
  S5 --> S3
  S3 --> RET["retMap返却"]
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. paramから `JKKHakkoSODConstCC.HAKKOSODCCWORKMAP` をキーに dataMap を取得
2. dataMapがnullでなければ `EKK0351B003CBSMSG1LIST` で dataList を取得
3. dataListをforループし、childMapがnullでなければ `op_svc_kei_no`・`ido_div` を取得
4. retMapに `op_svc_kei_no` をキー、`ido_div` を値としてput
5. 全件処理後、retMapを返却

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先               |
|---|------|--------|----------------------|
| 1 | `dataMap != null` | - | 繰り返し処理へ |
| 2 | `childMap != null`| - | put実行         |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型                       | 業務説明                           |
|----|--------------|--------------------------|------------------------------------|
| 1  | param        | IRequestParameterReadWrite | 業務データコンテナ                 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明        |
|------|------------|----------|-------------|-----------------|
| -    | -          | -        | -           | データ抽出処理  |

---

#### 5. 依存トレース (Dependency Trace)

**起点 (Entry Point):**
- getOpSvcKeiNotDslList
- getOpSvcKeiList
- taiikiSeigenOdrCtrl
- newKeiOdrCtrl
- hakkoSOD
- adchgFixOdrCtrl

**呼出パス:**
```
[業務制御クラス.メソッド] → getShkIdoDiv
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| -           | -    | -           |

---

---

### getShuriKokanBfKiki()

#### 呼出元 (Reverse Call Tree) — 30 direct callers

```
getShuriKokanBfKiki() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── addIpv6SODAft()    [trực tiếp]
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── findZ1OrderAtKK1041()    [trực tiếp]
├── findZ1OrderAtKK1041SvcKeiUcwk()    [trực tiếp]
├── getZ1HakkoKh()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoAddOdrCtrl()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── idpwShkkaSaifuriOdrCtrl()    [trực tiếp]
├── isKikiSeizoNoCheck()    [trực tiếp]
├── jdgIpv6()    [trực tiếp]
├── jdgIpv6EKK0361A010()    [trực tiếp]
├── jdgOdr163()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── setChgePWForRouterConInfo()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
├── checkTakinoRT()
│   ├── adchgFixOdrCtrl()
│   ├── addIpv6SODAft()
│   ├── bmpSwitchOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── courseChgeOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoAddOdrCtrl()
│   ├── idpwShkkaSaifuriOdrCtrl()
│   ├── jdgIpv6EKK0361A010()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── newKeiOdrCtrl()
│   ├── vLanIdChgOdrCtrl()
│   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── cnclOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   ├── ksiDslFixOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── ksiDslOdrCtrl()
│   │       └── hakkoSOD()
│   ├── findZ1OrderAtKK1041()
│   │   ├── hakkoSOD()
│   │   ├── htelNoAddOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   │       └── hakkoSOD()
│   ├── findZ1OrderAtKK1041SvcKeiUcwk()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   └── opSetOdrCtrl()
│   ├── htelNoDslOdrCtrl()
│   │   └── hakkoSOD()
│   ├── htelNoInfoChgeOdrCtrl()
│   │   └── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── jdgIpv6()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── addIpv6SODAft()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   ├── newKeiOdrCtrl()
│   │   ├── opSetOdrCtrl()
│   │   └── jdgIpv6EKK0361A010()
│   │       ├── adchgFixOdrCtrl()
│   │       ├── hakkoSOD()
│   │       ├── kaihkOdrCtrl()
│   │       ├── newKeiOdrCtrl()
│   │       └── addIpv6SODAft()
│   │           ├── adchgFixOdrCtrl()
│   │           ├── hakkoSOD()
│   │           └── newKeiOdrCtrl()
│   ├── jdgOdr163()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── courseChgeOdrCtrl()
│   │       ├── hakkoSOD()
│   │       └── adchgFixOdrCtrl()
│   │           └── hakkoSOD()
│   ├── kaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── opSetOdrCtrl()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   └── ksiDslOdrCtrl()
│   ├── setChgePWForRouterConInfo()
│   │   ├── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   ├── telNoChge()
│   │   ├── hakkoSOD()
│   │   └── bmpSwitchOdrCtrl()
│   │       └── hakkoSOD()
│   └── wribInfoAddOdrCtrl()
│       └── hakkoSOD()
├── getVAkikiInfo()
│   ├── cnclOdrCtrl()
│   ├── dslOdrCtrl()
│   ├── findZ1OrderAtKK1041SvcKeiUcwk()
│   ├── hakkoSOD()
│   ├── htelNoDslOdrCtrl()
│   ├── htelNoInfoChgeOdrCtrl()
│   ├── htelNoKaihkOdrCtrl()
│   ├── kaihkOdrCtrl()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── opSetOdrCtrl()
│   ├── getZ1HakkoKh()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   └── opSetOdrCtrl()
│   └── isKikiSeizoNoCheck()
│       ├── cnclOdrCtrl()
│       ├── dslOdrCtrl()
│       ├── hakkoSOD()
│       ├── htelNoDslOdrCtrl()
│       ├── htelNoInfoChgeOdrCtrl()
│       ├── htelNoKaihkOdrCtrl()
│       ├── kaihkOdrCtrl()
│       ├── ksiDslFixOdrCtrl()
│       ├── ksiDslOdrCtrl()
│       └── opSetOdrCtrl()
├── isRegalVaKiki()
│   ├── hakkoSOD()
│   └── htelNoInfoChgeOdrCtrl()
└── vLanIdChgOdrCtrl()
    └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected Map<String, Object> getShuriKokanBfKiki(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo, String svcKeiUcwkNo, String vaKikiChgNo, String kktkSvcKeiNo, String currentGeneAddDtm)`
> **戻り値:** `Map<String, Object>`

---

#### 1. 役割

対象機器が修理交換中の場合に、修理交換前の機器提供サービス契約情報を返却します。  
業務としては、履歴照会・各種SC照会・異動区分/機器製造番号/ステータス等に基づき、修理交換前情報の抽出とエラーハンドリングを行います。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getShuriKokanBfKiki(handle, param, svcKeiNo, svcKeiUcwkNo, vaKikiChgNo, kktkSvcKeiNo, currentGeneAddDtm)"]
    --> S1["Step1: callEKK0341B008SCRirekiで履歴照会"]
    --> FOR1["for ekk0341b008Msg in 結果リスト"]
    FOR1 --> IF1{"currentGeneAddDtm == geneAddDtm"}
    IF1 -- "Yes" --> IF2{"機器提供サービス契約ステータスが指定値 && 機器製造番号未設定"}
    IF2 -- "Yes" --> S2["修理交換中判定／カレントの機器変更番号取得"]
    IF2 -- "No" --> S3["修理交換中でない場合の処理"]
    IF1 -- "No" --> IF3{"currentGeneAddDtm > geneAddDtm"}
    IF3 -- "Yes" --> IF4{"機器製造番号未設定"}
    IF4 -- "Yes" --> IF5{"VA機器変更番号未設定または一致"}
    IF5 -- "Yes" --> IF6{"異動区分=機器故障対応"}
    IF6 -- "Yes" --> S4["返品機器取消一覧照会し、承認済みならチェックエラー"]
    IF6 -- "No" --> S5["機器製造番号他契約利用中チェック"]
    IF5 -- "No" --> S6["他契約のカレント取得・チェック"]
    IF4 -- "No" --> S7["他契約カレントの機器製造番号等チェック"]
    IF3 -- "No" --> S8["修理交換前機器情報設定"]
    S2 & S3 & S4 & S5 & S6 & S7 & S8 --> S9["必要に応じてシスログ出力、エラー判定時は例外発生"]
    S9 --> RET["return kokanBfKiki"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE.equals(ido_div)` | | return kokanBfKiki |
| 2 | `currentGeneAddDtm == geneAddDtm` | | 修理交換中判定 |
| 3 | `Arrays.asList(JKKHakkoSODConstCC.SVC_KEI_STAT_100, ...)` | | 修理交換中条件 |
| 4 | `currentGeneAddDtm > geneAddDtm` | | 修理交換前判定 |
| 5 | `JKKStringUtil.isNullBlank(kikiSeizoNo)` | | 機器製造番号未設定判定 |
| 6 | `JKKStringUtil.isNullBlank(vaKikiChgNo) || vaKikiChgNo.equals(...)` | | VA機器変更番号判定 |
| 7 | `JKKStrConst.CD00576_KIKI_TRB_TAIO.equals(prevIdoDiv)` | | 機器故障対応判定 |
| 8 | `JDKStrConst.HMPIN_KIKI_STAT_SHONIN.equals(hmpinKikiStat)` | | 返品承認済み判定 |
| 9 | `!kktkSvcKeiNo.equals(ekk0341b001Msg.getString(...))` | | 他契約利用チェック |
| 10 | `0 != statusCode` | | CCException発生 |
| 11 | `kikiSeizoNo.equals((String)otherEk0341a010Msg.get(...)) && !Arrays.asList(...)` | | 他契約カレント利用中判定 |
| 12 | `isChkError` | | チェックエラーシスログ出力 |
| 13 | `!chkErrKktkSvcKeiNoList.contains(kktkSvcKeiNo)` | | エラー記録 |
| 14 | `!isChkError` | | 正常時処理 |
| 15 | `0 != statusCode` | | CCException発生 |
| 16 | return | | kokanBfKiki返却 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ）|
| 3 | svcKeiNo | String | サービス契約番号 |
| 4 | svcKeiUcwkNo | String | サービス契約内訳番号 |
| 5 | vaKikiChgNo | String | VA機器変更番号 |
| 6 | kktkSvcKeiNo | String | 機器提供サービス契約番号 |
| 7 | currentGeneAddDtm | String | カレント世代登録年月日時分秒 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-------------|---------|------------|---------|
| R    | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約 | 履歴照会 |
| R    | callEDK0301B060SC | EDK0301 | 返品機器取消一覧 | 返品機器取消一覧照会 |
| R    | callEKK0341B001SC | EKK0341 | 機器提供サービス契約 | 機器製造番号照会 |
| R    | callEKK0341A010SC | EKK0341 | 機器提供サービス契約 | 一意照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- getVAkikiInfo, isRegalVaKiki, checkTakinoRT, vLanIdChgOdrCtrl, hakkoSOD等からの呼出

**呼出パス:**

```
hakkoSOD → getShuriKokanBfKiki
getVAkikiInfo → getShuriKokanBfKiki
isRegalVaKiki → getShuriKokanBfKiki
→ callEKK0341B008SCRireki [READ:履歴照会]
→ callEDK0301B060SC [READ:返品機器取消一覧]
→ callEKK0341B001SC [READ:機器製造番号照会]
→ callEKK0341A010SC [READ:一意照会]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| callEKK0341B008SCRireki | R | 機器提供サービス契約 |
| callEDK0301B060SC | R | 返品機器取消一覧 |
| callEKK0341B001SC | R | 機器提供サービス契約 |
| callEKK0341A010SC | R | 機器提供サービス契約 |

---

---

---

### getSvcKeiInfo()

#### 呼出元 (Reverse Call Tree) — 8 direct callers

```
getSvcKeiInfo() ← gọi bởi:
├── courseChgeOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── adchgFixOdrCtrl()
│   └── hakkoSOD()
├── hakkoCourseChgSOD()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── courseChgeOdrCtrl()
│       ├── adchgFixOdrCtrl()
│       └── hakkoSOD()
├── koteiIpAd8DivOdrCtrl()
│   └── hakkoSOD()
├── malwareBlockingDivOdrCtrl()
│   └── hakkoSOD()
├── opHktgiOdrCtrl()
│   └── hakkoSOD()
└── vLanIdVaChangeOdrCtrl()
    └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected HashMap<String, Object> getSvcKeiInfo(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

サービス契約番号（svc_kei_no）単位で、世代登録年月日時分秒（gene_add_dtm）等の契約情報を一意照会し、Mapとして返却する。  
契約のバージョン管理や内部連携用の情報取得を主目的とする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSvcKeiInfo(handle, param)"]
    --> S1["editInMsg_EKK0081A010CBS(param)で上りマッピング"]
    --> S2["scCall.run(paramMap, handle)でSC呼出"]
    --> S3["editResultRP_EKK0081A010CBS(result, param)で下りマッピング"]
    --> S4["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
    --> IF1{"dataMap != null"}
    IF1 -- "Yes" --> S5["dataList.get(0)でchildMap取得"]
    S5 --> IF2{"childMap != null"}
    IF2 -- "Yes" --> S6["gene_add_dtm等各種情報をresultHashにput"]
    S6 --> RET["resultHash返却"]
    IF2 -- "No" --> RET
    IF1 -- "No" --> RET
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | dataMap != null | - | 結果Map取得 |
| 2 | dataList.size() > 0 | - | childMap取得 |
| 3 | childMap != null | - | 各種フィールドput |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | EKK0081A010CBS | EKK0081 | サービス契約 | 一意照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- koteiIpAd8DivOdrCtrl → getSvcKeiInfo

**呼出パス:**
```
koteiIpAd8DivOdrCtrl → getSvcKeiInfo → editInMsg_EKK0081A010CBS → scCall.run → editResultRP_EKK0081A010CBS
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| EKK0081A010CBS | R | サービス契約 |

---### getOpSvcKeiIsp(SessionHandle handle, IRequestParameterReadWrite param)

---

#### 1. 役割

本メソッドは、オプションサービス契約（Ｅメール、Ｍｙホームページ）に紐づく一意の情報を照会し、メールアドレスやホームページURL情報を取得する業務ロジックです。主に新規契約や契約変更処理の際に、サービスオーダ発行制御（hakkoSOD）フローから呼び出され、ターゲットとなるオプションサービス契約情報を収集します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getOpSvcKeiIsp(handle, param)"] --> S1["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP) で作業マップ取得"]
  S1 --> IF1{"iMap != null"}
  IF1 -- "Yes" --> FOR1["iMapのエントリ分ループ"]
  FOR1 --> S2["entryごとに iMap.put('op_svc_kei_no', entry.getKey())"]
  S2 --> S3["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, iMap)"]
  S3 --> S4["editInMsg_EKK0361A010CBS(param) でSC入力編集"]
  S4 --> S5["scCall.run(paramMap, handle) でSC呼出"]
  S5 --> S6["editResultRP_EKK0361A010CBS(result, param) で下りマッピング"]
  S6 --> S7["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
  S7 --> IF2{"dataMap != null"}
  IF2 -- "Yes" --> IF3{"dataList.size() > 0"}
  IF3 -- "Yes" --> IF4{"childMap != null"}
  IF4 -- "Yes" --> S8["childMap.get('mlad')でメールアドレス取得"]
  IF4 -- "No" --> S9["スキップ"]
  IF3 -- "No" --> S9
  IF2 -- "No" --> S9
  FOR1 --> S9
  IF1 -- "No" --> S9
  S9 --> IF5{"op_svc_kei_no_hp != null && op_svc_kei_no_hp ≠ ''"}
  IF5 -- "Yes" --> S10["iMap.put('op_svc_kei_no', op_svc_kei_no_hp)"]
  S10 --> S11["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, iMap)"]
  S11 --> S12["editInMsg_EKK0361A010CBS(param)"]
  S12 --> S13["scCall.run(paramMap, handle)"]
  S13 --> S14["editResultRP_EKK0361A010CBS(result, param)"]
  S14 --> S15["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
  S15 --> IF6{"dataMap != null"}
  IF6 -- "Yes" --> IF7{"dataList.size() > 0"}
  IF7 -- "Yes" --> IF8{"childMap != null"}
  IF8 -- "Yes" --> S16["childMap.get('url_domain')、childMap.get('url_account')を取得"]
  S16 --> IF9{"両値がnullでなく空文字でない"}
  IF9 -- "Yes" --> S17["URL設定フラグをTrueにする"]
  IF9 -- "No" --> S18["何もしない"]
  IF8 -- "No" --> S18
  IF7 -- "No" --> S18
  IF6 -- "No" --> S18
  IF5 -- "No" --> S18
  S18 --> END["return param"]

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
  style IF7 fill:#ffcc00
  style IF8 fill:#ffcc00
  style IF9 fill:#ffcc00
```

**処理ステップ詳細:**

1. サービスオーダ発行CC作業マップを取得し、iMapがnullでなければエントリ分ループ。
2. 各エントリのkeyを「op_svc_kei_no」にセットし、作業マップへ反映。
3. editInMsg_EKK0361A010CBSでSC入力編集、scCall.runでSC呼出、editResultRP_EKK0361A010CBSで下りマッピング。
4. 戻り値dataMap, dataList, childMapがそれぞれnull/非null、サイズで分岐し、メールアドレス等を取得。
5. op_svc_kei_no_hp（ホームページ用契約番号）がnull/空文字でなければ、同様のSC呼出・結果取得処理を実施し、url_domainとurl_accountの両方がnull/空文字でなければURL設定フラグをTrueにする。
6. 取得したparamを返却。

**制御フロー分岐:**

| # | 条件 | 定数値 | 分岐先 |
|---|-----------------------|-------|--------|
| 1 | `iMap != null` |  | FOR1 |
| 2 | `dataMap != null` |  | IF3 |
| 3 | `dataList.size() > 0` |  | IF4 |
| 4 | `childMap != null` |  | S8 |
| 5 | `op_svc_kei_no_hp != null && !"".equals(op_svc_kei_no_hp)` |  | S10 |
| 6 | `iMap != null` |  | S11 |
| 7 | `dataMap != null` |  | IF7 |
| 8 | `dataList.size() > 0` |  | IF8 |
| 9 | `childMap != null` |  | S16 |
|10 | `url_domain != null && !"".equals(url_domain) && url_account != null && !"".equals(url_account)` | | S17 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | editInMsg_EKK0361A010CBS, scCall.run | EKK0361 | オプションサービス契約（ISP） | オプションサービス契約情報照会 |

---

#### 4.5 メッセージID (Message IDs)

該当データなし

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- hakkoSOD
- newKeiOdrCtrl
- adchgFixOdrCtrl

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → getOpSvcKeiIsp
hakkoSOD → adchgFixOdrCtrl → newKeiOdrCtrl → getOpSvcKeiIsp
hakkoSOD → getOpSvcKeiIsp
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| editInMsg_EKK0361A010CBS, scCall.run | R | オプションサービス契約（ISP） |

---

---

---

### getSvcKeiList()

#### 呼出元 (Reverse Call Tree) — 28 direct callers

```
getSvcKeiList() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── addIpv6SODAft()    [trực tiếp]
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── findZ1OrderAtKK1041()    [trực tiếp]
├── findZ1OrderAtKK1041SvcKeiUcwk()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoAddOdrCtrl()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── idpwShkkaSaifuriOdrCtrl()    [trực tiếp]
├── jdgIpv6()    [trực tiếp]
├── jdgIpv6EKK0361A010()    [trực tiếp]
├── jdgOdr163()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── setChgePWForRouterConInfo()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── vLanIdChgOdrCtrl()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
├── checkTakinoRT()
│   ├── adchgFixOdrCtrl()
│   ├── addIpv6SODAft()
│   ├── bmpSwitchOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── courseChgeOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoAddOdrCtrl()
│   ├── idpwShkkaSaifuriOdrCtrl()
│   ├── jdgIpv6EKK0361A010()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── newKeiOdrCtrl()
│   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── cnclOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   ├── ksiDslFixOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── ksiDslOdrCtrl()
│   │       └── hakkoSOD()
│   ├── findZ1OrderAtKK1041()
│   │   ├── hakkoSOD()
│   │   ├── htelNoAddOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   │       └── hakkoSOD()
│   ├── findZ1OrderAtKK1041SvcKeiUcwk()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   └── opSetOdrCtrl()
│   ├── htelNoDslOdrCtrl()
│   │   └── hakkoSOD()
│   ├── htelNoInfoChgeOdrCtrl()
│   │   └── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── jdgIpv6()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── addIpv6SODAft()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   ├── newKeiOdrCtrl()
│   │   ├── opSetOdrCtrl()
│   │   └── jdgIpv6EKK0361A010()
│   │       ├── adchgFixOdrCtrl()
│   │       ├── hakkoSOD()
│   │       ├── kaihkOdrCtrl()
│   │       ├── newKeiOdrCtrl()
│   │       └── addIpv6SODAft()
│   │           ├── adchgFixOdrCtrl()
│   │           ├── hakkoSOD()
│   │           └── newKeiOdrCtrl()
│   ├── jdgOdr163()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── courseChgeOdrCtrl()
│   │       ├── adchgFixOdrCtrl()
│   │       └── hakkoSOD()
│   ├── kaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── opSetOdrCtrl()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   └── ksiDslOdrCtrl()
│   ├── setChgePWForRouterConInfo()
│   │   ├── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   ├── telNoChge()
│   │   ├── hakkoSOD()
│   │   └── bmpSwitchOdrCtrl()
│   │       └── hakkoSOD()
│   ├── vLanIdChgOdrCtrl()
│   │   └── hakkoSOD()
│   └── wribInfoAddOdrCtrl()
│       └── hakkoSOD()
└── newNet()
    ├── adchgFixOdrCtrl()
    ├── hakkoSOD()
    └── newKeiOdrCtrl()
        ├── hakkoSOD()
        └── adchgFixOdrCtrl()
            └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected HashMap<String, Object> getSvcKeiList(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

サービス契約一意照会SIFを呼び出し、指定されたサービス契約番号（svcKeiNo）に紐づく契約情報（契約代表情報）を取得するメソッドです。  
契約判定や詳細情報取得の基盤として利用されます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSvcKeiList(handle, param, svcKeiNo)"] --> S1["Step1: JCCBPCommon.getOpeDate(null) で運用日取得"]
  S1 --> S2["Step2: inHash.put(JKKHakkoSODConstCC.SVC_KEI_NO, svcKeiNo)"]
  S2 --> S3["Step3: inHash.put(JKKHakkoSODConstCC.OPE_DATE, ope_date)"]
  S3 --> S4["Step4: callEKK0081A010SC(param, handle, inHash, resultHash, JKKHakkoSODConstCC.FUNC_CODE_2) でSC照会"]
  S4 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> S5["throw CCException (SCCallException)"]
  IF1 -- "No" --> S6["Step5: resultHash.get(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0081A010) で情報取得"]
  S5 --> END
  S6 --> RET["return eKK0081A010Map"]

  style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. 運用日（ope_date）を取得。
2. 入力ハッシュにサービス契約番号（SVC_KEI_NO）を格納。
3. 入力ハッシュに運用日（OPE_DATE）を格納。
4. サービス契約一意照会SC（EKK0081A010）を呼び出す。
5. statusCodeが0以外なら例外（CCException）投げて終了。
6. 結果ハッシュからTEMPLATE_ID_EKK0081A010で取得した契約情報を返却。

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0 | - | CCException発生 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト・レスポンスパラメータ |
| 3 | svcKeiNo | String | サービス契約番号 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0081A010SC | EKK0081 | サービス契約 | 一意照会（契約番号単位） |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- checkTakinoRT
- newNet
- findZ1OrderAtKK1041SvcKeiUcwk
- findZ1OrderAtKK1041
- jdgOdr163
- vLanIdChgOdrCtrl
- telNoChge
- jdgIpv6
- wribInfoAddOdrCtrl
- setChgePWForRouterConInfo
- htelNoInfoChgeOdrCtrl
- htelNoKaihkOdrCtrl
- opSetOdrCtrl
- htelNoDslOdrCtrl
- dslOdrCtrl
- kaihkOdrCtrl
- newKeiOdrCtrl
- idpwShkkaSaifuriOdrCtrl
- htelNoAddOdrCtrl
- courseChgeOdrCtrl
- hakkoSOD
- bmpSwitchOdrCtrl
- jdgIpv6EKK0361A010
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl
- adchgFixOdrCtrl
- addIpv6SODAft

**呼出パス:**  
[契約・オーダ判定・照会] → getSvcKeiList → callEKK0081A010SC → [契約情報取得]

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0081A010SC | R | サービス契約 |

---

---

### getSvcKeiUtwk()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
getSvcKeiUtwk() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── newKeiOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getSvcKeiUtwk(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サービス契約内訳番号（複数）の一覧から、個々のサービス契約内訳情報を一意照会し、料金プランや状態を取得する。  
Wi-Fiスポットが提供中の場合は繰り返しを早期終了し、フラグ管理を行う。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSvcKeiUtwk(handle, param)"]
    --> S1["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でiMap取得"]
    --> IF1{"iMap != null"}
    IF1 -- "Yes" --> S2["iMap.get('EKK0161B003CBSMsg1List')で複数件取得"]
    S2 --> S3["件数分ループ"]
    S3 --> IF2{"iChildMap != null"}
    IF2 -- "Yes" --> S4["iChildMap.get('svc_kei_ucwk_no')"]
    S4 --> S5["inHashUcwk.put(SVC_KEI_UCWK_NO, svc_kei_ucwk_no)"]
    S5 --> S6["inHashUcwk.put(OPE_DATE, JCCBPCommon.getOpeDate(null))"]
    S6 --> S7["callEKK0161A010SC(param, handle, inHashUcwk, resultHashUcwk, FUNC_CODE_2)"]
    S7 --> S8["resultHashUcwk.get(TEMPLATE_ID_EKK0161A010)"]
    S8 --> S9["eKK0161A010Hash.get(PCRS_CD), get(SVC_KEI_UCWK_STAT)で判定"]
    IF2 -- "No" --> S10["スキップ"]
    IF1 -- "No" --> RET
    S9 --> IF3{"Wi-Fiスポット該当判定"}
    IF3 -- "Yes" --> S11["Wi-Fiスポット有無フラグをTrue"]
    IF3 -- "No" --> S12["継続"]
    S11 --> IF4{"wifiCount > 1"}
    IF4 -- "Yes" --> S13["繰り返し終了"]
    IF4 -- "No" --> S14["継続"]
    S13 --> RET["param返却"]
    S14 --> RET
    S12 --> RET
    S10 --> RET
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
    style IF3 fill:#ffcc00
    style IF4 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `iMap != null` | - | 一覧取得 |
| 2 | `iChildMap != null` | - | サービス契約内訳番号取得 |
| 3 | `0 != statusCode` | - | 例外throw |
| 4 | `((JKKHakkoSODConstCC.PCRS_CD_FREE_WIFI.equals(pcrsCdWifi) || JKKHakkoSODConstCC.PCRS_CD_WIFISPOT.equals(pcrsCdWifi)) && ...)` | - | Wi-Fiスポット判定 |
| 5 | `wifiCount > 1` | - | 繰り返し終了 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|-------------|----------|
| R    | callEKK0161A010SC | EKK0161 | サービス契約内訳 | 一意照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- newKeiOdrCtrl → getSvcKeiUtwk

**呼出パス:**
```
newKeiOdrCtrl → getSvcKeiUtwk → callEKK0161A010SC
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| callEKK0161A010SC | R | サービス契約内訳 |

---

---

### getSvcKeiUtwkList()

#### 呼出元 (Reverse Call Tree) — 8 direct callers

```
getSvcKeiUtwkList() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── addTensoDenwaOp()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
├── newKeiOdrCtrl()
│   ├── hakkoSOD()
│   └── adchgFixOdrCtrl()
│       └── hakkoSOD()
├── rtOpChgDivOdrCtrl()
│   └── hakkoSOD()
├── taiikiSeigenOdrCtrl()
│   └── hakkoSOD()
├── vLanIdVaChangeOdrCtrl()
│   └── hakkoSOD()
└── wribInfoAddOdrCtrl()
    └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getSvcKeiUtwkList(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サービス契約内訳一覧照会サービスインターフェイスを呼び出し、サービス契約番号に紐づく全サービス契約内訳情報の一覧をparamにセットします。  
キャンセル済み・解約済みの内訳除外やWiFi/WiMax判定、料金コース種別判定なども含む複雑なメソッドです。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSvcKeiUtwkList(handle, param)"] --> S1["editInMsg_EKK0161B004CBS(param)"]
  S1 --> S2["scCall.run(paramMap, handle)"]
  S2 --> S3["editResultRP_EKK0161B004CBS(result, param)"]
  S3 --> S4["param.getData(HAKKOSODCCWORKMAP) で dataMap 取得"]
  S4 --> IF1{"dataMap != null"}
  IF1 -- "Yes" --> L1["for(dataList item)"]
  L1 --> IF2{"childMap != null"}
  IF2 -- "Yes" --> S5["svcKeiUcwkStat = childMap.get(SVC_KEI_UCWK_STAT)"]
  S5 --> IF3{"SVC_KEI_STAT_920 or 910"}
  IF3 -- "Yes" --> S6["キャンセル済/解約済みは除外"]
  IF3 -- "No" --> S7["WiFi/WiMax判定、料金コース取得、trimKeys保持"]
  S7 --> END
  S6 --> END
  IF2 -- "No" --> END
  L1 --> END
  ELSE1 -- "No" --> S8["svc_kei_ucwk_no, svc_kei_ucwk_gadtm = 空配列"]
  IF1 -- "No" --> S8
  S8 --> END

  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. SC入力編集 → SC呼出 → 結果param反映。
2. 取得結果からdataMap, dataListをループ。
3. 各内訳ごとに
   - ステータスがキャンセル/解約済みなら除外
   - そうでなければWiFiやWiMax判定、trimKeys管理
   - 料金コース取得
4. 結果が空ならsvc_kei_ucwk_no, svc_kei_ucwk_gadtmは空配列。

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|----|-------|---------|--------|
| 1 | dataMap != null | - | for文 |
| 2 | childMap != null | - | ステータス判定 |
| 3 | svcKeiUcwkStat == 920 or 910 | JKKHakkoSODConstCC.SVC_KEI_STAT_920, JKKHakkoSODConstCC.SVC_KEI_STAT_910 | 除外 |
| 4 | dataList.size() > 0 | - | 配列初期化 |
| 5 | それ以外 | - | 空配列設定 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト・レスポンスパラメータ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | editInMsg_EKK0161B004CBS, run, editResultRP_EKK0161B004CBS | EKK0161 | サービス契約内訳 | 一覧照会（契約番号単位） |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- rtOpChgDivOdrCtrl
- vLanIdVaChangeOdrCtrl
- taiikiSeigenOdrCtrl
- wribInfoAddOdrCtrl
- addTensoDenwaOp
- newKeiOdrCtrl
- hakkoSOD
- adchgFixOdrCtrl

**呼出パス:**  
[契約・オーダ判定] → getSvcKeiUtwkList → editInMsg_EKK0161B004CBS → run → editResultRP_EKK0161B004CBS

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| editInMsg_EKK0161B004CBS, run, editResultRP_EKK0161B004CBS | R | サービス契約内訳 |

---

---

### getSvcKeiUtwkListSysid()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
getSvcKeiUtwkListSysid() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── newKeiOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected IRequestParameterReadWrite getSvcKeiUtwkListSysid(SessionHandle handle, IRequestParameterReadWrite param)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID）サービスインターフェイスを呼び出し、SYSIDに紐づくサービス契約内訳一覧を取得するメソッドです。  
契約情報の明細取得や後続業務のため、SC連携を通じてサービス契約内訳情報をparamにセットします。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getSvcKeiUtwkListSysid(handle, param)"] --> S1["Step1: editInMsg_EKK0161B003CBS(param) でSC入力メッセージ編集"]
  S1 --> S2["Step2: scCall.run(paramMap, handle) でSC実行"]
  S2 --> S3["Step3: editResultRP_EKK0161B003CBS(result, param) でSC結果をparamへ反映"]
  S3 --> RET["return param"]
```

**処理ステップ詳細:**

1. `editInMsg_EKK0161B003CBS(param)` でリクエストデータをSC入力メッセージとして編集。
2. `scCall.run(paramMap, handle)` でサービスコンポーネント呼び出しを実行。
3. `editResultRP_EKK0161B003CBS(result, param)` でレスポンスをparamへマッピング。
4. paramを返却。

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | なし | - | 直列処理 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト・レスポンスパラメータ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | run（editInMsg_EKK0161B003CBS, editResultRP_EKK0161B003CBS） | EKK0161 | サービス契約内訳 | SYSIDによる一覧照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- newKeiOdrCtrl
- adchgFixOdrCtrl
- hakkoSOD

**呼出パス:**  
[新規契約・変更・SOD発行等] → getSvcKeiUtwkListSysid → editInMsg_EKK0161B003CBS → run → editResultRP_EKK0161B003CBS

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| run | R | サービス契約内訳 |

---

---

### getTaknkikiM()

#### 呼出元 (Reverse Call Tree) — 14 direct callers

```
getTaknkikiM() ← gọi bởi:
├── addIpv6SODAft()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── jdgIpv6EKK0361A010()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
└── jdgIpv6()
    ├── adchgFixOdrCtrl()
    ├── addIpv6SODAft()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── newKeiOdrCtrl()
    ├── jdgIpv6EKK0361A010()
    │   ├── adchgFixOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── newKeiOdrCtrl()
    │   ├── addIpv6SODAft()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── newKeiOdrCtrl()
    │   │       ├── adchgFixOdrCtrl()
    │   │       └── hakkoSOD()
    │   └── kaihkOdrCtrl()
    │       └── hakkoSOD()
    └── opSetOdrCtrl()
        ├── cnclOdrCtrl()
        ├── hakkoSOD()
        ├── kaihkOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── dslOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── cnclOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── ksiDslFixOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── ksiDslOdrCtrl()
        │       └── hakkoSOD()
        ├── htelNoDslOdrCtrl()
        │   └── hakkoSOD()
        ├── htelNoInfoChgeOdrCtrl()
        │   └── hakkoSOD()
        └── htelNoKaihkOdrCtrl()
            └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected HashMap<String, Object> getTaknkikiM(SessionHandle handle, IRequestParameterReadWrite param, String taknkikiModelCd)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

宅内機器型式一意照会（EZM0411A010）を実行し、指定した宅内機器型式コードの詳細情報を取得する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getTaknkikiM(handle, param, taknkikiModelCd)"]
    --> S1["Step1: inHashTaknにTAKNKIKI_MODEL_CDをセット"]
    --> S2["Step2: callEZM0411A010SCで宅内機器型式一意照会実行"]
    --> IF1{"statusCode==0か"}
    IF1 -- "No" --> ERR1["CCExceptionスロー"]
    IF1 -- "Yes" --> S3["Step3: EZM0411A010結果Hashを返却"]
    style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. inHashTaknに `JKKHakkoSODConstCC.TAKNKIKI_MODEL_CD` をセット
2. callEZM0411A010SCで一意照会を実行
3. statusCodeが0でなければ例外（CCException）
4. 正常時は `JKKHakkoSODConstCC.TEMPLATE_ID_EZM0411A010` をキーにHashMapを返却

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先               |
|---|------|--------|----------------------|
| 1 | `statusCode != 0` | - | 例外（CCException）|
| 2 | `statusCode == 0` | - | 結果返却           |

---

#### 3. パラメータ分析

| No | パラメータ名      | 型                        | 業務説明                    |
|----|-------------------|---------------------------|-----------------------------|
| 1  | handle            | SessionHandle             | セッションハンドル          |
| 2  | param             | IRequestParameterReadWrite| 業務データコンテナ          |
| 3  | taknkikiModelCd   | String                    | 宅内機器型式コード          |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド            | SCコード | エンティティ           | 操作説明                                |
|------|-----------------------|----------|------------------------|-----------------------------------------|
| R    | callEZM0411A010SC     | EZM0411  | 宅内機器型式           | 宅内機器型式一意照会                    |

---

#### 5. 依存トレース (Dependency Trace)

**起点 (Entry Point):**
- jdgIpv6
- jdgIpv6EKK0361A010
- opSetOdrCtrl
- addIpv6SODAft
- kaihkOdrCtrl
- htelNoInfoChgeOdrCtrl
- htelNoKaihkOdrCtrl
- htelNoDslOdrCtrl
- dslOdrCtrl
- hakkoSOD
- newKeiOdrCtrl
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl

**呼出パス:**
```
[業務制御クラス.メソッド] → getTaknkikiM → callEZM0411A010SC
```

**終端 (End Points):**

| SC メソッド         | CRUD | エンティティ           |
|--------------------|------|------------------------|
| callEZM0411A010SC  | R    | 宅内機器型式           |

---

---

### getVAkikiInfo()

#### 呼出元 (Reverse Call Tree) — 13 direct callers

```
getVAkikiInfo() ← gọi bởi:
├── cnclOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── findZ1OrderAtKK1041SvcKeiUcwk()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── getZ1HakkoKh()
│   ├── cnclOdrCtrl()
│   ├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoDslOdrCtrl()
│   ├── htelNoInfoChgeOdrCtrl()
│   ├── htelNoKaihkOdrCtrl()
│   ├── kaihkOdrCtrl()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── opSetOdrCtrl()
│   └── findZ1OrderAtKK1041SvcKeiUcwk()
│       ├── cnclOdrCtrl()
│       ├── dslOdrCtrl()
│       ├── hakkoSOD()
│       ├── htelNoDslOdrCtrl()
│       ├── htelNoInfoChgeOdrCtrl()
│       ├── htelNoKaihkOdrCtrl()
│       ├── kaihkOdrCtrl()
│       ├── ksiDslFixOdrCtrl()
│       ├── ksiDslOdrCtrl()
│       └── opSetOdrCtrl()
└── isKikiSeizoNoCheck()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    │   └── hakkoSOD()
    └── opSetOdrCtrl()
        ├── cnclOdrCtrl()
        ├── hakkoSOD()
        ├── htelNoInfoChgeOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── dslOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── cnclOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── ksiDslFixOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── ksiDslOdrCtrl()
        │       └── hakkoSOD()
        ├── htelNoDslOdrCtrl()
        │   └── hakkoSOD()
        ├── htelNoKaihkOdrCtrl()
        │   └── hakkoSOD()
        └── kaihkOdrCtrl()
            └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected HashMap<String, Object> getVAkikiInfo(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo, String vaTaknkikiModelCd, String vaKikiChgNo, String svcKeiUcwkNo)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

VA機器（Voice Adapter等）の現在および過去（修理交換中、契約変更後、未来日など）の状態を調査・取得し、業務ロジックで必要な機器属性情報や紐付け情報を返却する。電話番号変更や多機能ルーターの状態把握、Z1判定などさまざまな複雑業務の基盤となる。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getVAkikiInfo(handle, param, svcKeiNo, vaTaknkikiModelCd, vaKikiChgNo, svcKeiUcwkNo)"]
    --> IF1{"svcKeiNo, vaKikiChgNo, svcKeiUcwkNoがすべて空でないか"}
  IF1 -- "Yes" --> S1["Step1: EKK0341B008_機器提供サービス契約一覧照会を実行"]
  S1 --> IF2{"statusCode==0か"}
  IF2 -- "No" --> ERR1["CCExceptionスロー"]
  IF2 -- "Yes" --> S2["Step2: 取得リストから各機器情報を走査（for）"]
  S2 --> IF3{"KKTK_SVC_CD, KIKI_CHG_NO判定"}
  IF3 -- "VA機器もしくは多機能ルータ" --> S3["Step3: getShuriKokanBfKikiで修理交換中の機器を取得"]
  S3 --> IF4{"結果有無/VA機器変更番号一致"}
  IF4 -- "結果有" --> RET1["修理交換前機器を返却"]
  IF4 -- "一致" --> RET2["EKK0341B022SCHashを返却"]
  S2 --> IF5{"交換中レコード専用照会（callEKK0341B008_02SC）"}
  IF5 -- "statusCode!=0" --> ERR2["CCExceptionスロー"]
  IF5 -- "リスト有" --> S4["VA機器/異動区分=EG切替なら返却"]
  S4 --> IF6{"KKTK_SVC_CD=HTEL_VA && 変更番号一致 && 異動区分=00067"}
  IF6 -- "Yes" --> RET3["EKK0341B022SCHash返却"]
  S2 --> IF7{"未来日レコード取得（callEKK0341B029SC）"}
  IF7 -- "msgEKK0341B029有 && KKTK_SVC_CD=多機能ルータ" --> RET4["msgEKK0341B029.getMsgData()返却"]
  S2 --> IF8{"契約変更後機器対応（callEKK0341B021SC）"}
  IF8 -- "msgEKK0341B021List有" --> S5["for-each: msgEKK0341B021"]
  S5 --> IF9{"CUR_KKTK_SVC_CD=多機能ルータ他"}
  IF9 -- "Yes" --> RET5["outMap返却"]
  IF1 -- "No" --> RET6["null返却"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
  style IF7 fill:#ffcc00
  style IF8 fill:#ffcc00
  style IF9 fill:#ffcc00
```

**処理ステップ詳細:**

1. サービス契約番号、VA機器変更番号、内訳番号が全て空でない場合、EKK0341B008SCを呼び出して機器情報を取得。
2. statusCode異常時は例外（CCException）。
3. 取得したリストをforで走査し、機器種別コードや機器変更番号を判定。
4. VA機器または多機能ルータの場合、修理交換中の機器があればそれを返却。VA機器変更番号が一致すれば、そのデータを返す。
5. 交換中レコード専用照会（EKK0341B008_02SC）も同様にstatusチェックと内容判定（異動区分00067=EG切替）。
6. 未来日レコード（EKK0341B029SC）や契約変更後機器（EKK0341B021SC）も必要に応じて取得し、条件に合致すれば返却。
7. 全て該当しない場合はnull返却。

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値・意味 | 分岐先                             |
|---|------|-------------|------------------------------------|
| 1 | `!isBlank(svcKeiNo) && !isBlank(vaKikiChgNo) && !isBlank(svcKeiUcwkNo)` |  | EKK0341B008SC照会           |
| 2 | `statusCode != 0` |  | 例外（CCException）                |
| 3 | `KKTK_SVC_CDがVAまたは多機能ルータ` |  | 修理交換中機器取得             |
| 4 | `kokanBfKiki != null && !kokanBfKiki.isEmpty()` |  | 修理交換機器返却               |
| 5 | `vaKikiChgNo.equals(kikiChgNo)` |  | 取得値返却                      |
| 6 | `statusCode != 0（交換中照会）` |  | 例外（CCException）             |
| 7 | `msgEKK0341B022_02SCList != null && msgEKK0341B022_02SCList.length > 0` |  | VA機器/異動区分判定            |
| 8 | `KKTK_SVC_CD=HTEL_VA` |  | 変更番号・異動区分判定           |
| 9 | `vaKikiChgNo.equals(kikiChgNo) && "00067".equals(idoDiv)` |  | 取得値返却                      |
| 10 | `msgEKK0341B029 != null` |  | 未来日レコード                   |
| 11 | `KKTK_SVC_CD=多機能ルータ` |  | データ返却                       |
| 12 | `msgEKK0341B021List != null` |  | 契約変更後機器対応for-each       |
| 13 | `CUR_KKTK_SVC_CD=多機能ルータ他` |  | データ返却                       |
| 14 | else |  | null返却                         |

---

#### 3. パラメータ分析

| No | パラメータ名         | 型                          | 業務説明                                           |
|----|----------------------|-----------------------------|----------------------------------------------------|
| 1  | handle               | SessionHandle                | セッションハンドル                                 |
| 2  | param                | IRequestParameterReadWrite   | 業務データコンテナ                                 |
| 3  | svcKeiNo             | String                       | サービス契約番号                                   |
| 4  | vaTaknkikiModelCd    | String                       | VA機器型式コード                                   |
| 5  | vaKikiChgNo          | String                       | VA機器変更番号                                     |
| 6  | svcKeiUcwkNo         | String                       | サービス契約内訳番号                               |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド             | SCコード   | エンティティ          | 操作説明                                                        |
|------|------------------------|------------|-----------------------|-----------------------------------------------------------------|
| R    | callEKK0341B008SC      | EKK0341    | 機器提供サービス契約  | 機器提供サービス契約一覧照会                                    |
| R    | callEKK0341B008_02SC   | EKK0341    | 機器提供サービス契約  | 機器提供サービス契約一覧照会（交換中レコード専用）              |
| R    | callEKK0341B029SC      | EKK0341    | 機器提供サービス契約  | 機器提供サービス契約一覧照会（機器変更番号）                    |
| R    | callEKK0341B021SC      | EKK0341    | 機器提供サービス契約  | 機器提供サービス契約一覧照会（予約／契約変更後機器）            |
| R    | getShuriKokanBfKiki    | EDK0301    | 返品機器取消         | 修理交換前機器情報取得                                          |

---

#### 5. 依存トレース (Dependency Trace)

**起点 (Entry Point):**
- getZ1HakkoKh
- isKikiSeizoNoCheck
- findZ1OrderAtKK1041SvcKeiUcwk
- htelNoInfoChgeOdrCtrl
- opSetOdrCtrl
- hakkoSOD
- htelNoKaihkOdrCtrl
- htelNoDslOdrCtrl
- kaihkOdrCtrl
- dslOdrCtrl
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl

**呼出パス:**
```
[業務制御クラス.メソッド] → getVAkikiInfo → callEKK0341B008SC/他 → [各種照会]
```

**終端 (End Points):**

| SC メソッド             | CRUD | エンティティ                |
|------------------------|------|-----------------------------|
| callEKK0341B008SC      | R    | 機器提供サービス契約         |
| callEKK0341B008_02SC   | R    | 機器提供サービス契約         |
| callEKK0341B029SC      | R    | 機器提供サービス契約         |
| callEKK0341B021SC      | R    | 機器提供サービス契約         |
| getShuriKokanBfKiki    | R    | 返品機器取消                 |

---

---

### getWorkCAANMsg()

#### 呼出元 (Reverse Call Tree) — 28 direct callers

```
getWorkCAANMsg() ← gọi bởi:
├── callEDK0301B060SC()    [trực tiếp]
├── callEKK0341B001SC()    [trực tiếp]
├── callEKK0341B008SCRireki()    [trực tiếp]
├── callEKK0341B021SC()    [trực tiếp]
├── callEKK0341B029SC()    [trực tiếp]
├── checkTakinoRT()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── findZ1OrderAtKK1041()    [trực tiếp]
├── findZ1OrderAtKK1041SvcKeiUcwk()    [trực tiếp]
├── getShuriKokanBfKiki()    [trực tiếp]
├── getVAkikiInfo()    [trực tiếp]
├── getZ1HakkoKh()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── isKikiSeizoNoCheck()    [trực tiếp]
├── isRegalVaKiki()    [trực tiếp]
├── jdgIpv6()    [trực tiếp]
├── jdgOdr163()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── rtOpChgDivOdrCtrl()    [trực tiếp]
├── setChgePWForRouterConInfo()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── vLanIdChgOdrCtrl()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
└── callSvcInter()
    ├── bmpSwitchOdrCtrl()
    ├── checkTakinoRT()
    ├── cnclOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── dslOdrCtrl()
    ├── findZ1OrderAtKK1041()
    ├── findZ1OrderAtKK1041SvcKeiUcwk()
    ├── getShuriKokanBfKiki()
    ├── getVAkikiInfo()
    ├── getZ1HakkoKh()
    ├── hakkoSOD()
    ├── htelNoAddOdrCtrl()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── idpwShkkaSaifuriOdrCtrl()
    ├── isKikiSeizoNoCheck()
    ├── isRegalVaKiki()
    ├── jdgIpv6()
    ├── jdgIpv6EKK0361A010()
    ├── jdgOdr163()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── opSetOdrCtrl()
    ├── rtOpChgDivOdrCtrl()
    ├── setChgePWForRouterConInfo()
    ├── telNoChge()
    ├── vLanIdChgOdrCtrl()
    ├── wribInfoAddOdrCtrl()
    ├── callEDK0301B060SC()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── checkTakinoRT()
    │   ├── cnclOdrCtrl()
    │   ├── courseChgeOdrCtrl()
    │   ├── dslOdrCtrl()
    │   ├── findZ1OrderAtKK1041()
    │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   ├── getVAkikiInfo()
    │   ├── getZ1HakkoKh()
    │   ├── hakkoSOD()
    │   ├── htelNoAddOdrCtrl()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   ├── isKikiSeizoNoCheck()
    │   ├── isRegalVaKiki()
    │   ├── jdgIpv6()
    │   ├── jdgIpv6EKK0361A010()
    │   ├── jdgOdr163()
    │   ├── kaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── opSetOdrCtrl()
    │   ├── setChgePWForRouterConInfo()
    │   ├── telNoChge()
    │   ├── vLanIdChgOdrCtrl()
    │   ├── wribInfoAddOdrCtrl()
    │   └── getShuriKokanBfKiki()
    │       ├── adchgFixOdrCtrl()
    │       ├── addIpv6SODAft()
    │       ├── bmpSwitchOdrCtrl()
    │       ├── checkTakinoRT()
    │       ├── cnclOdrCtrl()
    │       ├── courseChgeOdrCtrl()
    │       ├── dslOdrCtrl()
    │       ├── findZ1OrderAtKK1041()
    │       ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │       ├── getVAkikiInfo()
    │       ├── getZ1HakkoKh()
    │       ├── hakkoSOD()
    │       ├── htelNoAddOdrCtrl()
    │       ├── htelNoDslOdrCtrl()
    │       ├── htelNoInfoChgeOdrCtrl()
    │       ├── htelNoKaihkOdrCtrl()
    │       ├── idpwShkkaSaifuriOdrCtrl()
    │       ├── isKikiSeizoNoCheck()
    │       ├── jdgIpv6()
    │       ├── jdgIpv6EKK0361A010()
    │       ├── jdgOdr163()
    │       ├── kaihkOdrCtrl()
    │       ├── ksiDslFixOdrCtrl()
    │       ├── ksiDslOdrCtrl()
    │       ├── opSetOdrCtrl()
    │       ├── setChgePWForRouterConInfo()
    │       ├── telNoChge()
    │       ├── wribInfoAddOdrCtrl()
    │       ├── isRegalVaKiki()
    │       │   ├── hakkoSOD()
    │       │   └── htelNoInfoChgeOdrCtrl()
    │       └── vLanIdChgOdrCtrl()
    │           └── hakkoSOD()
    ├── callEKK0341B001SC()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── checkTakinoRT()
    │   ├── cnclOdrCtrl()
    │   ├── courseChgeOdrCtrl()
    │   ├── dslOdrCtrl()
    │   ├── findZ1OrderAtKK1041()
    │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   ├── getShuriKokanBfKiki()
    │   ├── getVAkikiInfo()
    │   ├── getZ1HakkoKh()
    │   ├── hakkoSOD()
    │   ├── htelNoAddOdrCtrl()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   ├── isKikiSeizoNoCheck()
    │   ├── isRegalVaKiki()
    │   ├── jdgIpv6()
    │   ├── jdgIpv6EKK0361A010()
    │   ├── jdgOdr163()
    │   ├── kaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── opSetOdrCtrl()
    │   ├── setChgePWForRouterConInfo()
    │   ├── telNoChge()
    │   ├── vLanIdChgOdrCtrl()
    │   └── wribInfoAddOdrCtrl()
    ├── callEKK0341B008SCRireki()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── checkTakinoRT()
    │   ├── cnclOdrCtrl()
    │   ├── courseChgeOdrCtrl()
    │   ├── dslOdrCtrl()
    │   ├── findZ1OrderAtKK1041()
    │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   ├── getShuriKokanBfKiki()
    │   ├── getVAkikiInfo()
    │   ├── getZ1HakkoKh()
    │   ├── hakkoSOD()
    │   ├── htelNoAddOdrCtrl()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   ├── isKikiSeizoNoCheck()
    │   ├── isRegalVaKiki()
    │   ├── jdgIpv6()
    │   ├── jdgIpv6EKK0361A010()
    │   ├── jdgOdr163()
    │   ├── kaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── opSetOdrCtrl()
    │   ├── setChgePWForRouterConInfo()
    │   ├── telNoChge()
    │   ├── vLanIdChgOdrCtrl()
    │   └── wribInfoAddOdrCtrl()
    ├── callEKK0341B021SC()
    │   ├── adchgFixOdrCtrl()
    │   ├── addIpv6SODAft()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── cnclOdrCtrl()
    │   ├── courseChgeOdrCtrl()
    │   ├── dslOdrCtrl()
    │   ├── findZ1OrderAtKK1041()
    │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   ├── getZ1HakkoKh()
    │   ├── hakkoSOD()
    │   ├── htelNoAddOdrCtrl()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   ├── isKikiSeizoNoCheck()
    │   ├── jdgIpv6()
    │   ├── jdgIpv6EKK0361A010()
    │   ├── jdgOdr163()
    │   ├── kaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── opSetOdrCtrl()
    │   ├── setChgePWForRouterConInfo()
    │   ├── telNoChge()
    │   ├── vLanIdChgOdrCtrl()
    │   ├── wribInfoAddOdrCtrl()
    │   ├── checkTakinoRT()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── addIpv6SODAft()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── cnclOdrCtrl()
    │   │   ├── courseChgeOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoAddOdrCtrl()
    │   │   ├── idpwShkkaSaifuriOdrCtrl()
    │   │   ├── jdgIpv6EKK0361A010()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   ├── ksiDslOdrCtrl()
    │   │   ├── newKeiOdrCtrl()
    │   │   ├── vLanIdChgOdrCtrl()
    │   │   ├── dslOdrCtrl()
    │   │   │   ├── cnclOdrCtrl()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   └── ksiDslOdrCtrl()
    │   │   ├── findZ1OrderAtKK1041()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── htelNoAddOdrCtrl()
    │   │   │   └── idpwShkkaSaifuriOdrCtrl()
    │   │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   │   │   ├── cnclOdrCtrl()
    │   │   │   ├── dslOdrCtrl()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── htelNoDslOdrCtrl()
    │   │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   │   ├── htelNoKaihkOdrCtrl()
    │   │   │   ├── kaihkOdrCtrl()
    │   │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   ├── ksiDslOdrCtrl()
    │   │   │   └── opSetOdrCtrl()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── jdgIpv6()
    │   │   │   ├── adchgFixOdrCtrl()
    │   │   │   ├── addIpv6SODAft()
    │   │   │   ├── cnclOdrCtrl()
    │   │   │   ├── dslOdrCtrl()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── htelNoDslOdrCtrl()
    │   │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   │   ├── htelNoKaihkOdrCtrl()
    │   │   │   ├── jdgIpv6EKK0361A010()
    │   │   │   ├── kaihkOdrCtrl()
    │   │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   ├── ksiDslOdrCtrl()
    │   │   │   ├── newKeiOdrCtrl()
    │   │   │   └── opSetOdrCtrl()
    │   │   ├── jdgOdr163()
    │   │   │   ├── adchgFixOdrCtrl()
    │   │   │   ├── courseChgeOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── kaihkOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── opSetOdrCtrl()
    │   │   │   ├── cnclOdrCtrl()
    │   │   │   ├── dslOdrCtrl()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── htelNoDslOdrCtrl()
    │   │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   │   ├── htelNoKaihkOdrCtrl()
    │   │   │   ├── kaihkOdrCtrl()
    │   │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   └── ksiDslOdrCtrl()
    │   │   ├── setChgePWForRouterConInfo()
    │   │   │   ├── hakkoSOD()
    │   │   │   └── idpwShkkaSaifuriOdrCtrl()
    │   │   ├── telNoChge()
    │   │   │   ├── bmpSwitchOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── wribInfoAddOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── getVAkikiInfo()
    │   │   ├── cnclOdrCtrl()
    │   │   ├── dslOdrCtrl()
    │   │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   ├── ksiDslOdrCtrl()
    │   │   ├── opSetOdrCtrl()
    │   │   ├── getZ1HakkoKh()
    │   │   │   ├── cnclOdrCtrl()
    │   │   │   ├── dslOdrCtrl()
    │   │   │   ├── findZ1OrderAtKK1041SvcKeiUcwk()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── htelNoDslOdrCtrl()
    │   │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   │   ├── htelNoKaihkOdrCtrl()
    │   │   │   ├── kaihkOdrCtrl()
    │   │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   ├── ksiDslOdrCtrl()
    │   │   │   └── opSetOdrCtrl()
    │   │   └── isKikiSeizoNoCheck()
    │   │       ├── cnclOdrCtrl()
    │   │       ├── dslOdrCtrl()
    │   │       ├── hakkoSOD()
    │   │       ├── htelNoDslOdrCtrl()
    │   │       ├── htelNoInfoChgeOdrCtrl()
    │   │       ├── htelNoKaihkOdrCtrl()
    │   │       ├── kaihkOdrCtrl()
    │   │       ├── ksiDslFixOdrCtrl()
    │   │       ├── ksiDslOdrCtrl()
    │   │       └── opSetOdrCtrl()
    │   └── rtOpChgDivOdrCtrl()
    │       └── hakkoSOD()
    └── callEKK0341B029SC()
        ├── adchgFixOdrCtrl()
        ├── addIpv6SODAft()
        ├── bmpSwitchOdrCtrl()
        ├── checkTakinoRT()
        ├── cnclOdrCtrl()
        ├── courseChgeOdrCtrl()
        ├── dslOdrCtrl()
        ├── findZ1OrderAtKK1041()
        ├── findZ1OrderAtKK1041SvcKeiUcwk()
        ├── getVAkikiInfo()
        ├── getZ1HakkoKh()
        ├── hakkoSOD()
        ├── htelNoAddOdrCtrl()
        ├── htelNoDslOdrCtrl()
        ├── htelNoInfoChgeOdrCtrl()
        ├── htelNoKaihkOdrCtrl()
        ├── idpwShkkaSaifuriOdrCtrl()
        ├── isKikiSeizoNoCheck()
        ├── jdgIpv6()
        ├── jdgIpv6EKK0361A010()
        ├── jdgOdr163()
        ├── kaihkOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── opSetOdrCtrl()
        ├── setChgePWForRouterConInfo()
        ├── telNoChge()
        ├── vLanIdChgOdrCtrl()
        └── wribInfoAddOdrCtrl()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected CAANMsg getWorkCAANMsg(Map<?, ?> rslt)`
> **戻り値:** `CAANMsg`

---

#### 1. 役割

SC照会呼出結果のMapから業務メッセージ(親テンプレート)を取得し返却する。SCインターフェース共通の業務データ抽出ユーティリティ。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getWorkCAANMsg(rslt)"] --> S1["Step1: rslt.get(JCMConstants.TEMPLATE_LIST_KEY)で親メッセージ取得"]
  S1 --> RET["return parentTemplate"]
```

**処理ステップ詳細:**

1. 引数Map（rslt）から `JCMConstants.TEMPLATE_LIST_KEY` キーでCAANMsg（親メッセージ）を取得し返却

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先               |
|---|------|--------|----------------------|
| 1 | なし | -      | 取得値返却           |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型          | 業務説明                      |
|----|--------------|-------------|-------------------------------|
| 1  | rslt         | Map<?, ?>   | SC照会呼出結果                |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ         | 操作説明                 |
|------|------------|----------|----------------------|--------------------------|
| -    | -          | -        | -                    | データ抽出ユーティリティ |

---

#### 5. 依存トレース (Dependency Trace)

**起点 (Entry Point):**
- callSvcInter
- callEKK0341B021SC
- callEKK0341B001SC
- callEDK0301B060SC
- callEKK0341B008SCRireki
- callEKK0341B029SC
- getVAkikiInfo
- checkTakinoRT
- getShuriKokanBfKiki
- hakkoSOD
- getZ1HakkoKh
- isKikiSeizoNoCheck
- findZ1OrderAtKK1041SvcKeiUcwk
- findZ1OrderAtKK1041
- jdgOdr163
- vLanIdChgOdrCtrl
- telNoChge
- jdgIpv6
- wribInfoAddOdrCtrl
- setChgePWForRouterConInfo
- htelNoInfoChgeOdrCtrl
- htelNoKaihkOdrCtrl
- opSetOdrCtrl
- htelNoDslOdrCtrl
- dslOdrCtrl
- kaihkOdrCtrl
- isRegalVaKiki
- ほか多数

**呼出パス:**
```
[各業務制御クラス.メソッド] → callSvcInter → getWorkCAANMsg
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| -           | -    | -           |

---

---

### getZ1HakkoKh()

#### 呼出元 (Reverse Call Tree) — 11 direct callers

```
getZ1HakkoKh() ← gọi bởi:
├── cnclOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
└── findZ1OrderAtKK1041SvcKeiUcwk()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    └── opSetOdrCtrl()
        ├── cnclOdrCtrl()
        ├── hakkoSOD()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── dslOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── cnclOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── ksiDslFixOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── ksiDslOdrCtrl()
        │       └── hakkoSOD()
        ├── htelNoDslOdrCtrl()
        │   └── hakkoSOD()
        ├── htelNoInfoChgeOdrCtrl()
        │   └── hakkoSOD()
        ├── htelNoKaihkOdrCtrl()
        │   └── hakkoSOD()
        └── kaihkOdrCtrl()
            └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected String getZ1HakkoKh(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo, String svcKeiUcwkNo)`
> **戻り値:** `String`

---

#### 1. 役割

Z1オーダが発行可能な状態か判定し、可否区分コードを返却します。  
VLAN-ID・VA機器の状態・各種SC照会・契約ステータス等を判定基準として照合します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["getZ1HakkoKh(handle, param, svcKeiNo, svcKeiUcwkNo)"]
    --> S1["Step1: getEKK0251B003SCでVLAN-ID確定フラグ取得"]
    --> IF1{"vlanIdFixFlg != CD01343_FIX_FLG_ON"}
    IF1 -- "Yes" --> S2["CD_DIV_KH_HI返却"]
    IF1 -- "No" --> S3["サービス契約内訳番号でcallEKK0191A010SC"]
    S3 --> IF2{"statusCode != 0"}
    IF2 -- "Yes" --> S_ERR["CCException発生"]
    IF2 -- "No" --> S4["VA機器型式コード・機器変更番号取得、getVAkikiInfo呼出"]
    S4 --> IF3{"eKK0341B022SCHash!=null && KIKI_SEIZO_NOが空でない"}
    IF3 -- "Yes" --> S5["CD_DIV_KH_KA返却"]
    IF3 -- "No" --> S6["CD_DIV_KH_HI返却"]
    S2 & S5 & S6 & S_ERR --> RET["return"]
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
    style IF3 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `vlanIdFixFlg != CD01343_FIX_FLG_ON` | KH_HI | 発行不可 |
| 2 | `statusCode != 0` | - | CCException発生 |
| 3 | `eKK0341B022SCHash != null && !isBlank(KIKI_SEIZO_NO)` | KH_KA | 発行可 |
| 4 | return | - | 区分コード返却 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 3 | svcKeiNo | String | サービス契約番号 |
| 4 | svcKeiUcwkNo | String | サービス契約内訳番号 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | getEKK0251B003SC | EKK0251 | サービス契約回線内訳 | 一覧照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | getVAkikiInfo | EKK0341 | 機器提供サービス契約 | 機器情報取得 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**
- findZ1OrderAtKK1041SvcKeiUcwk, hakkoSOD, opSetOdrCtrl等からの呼出

**呼出パス:**

```
findZ1OrderAtKK1041SvcKeiUcwk → getZ1HakkoKh
hakkoSOD → getZ1HakkoKh
→ getEKK0251B003SC [READ:サービス契約回線内訳]
→ callEKK0191A010SC [READ:サービス契約内訳＜eo光電話＞]
→ getVAkikiInfo [READ:機器提供サービス契約]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-------------|------|-------------|
| getEKK0251B003SC | R | サービス契約回線内訳 |
| callEKK0191A010SC | R | サービス契約内訳＜eo光電話＞ |
| getVAkikiInfo | R | 機器提供サービス契約 |

---

---

---

### hakkoCourseChgSOD()

#### 呼出元 (Reverse Call Tree) — 3 direct callers

```
hakkoCourseChgSOD() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
└── courseChgeOdrCtrl()
    ├── hakkoSOD()
    └── adchgFixOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite hakkoCourseChgSOD(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

ネット回線の料金プランコード変更時（認証ID変更なし）に必要なサービスオーダ（SOD）を発行します。入力情報や照会結果から判定し、コース変更のためのSOD発行条件・オーダ情報作成ワークに登録を行います。呼出元はコース変更関連の複数業務メソッドです。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["hakkoCourseChgSOD(handle, param, fixedText)"]
    --> IF1{"workMap != null"}
    IF1 -- "Yes" --> S1["サービス契約番号取得"]
    IF1 -- "No" --> IF2{"svcKeiNoが空"}
    IF2 -- "Yes" --> RET1["return param"]
    IF2 -- "No" --> S2["svcKeiNoと予約適用日をworkMapにセット"]
    S2 --> S3["getSvcKeiInfo実行"]
    S3 --> IF3{"pplan_cdが空"}
    IF3 -- "Yes" --> S4["スキップ"]
    IF3 -- "No" --> IF4{"同一処理番号なし"}
    IF4 -- "Yes" --> S5["getSame_trn_no実行"]
    IF4 -- "No" --> S6["スキップ"]
    S5 --> S6
    S6 --> IF5{"コース変更内訳取得失敗"}
    IF5 -- "Yes" --> RET2["return param"]
    IF5 -- "No" --> IF6{"コース変更後内訳有"}
    IF6 -- "Yes" --> RET3["return param"]
    IF6 -- "No" --> S7["getOldVrsbIdgSvcDtlCd実行"]
    S7 --> S8["addSOD(ODR_NAIYO_CD_103)"]
    S8 --> S9["addSOD(ODR_NAIYO_CD_104)"]
    S9 --> S10["addSOD(ODR_NAIYO_CD_101)"]
    S10 --> S11["callEKK0351B010SC(オプション契約一覧照会)"]
    S11 --> S12["callEKK0091A010_SC(サービス契約一意照会)"]
    S12 --> IF7{"statusCode != 0"}
    IF7 -- "Yes" --> ERR1["CCExceptionスロー"]
    IF7 -- "No" --> LOOP1["オプション契約毎にaddSOD分岐"]
    LOOP1 --> IF8{"opSvcCd=FIXIPAD"}
    IF8 -- "Yes" --> IF9{"opSvcKeiStat≠910/920"}
    IF9 -- "Yes" --> S13["addSOD(ODR_NAIYO_CD_145,146,144)"]
    IF9 -- "No" --> S14["スキップ"]
    IF8 -- "No" --> IF10{"opSvcCd=MLTISE"}
    IF10 -- "Yes" --> IF11{"opSvcKeiStat≠910/920"}
    IF11 -- "Yes" --> S15["addSOD(ODR_NAIYO_CD_170,142,152,106)"]
    IF11 -- "No" --> S16["スキップ"]
    IF10 -- "No" --> S17["スキップ"]
    LOOP1 --> IF12{"mltise_flg && fixipad_flg"}
    IF12 -- "Yes" --> IF13{"svc_kei_stat=210/220"}
    IF13 -- "Yes" --> S18["addSOD(ODR_NAIYO_CD_106)"]
    IF13 -- "No" --> S19["スキップ"]
    IF12 -- "No" --> IF14{"mltise_flg && !fixipad_flg"}
    IF14 -- "Yes" --> S20["分岐 addSOD"]
    IF14 -- "No" --> S21["スキップ"]
    S21 --> IF15{"fixipad_flg || KOTEI_IP_AD_8_DIV非空"}
    IF15 -- "Yes" --> S22["addSOD(ODR_NAIYO_CD_106)"]
    IF15 -- "No" --> S23["スキップ"]
    S23 --> IF16{"svc_kei_stat=210/220"}
    IF16 -- "Yes" --> S24["addSOD(ODR_NAIYO_CD_106)"]
    IF16 -- "No" --> S25["スキップ"]
    S25 --> END
```

**制御フロー分岐（全条件列挙）:**  
（詳細はControlFlow部およびMethodSequence記載全分岐を反映）

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 3 | fixedText | String | 固定テキスト |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B010SC | EKK0351 | オプションサービス契約 | 一覧照会（契約番号） |
| R | callEKK0091A010_SC | EKK0091 | サービス契約 | 一意照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 取得 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳 | 一覧照会（契約番号） |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約 | 一意照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞ | 一意照会 |
| R | callEKK1681B001SC | EKK1681 | 異動予約 | 一覧照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- courseChgeOdrCtrl → hakkoCourseChgSOD
- adchgFixOdrCtrl → hakkoCourseChgSOD
- hakkoSOD → hakkoCourseChgSOD

**呼出パス:**

```
courseChgeOdrCtrl → hakkoCourseChgSOD → callEKK0351B010SC → EKK0351
                                         → callEKK0091A010_SC → EKK0091
                                         → 他CRUD
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0351B010SC | R | オプションサービス契約 |
| callEKK0091A010_SC | R | サービス契約 |
| callEKK1081C011SC | R | 同一処理番号 |
| callEKK0161B004SC | R | サービス契約内訳 |
| callEKK0351A010SC | R | オプションサービス契約 |
| callEKK0361A010SC | R | オプションサービス契約＜ISP＞ |
| callEKK1681B001SC | R | 異動予約 |

---

---

### hakkoSOD()

> **呼出元**: (トレースなし)


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite hakkoSOD(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サービスオーダ発行のエントリーポイントとして、入力されたデータリストに基づき、各種サービスオーダ登録処理（新規、解約、コース変更、休止等）を一括でディスパッチ・制御し実行する。  
各データごとに対象となる異動区分・処理区分・各種制御フラグを判定し、適切な個別のSOD制御メソッド（newKeiOdrCtrlやkaihkOdrCtrl等）へルーティングし、オーダ発行条件・ワーク登録のための下位SCを呼び出す。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
    START["hakkoSOD(handle, param, fixedText)"] --> S1["運用日付取得 JCCBPCommon.getOpeDate(null)"]
    S1 --> S2["ユーザデータ情報取得 param.getData(fixedText)"]
    S2 --> S3["機能コード取得 inMap.get(JCMConstants.FUNC_CODE_KEY)"]
    S3 --> S4["対象データリスト取得 inMap.get(JKKHakkoSODConstCC.TRGT_DATA_LIST)"]
    S4 --> IF1{"(isBlank(funcCD) or FUNC_CODE_2 or dataList==null or size==0)?"}
    IF1 -- "Yes: 終了" --> S5["param.setControlMapData: RETURN_CODE, RETURN_MESSAGE (正常)"]
    S5 --> RET1["return param"]
    IF1 -- "No: データ有" --> S6["前回レコード、同一処理番号などクラス変数クリア"]
    S6 --> S7["ダミーサービス契約番号取得 getDummySvcKeiNo"]
    S7 --> S8["for each dataList[i]"]
    S8 --> IF2{"sodMap != null ?"}
    IF2 -- "Yes" --> S9["SOD基本情報/サービス契約情報取得"]
    S9 --> S10["異動区分・処理区分・各種制御フラグ取得"]
    S10 --> IF3{"svc_kei_ucwk_info 取得 && 追加マッピング"}
    IF3 -- "Yes" --> S11["shkkaChrなどで追加情報セット"]
    IF3 -- "No" --> S12["skip"]
    S9 --> S13["サービス契約情報 詳細取得/再設定"]
    S13 --> S14["マンション系の場合、提供方式契約番号でダミープランコード取得"]
    S14 --> IF4{"ダミープランコード再設定要否"}
    IF4 -- "Yes" --> S15["料金プランコード再設定"]
    IF4 -- "No" --> S16["skip"]
    S14 --> S17["サービスオーダ発行CC作業マップに格納"]
    S17 --> S18["クラス変数再初期化 formatClassVar"]
    S18 --> IF5{"異動区分/処理区分により制御"}
    IF5 -- "新規/追加" --> S19["newKeiOdrCtrl"]
    IF5 -- "中断受付" --> S20["stpUkOdrCtrl"]
    IF5 -- "中断解除" --> S21["stpRlsOdrCtrl"]
    IF5 -- "回復" --> S22["kaihkOdrCtrl"]
    IF5 -- "解約" --> S23["kaihkOdrCtrl"]
    IF5 -- "強制解約" --> S24["dslOdrCtrl"]
    IF5 -- "強制解約確定" --> S25["ksiDslOdrCtrl"]
    IF5 -- "キャンセル" --> S26["cnclOdrCtrl"]
    IF5 -- "コース変更" --> S27["courseChgeOdrCtrl"]
    IF5 -- "オプション設定" --> S28["opSetOdrCtrl"]
    IF5 -- "光電話番号追加" --> S29["htelNoAddOdrCtrl"]
    IF5 -- "光電話番号変更" --> S30["htelNoChgeOdrCtrl"]
    IF5 -- "光電話番号解約" --> S31["htelNoDslOdrCtrl"]
    IF5 -- "光電話番号回復" --> S32["htelNoKaihkOdrCtrl"]
    IF5 -- "光電話移転トーキ" --> S33["htelItntokiOdrCtrl"]
    IF5 -- "光電話番号情報変更" --> S34["htelNoInfoChgeOdrCtrl"]
    IF5 -- "住所変更・確定" --> S35["adchgFixOdrCtrl"]
    IF5 -- "オプション引継" --> S36["opHktgiOdrCtrl"]
    IF5 -- "IDPW初期化再振" --> S37["idpwShkkaSaifuriOdrCtrl"]
    IF5 -- "休止受付" --> S38["pauseUkOdrCtrl"]
    IF5 -- "休止変更・予約取消" --> S39["pauseRlsChgeOdrCtrl"]
    IF5 -- "利用停止" --> S40["useStpOdrCtrl"]
    IF5 -- "利用停止解除" --> S41["useStpRlsOdrCtrl"]
    IF5 -- "割引情報登録" --> S42["wribInfoAddOdrCtrl"]
    IF5 -- "帯域制限設定解除" --> S43["taiikiSeigenOdrCtrl"]
    IF5 -- "番ポ切替" --> S44["bmpSwitchOdrCtrl"]
    IF5 -- "VLAN-ID変更" --> S45["vLanIdChgOdrCtrl"]
    IF5 -- "Wi-Fiスポット変更" --> S46["spotLoginSysidChgeOdrCtrl"]
    IF5 -- "VLAN-ID変更(一部)+VA紐換え" --> S47["vLanIdVaChangeOdrCtrl"]
    IF5 -- "番ポ戻し" --> S48["bmpSipDslOdrCtrl"]
    IF5 -- "マルウェアブロッキング" --> S49["malwareBlockingDivOdrCtrl"]
    IF5 -- "固定IPアドレス8" --> S50["koteiIpAd8DivOdrCtrl"]
    IF5 -- "ルーターオプション変更" --> S51["rtOpChgDivOdrCtrl"]
    IF5 -- "ENUM消去" --> S52["enumDelOdrCtrl"]
    IF5 -- "ENUM登録" --> S53["enumAddOdrCtrl"]
    IF5 -- "その他" --> S54["分岐なし/何もしない"]
    S19 --> S55["次データへ"]
    S20 --> S55
    S21 --> S55
    S22 --> S55
    S23 --> S55
    S24 --> S55
    S25 --> S55
    S26 --> S55
    S27 --> S55
    S28 --> S55
    S29 --> S55
    S30 --> S55
    S31 --> S55
    S32 --> S55
    S33 --> S55
    S34 --> S55
    S35 --> S55
    S36 --> S55
    S37 --> S55
    S38 --> S55
    S39 --> S55
    S40 --> S55
    S41 --> S55
    S42 --> S55
    S43 --> S55
    S44 --> S55
    S45 --> S55
    S46 --> S55
    S47 --> S55
    S48 --> S55
    S49 --> S55
    S50 --> S55
    S51 --> S55
    S52 --> S55
    S53 --> S55
    S54 --> S55
    S55 --> IF2
    IF2 -- "No" --> S55
    S55 --> END["return param"]
    RET1 --> END

    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
    style IF3 fill:#ffcc00
    style IF4 fill:#ffcc00
    style IF5 fill:#ffcc00

```

**制御フロー分岐（全条件列挙）**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | isBlank(funcCD) or FUNC_CODE_2 or dataList==null or size==0 | - | 正常終了してreturn param |
| 2 | sodMap != null | - | SOD基本情報/サービス契約情報取得 |
| 3 | ucwk_info_Map != null | - | 追加情報取得・shkkaChr実行 |
| 4 | !isBlank(svc_kei_info_Map.get("svc_kei_no")) && !dummySvckeiNoList.contains(svc_kei_info_Map.get("svc_kei_no")) | - | 詳細情報取得・ダミー除外 |
| 5 | PRC_GRP_CD_NET_MT && tk_hoshiki_kei_no!=null && tk_hoshiki_kei_no!="" | - | 提供方式契約番号からマンション判定 |
| 6 | eKK0891A010SCHash!=null && eKK0891A010SCHash!="" | - | 提供方式契約番号参照 |
| 7 | dammy_pplan_cd!=null && dammy_pplan_cd!="" | - | 料金プランコード再設定 |
| 8 | JKKHakkoSODConstCC.IDO_DIV_NEW.equals(ido_div) or JKKHakkoSODConstCC.IDO_DIV_SVCADD.equals(ido_div) | "00001" (新規契約), "00003" (サービス追加) | newKeiOdrCtrl |
| 9 | JKKHakkoSODConstCC.IDO_DIV_STPUK.equals(ido_div) | "00010" (中断受付) | stpUkOdrCtrl |
| 10 | JKKHakkoSODConstCC.IDO_DIV_STPRLS.equals(ido_div) | "00011" (中断解除) | stpRlsOdrCtrl |
| 11 | JKKHakkoSODConstCC.IDO_DIV_KAIHK.equals(ido_div) | "00012" (回復) | kaihkOdrCtrl |
| 12 | JKKHakkoSODConstCC.IDO_DIV_DSL.equals(ido_div) or JKKHakkoSODConstCC.IDO_DIV_TEKKYODSL.equals(ido_div) | "00013" (DSL解約), "00014" (特許DSL) | dslOdrCtrl |
| 13 | JKKHakkoSODConstCC.IDO_DIV_KYOSEIDSL.equals(ido_div) | "00015" (強制DSL解約) | ksiDslOdrCtrl |
| 14 | JKKHakkoSODConstCC.IDO_DIV_KYOSEIDSLFIX.equals(ido_div) | "00016" (強制DSL解約確定) | ksiDslFixOdrCtrl |
| 15 | JKKHakkoSODConstCC.IDO_DIV_CANCEL.equals(ido_div) | "00017" (キャンセル) | cnclOdrCtrl |
| 16 | JKKHakkoSODConstCC.IDO_DIV_COURSECHG.equals(ido_div) | "00018" (コース変更) | courseChgeOdrCtrl |
| 17 | JKKHakkoSODConstCC.IDO_DIV_OPSETTE.equals(ido_div) | "00019" (オプション設定) | opSetOdrCtrl |
| 18 | JKKHakkoSODConstCC.IDO_DIV_HTELNOADD.equals(ido_div) | "00020" (光電話番号追加) | htelNoAddOdrCtrl |
| 19 | JKKHakkoSODConstCC.IDO_DIV_HTELNOCHGE.equals(ido_div) | "00021" (光電話番号変更) | htelNoChgeOdrCtrl |
| 20 | JKKHakkoSODConstCC.IDO_DIV_HTELNODSL.equals(ido_div) | "00022" (光電話番号解約) | htelNoDslOdrCtrl |
| 21 | JKKHakkoSODConstCC.IDO_DIV_HTELNOKAIHK.equals(ido_div) | "00023" (光電話番号回復) | htelNoKaihkOdrCtrl |
| 22 | JKKHakkoSODConstCC.IDO_DIV_HTELITNTOKISETTE.equals(ido_div) | "00024" (光電話移転トーキ) | htelItntokiOdrCtrl |
| 23 | JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE.equals(ido_div) | "00025" (光電話番号情報変更) | htelNoInfoChgeOdrCtrl |
| 24 | JKKHakkoSODConstCC.IDO_DIV_ADCHGADD.equals(ido_div) or JKKHakkoSODConstCC.IDO_DIV_ADCHGFIX.equals(ido_div) | "00026","00027" (住所変更・確定) | adchgFixOdrCtrl |
| 25 | JKKHakkoSODConstCC.IDO_DIV_OPHKTGI.equals(ido_div) | "00028" (オプション引継) | opHktgiOdrCtrl |
| 26 | JKKHakkoSODConstCC.IDO_DIV_IDPWD_SHKKA_SAIFURI.equals(ido_div) | "00029" (IDPW初期化再振) | idpwShkkaSaifuriOdrCtrl |
| 27 | JKKHakkoSODConstCC.IDO_DIV_PAUSEUK.equals(ido_div) | "00030" (休止受付) | pauseUkOdrCtrl |
| 28 | JKKHakkoSODConstCC.IDO_DIV_PAUSERLSCHGE.equals(ido_div) | "00031" (休止変更・予約取消) | pauseRlsChgeOdrCtrl |
| 29 | JKKHakkoSODConstCC.IDO_DIV_USESTP.equals(ido_div) | "00032" (利用停止) | useStpOdrCtrl |
| 30 | JKKHakkoSODConstCC.IDO_DIV_USESTPRLS.equals(ido_div) | "00033" (利用停止解除) | useStpRlsOdrCtrl |
| 31 | JKKHakkoSODConstCC.IDO_DIV_WRIBINFOADD.equals(ido_div) | "00034" (割引情報登録) | wribInfoAddOdrCtrl |
| 32 | isBlank(ido_div) && (KEI_SVC_CTL_YOKYU_ODR_SKCD_011 or _012 or _013 or _014) | "011","012","013","014" (帯域制限) | taiikiSeigenOdrCtrl |
| 33 | isBlank(ido_div) && (KEI_SVC_CTL_YOKYU_ODR_SKCD_021) | "021" (番ポ切替) | bmpSwitchOdrCtrl |
| 34 | isBlank(ido_div) && (KEI_SVC_CTL_YOKYU_ODR_SKCD_031) | "031" (VLAN-ID変更) | vLanIdChgOdrCtrl |
| 35 | isBlank(ido_div) && (KEI_SVC_CTL_YOKYU_ODR_SKCD_041) | "041" (Wi-Fiスポット変更) | spotLoginSysidChgeOdrCtrl |
| 36 | IDO_DIV_EGCHANGE | "00035" (VLAN-ID変更(一部)+VA紐換え機器登録) | vLanIdVaChangeOdrCtrl |
| 37 | IDO_DIV_BMPMODOSHI | "00036" (番ポ戻し) | bmpSipDslOdrCtrl |
| 38 | isBlank(ido_div) && !isBlank(malware_blocking_div) | - | malwareBlockingDivOdrCtrl |
| 39 | isBlank(ido_div) && !isBlank(kotei_ip_ad_8_div) | - | koteiIpAd8DivOdrCtrl |
| 40 | isBlank(ido_div) && !isBlank(rt_op_chg_div) | - | rtOpChgDivOdrCtrl |
| 41 | IDO_DIV_ENUMDEL | "00037" (ENUM消去) | enumDelOdrCtrl |
| 42 | IDO_DIV_ENUMIADD | "00038" (ENUM登録) | enumAddOdrCtrl |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション情報を管理し、各種SC呼び出しの状態を維持する。 |
| 2 | param | IRequestParameterReadWrite | 入力業務パラメータおよび出力業務結果を保持するコンテナ。 |
| 3 | fixedText | String | 固定文字列。業務パラメータで使用するキー名。 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0891A010_SC | EKK0891 | 提供方式契約 | 提供方式契約一意照会 |
| R | callEZM0321A010_SC | EZM0321 | 業務パラメータ | 業務パラメータ一意照会 |
| R | callEKK0881A010_SC | EKK0881 | 回線使用契約 | 回線使用契約一意照会 |
| R | callEKK1081B001SC | EKK1081 | オーダ発行条件 | オーダ発行条件一覧照会 |
| R | callEKK0351B010SC | EKK0351 | オプションサービス契約 | オプションサービス契約一覧照会 |
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳 | サービス契約内訳一意照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | サービス契約内訳一意照会 |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約 | オプションサービス契約一意照会 |
| R | callEKK0091A010_SC | EKK0091 | サービス契約 | サービス契約一意照会 |
| R | callEKK0341B002SC | EKK0341 | 機器提供サービス契約 | 機器提供サービス契約一覧照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞ | 一意照会 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約 | 一覧照会 |
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約 | 一覧照会 |
| R | callEKK0341B008_02SC | EKK0341 | 機器提供サービス契約 | 交換中レコード専用一覧照会 |
| D | callEKK1081E010SC | EKK1081 | オーダ発行条件 | 論理削除 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定 | 一覧照会 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳 | 一覧照会 |
| R | callEKK0411A010SC | EKK0411 | サブオプションサービス契約＜ISP＞ | 一意照会 |
| R | callEKK0401A010SC | EKK0401 | サブオプションサービス契約 | 一意照会 |
| R | callEKK0191B001_2SC | EKK0191 | サービス契約内訳<eo光電話> | 一覧照会 |
| R | callEKK0191B001SC | EKK0191 | サービス契約内訳<eo光電話> | 一覧照会 |
| R | callEKK0161B008SC | EKK0161 | 番ポ申込種別 | 照会 |
| R | callEKK0341A010SC | EKK0341 | 機器提供サービス契約 | 一意照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約 | 一覧照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約 | 予約一覧照会 |
| R | callEKK2811A010SC | EKK2811 | 機器オプションサービス契約 | 一意照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳 | 現在利用中照会 |
| R | callEKK0791A010SC | EKK0791 | 料金コース | 一意照会 |
| R | callEKK0161B003SC | EKK0161 | サービス契約内訳 | 一覧照会 |
| R | callEKK0081B004SC | EKK0081 | サービス契約 | 一覧照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 取得 |
| R | callEKK0251B001SC | EKK0251 | サービス契約回線内訳 | 一覧照会 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約 | 一覧照会（回線内訳）|
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約 | 一覧照会（機器変更番号）|
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約 | 一意照会 |
| R | callEKK2101B002SC | EKK2101 | 住所変更明細 | 一覧照会（変更前識別番号）|
| R | callEKK2091A010SC | EKK2091 | 住所変更 | 一意照会 |
| R | callEKK2101B001SC | EKK2101 | 住所変更明細 | 一覧照会 |
| R | callEKU0081B010SC | EKU0081 | サービス契約工事案件 | 一覧照会 |
| R | callEKU0011A010SC | EKU0011 | 工事案件 | 一意照会 |
| R | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約 | 一覧照会（履歴照会）|
| R | callEDK0301B060SC | EDK0301 | 返品機器取消 | 一覧照会 |
| R | callEKK0341B001SC | EKK0341 | 機器提供サービス契約 | 一覧照会（機器製造番号）|

---

#### 4.5 メッセージID (Message IDs)

| # | メッセージID | 種別 | 利用コンテキスト |
|---|-----------|------|---------------|
| 1 | RETURN_CODE | Info | 正常/異常応答共通返却コード |
| 2 | RETURN_MESSAGE | Info | 正常/異常応答共通返却メッセージ |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- hakkoSOD（他業務系サービスのオーダ発行統合エントリーポイント）

**呼出パス:**

```
[呼出元] → hakkoSOD(handle, param, fixedText)
    → 各種OdrCtrl, SOD系制御メソッド
    → SC呼出 (callEKKxxxx)
    → CRUD
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1081D010CBS | C | オーダ発行条件登録 |
| callEKK1551D010CBS | C | オーダ情報作成ワーク登録 |
| callEKK0891A010_SC | R | 提供方式契約一意照会 |
| ...（全呼出SCを上記CRUDテーブル通り列挙）|

---

---

### hakkouIpv6()

#### 呼出元 (Reverse Call Tree) — 14 direct callers

```
hakkouIpv6() ← gọi bởi:
├── addIpv6SODAft()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── jdgIpv6EKK0361A010()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
└── jdgIpv6()
    ├── adchgFixOdrCtrl()
    ├── addIpv6SODAft()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── newKeiOdrCtrl()
    ├── jdgIpv6EKK0361A010()
    │   ├── adchgFixOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── newKeiOdrCtrl()
    │   ├── addIpv6SODAft()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── newKeiOdrCtrl()
    │   │       ├── adchgFixOdrCtrl()
    │   │       └── hakkoSOD()
    │   └── kaihkOdrCtrl()
    │       └── hakkoSOD()
    └── opSetOdrCtrl()
        ├── cnclOdrCtrl()
        ├── hakkoSOD()
        ├── kaihkOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── dslOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── cnclOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── ksiDslFixOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── ksiDslOdrCtrl()
        │       └── hakkoSOD()
        ├── htelNoDslOdrCtrl()
        │   └── hakkoSOD()
        ├── htelNoInfoChgeOdrCtrl()
        │   └── hakkoSOD()
        └── htelNoKaihkOdrCtrl()
            └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public void hakkouIpv6(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> eKK0361A010Info)`
> **戻り値:** `void`

---

#### 1. 役割

IPV6回線向けのSOD（Service Order Document）発行処理をまとめて行うメソッドです。複数の追加文SODや多機能ルーター向けSODをシナリオに沿って順次登録します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["hakkouIpv6(handle, param, eKK0361A010Info)"] --> S1["tsuikabunAddSOD(ODR_NAIYO_CD_155)"]
  S1 --> S2["addTakinoSOD(ODR_NAIYO_CD_404_IPv6)"]
  S2 --> S3["tsuikabunAddSOD(ODR_NAIYO_CD_163)"]
  S3 --> S4["tsuikabunAddSOD(ODR_NAIYO_CD_156)"]
  S4 --> S5["addTakinoSOD(ODR_NAIYO_CD_404_IPv6)"]
  S5 --> S6["tsuikabunAddSOD(ODR_NAIYO_CD_163)"]
  S6 --> S7["tsuikabunAddSOD(ODR_NAIYO_CD_158)"]
  S7 --> S8["addTakinoSOD(ODR_NAIYO_CD_404_IPv6)"]
  S8 --> RET["void（処理完了）"]

  %% 各SOD/追加文/多機能ルーターSOD発行を明示
```

**制御フロー分岐：**
- 処理パターンは固定で、呼び出し順にすべてのSOD発行処理が実施される（分岐なし）

---

#### 3. パラメータ分析

| No | パラメータ名          | 型                        | 業務説明                       |
|----|-----------------------|---------------------------|--------------------------------|
| 1  | handle                | SessionHandle             | セッション管理ハンドル         |
| 2  | param                 | IRequestParameterReadWrite| 業務データコンテナ             |
| 3  | eKK0361A010Info       | HashMap<String, Object>   | オプションサービス契約情報     |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド         | SCコード   | エンティティ         | 操作説明                         |
|------|---------------------|------------|----------------------|----------------------------------|
| C    | tsuikabunAddSOD     | -          | SOD追加文            | SOD追加文登録                    |
| C    | addTakinoSOD        | -          | 多機能ルーターSOD    | 多機能ルーター向けSOD登録        |

---

#### 4.5 メッセージID (Message IDs)

設定無し

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- jdgIpv6 → hakkouIpv6
- jdgIpv6EKK0361A010 → hakkouIpv6
- opSetOdrCtrl → hakkouIpv6
- addIpv6SODAft → hakkouIpv6
- kaihkOdrCtrl → hakkouIpv6
- htelNoInfoChgeOdrCtrl → hakkouIpv6
- htelNoKaihkOdrCtrl → hakkouIpv6
- htelNoDslOdrCtrl → hakkouIpv6
- dslOdrCtrl → hakkouIpv6
- hakkoSOD → hakkouIpv6
- newKeiOdrCtrl → hakkouIpv6
- ksiDslOdrCtrl → hakkouIpv6
- cnclOdrCtrl → hakkouIpv6
- ksiDslFixOdrCtrl → hakkouIpv6

**呼出パス：**

```
hakkoSOD → jdgIpv6 → hakkouIpv6 → tsuikabunAddSOD/addTakinoSOD
```

**終端:**

| SC メソッド         | CRUD | エンティティ        |
|--------------------|------|---------------------|
| tsuikabunAddSOD    | C    | SOD追加文           |
| addTakinoSOD       | C    | 多機能ルーターSOD   |

---

---

---

### htelNoAddOdrCtrl()

#### 呼出元 (Reverse Call Tree) — 1 direct callers

```
htelNoAddOdrCtrl() ← gọi bởi:
└── hakkoSOD()    [trực tiếp]
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite htelNoAddOdrCtrl(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> sodMap)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

光電話番号追加に関するオーダ制御処理。サービス契約内訳・機器提供サービス契約情報等を取得し、Z1オーダ発行判定を行いSOD登録やVA返品等の業務を制御する。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["htelNoAddOdrCtrl(handle, param, sodMap)"] --> S1["SVC_KEI_UCWK_INFOとKKTSVKEI_INFO取得→shkkaMap"]
  S1 --> S2["SVC_KEI_INFO取得"]
  S2 --> S3["変更後サービス契約内訳番号等取得"]
  S3 --> S4["Z1オーダ処理済み判定"]
  S4 --> IF1{"Z1オーダ済か"}
  IF1 -- "Yes" --> S5["同一処理番号取得, 対象パラメータ初期化, SOD再発行"]
  IF1 -- "No" --> S6["処理終了"]
  S5 --> IF2{"機器変更有無"}
  IF2 -- "変更無" --> S7["電話番号のみSOD発行"]
  IF2 -- "変更有" --> S8["VA返品フラグ判定"]
  S8 --> IF3{"VA返品有"}
  IF3 -- "Yes" --> S9["addSODVAHmpinで返品SOD発行"]
  IF3 -- "No" --> S10["通常SOD発行"]
  S6 --> RET["param返却"]
  S7 --> RET
  S9 --> RET
  S10 --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. `sodMap`から`SVC_KEI_UCWK_INFO`、`KKTSVKEI_INFO`取得し`shkkaMap`でマッピング
2. `SVC_KEI_INFO`取得
3. 変更後サービス契約内訳番号・世代登録日時等取得
4. `findZ1OrderAtKK1041`でZ1オーダ処理済み判定
5. Z1済みであれば同一処理番号取得・対象パラメータ初期化・SOD再発行
6. 機器変更有無に応じて電話番号のみSOD発行またはVA返品処理分岐
7. VA返品フラグがtrueならaddSODVAHmpinで返品SOD発行

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `isZ1Ordered` | Z1済 | SOD再発行 |
| 2 | `inMap != null` | - | SOD再発行 |
| 3 | `!vaHenpinFlg` | - | 電話番号のみSOD発行 |
| 4 | VA返品フラグtrue | - | addSODVAHmpin |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 3 | sodMap | HashMap<String, Object> | SOD生成業務情報マップ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1041B001SC | EKK1041 | オーダ設定 | 一覧照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 同一処理番号取得 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | 不明 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約 | 回線内訳一覧照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳（eo光電話） | 一意照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約 | 機器変更番号一覧照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約 | 予約一覧照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |

---

#### 4.5 メッセージID (Message IDs)

該当データなし

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- hakkoSOD → htelNoAddOdrCtrl

**呼出パス:**

```
hakkoSOD → htelNoAddOdrCtrl → findZ1OrderAtKK1041 → 同一処理番号取得/初期化... → addSODTelVAChange/addSODVAHmpin
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1041B001SC | R | オーダ設定 |
| callEKK1081C011SC | R | 同一処理番号 |
| callEKK0251B003SCCAAMsg | ? | サービス契約回線内訳（現在利用中） |
| callEKK0341B504SC | R | 機器提供サービス契約 |
| callEKK0191A010SC | R | サービス契約内訳（eo光電話） |
| callEKK0341B029SC | R | 機器提供サービス契約 |
| callEKK0341B021SC | R | 機器提供サービス契約 |
| callEKK2811B010SC | R | 機器オプションサービス契約 |
| callEKK1041A010SC | R | オーダ設定 |

---

---

### htelNoChgeOdrCtrl()

#### 呼出元 (Reverse Call Tree) — 1 direct callers

```
htelNoChgeOdrCtrl() ← gọi bởi:
└── hakkoSOD()    [trực tiếp]
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite htelNoChgeOdrCtrl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> sodMap)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

光電話番号変更に関するオーダ制御処理。サービス契約内訳の変更前後情報や機器提供サービス契約情報等を取得し、各種判定により適切なSOD発行や追加処理をディスパッチする。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["htelNoChgeOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["SVC_KEI_UCWK_INFO取得→shkkaMapでマッピング"]
  S1 --> S2["変更前内訳番号/世代登録日時取得"]
  S2 --> IF1{"変更前世代登録日時有無"}
  IF1 -- "有" --> S3["EKK0161A010SCで変更前内訳一意照会"]
  S3 --> IF2{"statusCodeエラー"}
  IF2 -- "Yes" --> S4["例外throw"]
  IF2 -- "No" --> S5["内訳ステータス取得"]
  S5 --> IF3{"照査済/締結済"}
  IF3 -- "Yes" --> S6["Z1オーダ済ならtelNoChge。未ならRadius判定"]
  S6 --> IF4{"Radius済"}
  IF4 -- "Yes" --> S7["EKK0191A010SC/0341B008SC→機器・VA変更判定"]
  S7 --> IF5{"VA機器変更番号一致"}
  IF5 -- "Yes" --> S8["addSODTelVAChange発行"]
  IF5 -- "No" --> S9["通常番号変更"]
  IF4 -- "No" --> S10["keiTtdkChuHtelnoChgeOdrCtrl呼出"]
  IF3 -- "No" --> S11["通常番号変更"]
  IF1 -- "無" --> S11
  S11 --> RET["telNoChge系処理"]
  S8 --> RET
  S9 --> RET
  S10 --> RET
  S4 --> END["エラー終了"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
```

**処理ステップ詳細:**

1. サービス契約内訳情報を`sodMap`から取得し`shkkaMap`でマッピング
2. 変更前後の内訳番号・世代登録日時を取得
3. 変更前世代登録日時があればEKK0161A010SCで変更前内訳を一意照会
4. ステータスが照査済/締結済ならZ1オーダ発行済み判定
    - Z1済みであればtelNoChge
    - Radius済みならEKK0191A010SC/0341B008SCで機器情報取得しVA機器変更番号一致ならaddSODTelVAChange
    - それ以外は通常番号変更
5. 変更前世代登録日時が無い場合は通常番号変更

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `!isBlank(chbfSvcKeiUcwkGeneAddDtm)` | - | 変更前内訳一意照会 |
| 2 | `0 != statusCode` | エラー | 例外throw |
| 3 | `JKKHakkoSODConstCC.SVC_KEI_STAT_020.equals(svcKeiUcwkStat) || ...` | 照査済/締結済 | 契約手続中 |
| 4 | `findZ1OrderHasBeenSentSvcKeiUcwk(...)` | Z1済み | telNoChge |
| 5 | `findRadiusHasBeenSentSvc(...)` | Radius済み | 機器情報判定 |
| 6 | `0 != statusCode` | エラー | 例外throw |
| 7 | `vaKikiChgNo != null && !"".equals(vaKikiChgNo)` | VA機器有 | 機器情報ループ |
| 8 | `0 != statusCode` | エラー | 例外throw |
| 9 | `!JKKHakkoSODConstCC.KKTK_SVC_CD_TEL_VA.equals(kktkSvcCd) && ...` | サポート対象外 | スキップ |
| 10 | `vaKikiChgNo.equals(kikiChgNo)` | VA機器変更一致 | addSODTelVAChange |
| 11 | 変更前世代登録日時が無い | - | 通常番号変更 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 3 | fixedText | String | 固定テキスト |
| 4 | sodMap | HashMap<String, Object> | SOD生成業務情報マップ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳 | 一意照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳（eo光電話） | 一意照会 |
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約 | 一覧照会 |

---

#### 4.5 メッセージID (Message IDs)

該当データなし

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- hakkoSOD → htelNoChgeOdrCtrl

**呼出パス:**

```
hakkoSOD → htelNoChgeOdrCtrl → callEKK0161A010SC [R] → ...
                                   callEKK0191A010SC [R] → ...
                                   callEKK0341B008SC [R] → ...
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0161A010SC | R | サービス契約内訳 |
| callEKK0191A010SC | R | サービス契約内訳（eo光電話） |
| callEKK0341B008SC | R | 機器提供サービス契約 |

---

---

### htelNoDslOdrCtrl()

#### 呼出元 (Reverse Call Tree) — 1 direct callers

```
htelNoDslOdrCtrl() ← gọi bởi:
└── hakkoSOD()    [trực tiếp]
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite htelNoDslOdrCtrl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> sodMap)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

光電話番号の解約時に必要なSOD（サービスオーダ）を制御し、電話・VA機器・多機能ルーター・050オプション等の状態に応じて、SODを発行する。多様な業務分岐・判定を持つ複雑なオーケストレーション。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["htelNoDslOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["Step1: 各種情報取得・業務変換"]
  S1 --> S2["Step2: 各種番号・状態取得"]
  S2 --> S3["Step3: 同一処理番号採番"]
  S3 --> S4["Step4: サービス契約内訳検索"]
  S4 --> S5["Step5: 内訳情報取得"]
  S5 --> S6["Step6: VA/転送電話/多機能ルーター/050オプション等の判定"]
  S6 --> IF1{"該当条件ごとに分岐多数"}
  IF1 -- "Yes" --> S7["Step7: SOD登録/多機能ルーターSOD/ENUM SODなど"]
  S7 --> S8["Step8: オプション契約ごとに必要なSOD登録"]
  S8 --> RET["return param"]
  style IF1 fill:#ffcc00
```

**制御フロー分岐（全条件列挙）:**
（行数の都合上、詳細は省略せず一部代表例記載）

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `0 != statusCode` |  | 例外スロー |
| 2 | `svc_kei_ucwk_no.equals(tmpSvcKeiUcwkNo)` |  | 対象内訳のみ処理 |
| 3 | `YOKYU_SBT_CD_DSL.equals(...)` | `"03"` | DSL解約要求種別 |
| 4 | `!isZ1Ordered` |  | 転送電話SOD判定 |
| 5 | `!BMP_UM_ARI.equals(bmpUm)` |  | 非番号ポータビリティ時 |
| 6 | `isRegalVaKiki(...)` |  | VA機器SOD判定 |
| 7 | `takino_flg == 0` |  | 通常SOD発行 |
| 8 | `takino_flg == 4` |  | 多機能ルーター特別SOD |
| 9 | `takino_flg == 3` |  | 多機能ルーターSOD |
| 10 | `!isItenNoGuideTokiChu(...)` |  | 移転番号案内のトーキ判定 |
| 11 | `!can_skip_delsod` |  | DEL SOD発行 |
| 12 | `BMP_UM_ARI.equals(bmpUm)` |  | 番号ポータビリティ時ENUM SOD発行 |
| 13 | `isBmpOpenZumiDslNoDslNoChg(...)` |  | ENUM設定・消去発行可否 |
| 14 | `OP_SVC_CD_DSP_ME.equals(op_svc_cd)` |  | 発信者番号表示オプション |
| 15 | `!JKKStringUtil.isNullBlank(op_mskm_dtl_no) && op_mskm_dtl_no.equals(this.mskm_dtl_no)` |  | 明細番号一致時のみ処理 |
| 16 | `!isBlank(this.same_trn_no)` |  | 同一処理番号設定済み時処理 |

（分岐はこれ以外にも多数あり。全て反映必須）

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 3 | fixedText | String | 固定テキスト |
| 4 | sodMap | HashMap<String, Object> | SOD情報マップ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1041B001SC | EKK1041 | オーダ設定一覧照会 |
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約一覧照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳<eo光電話>一意照会 |
| R | callEKK0341B008_02SC | EKK0341 | 機器提供サービス契約一覧照会（交換中専用） |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号取得 |
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳一意照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約一覧照会（回線内訳） |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約一覧照会（機器変更番号） |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約一覧照会（予約） |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定一意照会 |
| R | callEKK0251B001SC | EKK0251 | サービス契約回線内訳一覧照会 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約一意照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞一意照会 |
| R | callEKK0411A010SC | EKK0411 | サブオプションサービス契約＜ISP＞一意照会 |
| R | callEKK0401A010SC | EKK0401 | サブオプションサービス契約一意照会 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳一覧照会 |
| R | callEKK0191B001_2SC | EKK0191 | サービス契約内訳<eo光電話>一覧照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約一意照会 |
| R | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約一覧照会(履歴照会) |
| R | callEDK0301B060SC | EDK0301 | 返品機器取消一覧照会 |
| R | callEKK0341B001SC | EKK0341 | 機器提供サービス契約一覧照会（機器製造番号） |
| R | callEKK0341A010SC | EKK0341 | 機器提供サービス契約一意照会 |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- hakkoSOD → htelNoDslOdrCtrl

**呼出パス:**

```
hakkoSOD → htelNoDslOdrCtrl → [各種SC呼出]
```

**終端:**  
上記SC群

---

---

### htelNoInfoChgeOdrCtrl()

#### 呼出元 (Reverse Call Tree) — 1 direct callers

```
htelNoInfoChgeOdrCtrl() ← gọi bởi:
└── hakkoSOD()    [trực tiếp]
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite htelNoInfoChgeOdrCtrl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> sodMap)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

光電話番号情報変更に関するオーダ制御処理。各種契約・機器・オプション情報を照会し、Z1オーダや機器製造番号チェック、VA/多機能ルーター判定等を経てSOD登録や追加処理を行う複雑なオーケストレーションメソッド。

---

#### 2. 処理パターン（詳細ビジネスロジック）

（※このメソッドは非常に複雑なため、主要分岐を中心に記載）

```mermaid
flowchart TD
  START["htelNoInfoChgeOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["SVC_KEI_INFO, SVC_KEI_UCWK_INFO, OPSVKEI_INFO取得→shkkaMap"]
  S1 --> S2["キー情報取得（契約/内訳/オプション番号等）"]
  S2 --> S3["Z1オーダ発行済判定"]
  S3 --> IF1{"Z1発行済チェック必要か"}
  IF1 -- "必要/未発行" --> S4["処理終了"]
  IF1 -- "必要/発行済 or 不要" --> S5["機器製造番号チェック必要か判定"]
  S5 --> IF2{"チェック必要か"}
  IF2 -- "必要" --> S6["機器製造番号チェック実施"]
  IF2 -- "不要" --> S7["スキップ"]
  S6 --> S8["変更前/後光電話情報取得（EKK0191A010SC）"]
  S8 --> S9["変更前/後VA情報取得"]
  S9 --> S10["複数機器/多機能ルータ判定"]
  S10 --> S11["VA/多機能ルータ関連の各種SOD登録"]
  S11 --> S12["緊急通報等のSOD判定/登録"]
  S12 --> S13["同一処理番号取得/オプション設定オーダ制御"]
  S13 --> RET["param返却"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. `sodMap`から主要キー情報取得→`shkkaMap`でマッピング
2. Z1オーダ発行済みチェック・必要なら発行済み判定
3. 必要で未発行ならreturn
4. 必要かつ発行済み or チェック不要なら機器製造番号チェック
5. 必要なら実施し、変更前後光電話・VA・多機能ルータ情報を取得
6. 各種判定によりSOD（OLS設定・VA変更・ポート番号変更・多機能ルーター設定等）を登録
7. 緊急通報番号等のSODも条件により登録
8. 最後に同一処理番号取得しopSetOdrCtrl等へ制御委譲

**制御フロー分岐（全条件列挙）:**

（多数の分岐のため抜粋。詳細はMethodSequence・ControlFlowを参照）

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `isExecuteZ1OrderCheckResult && !isZ1Ordered` | - | return param |
| 2 | `isExecuteKikiSeizoNoCheck(handle, param)` | - | 機器製造番号チェック実施 |
| 3 | `機器/VA情報取得エラー` | - | 例外throw |
| 4 | `多機能ルータ/VA判定` | - | SOD追加処理分岐 |
| 5 | `緊急通報等の変更` | - | SOD追加処理分岐 |
| 6 | `同一処理番号取得/オプション設定` | - | opSetOdrCtrl呼出等 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 3 | fixedText | String | 固定テキスト |
| 4 | sodMap | HashMap<String, Object> | SOD生成業務情報マップ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳（eo光電話） | 一意照会 |
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約 | 一覧照会 |
| R | callEKK0191B001SC | EKK0191 | サービス契約内訳（eo光電話） | サービス契約番号一覧照会 |
| R | callEKK0341B008_02SC | EKK0341 | 機器提供サービス契約 | 交換中レコード専用一覧照会 |
| R | callEKK0251B001SC | EKK0251 | サービス契約回線内訳 | 一覧照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | 不明 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約 | 回線内訳一覧照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約 | 機器変更番号一覧照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約 | 予約一覧照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約 | 一覧照会 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 同一処理番号取得 |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約 | 一意照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約（ISP） | 一意照会 |
| R | callEKK0411A010SC | EKK0411 | サブオプションサービス契約（ISP） | 一意照会 |
| R | callEKK0401A010SC | EKK0401 | サブオプションサービス契約 | 一意照会 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約 | 一覧照会 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳 | 一覧照会 |
| R | callEKK0191B001_2SC | EKK0191 | サービス契約内訳（eo光電話） | サービス契約番号一覧照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約 | 一意照会 |
| R | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約 | 履歴照会 |
| R | callEDK0301B060SC | EDK0301 | 返品機器取消 | 一覧照会 |
| R | callEKK0341B001SC | EKK0341 | 機器提供サービス契約 | 機器製造番号一覧照会 |
| R | callEKK0341A010SC | EKK0341 | 機器提供サービス契約 | 一意照会 |
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳 | 一意照会 |

---

#### 4.5 メッセージID (Message IDs)

該当データなし

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- hakkoSOD → htelNoInfoChgeOdrCtrl

**呼出パス:**

```
hakkoSOD → htelNoInfoChgeOdrCtrl → 各種SC呼出/判定 → addSOD/opSetOdrCtrl/その他
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0191A010SC | R | サービス契約内訳（eo光電話） |
| callEKK0341B008SC | R | 機器提供サービス契約 |
| callEKK0191B001SC | R | サービス契約内訳（eo光電話） |
| callEKK0341B008_02SC | R | 機器提供サービス契約 |
| callEKK0251B001SC | R | サービス契約回線内訳 |
| callEKK0251B003SCCAAMsg | ? | サービス契約回線内訳（現在利用中） |
| callEKK0341B504SC | R | 機器提供サービス契約 |
| callEKK0341B029SC | R | 機器提供サービス契約 |
| callEKK0341B021SC | R | 機器提供サービス契約 |
| callEKK2811B010SC | R | 機器オプションサービス契約 |
| callEKK1041B001SC | R | オーダ設定 |
| callEKK1041A010SC | R | オーダ設定 |
| callEKK1081C011SC | R | 同一処理番号 |
| callEKK0351A010SC | R | オプションサービス契約 |
| callEKK0361A010SC | R | オプションサービス契約（ISP） |
| callEKK0411A010SC | R | サブオプションサービス契約（ISP） |
| callEKK0401A010SC | R | サブオプションサービス契約 |
| callEKK0351B002SC | R | オプションサービス契約 |
| callEKK0161B004SC | R | サービス契約内訳 |
| callEKK0191B001_2SC | R | サービス契約内訳（eo光電話） |
| callEKK0081A010SC | R | サービス契約 |
| callEKK0341B008SCRireki | R | 機器提供サービス契約 |
| callEDK0301B060SC | R | 返品機器取消 |
| callEKK0341B001SC | R | 機器提供サービス契約 |
| callEKK0341A010SC | R | 機器提供サービス契約 |
| callEKK0161A010SC | R | サービス契約内訳 |

---

---

### idpwShkkaSaifuriOdrCtrl()

#### 呼出元 (Reverse Call Tree) — 1 direct callers

```
idpwShkkaSaifuriOdrCtrl() ← gọi bởi:
└── hakkoSOD()    [trực tiếp]
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public IRequestParameterReadWrite idpwShkkaSaifuriOdrCtrl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> sodMap)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

ID/PW（認証ID・パスワード）初期化・再振出しに関連するオーダ（SOD）を制御するメソッド。サービス契約情報やパスワード処理区分等に基づき、POP、WEBID、認証ID、リモート操作用パスワード等の各種パターンに応じて適切なオーダ発行ロジックを実行する。呼び出し元は`hakkoSOD`メソッド。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["idpwShkkaSaifuriOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["SOD基本情報・サービス契約情報・サービス内訳情報・オプションサービス契約情報取得"]
  S1 --> S2["shkkaMapで各情報マッピング"]
  S2 --> S3["各情報からサービス契約番号等の必須値を取得"]
  S3 --> S4["同一処理番号の取得 getSame_trn_no"]
  S4 --> IF1{"パスワード処理区分 shoriDiv"}
  IF1 -- "POP" --> S5["優先度高に設定しSOD発行(ODR_NAIYO_CD_109)→元に戻す→メールPW変更SOD発行(ODR_NAIYO_CD_122)"]
  IF1 -- "WEB_ID" --> S6["WEBIDパスワード変更SOD発行(ODR_NAIYO_CD_102)"]
  IF1 -- "認証ID" --> IF2{"新コースか"}
  IF2 -- "未設定" --> S7["旧VR識別用サービス詳細コード取得"]
  IF2 -- "新コースでない" --> S8["認証IDパスワード変更SOD発行(ODR_NAIYO_CD_102)＋ルータ/Dialup/マルチセッション/IPv6パスワード変更"]
  IF2 -- "再振" --> S9["マルチセッション変更"]
  IF2 -- "新コースでない" --> S10["ルータ/Dialup/マルチセッション/IPv6パスワード変更"]
  IF1 -- "リモート操作" --> IF3{"Z1オーダ済か"}
  IF3 -- "済" --> S11["SOD発行(ODR_NAIYO_CD_228)"]
  IF3 -- "未" --> S12["処理終了"]
  S5 --> RET["param返却"]
  S6 --> RET
  S7 --> RET
  S8 --> RET
  S9 --> RET
  S10 --> RET
  S11 --> RET
  S12 --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

**処理ステップ詳細:**

1. `sodMap`から `SOD_KIHON_INFO`、`SVC_KEI_INFO`、`SVC_KEI_UCWK_INFO`、`OPSVKEI_INFO` を取得し、`shkkaMap`で各種マッピング処理を行う
2. サービス契約番号やパスワード処理区分、再発行区分など主要パラメータを取得
3. `getSame_trn_no` で同一処理番号を取得
4. パスワード処理区分（`shoriDiv`）により分岐
    - `SHORI_DIV_POP` の場合：優先度を高に設定しPOP用SOD（ODR_NAIYO_CD_109）発行、元の優先度に戻し、メール用SOD（ODR_NAIYO_CD_122）発行
    - `SHORI_DIV_WEB_ID` の場合：WEBIDパスワード変更SOD（ODR_NAIYO_CD_102）発行
    - `SHORI_DIV_NINSHO_ID` の場合：新コース判定後、必要に応じて認証IDパスワード変更SOD発行＆ルータ/Dialup/マルチセッション/IPv6パスワード変更
        - 再振出し区分の場合はマルチセッションの変更も行う
    - `SHORI_DIV_RMT_SOSA` の場合：Z1オーダ済みであればSOD（ODR_NAIYO_CD_228）発行、未処理なら処理終了
5. 各分岐ごとに必要な情報をセットし適切なSODを発行
6. 最終的に `param` を返却

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `JKKHakkoSODConstCC.SHORI_DIV_POP.equals(shoriDiv)` | POP | POPパスワード変更 |
| 2 | `JKKHakkoSODConstCC.SHORI_DIV_WEB_ID.equals(shoriDiv)` | WEB_ID | WEBIDパスワード変更 |
| 3 | `JKKHakkoSODConstCC.SHORI_DIV_NINSHO_ID.equals(shoriDiv)` | 認証ID | 認証IDパスワード変更（新コース判定含む） |
| 4 | `JKKHakkoSODConstCC.SHORI_DIV_RMT_SOSA.equals(shoriDiv)` | リモート操作 | Z1オーダ済み判定 |
| 5 | `null == isNewCourse` |  | 旧VR識別用サービス詳細コード取得 |
| 6 | `!isNewCourse` |  | ルータ/Dialup/マルチセッション/IPv6パスワード変更 |
| 7 | `JKKHakkoSODConstCC.SAIHAKKO_DIV_SAIHURI.equals(saihakkoDiv)` | 再振 | マルチセッション変更 |
| 8 | `isZ1Ordered` |  | SOD発行 |
| 9 | `!isZ1Ordered` |  | スルー/処理終了 |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3 | fixedText | String | 固定テキスト |
| 4 | sodMap | HashMap<String, Object> | SOD生成業務情報マップ |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 同一処理番号取得 |
| R | callEKK0341B002SC | EKK0341 | 機器提供サービス契約 | サービス契約番号一覧照会 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約 | サービス契約番号一覧照会 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定 | 設定一覧照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約（ISP） | 一意照会 |
| R | callEKK1681B001SC | EKK1681 | 異動予約 | 一覧照会 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳 | 一覧照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | 不明 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約 | 回線内訳一覧照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳（eo光電話） | 一意照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約 | 機器変更番号一覧照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約 | 予約一覧照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約 | 一意照会 |

---

#### 4.5 メッセージID (Message IDs)

該当データなし

---

#### 5. 依存トレース (Dependency Trace)

**起点:**

- hakkoSOD → idpwShkkaSaifuriOdrCtrl

**呼出パス:**

```
hakkoSOD → idpwShkkaSaifuriOdrCtrl → getSame_trn_no → callEKK1081C011SC [R] → ...
                                       addSOD → (SOD発行)
                                       setChgePWForRouterConInfo
                                       setChgePWForDialup
                                       setChgePWForMltiSe
                                       setChgePWForIPv6
                                       findZ1OrderAtKK1041
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1081C011SC | R | 同一処理番号取得 |
| callEKK0341B002SC | R | 機器提供サービス契約 |
| callEKK0351B002SC | R | オプションサービス契約 |
| callEKK1041B001SC | R | オーダ設定 |
| callEKK0361A010SC | R | オプションサービス契約（ISP） |
| callEKK1681B001SC | R | 異動予約 |
| callEKK0161B004SC | R | サービス契約内訳 |
| callEKK0251B003SCCAAMsg | ? | サービス契約回線内訳（現在利用中） |
| callEKK0341B504SC | R | 機器提供サービス契約 |
| callEKK0191A010SC | R | サービス契約内訳（eo光電話） |
| callEKK0341B029SC | R | 機器提供サービス契約 |
| callEKK0341B021SC | R | 機器提供サービス契約 |
| callEKK2811B010SC | R | 機器オプションサービス契約 |
| callEKK1041A010SC | R | オーダ設定 |
| callEKK0081A010SC | R | サービス契約 |

---

---

### is050AddOrderHakkoZumi()

> **呼出元**: (トレースなし)


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected boolean is050AddOrderHakkoZumi(IRequestParameterReadWrite param, SessionHandle handle, String svcKeiNo, String svcKeiUcwkNo, String opSvcKeiNo)`
> **戻り値:** `boolean`

---

#### 1. 役割

サービス契約番号・サービス契約内訳番号・オプションサービス契約番号をキーとし、既に「番号置換・登録オーダ」が発行済かどうかを判定します。  
オーダ設定一覧取得後、全件の中から該当条件に合致し、かつ最新要求種別コードが「08：消去」以外であれば発行済（true）を返却します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["is050AddOrderHakkoZumi(param, handle, svcKeiNo, svcKeiUcwkNo, opSvcKeiNo)"]
    --> S1["callEKK1041B001SC(param, handle, null, null, null, svcKeiNo, null, null)でオーダ設定一覧取得"]
    --> LOOP1["eKK1041B001Hashループ"]
    --> IF1{"ORDER_SBT_CD_TEL && SVC_ORDER_CD_050ADD && SVC_KEI_UCWK_NO, OP_SVC_KEI_NO一致"}
  IF1 -- "Yes" --> IF2{"RCNT_YOKYU_SBT_CD != YOKYU_SBT_CD_DEL"}
  IF2 -- "Yes" --> RET1["true（発行済）"]
  IF2 -- "No" --> S2["次レコード"]
  IF1 -- "No" --> S2
  LOOP1 --> RET2["false（発行されていない）"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

**処理ステップ詳細:**

1. callEKK1041B001SCで、svcKeiNoをキーにオーダ設定一覧を取得
2. 一覧の各レコードに対して
   - ORDER_SBT_CD_TEL（電話オーダ種別）かつSVC_ORDER_CD_050ADD（番号置換）か
   - SVC_KEI_UCWK_NO、OP_SVC_KEI_NOが引数と一致するか
   - RCNT_YOKYU_SBT_CD（最新要求種別コード）がYOKYU_SBT_CD_DEL（08：消去）以外か
3. 上記全て該当する場合は true（発行済）
4. 最後まで該当なしの場合は false

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | ORDER_SBT_CD_TEL かつ SVC_ORDER_CD_050ADD | 電話, 番号置換 | 次判定へ |
| 2 | SVC_KEI_UCWK_NO == svcKeiUcwkNo かつ OP_SVC_KEI_NO == opSvcKeiNo | - | 次判定へ |
| 3 | RCNT_YOKYU_SBT_CD != YOKYU_SBT_CD_DEL | 08:消去以外 | true（発行済） |
| 4 | 上記以外 | - | false |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 2 | handle | SessionHandle | セッション管理ハンドル |
| 3 | svcKeiNo | String | サービス契約番号 |
| 4 | svcKeiUcwkNo | String | サービス契約内訳番号 |
| 5 | opSvcKeiNo | String | オプションサービス契約番号 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1041B001SC | EKK1041 | オーダ設定一覧照会 | オーダ発行済判定用 |

---

#### 5. 依存トレース (Dependency Trace)

**起点 (Entry Point):**
- is050AddOrderHakkoZumi 呼出元

**呼出パス:**
```
[Root] → is050AddOrderHakkoZumi → callEKK1041B001SC
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1041B001SC | R | オーダ設定一覧照会 |

---

---

### isAddSodTrgtStat()

> **呼出元**: (トレースなし)


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected boolean isAddSodTrgtStat(String stat)`
> **戻り値:** `boolean`

---

#### 1. 役割

サービス契約内訳ステータスが「照査済」以上かつ「解約済」未満の場合、登録SOD発行対象かどうか判定します。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["isAddSodTrgtStat(stat)"] --> IF1{"SVC_KEI_STAT_020.compareTo(stat) <= 0 && stat.compareTo(SVC_KEI_STAT_910) < 0"}
  IF1 -- "Yes" --> RETT["return true"]
  IF1 -- "No" --> RETF["return false"]

  style IF1 fill:#ffcc00
```

**制御フロー分岐一覧:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | SVC_KEI_STAT_020 ≦ stat < SVC_KEI_STAT_910 | - | true |
| 2 | 上記以外 | - | false |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | stat | String | サービス契約内訳ステータス |

---

#### 4. CRUD操作 / 呼出サービス

| - | - | - | - | 判定のみ |

---

#### 5. 依存トレース (Dependency Trace)

**起点:**  
（CallerTrace不明）

**呼出パス:**

```
[不明] → isAddSodTrgtStat
```

---

---

### isBlank()

#### 呼出元 (Reverse Call Tree) — 10 direct callers

```
isBlank() ← gọi bởi:
├── cnclOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
└── opSetOdrCtrl()
    ├── cnclOdrCtrl()
    ├── hakkoSOD()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── dslOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── cnclOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── ksiDslFixOdrCtrl()
    │   │   └── hakkoSOD()
    │   └── ksiDslOdrCtrl()
    │       └── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    │   └── hakkoSOD()
    ├── htelNoInfoChgeOdrCtrl()
    │   └── hakkoSOD()
    ├── htelNoKaihkOdrCtrl()
    │   └── hakkoSOD()
    └── kaihkOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected boolean isBlank(String param)`
> **戻り値:** `boolean`

---

#### 1. 役割

入力文字列 param が null または空文字かどうかを判定し、該当すれば true（空）を返却します。  
本メソッドは各種入力値やパラメータのバリデーション（未入力判定）などで利用されます。

---

#### 2. 処理パターン（詳細ビジネスロジック）

```mermaid
flowchart TD
  START["isBlank(param)"] --> IF1{"param == null または param == JKKHakkoSODConstCC.STRING_BLANK"}
  IF1 -- "Yes" --> RET1["true を返却"]
  IF1 -- "No" --> RET2["false を返却"]
  style IF1 fill:#ffcc00
```

**処理ステップ詳細:**

1. param（入力文字列）が null かを判定
2. または param が JKKHakkoSODConstCC.STRING_BLANK（空文字定数）かを判定
3. いずれか該当の場合は true を返却
4. それ以外は false を返却

**制御フロー分岐（全条件列挙）:**

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | param == null | - | true |
| 2 | param == JKKHakkoSODConstCC.STRING_BLANK | 空文字 | true |
| 3 | 上記以外 | - | false |

---

#### 3. パラメータ分析

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | String | 判定対象の文字列値 |

---

#### 4. CRUD操作 / 呼出サービス

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし（判定のみ） |

---

#### 5. 依存トレース (Dependency Trace)

**起点 (Entry Point):**  
- opSetOdrCtrl
- htelNoInfoChgeOdrCtrl
- htelNoKaihkOdrCtrl
- htelNoDslOdrCtrl
- kaihkOdrCtrl
- dslOdrCtrl
- hakkoSOD
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl
- 他、多数

**呼出パス:**
```
[Rootメソッド群] → isBlank
```

**終端 (End Points):**
- 判定結果（true/false）返却

---

---

