#  業務ロジック  Part 8/12

### isBlankDate()

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


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

---

#### 1. 役割

年月日（YYYYMMDD形式）の値が「空」または有効な日付が設定されていないかどうかを判定し、該当すれば true を返却します。  
未設定や終了日デフォルト値の場合にバリデーション用として利用されます。

---

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

```mermaid
flowchart TD
  START["isBlankDate(ymd)"] --> IF1{"ymd == null || ymd.isEmpty() || ymd == JKKStrConst.END_YMD_DEFAULT"}
  IF1 -- "Yes" --> RET1["true を返却"]
  IF1 -- "No" --> RET2["false を返却"]
  style IF1 fill:#ffcc00
```

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

1. ymd（年月日文字列）が null か
2. ymd が空文字か
3. ymd が JKKStrConst.END_YMD_DEFAULT（終了日デフォルト値）か
4. 上記のいずれかに該当すれば true、そうでなければ false

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | ymd == null | - | true |
| 2 | ymd.isEmpty() | - | true |
| 3 | ymd == JKKStrConst.END_YMD_DEFAULT | 終了日デフォルト | true |
| 4 | 上記以外 | - | false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | ymd | String | 判定対象の年月日（YYYYMMDD） |

---

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

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

---

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

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

**呼出パス:**
```
[Root] → isBlankDate
```

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

---

---

### isBmpOpenZumi()

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


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

---

#### 1. 役割

番号ポータビリティ（番ポ）が開通済みかどうか判定します。サービス契約内訳の状態と工事情報をもとに判定します。

---

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

```mermaid
flowchart TD
  START["isBmpOpenZumi(param, handle, ...)"] --> S1["Step1: EKK0161A010でUCWK情報取得"]
  S1 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["CCException例外スロー"]
  IF1 -- "No" --> S2["UCWKステータス取得"]
  S2 --> IF2{"SVC_KEI_STAT_100.compareTo(ucwkStat) <= 0"}
  IF2 -- "Yes" --> RETT1["return true"]
  IF2 -- "No" --> S3["EKK0191A010で内訳＜eo光電話＞一意照会"]
  S3 --> S4["EKK0191A010結果のTELNO取得"]
  S4 --> S5["ETU0011B010で工事一覧照会"]
  S5 --> IF3{"statusCode != 0"}
  IF3 -- "Yes" --> ERR2["CCException例外スロー"]
  IF3 -- "No" --> FOR1["工事結果全件ループ"]
  FOR1 --> IF4{"svc_kei_ucwk_no.equals(svcKeiUwNo)"}
  IF4 -- "Yes" --> IF5{"工事ステータスがSOD発行済または工事完了"}
  IF5 -- "Yes" --> RETT2["return true"]
  IF5 -- "No" --> NEXT1["次レコード"]
  IF4 -- "No" --> NEXT1
  NEXT1 --> FOR1
  FOR1 --> RETF["return false"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0（EKK0161A010） | - | 例外スロー |
| 2 | SVC_KEI_STAT_100.compareTo(ucwkStat) <= 0 | - | true |
| 3 | statusCode != 0（ETU0011B010） | - | 例外スロー |
| 4 | svc_kei_ucwk_no.equals(svcKeiUwNo) | - | 工事ステータス判定 |
| 5 | 工事ステータス= SOD発行済/工事完了 | - | true |
| 6 | 上記以外 | - | false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンス業務データ |
| 2 | handle | SessionHandle | セッション管理ハンドル |
| 3 | svc_kei_no | String | サービス契約番号 |
| 4 | svc_kei_ucwk_no | String | サービス契約内訳番号 |
| 5 | chaf_svc_kei_ucwk_gene_add_dtm | String | サービス契約内訳世代登録年月日時分秒 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳 | 一意照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | callETU0011B010SC | ETU0011 | 番ポ工事 | 一覧照会 |

---

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

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

**呼出パス:**

```
[不明] → isBmpOpenZumi → callEKK0161A010SC [R] → callEKK0191A010SC [R] → callETU0011B010SC [R]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0161A010SC | R | サービス契約内訳 |
| callEKK0191A010SC | R | サービス契約内訳＜eo光電話＞ |
| callETU0011B010SC | R | 番ポ工事 |

---

---

### isBmpOpenZumiDslNoDslNoChg()

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


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

---

#### 1. 役割

「解約/光電話番号解約/番号変更」の各種異動区分で、対象のサービス契約内訳が「番号ポータビリティ（番ポ）」開通済みか否かを判定します。

---

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

```mermaid
flowchart TD
  START["isBmpOpenZumiDslNoDslNoChg(param, handle, ...)"] --> S1["Step1: EKK0161A010でUCWK情報取得"]
  S1 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["CCException例外スロー"]
  IF1 -- "No" --> S2["svcStaYmd取得"]
  S2 --> IF2{"svcStaYmd != null && != ''"}
  IF2 -- "Yes" --> RETT1["return true（開通済）"]
  IF2 -- "No" --> S3["EKK0191A010で内訳＜eo光電話＞一意照会"]
  S3 --> S4["EKK0191A010結果のTELNO取得"]
  S4 --> S5["ETU0011B010で工事一覧照会"]
  S5 --> IF3{"statusCode != 0"}
  IF3 -- "Yes" --> ERR2["CCException例外スロー"]
  IF3 -- "No" --> FOR1["工事結果全件ループ"]
  FOR1 --> IF4{"svc_kei_ucwk_no.equals(svcKeiUwNo)"}
  IF4 -- "Yes" --> IF5{"工事ステータスがSOD発行済または工事完了"}
  IF5 -- "Yes" --> RETT2["return true"]
  IF5 -- "No" --> NEXT1["次レコード"]
  IF4 -- "No" --> NEXT1
  NEXT1 --> FOR1
  FOR1 --> RETF["return false"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0（EKK0161A010） | - | 例外スロー |
| 2 | svcStaYmd != null && != "" | - | true返却（開通済） |
| 3 | statusCode != 0（ETU0011B010） | - | 例外スロー |
| 4 | svc_kei_ucwk_no.equals(svcKeiUwNo) | - | 工事ステータス判定 |
| 5 | 工事ステータス= SOD発行済/工事完了 | - | true返却 |
| 6 | 上記以外 | - | false返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンス業務データ |
| 2 | handle | SessionHandle | セッション管理ハンドル |
| 3 | svc_kei_no | String | サービス契約番号 |
| 4 | svc_kei_ucwk_no | String | サービス契約内訳番号 |
| 5 | chaf_svc_kei_ucwk_gene_add_dtm | String | サービス契約内訳世代登録年月日時分秒 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳 | 一意照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | callETU0011B010SC | ETU0011 | 番ポ工事 | 一覧照会 |

---

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

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

**呼出パス:**

```
[不明] → isBmpOpenZumiDslNoDslNoChg → callEKK0161A010SC [R] → callEKK0191A010SC [R] → callETU0011B010SC [R]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0161A010SC | R | サービス契約内訳 |
| callEKK0191A010SC | R | サービス契約内訳＜eo光電話＞ |
| callETU0011B010SC | R | 番ポ工事 |

---

---

### isDelSodTrgtStat()

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


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

---

#### 1. 役割

サービス契約内訳ステータスが「解約済」以上の場合、解約/消去SOD発行対象かどうか判定します。

---

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

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

  style IF1 fill:#ffcc00
```

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

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

---

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

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

---

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

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

---

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

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

**呼出パス:**

```
[不明] → isDelSodTrgtStat
```

---

---

### isEmobile()

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


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

---

#### 1. 役割

サービス契約がeoモバイル（EM）かどうかを判定する。モバイル系処理の分岐やフラグ制御用途。<citation>4</citation>

---

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

```mermaid
flowchart TD
  START["isEmobile()"] --> IF1{"pcrs_cdがEMOBILE_7M, EMOBILE_21M, EMOBILE_42M, EMOBILE_100M, EMOBILE_LTEに一致"}
  IF1 -- "Yes" --> RET1["return true"]
  IF1 -- "No" --> RET2["return false"]
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | pcrs_cd == JKKHakkoSODConstCC.PCRS_CD_EMOBILE_7M など | EMOBILE系 | return true |
| 2 | 上記以外 | - | return false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| - | - | - | パラメータなし |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | なし |

---

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

**起点:**
- isEmobile

**呼出パス:**
```
isEmobile
```

**終端:** なし

---

---

### isExecuteKikiSeizoNoCheck()

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


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

---

#### 1. 役割

「機器製造番号チェック」を実行すべきかを判定します。  
異動区分と画面IDで判定を行い、条件を満たす場合のみtrueを返却します。

---

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

```mermaid
flowchart TD
  START["isExecuteKikiSeizoNoCheck(handle, param)"]
    --> S1["ido_div（異動区分）を取得"]
    --> IF1{"ido_div == JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE && isKKW00151(handle, param)"}
  IF1 -- "Yes" --> RET1["true（実行）"]
  IF1 -- "No" --> IF2{"ido_div == JKKHakkoSODConstCC.IDO_DIV_OPSETTE && isFUW01404(handle, param)"}
  IF2 -- "Yes" --> RET2["true（実行）"]
  IF2 -- "No" --> RET3["false（実行しない）"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

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

1. 異動区分（ido_div）を取得
2. ido_divがJKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGEかつ起動元画面がisKKW00151であればtrue
3. そうでなく、ido_divがJKKHakkoSODConstCC.IDO_DIV_OPSETTEかつisFUW01404であればtrue
4. それ以外はfalse

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | ido_div == JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE && isKKW00151(handle, param) | 光電話・電話番号情報変更 | true |
| 2 | ido_div == JKKHakkoSODConstCC.IDO_DIV_OPSETTE && isFUW01404(handle, param) | OPSETTE, 2番号サービスお申込み確認画面 | true |
| 3 | 上記以外 | - | false |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | isKKW00151, isFUW01404 | - | - | 起動元画面判定 |

---

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

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

**呼出パス:**
```
[Root] → isExecuteKikiSeizoNoCheck
```

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

---### isMansionPrvate()

---

#### 1. 役割

処理対象が「マンションタイプ（プライベート）」であるかを判定するメソッドです。  
対象契約の料金コースコードが、マンションプライベート（VDSL1, VDSL2, ETHER）であればtrueを返します。主にサービス契約におけるタイプ分岐や判定制御で利用されます。

---

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

```mermaid
flowchart TD
  START["isMansionPrvate()"] --> GET1["Step1: pcrs_cd（料金コースコード）取得"]
  GET1 --> IF1{"pcrs_cd == PCRS_CD_MANS_PRI_VDSL1<br>または<br>pcrs_cd == PCRS_CD_MANS_PRI_VDSL2<br>または<br>pcrs_cd == PCRS_CD_MANS_PRI_ETHER"}
  IF1 -- "Yes" --> RET_TRUE["return true"]
  IF1 -- "No" --> RET_FALSE["return false"]
  style IF1 fill:#ffcc00
```

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

1. **pcrs_cd（料金コースコード）**を取得する。
2. その値が`JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL1`、`JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL2`、`JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_ETHER`のいずれかと一致すれば`true`を返却。
3. いずれにも一致しない場合は`false`を返却。

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

| # | 条件 | 定数値 | 分岐先         |
|---|------|--------|----------------|
| 1 | pcrs_cd == PCRS_CD_MANS_PRI_VDSL1 | JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL1 | true |
| 2 | pcrs_cd == PCRS_CD_MANS_PRI_VDSL2 | JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL2 | true |
| 3 | pcrs_cd == PCRS_CD_MANS_PRI_ETHER | JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_ETHER | true |
| 4 | 上記以外                                 | なし                                | false |

---

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

| No | パラメータ名 | 型 | 業務説明                  |
|----|-------------|-----|---------------------------|
| -  | -           | -   | パラメータなし            |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|----------|--------------|----------|
| -    | -          | -        | -            | CRUD操作なし   |

---

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

**起点:**

- JKKHakkoSODCC.isMansionPrvate

**呼出パス:**

```
JKKHakkoSODCC.isMansionPrvate
```

**終端:**

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

---

---

### isExecuteZ1OrderCheck()

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

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


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

---

#### 1. 役割

「電話初回SOD発行済チェック」を実行すべきか判定します。  
異動区分・起動元画面の種別判定により true/false を返却します。

---

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

```mermaid
flowchart TD
  START["isExecuteZ1OrderCheck(handle, param)"]
    --> S1["ido_div（異動区分）を取得"]
    --> IF1{"ido_div == JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE && isKKW00151(handle, param)"}
  IF1 -- "Yes" --> RET1["true（チェック実行）"]
  IF1 -- "No" --> RET2["false（チェック不要）"]
  style IF1 fill:#ffcc00
```

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

1. 異動区分（ido_div）を取得
2. 異動区分が「光電話・電話番号情報変更（JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE）」かつ起動元画面が条件を満たす場合（isKKW00151(handle, param) == true）、true
3. それ以外は false

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | ido_div == JKKHakkoSODConstCC.IDO_DIV_HTELNOINFOCHGE && isKKW00151(handle, param) | 光電話・電話番号情報変更 | true |
| 2 | 上記以外 | - | false |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | isKKW00151 | - | - | 起動元画面判定 |

---

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

**起点 (Entry Point):**
- htelNoInfoChgeOdrCtrl
- hakkoSOD
- (他、関連処理)

**呼出パス:**
```
[Root] → htelNoInfoChgeOdrCtrl → isExecuteZ1OrderCheck
[Root] → hakkoSOD → isExecuteZ1OrderCheck
```

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

---

---

### isFUW01404()

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


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

---

#### 1. 役割

2番号サービスお申し込み確認画面（画面ID: "FUW014040PJP"）からの呼び出しかどうかを判定する。  
画面IDチェックにより、特定画面からの遷移かどうかを判断し、以降の分岐処理に利用されます。

---

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

```mermaid
flowchart TD
  START["isFUW01404(handle, param)"] --> S1["param.getControlMapData(SCControlMapKeys.REQ_VIEWID)で画面ID取得"]
  S1 --> IF1{"画面ID == \"FUW014040PJP\""}
  IF1 -- "Yes" --> RET1["true を返却"]
  IF1 -- "No" --> RET2["false を返却"]
  style IF1 fill:#ffcc00
```

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

1. param.getControlMapData(SCControlMapKeys.REQ_VIEWID) で画面ID取得
2. 画面IDが "FUW014040PJP" なら true を返却
3. それ以外は false を返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | 画面ID == "FUW014040PJP" | 2番号サービスお申し込み確認画面 | true |
| 2 | 上記以外 | - | false |

---

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

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

---

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

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

---

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

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

**呼出パス:**
```
[Root] → isFUW01404
```

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

---

---

### isItenNoGuideTokiChu()

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


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

---

#### 1. 役割

移転番号案内処理において、該当サービス契約内訳が「トーキ中」状態であるかどうかを判定します。

---

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

```mermaid
flowchart TD
  START["isItenNoGuideTokiChu(param, handle, ...Hash)"] --> S1["Step1: トーキ登録/種別コード取得"]
  S1 --> IF1{"ITNTOKI_ADD_CD_PAUSE≠dslPauseTokiAddCd && dslPauseTokiSbtCd=='231'"}
  IF1 -- "Yes" --> S2["Step2: 移転番号案内対象"]
  S2 --> S3["svcKeiNo, svcKeiUcwkNo取得"]
  S3 --> S4["callEKK1041B001SC: オーダ設定一覧照会(電話/SIP)"]
  S4 --> S5["getEKK1041B001resultで結果取得"]
  S5 --> FOR1["for each eKK1041B001Hash"]
  FOR1 --> IF2{"svcKeiUcwkNo.equals(tmpSvcKeiUcwkNo) && RCNT_YOKYU_SBT_CD==14"}
  IF2 -- "Yes" --> RETT["return true"]
  IF2 -- "No" --> NEXT1["次レコード"]
  NEXT1 --> FOR1
  FOR1 --> RETF["return false"]
  IF1 -- "No" --> RETF

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | !ITNTOKI_ADD_CD_PAUSE.equals(dslPauseTokiAddCd) && "231".equals(dslPauseTokiSbtCd) | - | 対象（調査続行） |
| 2 | svcKeiUcwkNo.equals(tmpSvcKeiUcwkNo) && RCNT_YOKYU_SBT_CD == 14 | - | true |
| 3 | 上記以外 | - | false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンス業務データ |
| 2 | handle | SessionHandle | セッション管理ハンドル |
| 3 | eKK0161A010Hash | HashMap<String, Object> | サービス契約内訳情報 |
| 4 | eKK0191A010Hash | HashMap<String, Object> | サービス契約内訳＜eo光電話＞情報 |

---

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

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

---

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

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

**呼出パス:**

```
[不明] → isItenNoGuideTokiChu → callEKK1041B001SC [R]
```

**終端:**

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

---

---

### isKikiSeizoNoCheck()

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

```
isKikiSeizoNoCheck() ← gọi bởi:
├── cnclOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── 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 boolean isKikiSeizoNoCheck(SessionHandle handle, IRequestParameterReadWrite param, String svcKeiNo, String svcKeiUcwkNo)`
> **戻り値:** `boolean`

---

#### 1. 役割

サービス契約内訳に紐付く機器の「機器製造番号」が設定されているかどうか判定します。

---

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

```mermaid
flowchart TD
  START["isKikiSeizoNoCheck(handle, param, svcKeiNo, svcKeiUcwkNo)"] --> S1["Step1: UCWK情報 inHashUcwkセット"]
  S1 --> S2["callEKK0191A010SC（機能コード:4）で内訳＜eo光電話＞一意照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["CCException例外スロー"]
  IF1 -- "No" --> S3["VA宅内機器型式コード・機器変更番号取得"]
  S3 --> S4["getVAkikiInfoでVA機器に紐付く機器契約情報取得"]
  S4 --> IF2{"eKK0341B022SCHash != null && !isBlank(kiki_seizo_no)"}
  IF2 -- "Yes" --> RETT["return true"]
  IF2 -- "No" --> RETF["return false"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0 | - | 例外スロー |
| 2 | eKK0341B022SCHash != null && !isBlank(kiki_seizo_no) | - | true |
| 3 | 上記以外 | - | false |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | getVAkikiInfo | EKK0341 | VA機器情報 | 関連機器契約情報照会 |

---

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

**起点:**  
（CallerTrace詳細あり）

**呼出パス:**

```
htelNoInfoChgeOdrCtrl → isKikiSeizoNoCheck
opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → isKikiSeizoNoCheck
htelNoKaihkOdrCtrl → isKikiSeizoNoCheck
htelNoDslOdrCtrl → isKikiSeizoNoCheck
kaihkOdrCtrl → isKikiSeizoNoCheck
dslOdrCtrl → isKikiSeizoNoCheck
ksiDslOdrCtrl → isKikiSeizoNoCheck
cnclOdrCtrl → isKikiSeizoNoCheck
ksiDslFixOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → htelNoInfoChgeOdrCtrl → isKikiSeizoNoCheck
htelNoInfoChgeOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
htelNoKaihkOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
htelNoDslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
kaihkOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → opSetOdrCtrl → isKikiSeizoNoCheck
ksiDslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
cnclOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
ksiDslFixOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → htelNoInfoChgeOdrCtrl → isKikiSeizoNoCheck
ksiDslOdrCtrl → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
cnclOdrCtrl → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
ksiDslFixOdrCtrl → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → htelNoDslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → htelNoKaihkOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → kaihkOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → cnclOdrCtrl → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → ksiDslFixOdrCtrl → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
hakkoSOD → ksiDslOdrCtrl → dslOdrCtrl → opSetOdrCtrl → isKikiSeizoNoCheck
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0191A010SC | R | サービス契約内訳＜eo光電話＞ |
| getVAkikiInfo | R | VA機器情報 |

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

---

#### 1. 役割

ルーターオプション変更オーダ出力の要否を判定する業務ロジック。  
多機能ルーターに関するオーダ設定が発行可能か、オーダ設定一覧・一意参照の結果から判定を行う。  
呼び出し元はBPCheck系クラスや他業務制御メソッドから。

---

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

```mermaid
flowchart TD
  START["chkOdrSette(handle, param)"] --> S1["Step1: callEKK1041B001SCによるオーダ設定一覧照会"]
  S1 --> IF1{"resultOdrSet.size() == 0"}
  IF1 -- "Yes: 0件" --> RET1["return false"]
  IF1 -- "No: 1件以上" --> FOR1["for: 各オーダ設定レコード"]
  FOR1 --> IF2{"takino_kktk_svc_kei_no.equals(kktkSvcKeiNo) か？"}
  IF2 -- "No: 一致しない" --> NEXT1["次レコード"]
  IF2 -- "Yes: 一致" --> S2["Step2: ODR_SET_NOをinHashOdrSetにput"]
  S2 --> S3["Step3: callEKK1041A010SCによるオーダ設定一意参照"]
  S3 --> IF3{"statusCode != 0"}
  IF3 -- "Yes: エラー" --> ERR1["例外throw SCCallException"]
  IF3 -- "No: 正常" --> IF4{"msgListOdrSet != null && msgListOdrSet.length != 0"}
  IF4 -- "No: 無効" --> NEXT1
  IF4 -- "Yes: 有効" --> IF5{"yokyu_sbt_cd != null"}
  IF5 -- "No: 無効" --> NEXT1
  IF5 -- "Yes: 有効" --> IF6{"yokyu_sbt_cd.matches('0[24]')"}
  IF6 -- "Yes: 新規・変更" --> RET2["return true"]
  IF6 -- "No: その他" --> NEXT1
  NEXT1 --> FOR1
  FOR1 --> END["return false"]

  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. `callEKK1041B001SC`を呼び出し、オーダ種別コード「電話」、サービスオーダコード「多機能ルータ」指定でオーダ設定一覧を取得。
2. オーダ設定一覧が0件の場合は`false`を返却。
3. 各レコードについて「機器提供サービス契約番号」が多機能ルータ契約番号と一致するレコードを抽出。
4. 一致する場合、`ODR_SET_NO`をキーに`callEKK1041A010SC`でオーダ設定一意参照を実行。
5. ステータスコードが0以外なら例外（`SCCallException`）をthrowし異常終了。
6. 一意参照結果が存在し、かつ`yokyu_sbt_cd`（要求種別コード）がnullでなければ、  
   この値が"02"または"04"（新規・変更）に一致すれば`true`を返却。
7. いずれにも該当しなければ`false`を返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------------------|-------------------------------|------------------------|
| 1 | resultOdrSet.size() == 0 | - | false返却 |
| 2 | !takino_kktk_svc_kei_no.equals(kktkSvcKeiNo) | - | 次レコード |
| 3 | statusCode != 0 | - | 例外throw |
| 4 | msgListOdrSet != null && msgListOdrSet.length != 0 | - | 次へ |
| 5 | yokyu_sbt_cd != null | - | 次へ |
| 6 | yokyu_sbt_cd.matches("0[24]") | "02":新規, "04":変更 | true返却 |
| 7 | 上記以外 | - | false返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|------|----------|
| 1 | handle | SessionHandle | セッションハンドル、トランザクション管理 |
| 2 | param | IRequestParameterReadWrite | 業務パラメータ保持オブジェクト |

---

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

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

---

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

**起点:**

- chkOdrSette（呼出し元無し）

**呼出パス:**

```
chkOdrSette → callEKK1041B001SC → callEKK1041A010SC
```

**終端:**

| SC メソッド            | CRUD | エンティティ |
|---------------------|------|-------------|
| callEKK1041B001SC   | R    | オーダ設定 |
| callEKK1041A010SC   | R    | オーダ設定 |

---

---

---

### isKKW00151()

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


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

---

#### 1. 役割

電話番号情報登録画面からの呼び出しかどうかを判定する。画面遷移や特定画面専用処理制御のための判定ロジック。<citation>1</citation>

---

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

```mermaid
flowchart TD
  START["isKKW00151(handle, param)"] --> S1["Step1: param.getControlMapData('REQ_VIEWID') → trnId"]
  S1 --> IF1{"trnId == 'KKW001510PJP'"}
  IF1 -- "Yes" --> RET1["return true"]
  IF1 -- "No" --> RET2["return false"]
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `trnId == "KKW001510PJP"` | - | return true |
| 2 | 上記以外 | - | return false |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | なし |

---

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

**起点:**
- isKKW00151

**呼出パス:**
```
isKKW00151
```

**終端:** なし

---

---

### isMansionPrvate()

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


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

---

#### 1. 役割

処理対象がマンションタイプ（プライベート）であるかを判定し、該当すれば true を返却します。  
判定は PCRS_CD（料金コースコード）の値が特定のマンション・プライベート系定数（VDSL1, VDSL2, ETHER）に一致するかで行われます。

---

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

```mermaid
flowchart TD
  START["isMansionPrvate()"] --> IF1{"pcrs_cdがマンションプライベート系定数に一致するか？"}
  IF1 -- "JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL1" --> RET1["true を返却"]
  IF1 -- "JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL2" --> RET2["true を返却"]
  IF1 -- "JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_ETHER" --> RET3["true を返却"]
  IF1 -- "いずれも該当しない" --> RET4["false を返却"]
  style IF1 fill:#ffcc00
```

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

1. pcrs_cd（料金コースコード）を参照
2. 以下のいずれかに該当する場合は true を返却
   - JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL1 に一致
   - JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL2 に一致
   - JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_ETHER に一致
3. 上記以外の場合は false を返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | pcrs_cd == JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL1 | 100Mプレミアム（VDSL1） | true |
| 2 | pcrs_cd == JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_VDSL2 | 100Mプレミアム（VDSL2） | true |
| 3 | pcrs_cd == JKKHakkoSODConstCC.PCRS_CD_MANS_PRI_ETHER | 100Mプレミアム（Ethernet） | true |
| 4 | 上記以外 | - | false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| - | - | - | パラメータなし（クラス内の pcrs_cd を参照） |

---

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

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

---

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

**起点 (Entry Point — ルートクラスまで遡ること):**
- 本メソッド単独呼出/判定系

**呼出パス:**
```
[呼出元] → isMansionPrvate
```

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

---

---

### isMonaiBmp()

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


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

---

#### 1. 役割

指定された電話番号が「網内・法人→個人」な番号ポータビリティ対象か判定します。  
EZM0121A010（電話番号一意照会）の個人/法人コードで判別。

---

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

```mermaid
flowchart TD
  START["isMonaiBmp(handle, param, telNo)"] --> S1["Step1: inHashTelNoに電話番号セット"]
  S1 --> S2["Step2: callEZM0121A010SCで一意照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["CCException例外スロー"]
  IF1 -- "No" --> S3["Step3: 初期個人法人コード・個人法人コード取得"]
  S3 --> S4{"CD00410_HOJIN.equals(shkKojinHojinTlnTaiCd) && CD00410_KOJIN.equals(kojinHojinTlnTaiCd)"}
  S4 -- "Yes" --> RETT["return true"]
  S4 -- "No" --> RETF["return false"]

  style IF1 fill:#ffcc00
  style S4 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0 | - | 例外スロー |
| 2 | CD00410_HOJIN.equals(shkKojinHojinTlnTaiCd) && CD00410_KOJIN.equals(kojinHojinTlnTaiCd) | - | true |
| 3 | 上記以外 | - | false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンス業務データ |
| 3 | telNo | String | 判定対象電話番号 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEZM0121A010SC | EZM0121 | 電話番号 | 一意照会 |

---

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

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

**呼出パス:**

```
[不明] → isMonaiBmp → callEZM0121A010SC [R]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEZM0121A010SC | R | 電話番号 |

---

---

### isRegalVaKiki()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected boolean isRegalVaKiki(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> eKK0341B022SCHash, String vaTaknkikiModelCd, String vaKikiSeizoNo, String ido_div, String vaKikiChgNo, Map<String, Object> kokanBfKiki)`
> **戻り値:** `boolean`

---

#### 1. 役割

EKK0341B022照会結果から、対象機器が電話用VA機器かどうかを判定する。機器変更・修理交換等の業務において特定機器判定ロジックとして使用する。<citation>2</citation>

---

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

```mermaid
flowchart TD
  START["isRegalVaKiki(handle, param, eKK0341B022SCHash, vaTaknkikiModelCd, vaKikiSeizoNo, ido_div, vaKikiChgNo, kokanBfKiki)"] 
    --> S1["Step1: eKK0341B022SCHash.get('KKTK_SVC_CD') → kktkSvcCd"]
    --> IF1{"kktkSvcCd が電話用VA定数・多機能ルータ定数・ONU定数以外"}
    IF1 -- "Yes" --> RET1["return false"]
    IF1 -- "No" --> S2["Step2: eKK0341B022SCHash.get('KIKI_CHG_NO') → kkKikiChgNo"]
    S2 --> IF2{"kkKikiChgNo == null または kkKikiChgNo != vaKikiChgNo"}
    IF2 -- "Yes" --> IF3{"this.svc_kei_ucwk_no != null && this.svc_kei_ucwk_no.length > 0"}
    IF3 -- "Yes" --> S3["Step3: getShuriKokanBfKiki(...), kokanBfKiki.putAll"]
    S3 --> IF4{"tmpKokanBfKiki != null && !tmpKokanBfKiki.isEmpty()"}
    IF4 -- "Yes" --> RET2["return true"]
    IF4 -- "No" --> RET3["return false"]
    IF3 -- "No" --> RET4["return false"]
    IF2 -- "No" --> S4["Step4: eKK0341B022SCHash.get('KKTK_SVC_KEI_STAT'), eKK0341B022SCHash.get('IDO_DIV')"]
    S4 --> IF5{"異動区分がKAIHK系かつ内訳番号不一致"}
    IF5 -- "Yes" --> RET5["return false"]
    IF5 -- "No" --> RET6["return true"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | kktkSvcCd が JKKHakkoSODConstCC.KKTK_SVC_CD_TEL_VA, JKKHakkoSODConstCC.KKTK_SVC_CD_MRT, JKKHakkoSODConstCC.KKTK_SVC_CD_ONU 以外 | - | return false |
| 2 | kkKikiChgNo == null または kkKikiChgNo ≠ vaKikiChgNo | - | サブ分岐へ |
| 3 | this.svc_kei_ucwk_no != null && this.svc_kei_ucwk_no.length > 0 | - | getShuriKokanBfKiki実行 |
| 4 | tmpKokanBfKiki != null && !tmpKokanBfKiki.isEmpty() | - | return true |
| 5 | 上記以外 | - | return false |
| 6 | (異動区分がJKKHakkoSODConstCC.IDO_DIV_KAIHK またはJKKHakkoSODConstCC.IDO_DIV_HTELNOKAIHK) かつ 内訳番号不一致 | - | return false |
| 7 | 上記以外 | - | return true |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3 | eKK0341B022SCHash | HashMap<String, Object> | 機器提供サービス契約一覧照会結果 |
| 4 | vaTaknkikiModelCd | String | VA機器宅内機器型式コード |
| 5 | vaKikiSeizoNo | String | VA機器製造番号 |
| 6 | ido_div | String | 異動区分コード |
| 7 | vaKikiChgNo | String | VA機器変更番号 |
| 8 | kokanBfKiki | Map<String, Object> | 交換前機器情報 |

---

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

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

---

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

**起点:**
- htelNoInfoChgeOdrCtrl → isRegalVaKiki
- hakkoSOD → isRegalVaKiki

**呼出パス:**
```
htelNoInfoChgeOdrCtrl → isRegalVaKiki → callEKK0341B008SCRireki
hakkoSOD → isRegalVaKiki → callEKK0341B008SCRireki
```

**終端:**

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

---

---

### isStaRsv()

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


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

---

#### 1. 役割

対象サービスが「開始予約」かどうかを判定します。  
サービス契約ステータス・親サービスのステータス・サービス利用開始希望年月日から判定します。

---

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

```mermaid
flowchart TD
  START["isStaRsv(stat, oyaStat, svcUseStaKiboYmd)"]
    --> S1["JCCBPCommon.getOpeDate(null)で運用日取得"]
    --> IF1{"stat == JKKHakkoSODConstCC.SVC_KEI_STAT_030 && oyaStat >= JKKHakkoSODConstCC.SVC_KEI_STAT_100 && svcUseStaKiboYmd > 運用日"}
  IF1 -- "Yes" --> RET1["true（開始予約）"]
  IF1 -- "No" --> RET2["false"]
  style IF1 fill:#ffcc00
```

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

1. 運用日（システム日付）を取得
2. サービス契約ステータスが「締結済」（JKKHakkoSODConstCC.SVC_KEI_STAT_030）
3. 親サービス契約ステータスが「サービス提供中」以上（JKKHakkoSODConstCC.SVC_KEI_STAT_100 以上）
4. サービス利用開始希望年月日が運用日より後
5. 上記全て満たす場合は true（開始予約）、それ以外は false

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | stat == JKKHakkoSODConstCC.SVC_KEI_STAT_030 && oyaStat >= JKKHakkoSODConstCC.SVC_KEI_STAT_100 && svcUseStaKiboYmd > 運用日 | 締結済, サービス提供中, 未来日 | true |
| 2 | 上記以外 | - | false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | stat | String | サービス契約ステータス |
| 2 | oyaStat | String | 親サービス契約ステータス |
| 3 | svcUseStaKiboYmd | String | サービス利用開始希望年月日（YYYYMMDD） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | JCCBPCommon.getOpeDate | 共通 | システム運用日取得 | 運用日取得判定 |

---

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

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

**呼出パス:**
```
[Root] → isStaRsv → JCCBPCommon.getOpeDate
```

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

---

---

### isStartRsvOption()

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


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

---

#### 1. 役割

オプションサービス契約番号が「開始予約中」のオプションかどうかを確認します。  
異動予約一覧照会（EKK1681）を実行し、予約反映コード・異動予約詳細コードで「オプション開始予約中」を判定します。

---

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

```mermaid
flowchart TD
  START["isStartRsvOption(param, handle, funcCode, opSvcKeiNo)"]
    --> S1["inHashOpRsv.put(KEY_OP_SVC_KEI_NO, opSvcKeiNo)"]
    --> S2["inHashOpRsv.put(KEY_IDO_RSV_STAT_CD, '00,03')"]
    --> S3["inHashOpRsv.put(KEY_IDO_RSV_DTL_CD, '014')"]
    --> S4["callEKK1681B001SC(param, handle, inHashOpRsv, resultHashOpRsv, FUNC_CODE_1)"]
    --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["CCException, SCCallExceptionをthrow"]
  IF1 -- "No" --> S5["resultHashOpRsv.get(TEMPLATE_ID_EKK1681B001)で検索結果取得"]
    --> IF2{"msgListEKK1681B001.length > 0"}
  IF2 -- "Yes" --> RET1["true（オプション開始予約中）"]
  IF2 -- "No" --> RET2["false"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

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

1. inHashOpRsvにオプションサービス契約番号、予約反映コード（"00,03"）、異動予約詳細コード（"014"）を設定
2. callEKK1681B001SCを呼び出し、異動予約一覧照会を実施
3. statusCodeが0以外なら例外をthrow
4. 検索結果msgListEKK1681B001の件数が1件以上であれば「開始予約中」と判定しtrue
5. それ以外はfalse

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0 | - | 例外throw |
| 2 | msgListEKK1681B001.length > 0 | - | true（開始予約中） |
| 3 | 上記以外 | - | false |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1681B001SC | EKK1681 | 異動予約一覧照会 | オプション開始予約中かの判定 |

---

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

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

**呼出パス:**
```
[Root] → isStartRsvOption → callEKK1681B001SC
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1681B001SC | R | 異動予約一覧照会 |

---

---

### isTajgsTelNo()

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


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

---

#### 1. 役割

電話番号が自社発番か他事業者発番かを判定します。  
EZM0121A010（電話番号一意照会）結果の「番号取得通信事業者自社他社フラグ」で判断します。

---

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

```mermaid
flowchart TD
  START["isTajgsTelNo(handle, param, telNo)"] --> S1["Step1: inHashTelNoに電話番号セット"]
  S1 --> S2["Step2: callEZM0121A010SCで一意照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["CCException例外スロー"]
  IF1 -- "No" --> S3["Step3: 番号取得通信事業者自社他社フラグ取得"]
  S3 --> S4["Step4: !JKKStrConst.CD00189_JISHA.equals(tlnStkuTsjgsJishaTashaFlg)判定"]
  S4 --> RET1["return 判定結果"]

  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0 | - | 例外スロー |
| 2 | !JKKStrConst.CD00189_JISHA.equals(tlnStkuTsjgsJishaTashaFlg) | - | true（他社）、false（自社）返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンス業務データ |
| 3 | telNo | String | 判定対象電話番号 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEZM0121A010SC | EZM0121 | 電話番号 | 電話番号一意照会 |

---

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

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

**呼出パス:**

```
[不明] → isTajgsTelNo → callEZM0121A010SC [R]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEZM0121A010SC | R | 電話番号 |

---

---

### isTelnoSODJudge()

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `protected Boolean isTelnoSODJudge(SessionHandle handle, IRequestParameterReadWrite param, String svc_kei_ucwk_no, String svc_kei_ucwk_gene_add_dtm, String telNo, String pattern)`
> **戻り値:** `Boolean`

---

#### 1. 役割

SOD発行条件パターンに基づき、電話番号の状態（自社/他社・OPT・番ポ有無など）を複合判定し、SOD発行可否を返却します。

---

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

```mermaid
flowchart TD
  START["isTelnoSODJudge(handle, param, ..., pattern)"] --> S1["Step1: UCWK情報 inHashUcwkTelセット"]
  S1 --> S2["Step2: callEKK0191A010SCで内訳＜eo光電話＞一意照会"]
  S2 --> IF1{"statusCodeUcwkTel != 0"}
  IF1 -- "Yes" --> ERR1["CCException例外スロー"]
  IF1 -- "No" --> S3["Step3: 電話番号取得"]
  S3 --> IF2{"isBlank(telNo)"}
  IF2 -- "Yes" --> RETF["return false"]
  IF2 -- "No" --> S4["Step4: 電話番号でcallEZM0121A010SC一意照会"]
  S4 --> IF3{"statusCodeTel != 0"}
  IF3 -- "Yes" --> ERR2["CCException例外スロー"]
  IF3 -- "No" --> S5["Step5: 判定パターン分岐"]

  S5 --> IF4{"pattern == TELNO_JUDGE_001"}
  IF4 -- "Yes" --> IF5{"他社電話番号 or (自社・OPT・網内番ポ・番号取得事業者が自社で番ポ有)"}
  IF5 -- "Yes" --> RETT1["return true"]
  IF5 -- "No" --> RETF

  S5 --> IF6{"pattern == TELNO_JUDGE_002"}
  IF6 -- "Yes" --> IF7{"他社電話番号かつ網内番ポ(法人→個人)"}
  IF7 -- "Yes" --> RETT2["return true"]
  IF7 -- "No" --> RETF

  S5 --> IF8{"pattern == TELNO_JUDGE_003"}
  IF8 -- "Yes" --> IF9{"他社電話番号かつ網内番ポ(法人→個人) or 自社・番号取得事業者自社で番ポ有"}
  IF9 -- "Yes" --> RETT3["return true"]
  IF9 -- "No" --> RETF

  S5 --> IF10{"pattern == TELNO_JUDGE_004"}
  IF10 -- "Yes" --> IF11{"自社・OPT・網内番ポ(法人→個人)"}
  IF11 -- "Yes" --> RETT4["return true"]
  IF11 -- "No" --> RETF

  IF4 -- "No" --> IF6
  IF6 -- "No" --> IF8
  IF8 -- "No" --> IF10
  IF10 -- "No" --> RETF

  RETF["return false"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCodeUcwkTel != 0 | - | 例外スロー |
| 2 | isBlank(telNo) | - | false返却 |
| 3 | statusCodeTel != 0 | - | 例外スロー |
| 4 | pattern == TELNO_JUDGE_001 | - | 他社判定 or OPT自社判定 |
| 5 | pattern == TELNO_JUDGE_002 | - | 他社かつ網内番ポ |
| 6 | pattern == TELNO_JUDGE_003 | - | 他社かつ網内番ポ or 自社番号取得事業者自社で番ポ有 |
| 7 | pattern == TELNO_JUDGE_004 | - | 自社OPT網内番ポ |
| 8 | 上記以外 | - | false返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンス業務データ |
| 3 | svc_kei_ucwk_no | String | サービス契約内訳番号 |
| 4 | svc_kei_ucwk_gene_add_dtm | String | サービス契約内訳世代登録年月日時分秒 |
| 5 | telNo | String | 判定対象電話番号 |
| 6 | pattern | String | 判定評価パターン |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | callEZM0121A010SC | EZM0121 | 電話番号 | 一意照会 |

---

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

**起点:**

- 不明

**呼出パス:**

```
[不明] → isTelnoSODJudge → callEKK0191A010SC [R] → callEZM0121A010SC [R]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0191A010SC | R | サービス契約内訳＜eo光電話＞ |
| callEZM0121A010SC | R | 電話番号 |

---

---

### isUcwkStatCheck()

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


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

---

#### 1. 役割

サービス契約内訳番号および世代登録日時分秒をもとに、対象内訳のステータスがオーダ発行可能かどうかを判定する。主にオーダ発行判定時の内部チェック処理として利用される。<citation>1</citation>

---

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

```mermaid
flowchart TD
  START["isUcwkStatCheck(handle, param, svc_kei_ucwk_no, chaf_svc_kei_ucwk_gene_add_dtm)"] --> S1["Step1: inHashUcwk.put('サービス契約内訳番号', svc_kei_ucwk_no)"]
  S1 --> S2["Step2: inHashUcwk.put('世代登録日時分秒', chaf_svc_kei_ucwk_gene_add_dtm)"]
  S2 --> S3["Step3: callEKK0161A010SC(param, handle, inHashUcwk, retEKK0161A010Hash, 'FUNC_CODE_1')"]
  S3 --> S4["Step4: retEKK0161A010Hash.get('TEMPLATE_ID_EKK0161A010') → eKK0161A010Hash"]
  S4 --> S5["Step5: eKK0161A010Hash.get('サービス契約内訳ステータス') → svcKeiUcwkStat"]
  S5 --> IF1{"this.ido_div == 'IDO_DIV_PAUSERLSCHGE' (休止変更・予約取消)"}
  IF1 -- "Yes" --> IF2{"svcKeiUcwkStat == '100(サービス提供中)' または '030(締結済)'"}
  IF2 -- "Yes" --> RET1["return true"]
  IF2 -- "No" --> RET2["次の条件判定"]
  IF1 -- "No" --> IF3{"svcKeiUcwkStat == '210(一部解約)' または '030(締結済)'"}
  IF3 -- "Yes" --> RET3["return true"]
  IF3 -- "No" --> RET4["return false"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `this.ido_div == JKKHakkoSODConstCC.IDO_DIV_PAUSERLSCHGE` | `休止変更・予約取消` | → 条件2 |
| 2 | `svcKeiUcwkStat == JKKHakkoSODConstCC.SVC_KEI_STAT_100` または `svcKeiUcwkStat == JKKHakkoSODConstCC.SVC_KEI_STAT_030` | `100(サービス提供中)` `030(締結済)` | return true |
| 3 | 上記以外 | - | 条件4へ |
| 4 | `svcKeiUcwkStat == JKKHakkoSODConstCC.SVC_KEI_STAT_210` または `svcKeiUcwkStat == JKKHakkoSODConstCC.SVC_KEI_STAT_030` | `210(一部解約)` `030(締結済)` | return true |
| 5 | 上記以外 | - | return false |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3 | svc_kei_ucwk_no | String | サービス契約内訳番号 |
| 4 | chaf_svc_kei_ucwk_gene_add_dtm | String | サービス契約内訳世代登録年月日時分秒 |

---

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

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

---

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

**起点:**
- isUcwkStatCheck

**呼出パス:**
```
isUcwkStatCheck → callEKK0161A010SC → [READ] サービス契約内訳
```

**終端:**

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

---

---

### jdgIpv6()

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

```
jdgIpv6() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── 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]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── jdgIpv6EKK0361A010()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   ├── newKeiOdrCtrl()
│   ├── addIpv6SODAft()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── newKeiOdrCtrl()
│   │       ├── hakkoSOD()
│   │       └── 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 void jdgIpv6(SessionHandle handle, IRequestParameterReadWrite param, String kei_ucwk_no_param, String op_svc_kei_no_param, HashMap<String, Object> eKK0361A010Info)`
> **戻り値:** `void`

---

#### 1. 役割

IPv6の判定処理全体を担う。オプションサービス契約や機器情報、異動区分等の条件をもとにIPv6 SOD発行可否や該当内訳・機器・オプションの条件判定を詳細に行う。<citation>3</citation>

---

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

```mermaid
flowchart TD
  START["jdgIpv6(handle, param, kei_ucwk_no_param, op_svc_kei_no_param, eKK0361A010Info)"] 
    --> S1["Step1: eKK0361A010Info.get('IPV6_AD_IFID') → ipv6AdIfid"]
    --> IF1{"ipv6AdIfid != null && ipv6AdIfid.toString() != ''"}
    IF1 -- "Yes" --> S2["Step2: inHashKktk.put('SVC_KEI_NO', this.svc_kei_no1)"]
    S2 --> S3["Step3: callEKK0341B008SC(param, handle, inHashKktk, resultHashKktk, 'FUNC_CODE_1')"]
    S3 --> S4["Step4: resultHashKktk.get('TEMPLATE_ID_EKK0341B022') → msgEKK0341B002SCList"]
    S4 --> IF2{"msgEKK0341B002SCList != null"}
    IF2 -- "Yes" --> S5["for each msgEKK0341B002SCList"]
    S5 --> S6["Step5: 各種フィールド取得・判定・shkkaChr等の変換"]
    S6 --> IF3{"kktkSvcCd が BBR/MRT 以外" }
    IF3 -- "Yes" --> S7["次のデータへ（continue）"]
    IF3 -- "No" --> IF4{"this.sod_pattern_ipv6 == 3"}
    IF4 -- "Yes" --> IF5{"kktkStat == 910 or 920"}
    IF5 -- "No" --> S8["次のデータへ（continue）"]
    IF5 -- "Yes" --> S9["処理継続"]
    IF4 -- "No" --> IF6{"kktkStat == 100 or 010 or 020 or 030"}
    IF6 -- "No" --> S10["次のデータへ（continue）"]
    IF6 -- "Yes" --> S11["Step6: 内訳番号/発行済みチェック/条件判定"]
    S11 --> IF7{"!JKKHakkoSODConstCC.IDO_DIV_NEW.equals(this.ido_div)"}
    IF7 -- "Yes" --> IF8{"JKKHakkoSODConstCC.IDO_DIV_OPSETTE.equals(this.ido_div)"}
    IF8 -- "Yes" --> IF9{"!check_op_kei_no.equals(shkkaChr(op_svc_kei_no_param))"}
    IF9 -- "Yes" --> S12["continue"]
    IF9 -- "No" --> S13["継続"]
    IF8 -- "No" --> S14["発行済みチェック・continue"]
    IF7 -- "No" --> S15["続行"]
    S15 --> S16["Step7: 各種フィールド取得・宅内機器型式マスタ参照"]
    S16 --> IF10{"isBlank(this.kiki_seizo_no_ipv6) or isBlank(this.taknkiki_model_cd_ipv6)"}
    IF10 -- "Yes" --> S17["continue"]
    IF10 -- "No" --> S18["Step8: getTaknkikiM(handle, param, this.taknkiki_model_cd_ipv6)"]
    S18 --> IF11{"null != taknkiki_model_m"}
    IF11 -- "Yes" --> S19["Step9: shkkaChr((String)taknkiki_model_m.get('IPV6_TAIO_FLG'))"]
    S19 --> IF12{"isBlank(this.op_addr_ipv6)"}
    IF12 -- "Yes" --> S20["continue"]
    IF12 -- "No" --> S21{"((!isBlank(this.kiki_seizo_no_ipv6)) && IPV6_TAIO_FLG_TAIO)"}
    S21 -- "Yes" --> IF13{"kiki_shukka_sumi_ipv6"}
    IF13 -- "Yes" --> IF14{"op_addr_kakutei_ipv6"}
    IF14 -- "Yes" --> IF15{"this.kktk_svc_kei_no, this.kktk_svc_kei_gadtm, this.svc_kei_ucwk_no, this.svc_kei_ucwk_gadtm が全て存在"}
    IF15 -- "Yes" --> IF16{"takino_flg == 0"}
    IF16 -- "Yes" --> S22["hakkouIpv6(handle, param, eKK0361A010Info)"]
    IF16 -- "No" --> IF17{"takino_flg != 9"}
    IF17 -- "Yes" --> S23["hakkouIpv6(handle, param, eKK0361A010Info)"]
    IF17 -- "No" --> S24["continue"]
    IF15 -- "No" --> S25["continue"]
    IF14 -- "No" --> S26["continue"]
    IF13 -- "No" --> S27["continue"]
    S21 -- "No" --> S28["continue"]
    IF11 -- "No" --> S29["continue"]
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
    style IF3 fill:#ffcc00
    style IF4 fill:#ffcc00
    style IF5 fill:#ffcc00
    style IF6 fill:#ffcc00
    style IF7 fill:#ffcc00
    style IF8 fill:#ffcc00
    style IF9 fill:#ffcc00
    style IF10 fill:#ffcc00
    style IF11 fill:#ffcc00
    style IF12 fill:#ffcc00
    style IF13 fill:#ffcc00
    style IF14 fill:#ffcc00
    style IF15 fill:#ffcc00
    style IF16 fill:#ffcc00
    style IF17 fill:#ffcc00
```

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

（全28分岐。データソースの全分岐展開）

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | ipv6AdIfid != null && !"".equals(ipv6AdIfid.toString()) | - | 続行 |
| 2 | 0 != statusCode | - | CCException発生 |
| 3 | msgEKK0341B002SCList != null | - | forループ |
| 4 | kktkSvcCd != JKKHakkoSODConstCC.KKTK_SVC_CD_BBR かつ kktkSvcCd != JKKHakkoSODConstCC.KKTK_SVC_CD_MRT | - | continue |
| 5 | this.sod_pattern_ipv6 == 3 | - | 解約系ステータス判定へ |
| 6 | !(JKKHakkoSODConstCC.SVC_KEI_STAT_910.equals(kktkStat)) && !(JKKHakkoSODConstCC.SVC_KEI_STAT_920.equals(kktkStat)) | - | continue |
| 7 | !(JKKHakkoSODConstCC.SVC_KEI_STAT_100.equals(kktkStat)) && !(JKKHakkoSODConstCC.SVC_KEI_STAT_010.equals(kktkStat)) && !(JKKHakkoSODConstCC.SVC_KEI_STAT_020.equals(kktkStat)) && !(JKKHakkoSODConstCC.SVC_KEI_STAT_030.equals(kktkStat)) | - | continue |
| 8 | !JKKHakkoSODConstCC.IDO_DIV_NEW.equals(this.ido_div) | - | 発行済みチェックへ |
| 9 | JKKHakkoSODConstCC.IDO_DIV_OPSETTE.equals(this.ido_div) | - | オプション契約判定へ |
| 10 | !check_op_kei_no.equals(shkkaChr(op_svc_kei_no_param)) | - | continue |
| 11 | isBlank(this.kiki_seizo_no_ipv6) or isBlank(this.taknkiki_model_cd_ipv6) | - | continue |
| 12 | null == this.kiki_seizo_no or 0 == this.kiki_seizo_no.length | - | continue |
| 13 | null == this.taknkiki_model_cd or 0 == this.taknkiki_model_cd.length | - | continue |
| 14 | null != taknkiki_model_m | - | 続行 |
| 15 | isBlank(this.op_addr_ipv6) | - | continue |
| 16 | (!isBlank(this.kiki_seizo_no_ipv6)) && JKKHakkoSODConstCC.IPV6_TAIO_FLG_TAIO.equals(shkkaChr(this.kiki_ipv6_taio_flg)) | - | 続行 |
| 17 | kiki_shukka_sumi_ipv6 | - | 続行 |
| 18 | op_addr_kakutei_ipv6 | - | 続行 |
| 19 | null == this.kktk_svc_kei_no or 1 > this.kktk_svc_kei_no.length | - | continue |
| 20 | null == this.kktk_svc_kei_gadtm or 1 > this.kktk_svc_kei_gadtm.length | - | continue |
| 21 | null == this.svc_kei_ucwk_no or 1 > this.svc_kei_ucwk_no.length | - | continue |
| 22 | null == this.svc_kei_ucwk_gadtm or 1 > this.svc_kei_ucwk_gadtm.length | - | continue |
| 23 | takino_flg == 0 | - | hakkouIpv6発行 |
| 24 | takino_flg != 9 | - | hakkouIpv6発行 |
| 25 | その他 | - | continue |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3 | kei_ucwk_no_param | String | 内訳契約番号 |
| 4 | op_svc_kei_no_param | String | オプションサービス契約番号 |
| 5 | eKK0361A010Info | HashMap<String, Object> | オプションサービス契約一意照会結果 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約一覧 | 一覧照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳 | 現在利用中照会 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約一覧 | サービス契約回線内訳照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約一覧 | 機器変更番号照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約一覧 | 予約照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約一覧 | 一覧照会 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定一覧 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |
| R | callEZM0411A010SC | EZM0411 | 宅内機器型式 | 一意照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約 | 一意照会 |
| R | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約一覧 | 履歴照会 |
| R | callEDK0301B060SC | EDK0301 | 返品機器取消一覧 | 返品機器取消一覧照会 |
| R | callEKK0341B001SC | EKK0341 | 機器提供サービス契約一覧 | 機器製造番号照会 |
| R | callEKK0341A010SC | EKK0341 | 機器提供サービス契約 | 一意照会 |

---

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

**起点:**
- jdgIpv6EKK0361A010 → jdgIpv6
- opSetOdrCtrl → jdgIpv6
- addIpv6SODAft → jdgIpv6
- kaihkOdrCtrl → jdgIpv6
- htelNoInfoChgeOdrCtrl → jdgIpv6
- htelNoKaihkOdrCtrl → jdgIpv6
- htelNoDslOdrCtrl → jdgIpv6
- dslOdrCtrl → jdgIpv6
- hakkoSOD → jdgIpv6
- newKeiOdrCtrl → jdgIpv6
- ksiDslOdrCtrl → jdgIpv6
- cnclOdrCtrl → jdgIpv6
- ksiDslFixOdrCtrl → jdgIpv6
- adchgFixOdrCtrl → jdgIpv6

**呼出パス:**
```
[複数EntryPoint] → jdgIpv6 → callEKK0341B008SC他
```

**終端:**

（上記CRUD参照）

---

---

### jdgIpv6EKK0361A010()

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

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


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

---

#### 1. 役割

オプションサービス契約（ISP）一意照会結果をもとに、IPv6判定処理を実施する。新規・変更・解約時のIPv6対応有無判断などの制御に利用。<citation>3</citation>

---

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

```mermaid
flowchart TD
  START["jdgIpv6EKK0361A010(handle, param, ucwk_kei_no_param, op_svc_kei_no_param, op_svc_kei_gadtm_param)"] 
    --> S1["Step1: getEKK0361A010Info(handle, param, op_svc_kei_no_param, op_svc_kei_gadtm_param) → eKK0361A010Info"]
    --> IF1{"eKK0361A010Info != null"}
    IF1 -- "Yes" --> S2["Step2: jdgIpv6(handle, param, ucwk_kei_no_param, op_svc_kei_no_param, eKK0361A010Info)"]
    S2 --> RET1["return"]
    IF1 -- "No" --> RET2["return"]
    style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | eKK0361A010Info != null | - | jdgIpv6呼び出し |
| 2 | 上記以外 | - | return |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ（業務データコンテナ） |
| 3 | ucwk_kei_no_param | String | 内訳契約番号 |
| 4 | op_svc_kei_no_param | String | オプションサービス契約番号 |
| 5 | op_svc_kei_gadtm_param | String | オプションサービス契約世代登録日時分秒 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約 | 一意照会 |
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約一覧 | 一覧照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳 | 現在利用中照会 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約一覧 | サービス契約回線内訳照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞ | 一意照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約一覧 | 機器変更番号照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約一覧 | 予約照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約一覧 | 一覧照会 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定一覧 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |
| R | callEZM0411A010SC | EZM0411 | 宅内機器型式 | 一意照会 |

---

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

**起点:**
- addIpv6SODAft → jdgIpv6EKK0361A010
- kaihkOdrCtrl → jdgIpv6EKK0361A010
- newKeiOdrCtrl → jdgIpv6EKK0361A010
- hakkoSOD → jdgIpv6EKK0361A010

**呼出パス:**
```
addIpv6SODAft → jdgIpv6EKK0361A010 → getEKK0361A010Info → jdgIpv6
kaihkOdrCtrl → jdgIpv6EKK0361A010
newKeiOdrCtrl → jdgIpv6EKK0361A010
hakkoSOD → jdgIpv6EKK0361A010
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0361A010SC | R | オプションサービス契約 |
| callEKK0341B008SC | R | 機器提供サービス契約一覧 |

---

---

### jdgOdr163()

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

```
jdgOdr163() ← 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:** `protected void jdgOdr163(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> sodMap)`
> **戻り値:** `void`

---

#### 1. 役割

コース変更時に現ルータに対し、ルーター向け接続情報・変更SODの登録処理を行います。  
SOD基本情報・サービス契約情報・機器提供サービス契約情報など複数情報を取得し、該当する場合に複数のSOD発行（addTakinoSOD, tsuikabunAddSOD）を実施します。

---

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

```mermaid
flowchart TD
  START["jdgOdr163(handle, param, sodMap)"]
    --> IF1{"this.ido_div != JKKHakkoSODConstCC.IDO_DIV_COURSECHG"}
  IF1 -- "Yes: コース変更以外はNOP" --> RET1["return"]
  IF1 -- "No: コース変更" --> S1["SOD基本情報取得"]
  S1 --> S2["サービス契約情報取得"]
  S2 --> S3["サービス契約内訳情報取得"]
  S3 --> S4["機器提供サービス契約情報取得"]
  S4 --> IF2{"syoriDiv == JKKHakkoSODConstCC.SYORI_DIV_ODR_163"}
  IF2 -- "Yes" --> IF3{"chbf_kktsvkei_noまたはchbf_kktsvkei_gene_add_dtmが空か"}
  IF3 -- "Yes" --> S5["機器提供サービス契約一覧照会呼び出し(callEKK0341B008SC)"]
  S5 --> IF4{"statusCode != 0"}
  IF4 -- "Yes" --> ERR1["CCException, SCCallException throw"]
  IF4 -- "No" --> LOOP1["msgEKK0341B008SCListループ"]
  LOOP1 --> IF5{"tmp_kktkSvcKeiStat == SVC_KEI_STAT_910 or SVC_KEI_STAT_920"}
  IF5 -- "Yes" --> "不要なレコードはスルー"
  IF5 -- "No" --> IF6{"tmp_kktk_svc_cd == KKTK_SVC_CD_BBR"}
  IF6 -- "Yes" --> S6["機器提供サービス契約一意照会(callEKK0341A010SC)"]
  S6 --> S7["多機能ルーターチェック"]
  S7 --> IF7{"takino_flg != 0"}
  IF7 -- "takino_flg == 2" --> S8["addTakinoSOD(ODR_NAIYO_CD_401)"]
  IF7 -- "takino_flg == 4" --> S9["addTakinoSOD(ODR_NAIYO_CD_404)"]
  IF7 -- "その他" --> S10["tsuikabunAddSOD(ODR_NAIYO_CD_163)"]
  IF6 -- "No" --> IF8{"!isBlank(kktsvkei_model_cd) && !isBlank(kktsvkei_seizo_no)"}
  IF8 -- "Yes" --> S11["tsuikabunAddSOD(ODR_NAIYO_CD_163)"]
  IF8 -- "No" --> S12["何もしない"]
  IF3 -- "No" --> S13["inHashKktk.put(KKTK_SVC_KEI_NO, chbf_kktsvkei_no) & put(GENE_ADD_DTM, chbf_kktsvkei_gene_add_dtm)"]
  S13 --> S6
  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:#aaccff
  style IF8 fill:#aaccff
```

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

1. コース変更以外はNOPでreturn
2. SOD基本情報・サービス契約情報・サービス契約内訳情報・機器提供サービス契約情報を順に取得
3. syoriDiv（処理区分）が163の場合：
   - chbf_kktsvkei_noまたはchbf_kktsvkei_gene_add_dtmが空の場合、callEKK0341B008SCで機器提供サービス契約一覧照会を実施
     - statusCodeが0以外なら例外throw
     - msgEKK0341B008SCListループ内
       - SVC_KEI_STAT_910または920ならスルー
       - KKTK_SVC_CD_BBRならcallEKK0341A010SCで機器提供サービス契約一意照会
         - 多機能ルーターチェック後、takino_flgの値でaddTakinoSODまたはtsuikabunAddSODを実施
       - それ以外でモデルコード・製造番号が空でなければtsuikabunAddSOD
   - 変更後の値が存在する場合は直接callEKK0341A010SC
     - 以降は上記と同様の分岐

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | this.ido_div != JKKHakkoSODConstCC.IDO_DIV_COURSECHG | コース変更以外 | NOP, return |
| 2 | syoriDiv == JKKHakkoSODConstCC.SYORI_DIV_ODR_163 | 163 | ルータ向け接続情報・変更処理 |
| 3 | isBlank(chbf_kktsvkei_no) || isBlank(chbf_kktsvkei_gene_add_dtm) | 空 | callEKK0341B008SC |
| 4 | statusCode != 0 | - | 例外throw |
| 5 | tmp_kktkSvcKeiStat == SVC_KEI_STAT_910 or SVC_KEI_STAT_920 | 解約済等 | スルー |
| 6 | tmp_kktk_svc_cd == KKTK_SVC_CD_BBR | BBR | callEKK0341A010SC, 多機能ルーターチェック |
| 7 | takino_flg == 2 | - | addTakinoSOD(ODR_NAIYO_CD_401) |
| 8 | takino_flg == 4 | - | addTakinoSOD(ODR_NAIYO_CD_404) |
| 9 | !isBlank(kktsvkei_model_cd) && !isBlank(kktsvkei_seizo_no) | 空でない | tsuikabunAddSOD(ODR_NAIYO_CD_163) |
| 10 | 上記以外 | - | 何もしない |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約一覧照会 | 一覧照会（2012-11/21 ロット２IT1-2012-0002131 EKK0341B022） |
| R | callEKK0341A010SC | EKK0341 | 機器提供サービス契約一意照会 | 一意照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | 詳細不明 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約一覧照会（契約回線内訳） | 一覧照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞一意照会 | 一意照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約一覧照会（機器変更番号） | 一覧照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約一覧照会（予約） | 予約一覧照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約一覧照会 | 一覧照会 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定一覧照会 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定一意照会 | 一意照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約一意照会 | 一意照会 |
| R | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約一覧照会（履歴照会） | 履歴照会 |
| R | callEDK0301B060SC | EDK0301 | 返品機器取消一覧照会 | 一覧照会 |
| R | callEKK0341B001SC | EKK0341 | 機器提供サービス契約一覧照会（機器製造番号） | 一覧照会 |

---

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

**起点 (Entry Point):**
- courseChgeOdrCtrl
- adchgFixOdrCtrl
- hakkoSOD

**呼出パス:**
```
[Root] → courseChgeOdrCtrl → jdgOdr163
[Root] → adchgFixOdrCtrl → jdgOdr163
[Root] → hakkoSOD → jdgOdr163
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0341B008SC | R | 機器提供サービス契約一覧照会 |
| callEKK0341A010SC | R | 機器提供サービス契約一意照会 |
| ...（上記テーブル参照、全て記載） | | |

---

---

### jdgOpSvcKind()

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

```
jdgOpSvcKind() ← 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 String[] jdgOpSvcKind(String op_svc_cd)`
> **戻り値:** `String[]`

---

#### 1. 役割

オプションサービスコードから、対象サービスがネットか電話か、およびサブオプション照会フラグ判定を実施する。オプション追加・変更・解約時のサブオプション判定に利用。<citation>5</citation>

---

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

```mermaid
flowchart TD
  START["jdgOpSvcKind(op_svc_cd)"] --> IF1{"op_svc_cd == OP_SVC_CD_EMAIL, HP, REMOTE, ..."}
  IF1 -- "Yes" --> IF2{"op_svc_cd == OP_SVC_CD_EMAIL or HP"}
  IF2 -- "Yes" --> S1["retInfo = ['ネット', 'サブオプション要照会']"]
  IF2 -- "No" --> S2["retInfo = ['ネット', 'サブオプション不要']"]
  IF1 -- "No" --> IF3{"op_svc_cd == OP_SVC_CD_WARKMI, TENSO, DSP, ..."}
  IF3 -- "Yes" --> IF4{"op_svc_cd == OP_SVC_CD_TENSO or DSP"}
  IF4 -- "Yes" --> S3["retInfo = ['電話', 'サブオプション要照会']"]
  IF4 -- "No" --> S4["retInfo = ['電話', 'サブオプション不要']"]
  IF3 -- "No" --> S5["retInfo = ['その他', 'サブオプション不要']"]
  S1 --> RET["return retInfo"]
  S2 --> RET
  S3 --> RET
  S4 --> RET
  S5 --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | op_svc_cd == JKKHakkoSODConstCC.OP_SVC_CD_EMAIL 等 | ネット | サブ分岐へ |
| 2 | op_svc_cd == JKKHakkoSODConstCC.OP_SVC_CD_EMAIL or HP | サブオプション要照会 | retInfo = ['ネット', '要照会'] |
| 3 | 上記以外 | - | retInfo = ['ネット', '不要'] |
| 4 | op_svc_cd == JKKHakkoSODConstCC.OP_SVC_CD_WARKMI, TENSO, DSP 等 | 電話 | サブ分岐へ |
| 5 | op_svc_cd == JKKHakkoSODConstCC.OP_SVC_CD_TENSO or DSP | サブオプション要照会 | retInfo = ['電話', '要照会'] |
| 6 | 上記以外 | - | retInfo = ['電話', '不要'] |
| 7 | その他 | - | retInfo = ['その他', '不要'] |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | op_svc_cd | String | オプションサービスコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | なし |

---

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

**起点:**
- opSetOdrCtrl → jdgOpSvcKind
- htelNoInfoChgeOdrCtrl → jdgOpSvcKind
- htelNoKaihkOdrCtrl → jdgOpSvcKind
- htelNoDslOdrCtrl → jdgOpSvcKind
- kaihkOdrCtrl → jdgOpSvcKind
- dslOdrCtrl → jdgOpSvcKind
- hakkoSOD → jdgOpSvcKind
- ksiDslOdrCtrl → jdgOpSvcKind
- cnclOdrCtrl → jdgOpSvcKind
- ksiDslFixOdrCtrl → jdgOpSvcKind

**呼出パス:**
```
[opSetOdrCtrl等] → jdgOpSvcKind
```

**終端:** なし

---

<citation>1</citation><citation>2</citation><citation>3</citation><citation>4</citation><citation>5</citation>

---

### jdgSvcKind()

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

```
jdgSvcKind() ← gọi bởi:
├── addIpv6SODAft()    [trực tiếp]
├── courseChgeOdrCtrl()    [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]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── setChgePWForRouterConInfo()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
├── adchgFixOdrCtrl()
│   └── hakkoSOD()
├── bmpSwitchOdrCtrl()
│   └── hakkoSOD()
├── checkTakinoRT()
│   ├── adchgFixOdrCtrl()
│   ├── addIpv6SODAft()
│   ├── bmpSwitchOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── courseChgeOdrCtrl()
│   ├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoAddOdrCtrl()
│   ├── idpwShkkaSaifuriOdrCtrl()
│   ├── jdgIpv6EKK0361A010()
│   ├── kaihkOdrCtrl()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── newKeiOdrCtrl()
│   ├── vLanIdChgOdrCtrl()
│   ├── 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()
│   ├── opSetOdrCtrl()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoInfoChgeOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   └── ksiDslOdrCtrl()
│   ├── setChgePWForRouterConInfo()
│   │   ├── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   ├── telNoChge()
│   │   ├── bmpSwitchOdrCtrl()
│   │   └── hakkoSOD()
│   └── wribInfoAddOdrCtrl()
│       └── hakkoSOD()
├── cnclOdrCtrl()
│   └── hakkoSOD()
├── dslOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── hakkoSOD()
│   ├── ksiDslOdrCtrl()
│   └── ksiDslFixOdrCtrl()
│       └── hakkoSOD()
├── kaihkOdrCtrl()
│   └── hakkoSOD()
├── ksiDslOdrCtrl()
│   └── hakkoSOD()
├── newKeiOdrCtrl()
│   ├── adchgFixOdrCtrl()
│   └── hakkoSOD()
├── pauseRlsChgeOdrCtrl()
│   └── hakkoSOD()
├── pauseUkOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   └── kaihkOdrCtrl()
├── stpRlsOdrCtrl()
│   ├── hakkoSOD()
│   └── useStpRlsOdrCtrl()
├── stpUkOdrCtrl()
│   ├── bmpSwitchOdrCtrl()
│   ├── hakkoSOD()
│   ├── kaihkOdrCtrl()
│   └── useStpOdrCtrl()
├── taiikiSeigenOdrCtrl()
│   └── hakkoSOD()
├── useStpOdrCtrl()
│   └── hakkoSOD()
├── useStpRlsOdrCtrl()
│   └── hakkoSOD()
├── vLanIdChgOdrCtrl()
│   └── hakkoSOD()
└── vLanIdVaChangeOdrCtrl()
    └── hakkoSOD()
```


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

---

#### 1. 役割

料金グループコードより、サービス種類（ネット・モバイル・電話・イーアクセス・フレッツ）を判定する。各種サービス種別分岐の主要ロジック。<citation>5</citation>

---

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

```mermaid
flowchart TD
  START["jdgSvcKind()"] --> S1["Step1: prc_grp_cd取得"]
  S1 --> IF1{"prc_grp_cd == PRC_GRP_CD_NET_HM, NET_MZ, NET_MN"}
  IF1 -- "Yes" --> S2["svc_kind = '01'（ネット）"]
  IF1 -- "No" --> IF2{"prc_grp_cd == MOB_WIFI, MOB_EM"}
  IF2 -- "Yes" --> S3["svc_kind = '02'（モバイル）"]
  IF2 -- "No" --> IF3{"prc_grp_cd == TEL"}
  IF3 -- "Yes" --> S4["svc_kind = '03'（電話）"]
  IF3 -- "No" --> IF4{"prc_grp_cd == EACCESS or FLETS"}
  IF4 -- "Yes" --> S5["svc_kind = '04'（イーアクセス/フレッツ）"]
  IF4 -- "No" --> S6["svc_kind = ''"]
  S2 --> RET["return svc_kind"]
  S3 --> RET
  S4 --> RET
  S5 --> RET
  S6 --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | prc_grp_cd == JKKHakkoSODConstCC.PRC_GRP_CD_NET_HM など | NET系 | svc_kind="01" |
| 2 | prc_grp_cd == JKKHakkoSODConstCC.PRC_GRP_CD_MOB_WIFI, MOB_EM | モバイル系 | svc_kind="02" |
| 3 | prc_grp_cd == JKKHakkoSODConstCC.PRC_GRP_CD_TEL | 電話系 | svc_kind="03" |
| 4 | prc_grp_cd == JKKHakkoSODConstCC.PRC_GRP_CD_EACCESS, FLETS | イーアクセス/フレッツ | svc_kind="04" |
| 5 | 上記以外 | - | svc_kind="" |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| - | - | - | パラメータなし |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | なし |

---

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

**起点:**
- 多数（DSL・MOB・TEL等の各種OdrCtrl系、hakkoSOD含む）

**呼出パス:**
```
[DSL系/電話系/新規/解約等] → jdgSvcKind
```

**終端:** なし

---

---

### judgeOdrHakkoJoken4WiFiSpot()

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

```
judgeOdrHakkoJoken4WiFiSpot() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── useStpOdrCtrl()    [trực tiếp]
├── useStpRlsOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── cnclOdrCtrl()
│   │   └── hakkoSOD()
│   ├── ksiDslFixOdrCtrl()
│   │   └── hakkoSOD()
│   └── ksiDslOdrCtrl()
│       └── hakkoSOD()
├── newEoMobile()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
│       ├── hakkoSOD()
│       └── adchgFixOdrCtrl()
│           └── hakkoSOD()
├── spotLoginSysidChgeOdrCtrl()
│   └── hakkoSOD()
├── stpRlsOdrCtrl()
│   ├── hakkoSOD()
│   └── useStpRlsOdrCtrl()
│       └── hakkoSOD()
└── stpUkOdrCtrl()
    ├── hakkoSOD()
    ├── bmpSwitchOdrCtrl()
    │   └── hakkoSOD()
    ├── kaihkOdrCtrl()
    │   └── hakkoSOD()
    └── useStpOdrCtrl()
        └── hakkoSOD()
```


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

---

#### 1. 役割

Wi-Fiスポットに関するSOD発行時に、オーダ発行条件コード（即時 or 遅延）を決定する業務メソッドです。  
各サービス契約番号に付与されるWi-FiスポットSODの受付状況や送信依頼日時から、発行タイミングを柔軟に制御します。

---

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

```mermaid
flowchart TD
  START["judgeOdrHakkoJoken4WiFiSpot(param, handle, sysid)"]
    --> S1["callEKK0081B004SCでsysidからサービス契約一覧取得"]
    --> FOR1["for: svcKeiMap（契約番号ごと）"]
      FOR1 --> S2["callEKK1081B001SCでWiFiスポットSOD発行条件一覧取得"]
      S2 --> FOR2["for: kk1081Map（SODごと）"]
        FOR2 --> IF1{"SEND_REQ_FIN_DTMが未設定か"}
        IF1 -- "未設定" --> S3["オーダ発行条件コードを遅延に設定"]
        IF1 -- "設定済" --> S4["オーダ発行条件コードを即時に設定"]
    S4 --> RET["odrHakkoJokenCdを返却"]
    S3 --> RET

    style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `SEND_REQ_FIN_DTMが空` | - | 遅延発行 |
| 2 | `SEND_REQ_FIN_DTMが設定済み` | - | 即時発行 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト/レスポンスパラメータ |
| 2 | handle | SessionHandle | セッション管理ハンドル |
| 3 | sysid | String | SYSID（契約単位識別子） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0081B004SC | EKK0081 | サービス契約一覧（SYSID） | SYSIDからサービス契約一覧照会 |
| R | callEKK1081B001SC | EKK1081 | オーダ発行条件一覧 | SOD発行条件一覧照会 |

---

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

**起点:**
- spotLoginSysidChgeOdrCtrl
- newEoMobile
- dslOdrCtrl
- stpRlsOdrCtrl
- stpUkOdrCtrl
- hakkoSOD
- newKeiOdrCtrl
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl
- useStpRlsOdrCtrl
- bmpSwitchOdrCtrl
- useStpOdrCtrl
- kaihkOdrCtrl
- adchgFixOdrCtrl

**呼出パス例:**
```
hakkoSOD → judgeOdrHakkoJoken4WiFiSpot → callEKK0081B004SC → callEKK1081B001SC
```

**終端:**
| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0081B004SC | R | サービス契約一覧（SYSID） |
| callEKK1081B001SC | R | オーダ発行条件一覧 |

---

---

### judgeTokiSOD()

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

```
judgeTokiSOD() ← gọi bởi:
├── hakkoSOD()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
└── pauseUkOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoKaihkOdrCtrl()
    │   └── hakkoSOD()
    └── kaihkOdrCtrl()
        └── hakkoSOD()
```


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

---

#### 1. 役割

異動に伴うトーキ開始／終了の要否判定を行い、その判定結果を返す業務メソッドです。<citation>4</citation>

---

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

```mermaid
flowchart TD
  START["judgeTokiSOD(handle, param, idoDiv, idoDtlCd)"] --> S1["Step1: addTokiSOD(handle, param, idoDiv, idoDtlCd, false)呼出"]
  S1 --> RET["return"]

  %% 補足: ラッパーメソッドで内部addTokiSODを呼出
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | 常時 |  | addTokiSOD(handle, param, idoDiv, idoDtlCd, false)呼出 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | リクエスト／レスポンス用パラメータ |
| 3 | idoDiv | String | 異動区分 |
| 4 | idoDtlCd | String | 異動詳細コード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | addTokiSOD | - | - | トーキSOD判定呼出 |

---

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

**起点:**
- pauseUkOdrCtrl → judgeTokiSOD
- htelNoKaihkOdrCtrl → judgeTokiSOD
- kaihkOdrCtrl → judgeTokiSOD
- hakkoSOD → judgeTokiSOD

**呼出パス:**

```
[呼出元] → judgeTokiSOD → addTokiSOD
```

**終端:**

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

---

---

### keiTtdkChuHtelnoChgeOdrCtrl()

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


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

---

#### 1. 役割

契約手続き中の光電話番号に対する番号変更オーダ制御処理を行うメソッドです。  
サービス契約・内訳情報を元に、転送電話・SIP等のオプション有無や状態に応じて必要なSOD（登録・解約・消去）を登録します。

---

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

```mermaid
flowchart TD
  START["keiTtdkChuHtelnoChgeOdrCtrl(handle, param, sodMap)"]
    --> S1["Step1: sodMapからサービス契約/内訳情報取得"]
    --> S2["Step2: 内訳番号・世代情報取得（変更前/後）"]
    --> S3["Step3: 転送電話オプション有無を照会"]
    --> IF1{"転送電話オプションがあるか"}
    IF1 -- "はい" --> S4["Step4: 変更前/後内訳のSIP・登録/解約/消去SOD発行"]
    IF1 -- "いいえ" --> S5["Step5: SIP・登録/解約/消去SOD発行省略"]
    S4 --> S6["Step6: 同一処理番号取得"]
    S5 --> S6
    S6 --> S7["Step7: addSODで登録/解約/消去SODを登録"]
    S7 --> RET["paramを返却"]

    style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `転送電話オプションがあるか` | true/false | SOD発行有無分岐 |
| 2 | 変更前内訳: 番ポ無 | - | 解約/消去SOD |
| 3 | 変更後内訳: 番ポ無 | - | 登録SOD |
| 4 | 各SOD登録時にstatusCode!=0 | 0以外 | 例外スロー |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 | 転送電話オプション有無確認 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞一意照会 | 番ポ有無確認 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号取得 | SOD発行管理 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞一意照会 | - |

---

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

**起点:**  
本メソッドは直接コールされるエントリポイント。

**呼出パス例:**
```
[エントリポイント] → keiTtdkChuHtelnoChgeOdrCtrl → callEKK0351B002SC → callEKK0191A010SC → addSOD
```

**終端:**
| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0351B002SC | R | オプションサービス契約一覧照会 |
| callEKK0191A010SC | R | サービス契約内訳＜eo光電話＞一意照会 |
| callEKK1081C011SC | R | 同一処理番号取得 |
| callEKK0361A010SC | R | オプションサービス契約＜ISP＞一意照会 |

---

---

### koteiIpAd8DivOdrCtrl()

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

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


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

---

#### 1. 役割

固定IPアドレス８区分の業務制御を行い、関連するSOD（オーダ内容コード154等）を必要に応じて発行します。サービス契約情報やマンション種別・業務パラメータの状態などを判断材料として、分岐発行ロジックを持ちます。呼出元は`hakkoSOD`です。

---

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

```mermaid
flowchart TD
  START["koteiIpAd8DivOdrCtrl(handle, param, fixedText, sodMap)"]
    --> IF1{"workMap != null"}
    IF1 -- "Yes" --> S1["サービス契約番号取得"]
    IF1 -- "No" --> END["return param"]
    S1 --> S2["getSvcKeiInfo実行"]
    S2 --> IF2{"pplan_cdが空"}
    IF2 -- "Yes" --> IF3{"prc_grp_cd=NET_MT && tk_hoshiki_kei_no有"}
    IF3 -- "Yes" --> S3["callEKK0891A010_SC実施"]
    S3 --> IF4{"eKK0891A010SCHash有"}
    IF4 -- "Yes" --> IF5{"dammy_pplan_cd有"}
    IF5 -- "Yes" --> S4["pplan_cd再設定"]
    IF5 -- "No" --> S5["スキップ"]
    IF4 -- "No" --> S5
    IF3 -- "No" --> S5
    IF2 -- "No" --> S5
    S5 --> IF6{"同一処理番号なし"}
    IF6 -- "Yes" --> S6["getSame_trn_no実行"]
    IF6 -- "No" --> S7["スキップ"]
    S6 --> S7
    S7 --> IF7{"コース変更内訳取得失敗"}
    IF7 -- "Yes" --> END
    IF7 -- "No" --> IF8{"コース変更後内訳有"}
    IF8 -- "Yes" --> END
    IF8 -- "No" --> S8["getOldVrsbIdgSvcDtlCd実行"]
    S8 --> S9["addSOD(ODR_NAIYO_CD_154)"]
    S9 --> S10["addSOD(ODR_NAIYO_CD_104)"]
    S10 --> S11["addSOD(ODR_NAIYO_CD_101)"]
    S11 --> S12["addSOD(ODR_NAIYO_CD_152)"]
    S12 --> S13["addSOD(ODR_NAIYO_CD_106)"]
    S13 --> END
```

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

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0891A010_SC | EKK0891 | 提供方式契約 | 一意照会 |
| R | callEKK0351B010SC | EKK0351 | オプションサービス契約 | 一覧照会（契約番号） |
| R | callEKK0091A010_SC | EKK0091 | サービス契約 | 一意照会 |
| R | callEKK0881A010_SC | EKK0881 | 回線使用契約 | 一意照会 |
| R | callEZM0321A010_SC | EZM0321 | 業務パラメータ | 一意照会検索 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 取得 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳 | 一覧照会（契約番号） |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞ | 一意照会 |
| R | callEKK1681B001SC | EKK1681 | 異動予約 | 一覧照会 |

---

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

**起点:**

- hakkoSOD → koteiIpAd8DivOdrCtrl

**呼出パス:**

```
hakkoSOD → koteiIpAd8DivOdrCtrl → callEKK0891A010_SC → EKK0891
                                 → callEKK0351B010SC → EKK0351
                                 → callEKK0091A010_SC → EKK0091
                                 → 他CRUD
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0891A010_SC | R | 提供方式契約 |
| callEKK0351B010SC | R | オプションサービス契約 |
| callEKK0091A010_SC | R | サービス契約 |
| callEKK0881A010_SC | R | 回線使用契約 |
| callEZM0321A010_SC | R | 業務パラメータ |
| callEKK1081C011SC | R | 同一処理番号 |
| callEKK0161B004SC | R | サービス契約内訳 |
| callEKK0361A010SC | R | オプションサービス契約＜ISP＞ |
| callEKK1681B001SC | R | 異動予約 |

---

---

### ksiDslFixOdrCtrl()

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

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


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

---

#### 1. 役割

強制解約確定時のオーダ制御処理。ADSL/eモバイル等の強制解約確定条件で、下位の解約ロジック（dslOdrCtrl）を呼び出して一括処理する。

---

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

```mermaid
flowchart TD
  START["ksiDslFixOdrCtrl(handle, param, fixedText, sodMap)"] --> IF1{"isEmobile()"}
  IF1 -- "Yes" --> RET["return param"]
  IF1 -- "No" --> S1["Step1: dslOdrCtrl(handle, param, fixedText, sodMap) 呼び出し"]
  S1 --> RET
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `isEmobile()` | (eモバイル解約) | 何もせずreturn |
| 2 | else |  | dslOdrCtrl実行 |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | dslOdrCtrl | - | - | 下位解約制御処理 |

---

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

**起点:**

- hakkoSOD → ksiDslFixOdrCtrl

**呼出パス:**

```
hakkoSOD → ksiDslFixOdrCtrl → dslOdrCtrl → [下位SC呼出]
```

**終端:**  
下位で呼ばれる各種SC (EKK0361A010SC, EKK0161A010SC, EKK1081B001SC, ...)

---

---

### ksiDslOdrCtrl()

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

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


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

---

#### 1. 役割

強制解約（DSL）関連オーダ制御処理。サービス種類判定を行い、DSL制御（dslOdrCtrl）にディスパッチする。

---

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

```mermaid
flowchart TD
  START["ksiDslOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["jdgSvcKindでサービス種類判定"]
  S1 --> IF1{"svc_kind==NET/MOB/TEL/ADSL"}
  IF1 -- "Yes" --> S2["dslOdrCtrlへディスパッチ"]
  IF1 -- "No" --> S3["その他処理（該当しない）"]
  S2 --> RET["param返却"]
  S3 --> RET
  style IF1 fill:#ffcc00
```

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

1. `jdgSvcKind`でサービス種類を判定
2. サービス種別がネット、モバイル、電話、ADSLであれば`dslOdrCtrl`呼出
3. それ以外は処理終了

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `svc_kind == NET/MOB/TEL/ADSL` | "01"/"03"/"04"/"05" | dslOdrCtrl呼出 |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約（ISP） | 一意照会 |
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳 | 一意照会 |
| R | callEKK1081B001SC | EKK1081 | オーダ発行条件 | 一覧照会 |
| D | callEKK1081E010SC | EKK1081 | オーダ発行条件 | 論理削除 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳（eo光電話） | 一意照会 |
| R | callEKK0341B008SC | EKK0341 | 機器提供サービス契約 | 一覧照会 |
| R | callEKK0341B008_02SC | EKK0341 | 機器提供サービス契約 | 交換中レコード専用一覧照会 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約 | 一覧照会 |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約 | 一意照会 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定 | 一覧照会 |
| R | callEKK0161B003SC | EKK0161 | サービス契約内訳 | SYSID一覧照会 |
| R | callEKK0081B004SC | EKK0081 | サービス契約 | SYSID一覧照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 同一処理番号取得 |
| R | callEKK0251B001SC | EKK0251 | サービス契約回線内訳 | 一覧照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | 不明 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約 | 回線内訳一覧照会 |
| R | callEKK0341B029SC | EKK0341 | 機器提供サービス契約 | 機器変更番号一覧照会 |
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約 | 予約一覧照会 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約 | 一覧照会 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定 | 一意照会 |
| R | callEKK0411A010SC | EKK0411 | サブオプションサービス契約（ISP） | 一意照会 |
| R | callEKK0401A010SC | EKK0401 | サブオプションサービス契約 | 一意照会 |
| R | callEKK0161B004SC | EKK0161 | サービス契約内訳 | 一覧照会 |
| R | callEKK0191B001_2SC | EKK0191 | サービス契約内訳（eo光電話） | サービス契約番号一覧照会 |

---

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

該当データなし

---

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

**起点:**

- hakkoSOD → ksiDslOdrCtrl

**呼出パス:**

```
hakkoSOD → ksiDslOdrCtrl → jdgSvcKind → dslOdrCtrl
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0361A010SC | R | オプションサービス契約（ISP） |
| callEKK0161A010SC | R | サービス契約内訳 |
| callEKK1081B001SC | R | オーダ発行条件 |
| callEKK1081E010SC | D | オーダ発行条件 |
| callEKK0191A010SC | R | サービス契約内訳（eo光電話） |
| callEKK0341B008SC | R | 機器提供サービス契約 |
| callEKK0341B008_02SC | R | 機器提供サービス契約 |
| callEKK0351B002SC | R | オプションサービス契約 |
| callEKK0351A010SC | R | オプションサービス契約 |
| callEKK1041B001SC | R | オーダ設定 |
| callEKK0161B003SC | R | サービス契約内訳 |
| callEKK0081B004SC | R | サービス契約 |
| callEKK1081C011SC | R | 同一処理番号 |
| callEKK0251B001SC | R | サービス契約回線内訳 |
| callEKK0251B003SCCAAMsg | ? | サービス契約回線内訳（現在利用中） |
| callEKK0341B504SC | R | 機器提供サービス契約 |
| callEKK0341B029SC | R | 機器提供サービス契約 |
| callEKK0341B021SC | R | 機器提供サービス契約 |
| callEKK2811B010SC | R | 機器オプションサービス契約 |
| callEKK1041A010SC | R | オーダ設定 |
| callEKK0411A010SC | R | サブオプションサービス契約（ISP） |
| callEKK0401A010SC | R | サブオプションサービス契約 |
| callEKK0161B004SC | R | サービス契約内訳 |
| callEKK0191B001_2SC | R | サービス契約内訳（eo光電話） |

---

---

