#  業務ロジック  Part 11/12

### mappingETU0011B010SCOutMsg()

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

```
mappingETU0011B010SCOutMsg() ← gọi bởi:
├── isBmpOpenZumi()    [trực tiếp]
├── isBmpOpenZumiDslNoDslNoChg()    [trực tiếp]
└── callETU0011B010SC()
    ├── isBmpOpenZumi()
    └── isBmpOpenZumiDslNoDslNoChg()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private CAANMsg[] mappingETU0011B010SCOutMsg(CAANMsg[] resultMsgs)`
> **戻り値:** `CAANMsg[]`

---

#### 1. 役割

ETU0011B010サービスコンポーネントの実行結果（CAANMsg[] resultMsgs）から、指定キー（ETU0011B010CBSMSG1LIST）のリスト情報を抽出し返却する。

---

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

```mermaid
flowchart TD
  START["mappingETU0011B010SCOutMsg(resultMsgs)"] --> S1["Step1: msg.getMsgData().get(ETU0011B010CBSMSG1LIST)でリスト抽出"]
  S1 --> RET["抽出リスト(msgList)を返却"]
```

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

1. 各msg（CAANMsg）について、`getMsgData().get(ETU0011B010CBSMsg.ETU0011B010CBSMSG1LIST)`でリスト抽出。
2. 抽出したリスト（msgList）を返却。

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | resultMsgs | CAANMsg[] | SC実行結果メッセージ配列 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | データ変換のみ（SC出力リスト抽出） |

---

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

**起点例:**
- `callETU0011B010SC` → `mappingETU0011B010SCOutMsg`

**呼出パス:**

```
[callETU0011B010SC] → [mappingETU0011B010SCOutMsg]
```

**終端 (End Points):**

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

---

---

### mappingEZM0121A010SCInMsg()

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

```
mappingEZM0121A010SCInMsg() ← gọi bởi:
├── isMonaiBmp()    [trực tiếp]
├── isTajgsTelNo()    [trực tiếp]
├── isTelnoSODJudge()    [trực tiếp]
└── callEZM0121A010SC()
    ├── isMonaiBmp()
    ├── isTajgsTelNo()
    └── isTelnoSODJudge()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private void mappingEZM0121A010SCInMsg(CAANMsg template, HashMap<String, Object> inHash, String funcCode)`
> **戻り値:** `void`

---

#### 1. 役割

EZM0121A010 S-IF（電話番号一意照会サービスインターフェース）に対する入力メッセージ（CAANMsg）の組み立てを行う。  
業務パラメータ（電話番号など）をテンプレートにセットし、後続のSC呼び出しに必要なデータフォーマットを整える。

---

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

```mermaid
flowchart TD
  START["mappingEZM0121A010SCInMsg(template, inHash, funcCode)"] --> S1["Step1: Nullマッピング（fillCAANMSGNullMapping）"]
  S1 --> S2["Step2: EZM0121A010CBSMsg.getContents()で初期テンプレート取得"]
  S2 --> S3["Step3: テンプレートID（SIFのID）セット（EZM0121A010CBSMsg.TEMPLATEID）"]
  S3 --> S4["Step4: 機能コードセット（EZM0121A010CBSMsg.FUNC_CODE ← funcCode）"]
  S4 --> S5["Step5: ＫＥＹ＿電話番号セット（EZM0121A010CBSMsg.KEY_TELNO ← inHash.get(JKKHakkoSODConstCC.TELNO)）"]
  S5 --> END["完了"]
```

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

1. **Nullマッピングの適用**:  
   テンプレートに対して `fillCAANMSGNullMapping` を実行し、全項目を一度Nullで初期化する。  
2. **テンプレート初期化**:  
   `EZM0121A010CBSMsg.getContents()` でSIFのテンプレート構造を取得し適用。
3. **テンプレートIDセット**:  
   `EZM0121A010CBSMsg.TEMPLATEID` に `JKKHakkoSODConstCC.TEMPLATE_ID_EZM0121A010` をセット。
4. **機能コードセット**:  
   `EZM0121A010CBSMsg.FUNC_CODE` に引数 `funcCode` をセット。
5. **電話番号セット**:  
   `EZM0121A010CBSMsg.KEY_TELNO` に `inHash.get(JKKHakkoSODConstCC.TELNO)` の値（電話番号）をセット。

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | template | CAANMsg | SC呼出用の入力テンプレートメッセージオブジェクト |
| 2 | inHash | HashMap<String, Object> | 入力パラメータ（電話番号などの業務データ） |
| 3 | funcCode | String | SC呼出用機能コード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|---------|-------------|----------|
| - | - | - | データ変換のみ | SCインターフェース用入力編集 |

---

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

**起点:**
- callEZM0121A010SC → mappingEZM0121A010SCInMsg
- isTelnoSODJudge → mappingEZM0121A010SCInMsg
- isMonaiBmp → mappingEZM0121A010SCInMsg
- isTajgsTelNo → mappingEZM0121A010SCInMsg

**呼出パス:**

```
[呼出元メソッド] → mappingEZM0121A010SCInMsg → fillCAANMSGNullMapping
```

**終端:**

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

---

---

### mappingEZM0121A010SCOutMsg()

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

```
mappingEZM0121A010SCOutMsg() ← gọi bởi:
├── isMonaiBmp()    [trực tiếp]
├── isTajgsTelNo()    [trực tiếp]
├── isTelnoSODJudge()    [trực tiếp]
└── callEZM0121A010SC()
    ├── isMonaiBmp()
    ├── isTajgsTelNo()
    └── isTelnoSODJudge()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> mappingEZM0121A010SCOutMsg(CAANMsg[] resultMsgs)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

EZM0121A010 S-IF（電話番号一意照会サービスインターフェース）から返却されたメッセージ配列（CAANMsg[]）から、必要な業務データをHashMap形式で抽出・返却する。

---

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

```mermaid
flowchart TD
  START["mappingEZM0121A010SCOutMsg(resultMsgs)"] --> S1["Step1: メッセージリスト取得（msgList = msg.getMsgData().get(EZM0121A010CBSMsg.EZM0121A010CBSMSG1LIST)）"]
  S1 --> IF1{"msgList == null または msgList.length == 0"}
  IF1 -- "Yes: 結果なし" --> S2["Step2: 空のHashMap返却"]
  IF1 -- "No: 結果あり" --> S3["Step3: msgList[0].getMsgData()でデータ取得しHashMapで返却"]
  S2 --> END["return retHash"]
  S3 --> END
  style IF1 fill:#ffcc00
```

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

1. CAANMsg配列から、`EZM0121A010CBSMsg.EZM0121A010CBSMSG1LIST` キーで結果リストを取得。
2. 取得結果がnullまたは0件の場合は空のHashMapを返却。
3. 1件以上の場合、先頭要素の `getMsgData()`（業務データ本体）をHashMapとして返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | msgList == null または msgList.length == 0 | - | 空のHashMap返却 |
| 2 | 上記以外 | - | 先頭msgの業務データをHashMapで返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | resultMsgs | CAANMsg[] | SC返却メッセージ配列（業務データ含む） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|---------|-------------|----------|
| - | - | - | データ変換のみ | SCインターフェース出力→業務データ変換 |

---

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

**起点:**
- callEZM0121A010SC → mappingEZM0121A010SCOutMsg
- isTelnoSODJudge → mappingEZM0121A010SCOutMsg
- isMonaiBmp → mappingEZM0121A010SCOutMsg
- isTajgsTelNo → mappingEZM0121A010SCOutMsg

**呼出パス:**

```
[呼出元メソッド] → mappingEZM0121A010SCOutMsg
```

**終端:**

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

---

---

### mappingEZM0321A010SCInMsg()

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

```
mappingEZM0321A010SCInMsg() ← gọi bởi:
├── getDammyPplanCd()    [trực tiếp]
├── getDummySvcKeiNo()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── koteiIpAd8DivOdrCtrl()    [trực tiếp]
├── malwareBlockingDivOdrCtrl()    [trực tiếp]
└── callEZM0321A010_SC()
    ├── hakkoSOD()
    ├── koteiIpAd8DivOdrCtrl()
    ├── malwareBlockingDivOdrCtrl()
    ├── getDammyPplanCd()
    │   ├── hakkoSOD()
    │   ├── koteiIpAd8DivOdrCtrl()
    │   │   └── hakkoSOD()
    │   └── malwareBlockingDivOdrCtrl()
    │       └── hakkoSOD()
    └── getDummySvcKeiNo()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private void mappingEZM0321A010SCInMsg(CAANMsg template, HashMap<String, Object> inHash, String funcCode)`
> **戻り値:** `void`

---

#### 1. 役割

EZM0321A010 S-IF（業務パラメータID一意照会サービスインターフェース）に対する入力メッセージ（CAANMsg）の組み立てを行う。  
業務パラメータIDや機能コードをテンプレートにセットし、SC呼び出しに必要なデータフォーマットを整える。

---

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

```mermaid
flowchart TD
  START["mappingEZM0321A010SCInMsg(template, inHash, funcCode)"] --> S1["Step1: テンプレートIDセット（EZM0321A010CBSMsg.TEMPLATEID）"]
  S1 --> S2["Step2: 機能コードセット（EZM0321A010CBSMsg.FUNC_CODE ← funcCode）"]
  S2 --> S3["Step3: 業務パラメータIDセット（EZM0321A010CBSMsg.KEY_WORK_PARAM_ID ← inHash.get(JKKHakkoSODConstCC.KEY_WORK_PARAM_ID)）"]
  S3 --> END["完了"]
```

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

1. `EZM0321A010CBSMsg.TEMPLATEID` に `JKKHakkoSODConstCC.TEMPLATE_ID_EZM0321A010` をセット。
2. `EZM0321A010CBSMsg.FUNC_CODE` に引数 `funcCode` をセット。
3. `EZM0321A010CBSMsg.KEY_WORK_PARAM_ID` に `inHash.get(JKKHakkoSODConstCC.KEY_WORK_PARAM_ID)` の値をセット。

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | template | CAANMsg | SC呼出用の入力テンプレートメッセージオブジェクト |
| 2 | inHash | HashMap<String, Object> | 入力パラメータ（業務パラメータIDなど） |
| 3 | funcCode | String | SC呼出用機能コード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|------------|---------|-------------|----------|
| - | - | - | データ変換のみ | SCインターフェース用入力編集 |

---

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

**起点:**
- callEZM0321A010_SC → mappingEZM0321A010SCInMsg
- getDammyPplanCd → mappingEZM0321A010SCInMsg
- getDummySvcKeiNo → mappingEZM0321A010SCInMsg
- malwareBlockingDivOdrCtrl → mappingEZM0321A010SCInMsg
- koteiIpAd8DivOdrCtrl → mappingEZM0321A010SCInMsg
- hakkoSOD → mappingEZM0321A010SCInMsg

**呼出パス:**

```
[呼出元メソッド] → mappingEZM0321A010SCInMsg
```

**終端:**

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

---

---

### mappingEZM0411A010SCInMsg()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private void mappingEZM0411A010SCInMsg(CAANMsg template, HashMap<String, Object> inHash, String funcCode)`
> **戻り値:** `void`

---

#### 1. 役割

EZM0411A010サービスコンポーネントに入力するためのメッセージテンプレート（CAANMsg）に、業務パラメータ（inHash, funcCode）を基に必要な値をセットする入力マッピング処理。  
宅内機器型式コード等の照会・登録時に利用される。

---

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

```mermaid
flowchart TD
  START["mappingEZM0411A010SCInMsg(template, inHash, funcCode)"] --> S1["Step1: Nullマッピング fillCAANMSGNullMapping()"]
  S1 --> S2["Step2: テンプレートIDセット (TEMPLATE_ID_EZM0411A010)"]
  S2 --> S3["Step3: 機能コードセット (funcCode)"]
  S3 --> S4["Step4: 宅内機器型式コードセット (KEY_TAKNKIKI_MODEL_CD, inHash.get(TAKNKIKI_MODEL_CD))"]
  S4 --> RET["return"]
```

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

1. CAANMsgテンプレートに対して全フィールドのNullマッピングを実施（fillCAANMSGNullMapping）。
2. テンプレートID（TEMPLATE_ID_EZM0411A010）をセット。
3. 機能コード（funcCode）をセット。
4. 業務パラメータinHashから宅内機器型式コード（KEY_TAKNKIKI_MODEL_CD）を取得し、テンプレートにセット。
5. 処理終了。

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | template | CAANMsg | SC入力テンプレート（EZM0411A010形式） |
| 2 | inHash | HashMap<String, Object> | 業務パラメータ格納Map |
| 3 | funcCode | String | 機能コード（業務種別分岐用） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | データ変換のみ | 業務パラメータ→EZM0411A010入力テンプレート変換 |

---

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

**起点 (Entry Point):**

- callEZM0411A010SC

**呼出パス:**

```
callEZM0411A010SC → **mappingEZM0411A010SCInMsg**
```

**終端 (End Points):**

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

---### mappingEKK1081C011SCOutMsg()

---

#### 1. 役割

EKK1081C011のSC（サービスコンポーネント）照会結果から、同一トランザクション番号（SAME_TRN_NO）を抽出し、HashMap形式で返却するマッピングメソッドです。  
SC呼出（callEKK1081C011SC等）後、レスポンスから特定フィールド値を業務共通ハッシュに格納する処理を担います。

---

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

```mermaid
flowchart TD
    START["mappingEKK1081C011SCOutMsg(CAANMsg[] resultMsgs)"] --> S1["Step1: CAANMsgオブジェクトからEKK1081C011CBSMsg.SAME_TRN_NOを取得"]
    S1 --> S2["Step2: JKKHakkoSODConstCC.SAME_TRN_NOをキーにHashMapへ格納"]
    S2 --> RET["return retHash"]
```

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

1. CAANMsg配列（resultMsgs）からSC応答メッセージ（msg）を取得。
2. EKK1081C011CBSMsg.SAME_TRN_NOフィールド値をmsg.getStringで取得し、JKKHakkoSODConstCC.SAME_TRN_NOをキーにHashMap（retHash）へセット。
3. retHashを返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | return | - | retHash |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | resultMsgs | CAANMsg[] | SC（EKK1081C011）からの応答メッセージ配列 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | データ変換のみ | EKK1081C011出力データのHash変換 |

---

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

**起点:**
- KKSV0004_KKSV0004OPBPCheck 他各BPCheckクラス → callEKK1081C011SC → mappingEKK1081C011SCOutMsg

**呼出パス:**

```
KKSV0004_KKSV0004OPBPCheck.* → callEKK1081C011SC → mappingEKK1081C011SCOutMsg
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK1081C011SC | - | SC応答メッセージ変換 |

---

---

### mappingEZM0411A010SCOutMsg()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> mappingEZM0411A010SCOutMsg(CAANMsg[] resultMsgs)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

EZM0411A010サービスコンポーネントの実行結果（CAANMsg[] resultMsgs）から、業務利用に必要な情報のみをHashMap形式で抽出する。

---

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

```mermaid
flowchart TD
  START["mappingEZM0411A010SCOutMsg(resultMsgs)"] --> S1["Step1: 各msg.getMsgData()でリスト(EZM0411A010CBSMSG1LIST)抽出"]
  S1 --> IF1{"msgListがnullまたは要素数0か"}
  IF1 -- "Yes: 空のretHash返却" --> RET1["return retHash"]
  IF1 -- "No: msgList[0].getMsgData()で詳細抽出" --> S2["Step2: 先頭msgDataをretHashに格納"]
  S2 --> RET2["return retHash"]
  style IF1 fill:#ffcc00
```

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

1. `resultMsgs`配列の各msg（CAANMsg）について、`getMsgData().get(EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST)`でリスト抽出。
2. `msgList`がnullまたは空の場合、空のretHash（HashMap）を返却。
3. `msgList`が1件以上の場合、`msgList[0].getMsgData()`の内容をretHashに格納し返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|-------------------------------|---------------------|----------------|
| 1 | `null == msgList || 0 == msgList.length` | - | 空Hash返却 |
| 2 | 上記以外 | - | 先頭msgData格納 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | resultMsgs | CAANMsg[] | SC実行結果メッセージ配列 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | データ変換のみ（SC出力からHash抽出） |

---

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

**起点例:**
- `callEZM0411A010SC` → `mappingEZM0411A010SCOutMsg`

**呼出パス:**

```
[callEZM0411A010SC] → [mappingEZM0411A010SCOutMsg]
```

**終端 (End Points):**

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

---

---

### mappingListingSvcCompoOutMsg()

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

```
mappingListingSvcCompoOutMsg() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── addIpv6SODAft()    [trực tiếp]
├── addTensoDenwaOp()    [trực tiếp]
├── bmpDojiMskm()    [trực tiếp]
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── getIdoRsvCourseChg()    [trực tiếp]
├── getNewPplanCd()    [trực tiếp]
├── getOldVrsbIdgSvcDtlCd()    [trực tiếp]
├── getOpSvcKei4Eohtel()    [trực tiếp]
├── hakkoCourseChgSOD()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── idpwShkkaSaifuriOdrCtrl()    [trực tiếp]
├── isStartRsvOption()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── keiTtdkChuHtelnoChgeOdrCtrl()    [trực tiếp]
├── koteiIpAd8DivOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── malwareBlockingDivOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── opHktgiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── pauseRlsChgeOdrCtrl()    [trực tiếp]
├── pauseUkOdrCtrl()    [trực tiếp]
├── setChgePWForDialup()    [trực tiếp]
├── setChgePWForIPv6()    [trực tiếp]
├── setChgePWForMltiSe()    [trực tiếp]
├── stpRlsOdrCtrl()    [trực tiếp]
├── stpUkOdrCtrl()    [trực tiếp]
├── taiikiSeigenOdrCtrl()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── useStpOdrCtrl()    [trực tiếp]
├── useStpRlsOdrCtrl()    [trực tiếp]
├── callEKK0351B002SC()
│   ├── adchgFixOdrCtrl()
│   ├── bmpSwitchOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoDslOdrCtrl()
│   ├── htelNoInfoChgeOdrCtrl()
│   ├── idpwShkkaSaifuriOdrCtrl()
│   ├── keiTtdkChuHtelnoChgeOdrCtrl()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── newKeiOdrCtrl()
│   ├── stpRlsOdrCtrl()
│   ├── stpUkOdrCtrl()
│   ├── useStpOdrCtrl()
│   ├── useStpRlsOdrCtrl()
│   ├── addIpv6SODAft()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── newKeiOdrCtrl()
│   │       ├── adchgFixOdrCtrl()
│   │       └── hakkoSOD()
│   ├── addTensoDenwaOp()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── newKeiOdrCtrl()
│   ├── bmpDojiMskm()
│   │   ├── hakkoSOD()
│   │   ├── stpRlsOdrCtrl()
│   │   ├── useStpRlsOdrCtrl()
│   │   └── bmpSwitchOdrCtrl()
│   │       └── hakkoSOD()
│   ├── courseChgeOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── adchgFixOdrCtrl()
│   │       └── hakkoSOD()
│   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── cnclOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   ├── ksiDslFixOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── ksiDslOdrCtrl()
│   │       └── hakkoSOD()
│   ├── getOpSvcKei4Eohtel()
│   │   ├── bmpSwitchOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── kaihkOdrCtrl()
│   │   ├── stpUkOdrCtrl()
│   │   ├── useStpOdrCtrl()
│   │   └── htelNoDslOdrCtrl()
│   │       └── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── kaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── opSetOdrCtrl()
│   │   ├── cnclOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   └── htelNoInfoChgeOdrCtrl()
│   │       └── hakkoSOD()
│   ├── setChgePWForDialup()
│   │   ├── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   │       └── hakkoSOD()
│   ├── setChgePWForIPv6()
│   │   ├── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   ├── setChgePWForMltiSe()
│   │   ├── hakkoSOD()
│   │   └── idpwShkkaSaifuriOdrCtrl()
│   └── telNoChge()
│       ├── bmpSwitchOdrCtrl()
│       └── hakkoSOD()
├── callEKK0351B010SC()
│   ├── adchgFixOdrCtrl()
│   ├── bmpSwitchOdrCtrl()
│   ├── courseChgeOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   ├── kaihkOdrCtrl()
│   ├── useStpOdrCtrl()
│   ├── useStpRlsOdrCtrl()
│   ├── hakkoCourseChgSOD()
│   │   ├── adchgFixOdrCtrl()
│   │   ├── courseChgeOdrCtrl()
│   │   └── hakkoSOD()
│   ├── koteiIpAd8DivOdrCtrl()
│   │   └── hakkoSOD()
│   ├── malwareBlockingDivOdrCtrl()
│   │   └── hakkoSOD()
│   ├── pauseRlsChgeOdrCtrl()
│   │   └── hakkoSOD()
│   ├── pauseUkOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   └── kaihkOdrCtrl()
│   ├── stpRlsOdrCtrl()
│   │   ├── hakkoSOD()
│   │   └── useStpRlsOdrCtrl()
│   │       └── hakkoSOD()
│   └── stpUkOdrCtrl()
│       ├── bmpSwitchOdrCtrl()
│       ├── hakkoSOD()
│       ├── kaihkOdrCtrl()
│       └── useStpOdrCtrl()
│           └── hakkoSOD()
└── callEKK1681B001SC()
    ├── adchgFixOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── dslOdrCtrl()
    ├── getNewPplanCd()
    ├── getOldVrsbIdgSvcDtlCd()
    ├── hakkoCourseChgSOD()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── idpwShkkaSaifuriOdrCtrl()
    ├── isStartRsvOption()
    ├── kaihkOdrCtrl()
    ├── koteiIpAd8DivOdrCtrl()
    ├── malwareBlockingDivOdrCtrl()
    ├── opHktgiOdrCtrl()
    ├── opSetOdrCtrl()
    ├── pauseRlsChgeOdrCtrl()
    ├── pauseUkOdrCtrl()
    ├── stpRlsOdrCtrl()
    ├── taiikiSeigenOdrCtrl()
    ├── useStpRlsOdrCtrl()
    └── getIdoRsvCourseChg()
        ├── adchgFixOdrCtrl()
        ├── cnclOdrCtrl()
        ├── courseChgeOdrCtrl()
        ├── dslOdrCtrl()
        ├── hakkoCourseChgSOD()
        ├── hakkoSOD()
        ├── htelNoDslOdrCtrl()
        ├── htelNoInfoChgeOdrCtrl()
        ├── htelNoKaihkOdrCtrl()
        ├── idpwShkkaSaifuriOdrCtrl()
        ├── kaihkOdrCtrl()
        ├── koteiIpAd8DivOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── malwareBlockingDivOdrCtrl()
        ├── opHktgiOdrCtrl()
        ├── opSetOdrCtrl()
        ├── pauseRlsChgeOdrCtrl()
        ├── pauseUkOdrCtrl()
        ├── stpRlsOdrCtrl()
        ├── taiikiSeigenOdrCtrl()
        ├── useStpRlsOdrCtrl()
        ├── getNewPplanCd()
        │   ├── adchgFixOdrCtrl()
        │   ├── courseChgeOdrCtrl()
        │   └── hakkoSOD()
        └── getOldVrsbIdgSvcDtlCd()
            ├── adchgFixOdrCtrl()
            ├── cnclOdrCtrl()
            ├── courseChgeOdrCtrl()
            ├── dslOdrCtrl()
            ├── hakkoCourseChgSOD()
            ├── hakkoSOD()
            ├── htelNoDslOdrCtrl()
            ├── htelNoInfoChgeOdrCtrl()
            ├── htelNoKaihkOdrCtrl()
            ├── idpwShkkaSaifuriOdrCtrl()
            ├── kaihkOdrCtrl()
            ├── koteiIpAd8DivOdrCtrl()
            ├── ksiDslFixOdrCtrl()
            ├── ksiDslOdrCtrl()
            ├── malwareBlockingDivOdrCtrl()
            ├── opSetOdrCtrl()
            ├── pauseRlsChgeOdrCtrl()
            ├── pauseUkOdrCtrl()
            ├── stpRlsOdrCtrl()
            ├── useStpRlsOdrCtrl()
            ├── opHktgiOdrCtrl()
            │   └── hakkoSOD()
            └── taiikiSeigenOdrCtrl()
                └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private CAANMsg[] mappingListingSvcCompoOutMsg(CAANMsg[] resultMsgs, String listKey)`
> **戻り値:** `CAANMsg[]`

---

#### 1. 役割

EKK0351B002や各種サービスコンポーネントSCの実行結果（CAANMsg[] resultMsgs）から、特定リストキー（listKey）に対応する出力メッセージ群のみを抽出して返す業務ロジック。

---

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

```mermaid
flowchart TD
  START["mappingListingSvcCompoOutMsg(resultMsgs, listKey)"] --> S1["Step1: 各resultMsgからgetMsgData()でデータ取得"]
  S1 --> S2["Step2: データ内のlistKeyキーでリスト抽出"]
  S2 --> RET["抽出リスト(msgList)を返却"]
```

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

1. `resultMsgs`配列の各要素（CAANMsg型）について`getMsgData()`を呼び出し、内部データを取得。
2. それぞれのmsgDataから`get(listKey)`で該当リストを抽出。
3. 取得したリスト（msgList）を返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | return | msgList | 終了 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | resultMsgs | CAANMsg[] | SC実行結果メッセージ配列 |
| 2 | listKey | String | 抽出対象リストキー（業務種別により異なる） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | データ変換のみ（SC出力メッセージからの抽出） |

---

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

**起点例:**
- `callEKK0351B002SC` → `mappingListingSvcCompoOutMsg`
- `callEKK1681B001SC` → `mappingListingSvcCompoOutMsg`
- 各種業務オーダ制御処理から間接的に呼び出される

**呼出パス:**

```
[callEKK0351B002SC] → [mappingListingSvcCompoOutMsg]
```

**終端 (End Points):**

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

---

---

### newKeiOdrCtrl()

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

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


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

---

#### 1. 役割

新規契約時のオーダ制御全体を統括。サービス種別判定後、インターネット/電話/モバイルサービスごとに新規登録処理をディスパッチする。

---

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

```mermaid
flowchart TD
  START["newKeiOdrCtrl(handle, param, sodMap)"] --> S1["Step1: 同一処理番号取得 (getSameTrnNo)"]
  S1 --> S2["Step2: サービス種別判定 (jdgSvcKind)"]
  S2 --> IF1{"svc_kind == NET or ADSL"}
  IF1 -- "Yes" --> S3["Step3: オプション一覧/ISP/サブオプション/内訳/ルータ機器照会"]
  S3 --> S4["Step4: newNet呼び出し"]
  S4 --> S5["Step5: addTensoDenwaOp呼び出し"]
  S5 --> S6["Step6: オーダ発行条件等の追加登録"]
  S6 --> RET["return param"]
  IF1 -- "No" --> IF2{"svc_kind == TEL"}
  IF2 -- "Yes" --> S7["Step7: 電話新規登録(addSODTelNew)"]
  S7 --> RET
  IF2 -- "No" --> IF3{"svc_kind == MOB"}
  IF3 -- "Yes" --> S8["Step8: モバイル新規登録(newEoMobile)"]
  S8 --> RET
  IF3 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `svc_kind == SVC_KIND_NET || svc_kind == SVC_KIND_ADSL` | | newNet |
| 2 | `svc_kind == SVC_KIND_TEL` | | addSODTelNew |
| 3 | `svc_kind == SVC_KIND_MOB` | | newEoMobile |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK1081B001SC | EKK1081 | オーダ発行条件一覧照会 |
| R | callEKK0341B002SC | EKK0341 | 機器提供サービス契約一覧照会 |
| R | callEKK0791A010SC | EKK0791 | 料金コース一意照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳<eo光電話>一意照会 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 |
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳一意照会 |
| R | callEKK0081A010SC | EKK0081 | サービス契約一意照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞一意照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号取得 |
| R | callEKK0081B004SC | EKK0081 | サービス契約一覧照会（SYSID） |

---

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

**起点:**

- hakkoSOD → newKeiOdrCtrl

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → newNet/addSODTelNew/newEoMobile/...
```

**終端:**  
各新規登録処理の下位SC

---

---

### newNet()

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

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

---

#### 1. 役割

インターネットサービス新規契約時の一括SOD登録。FTTH認証/Eメール/Myホームページ/メーリングリスト/ダイヤルアップ/エイリアス/ウィルスチェック/容量追加/アクセス分析/多機能ルーター等、サービス種別・申込内容に応じて順次SODを登録する。

---

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

```mermaid
flowchart TD
  START["newNet(handle, param, sodMap)"] --> S1["Step1: サービス契約情報取得・業務変換"]
  S1 --> S2["Step2: サービス契約番号取得"]
  S2 --> S3["Step3: サービス契約一意照会 (getSvcKeiList)"]
  S3 --> S4["Step4: 料金コース/グループコード取得"]
  S4 --> IF1{"isMansionPrvate()"}
  IF1 -- "Yes" --> S5["Step5: マンションタイプ分岐"]
  IF1 -- "No" --> IF2{"isFtthNew"}
  IF2 -- "Yes" --> S6["Step6: FTTH認証新規SOD出力"]
  S6 --> IF3{"eml_flg"}
  IF3 -- "Yes" --> S7["Step7: Eメール新規SOD出力"]
  S7 --> IF4{"url_flg"}
  IF4 -- "Yes" --> S8["Step8: Myホームページ新規SOD"]
  S8 --> IF5{"mlist_flg"}
  IF5 -- "Yes" --> S9["Step9: メーリングリスト新規SOD"]
  S9 --> IF6{"dial_flg"}
  IF6 -- "Yes" --> S10["Step10: ダイヤルアップ新規SOD"]
  S10 --> IF7{"alias_flg"}
  IF7 -- "Yes" --> S11["Step11: エイリアス新規SOD"]
  S11 --> IF8{"mlcapa_flg_list.size() > 0"}
  IF8 -- "Yes" --> S12["Step12: メール容量追加SOD"]
  S12 --> IF9{"mlvirus_flg"}
  IF9 -- "Yes" --> S13["Step13: ウィルスチェックSOD"]
  S13 --> IF10{"hpcapa_flg"}
  IF10 -- "Yes" --> S14["Step14: HP容量追加SOD"]
  S14 --> IF11{"hpaccess_flg"}
  IF11 -- "Yes" --> S15["Step15: HPアクセス分析SOD"]
  S15 --> IF12{"checkTakinoRT(handle, param) == 4"}
  IF12 -- "Yes" --> S16["Step16: 多機能ルーター新規SOD出力 (ODR_NAIYO_CD_402)"]
  S16 --> RET["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
  style IF10 fill:#ffcc00
  style IF11 fill:#ffcc00
  style IF12 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `isMansionPrvate()` |  | マンションプライベート処理 |
| 2 | `isFtthNew` |  | FTTH認証新規SOD |
| 3 | `eml_flg` |  | Eメール新規SOD |
| 4 | `url_flg` |  | Myホームページ新規SOD |
| 5 | `mlist_flg` |  | メーリングリスト新規SOD |
| 6 | `dial_flg` |  | ダイヤルアップ新規SOD |
| 7 | `alias_flg` |  | エイリアス新規SOD |
| 8 | `mlcapa_flg_list.size() > 0` |  | メール容量追加SOD |
| 9 | `mlvirus_flg` |  | ウィルスチェックSOD |
| 10 | `hpcapa_flg` |  | HP容量追加SOD |
| 11 | `hpaccess_flg` |  | HPアクセス分析SOD |
| 12 | `checkTakinoRT(handle, param) == 4` |  | 多機能ルーター新規SOD (ODR_NAIYO_CD_402) |

---

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

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

---

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

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

---

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

**起点:**

- newKeiOdrCtrl → newNet
- hakkoSOD → newNet

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → newNet → addSODFtthNew/addSODEmailNew/.../addTakinoSOD
```

**終端:**  
各addSODメソッドで登録SC呼出

---

---

### opSetOdrCtrl()

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

```
opSetOdrCtrl() ← gọi bởi:
├── cnclOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── 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:** `public IRequestParameterReadWrite opSetOdrCtrl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> sodMap)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

オプションサービス設定に関するオーダ制御処理。契約情報・オプション・サブオプション・ISP・多機能ルータ等の各種判定を行い、登録・解約・変更・回復等の全ケースに応じてSOD発行や同一処理番号採番等、業務全体をオーケストレーションする。

---

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

（非常に複雑。主要な全分岐・SC呼出を網羅）

```mermaid
flowchart TD
  START["opSetOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["SOD_KIHON_INFO, SVC_KEI_INFO, SVC_KEI_UCWK_INFO, OPSVKEI_INFO, KKTSVKEI_INFO取得→shkkaMap"]
  S1 --> S2["主要キー・異動区分・契約内訳等取得"]
  S2 --> S3["変更前/後オプション/サブオプション/ISP/多機能情報取得・照会"]
  S3 --> S4["各種判定（オプション新規/解約/回復/変更/サブオプション/ウイルス/容量/エイリアス/HP/ML/固定IP/マルチセッション/ダイヤルアップ/フェムトセル/050/安心発着信等）"]
  S4 --> S5["各判定に応じた同一処理番号取得・SOD発行"]
  S5 --> S6["機器製造番号/多機能ルータ/VA/OLS/ENUM/発信者番号等の条件別処理"]
  S6 --> S7["返却情報/オーダ情報作成ワーク更新"]
  S7 --> RET["param返却"]
```

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

- 主要キー・契約内訳・オプション・サブオプション・ISP・多機能ルータ情報を全取得
- 各分岐（新規/解約/回復/変更/サブオプション/ウイルス/容量/エイリアス/HP/ML/固定IP/マルチセッション/ダイヤルアップ/フェムトセル/050/ENUM/安心発着信等）で全ケース条件判定
- 各条件ごとに同一処理番号を取得・優先度設定・必要なSODを発行
- 機器製造番号や多機能判定、ENUM、発信者番号、安心発着信等の特殊条件も全て分岐
- 最終的に返却情報をセット

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

（主要なもののみ抜粋。分岐数百件に及ぶため全ては記載不可。MethodSequenceとControlFlowを必ず参照。）

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `!isBlank(chbf_opsvkei_no) && !isBlank(chbf_opsvkei_gene_add_dtm)` | - | 変更前照会 |
| 2 | `JKKHakkoSODConstCC.OP_SVC_CD_EMAIL.equals(opSvcCd)` | メール | メールSOD分岐 |
| 3 | `JKKHakkoSODConstCC.OP_SVC_CD_HP.equals(opSvcCd)` | Myホームページ | HP分岐 |
| 4 | `JKKHakkoSODConstCC.OP_SVC_CD_MLIST.equals(opSvcCd)` | メーリングリスト | ML分岐 |
| 5 | `JKKHakkoSODConstCC.OP_SVC_CD_FIXIPAD.equals(opSvcCd)` | 固定グローバルIP | 固定IP分岐 |
| 6 | `JKKHakkoSODConstCC.OP_SVC_CD_MLTISE.equals(opSvcCd)` | マルチセッション | マルチ分岐 |
| 7 | `JKKHakkoSODConstCC.OP_SVC_CD_DUP.equals(opSvcCd)` | ダイヤルアップ | DUP分岐 |
| 8 | `JKKHakkoSODConstCC.OP_SVC_CD_FMTCEL.equals(opSvcCd)` | フェムトセル | フェムトセル分岐 |
| 9 | `JKKHakkoSODConstCC.OP_SVC_CD_N050.equals(opSvcCd)` | 050ナンバープラス | 050分岐 |
| 10 | ENUM/安心発着信等特殊判定 | - | ENUM/安心分岐 |
| 11 | サブオプション/容量/エイリアス | - | サブオプション分岐 |

---

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

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

---

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

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

---

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

該当データなし

---

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

**起点:**

- hakkoSOD → opSetOdrCtrl
- dslOdrCtrl → opSetOdrCtrl
- kaihkOdrCtrl → opSetOdrCtrl
- 他、多数

**呼出パス:**

```
hakkoSOD → opSetOdrCtrl → 各種SC呼出/判定 → addSOD/同一処理番号取得/返却セット
```

**終端 (End Points):**

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

---

---

### pauseJdg()

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

```
pauseJdg() ← 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]
├── idpwShkkaSaifuriOdrCtrl()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── htelItntokiOdrCtrl()
│   └── hakkoSOD()
├── opSetOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── hakkoSOD()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── dslOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── cnclOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   ├── ksiDslFixOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── ksiDslOdrCtrl()
│   │       └── hakkoSOD()
│   ├── htelNoDslOdrCtrl()
│   │   └── hakkoSOD()
│   ├── htelNoInfoChgeOdrCtrl()
│   │   └── hakkoSOD()
│   ├── htelNoKaihkOdrCtrl()
│   │   └── hakkoSOD()
│   └── kaihkOdrCtrl()
│       └── hakkoSOD()
└── setChgePWForRouterConInfo()
    ├── hakkoSOD()
    └── idpwShkkaSaifuriOdrCtrl()
        └── hakkoSOD()
```


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

---

#### 1. 役割

休止判定処理を行うメソッドであり、サービス契約番号に紐付く契約の現在状態を取得し、休止状態か否かを判定します。主に光電話やネット等の契約状態管理で、複数のコントローラやオーダー制御から利用されます。

---

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

```mermaid
flowchart TD
  START["pauseJdg(param, handle, fixedText, svc_kei_no, pause_jdg_cd)"] --> S1["運用日取得: JCCBPCommon.getOpeDate(null)"]
  S1 --> S2["入力ハッシュinHashにサービス契約番号(svc_kei_no)をセット"]
  S2 --> S3["入力ハッシュinHashに運用日(ope_date)をセット"]
  S3 --> S4["callEKK0081A010SC(param, handle, inHash, resultHash, FUNC_CODE_2)を呼び出し"]
  S4 --> S5["resultHashからサービス契約情報(eKK0081A010Map)取得"]
  S5 --> S6["サービス契約ステータス取得: SVC_KEI_STAT"]
  S6 --> S7["休止中断コード取得: PAUSE_STP_CD"]
  S7 --> S8["サービス休止年月日取得: SVC_PAUSE_YMD"]
  S8 --> IF1{"statusCode != 0"}
  IF1 -- "Yes" --> ERR1["エラー: CCExceptionスロー"]
  IF1 -- "No" --> IF2{"SVC_KEI_STAT=210(休止中断中) かつ PAUSE_STP_CD≠02 かつ 運用日≧サービス休止年月日"}
  IF2 -- "Yes" --> S9["休止判定コード: 1(休止中) 設定"]
  IF2 -- "No" --> S10["休止判定コード: 0(休止でない) 設定"]
  S9 --> RET["param返却"]
  S10 --> RET

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | statusCode != 0 | 0以外 | エラー(CCException) |
| 2 | SVC_KEI_STATが210かつPAUSE_STP_CDが"02"以外かつ運用日>=SVC_PAUSE_YMD | 210, "02" | 休止判定コード: 1(休止中) |
| 3 | 上記以外 | - | 休止判定コード: 0(休止でない) |

---

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

| No | パラメータ名         | 型                        | 業務説明                     |
|----|----------------------|---------------------------|------------------------------|
| 1  | param                | IRequestParameterReadWrite| 業務データコンテナ           |
| 2  | handle               | SessionHandle             | セッションハンドル           |
| 3  | fixedText            | String                    | 固定テキスト                 |
| 4  | svc_kei_no           | String                    | サービス契約番号             |
| 5  | pause_jdg_cd         | String                    | 休止判定コード(出力先)       |

---

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

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

---

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

| # | メッセージID | 種別 | 利用コンテキスト   |
|---|--------------|------|-------------------|
| 1 | -            | Error | statusCode≠0時   |

---

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

**起点 (Entry Point):**

- setChgePWForRouterConInfo → pauseJdg
- htelItntokiOdrCtrl → pauseJdg
- opSetOdrCtrl → pauseJdg
- idpwShkkaSaifuriOdrCtrl → pauseJdg
- hakkoSOD → pauseJdg
- htelNoInfoChgeOdrCtrl → pauseJdg
- htelNoKaihkOdrCtrl → pauseJdg
- htelNoDslOdrCtrl → pauseJdg
- kaihkOdrCtrl → pauseJdg
- dslOdrCtrl → pauseJdg
- ksiDslOdrCtrl → pauseJdg
- cnclOdrCtrl → pauseJdg
- ksiDslFixOdrCtrl → pauseJdg

**呼出パス例:**

```
hakkoSOD → htelItntokiOdrCtrl → pauseJdg → callEKK0081A010SC [R] → EKK0081
```

**終端 (End Points):**

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

---

---

---

### pauseRlsChgeOdrCtrl()

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

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


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

---

#### 1. 役割

休止変更や予約取消に関するオーダ制御処理を行い、サービス契約内訳・オプションサービスの状態に基づき必要なSODを登録する。ネットサービスと電話サービスの双方に対応し、多様な判定・分岐条件を持つ。

---

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

```mermaid
flowchart TD
  START["pauseRlsChgeOdrCtrl(handle, param, sodMap)"] --> S1["Step1: サービス契約内訳情報取得・業務変換"]
  S1 --> S2["Step2: サービス契約内訳番号, 変更後世代日時取得"]
  S2 --> S3["Step3: サービス種別判定 (jdgSvcKind)"]

  S3 --> IF1{"svc_kind == SVC_KIND_NET"}
  IF1 -- "Yes" --> IF2{"isMansionPrvate()"}
  IF2 -- "Yes" --> RET["return param"]
  IF2 -- "No" --> IF3{"!isUcwkStatCheck(...)"}
  IF3 -- "Yes" --> RET
  IF3 -- "No" --> S4["Step4: サービス契約情報取得・業務変換"]
  S4 --> S5["Step5: サービス契約番号取得"]
  S5 --> S6["Step6: オプションサービス契約一覧照会 (callEKK0351B010SC)"]
  S6 --> IF4{"statusCode != 0"}
  IF4 -- "Yes" --> E1["throw CCException"]
  IF4 -- "No" --> S7["Step7: オプションサービス契約リストループ"]
  S7 --> S8["Step8: 各種オプション毎に条件判定・SOD出力"]
  S8 --> S9["Step9: フェムトセル, 固定IP, ダイヤルアップ等の判定"]
  S9 --> IF5{"fmtcel_flg || (fixipad_flg && mltise_flg) || dial_flg"}
  IF5 -- "Yes" --> S10["Step10: SOD登録"]
  IF5 -- "No" --> S11["Step11: その他SOD登録"]
  S11 --> RET

  IF1 -- "No" --> IF6{"svc_kind == SVC_KIND_TEL"}
  IF6 -- "Yes" --> S12["Step12: 電話サービス契約内訳番号で一意照会 (callEKK0191A010SC)"]
  S12 --> IF7{"statusCode != 0"}
  IF7 -- "Yes" --> E2["throw CCException"]
  IF7 -- "No" --> S13["Step13: 移転トーキ有無・判定"]
  S13 --> IF8{"ITNTOKI_STA_END_JUDGE_CD_PAUSE_END"}
  IF8 -- "Yes" --> IF9{"isTelnoSODJudge(...,TELNO_JUDGE_001)"}
  IF9 -- "Yes" --> S14["Step14: SOD登録"]
  IF9 -- "No" --> S15["Step15: その他SOD登録"]
  IF8 -- "No" --> S16["Step16: その他SOD登録"]
  S16 --> RET
  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 | `JKKHakkoSODConstCC.SVC_KIND_NET.equals(svc_kind)` | `"01"` (ネット) | ネットパス |
| 2 | `isMansionPrvate()` |  | SOD発行不可 |
| 3 | `!isUcwkStatCheck(...)` |  | SOD発行不可 |
| 4 | `statusCode != 0` |  | 例外スロー |
| 5 | `fmtcel_flg || (fixipad_flg && mltise_flg) || dial_flg` |  | SOD発行 |
| 6 | `JKKHakkoSODConstCC.SVC_KIND_TEL.equals(svc_kind)` | `"02"` (電話) | 電話パス |
| 7 | `statusCode != 0` |  | 例外スロー |
| 8 | `JKKItntokiStaEndConstCC.ITNTOKI_STA_END_JUDGE_CD_PAUSE_END.equals(itntokiStaEndJudgeCd)` | `"001"` | SOD判定(電話状態) |
| 9 | `isTelnoSODJudge(...,TELNO_JUDGE_001)` |  | 電話SOD発行 |

---

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

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

---

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

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

---

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

**起点:**

- hakkoSOD → pauseRlsChgeOdrCtrl

**呼出パス:**

```
hakkoSOD → pauseRlsChgeOdrCtrl → callEKK0351B010SC → [CRUD: R]
                                      → callEKK0191A010SC → [CRUD: R]
                                      → callEKK0351A010SC → [CRUD: R]
                                      → callEKK1081C011SC → [CRUD: R]
                                      → callEKK0361A010SC → [CRUD: R]
                                      → callEKK1681B001SC → [CRUD: R]
                                      → callEKK0161B004SC → [CRUD: R]
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0351B010SC | R | オプションサービス契約一覧照会 |
| callEKK0191A010SC | R | サービス契約内訳<eo光電話>一意照会 |
| callEKK0351A010SC | R | オプションサービス契約一意照会 |
| callEKK1081C011SC | R | 同一処理番号取得 |
| callEKK0361A010SC | R | オプションサービス契約＜ISP＞一意照会 |
| callEKK1681B001SC | R | 異動予約一覧照会 |
| callEKK0161B004SC | R | サービス契約内訳一覧照会 |

---

---

### printSyslog4Err()

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

```
printSyslog4Err() ← gọi bởi:
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── checkTakinoRT()    [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]
├── getVAkikiInfo()    [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]
├── isRegalVaKiki()    [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]
├── vLanIdChgOdrCtrl()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
└── getShuriKokanBfKiki()
    ├── 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()
    ├── wribInfoAddOdrCtrl()
    ├── 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()
    │   │       ├── addIpv6SODAft()
    │   │       ├── hakkoSOD()
    │   │       ├── kaihkOdrCtrl()
    │   │       └── 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()
    │   └── 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:** `private void printSyslog4Err(String proId, String msgId, String msg)`
> **戻り値:** `void`

---

#### 1. 役割

システムエラー発生時に、エラーメッセージをシスログ形式で出力するユーティリティメソッドです。主として業務例外や運用監視用のログ出力に利用されます。呼出元は複数の業務メソッドからのエラー分岐です。

---

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

```mermaid
flowchart TD
  START["printSyslog4Err(proId, msgId, msg)"] --> S1["Step1: FMT_YMDHMSS形式で現在日時を生成"]
  S1 --> S2["Step2: propMapへ各種Syslog設定値をput(JCCSuperComExecUtil, JCCSyslogFormat)"]
  S2 --> S3["Step3: JCCSyslogFormat.loggerへエラーログ出力 (ERR)"]
  S3 --> END["処理終了"]
```

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | proId | String | プロセスID、業務識別子 |
| 2 | msgId | String | メッセージID |
| 3 | msg | String | 出力するエラーメッセージ本文 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | シスログ出力のみ（DB操作なし） |

---

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

**起点:**

- getShuriKokanBfKiki → printSyslog4Err
- getVAkikiInfo → printSyslog4Err
- isRegalVaKiki → printSyslog4Err
- vLanIdChgOdrCtrl → printSyslog4Err
- ... 他多数

**呼出パス:**

```
[Root] → [業務メソッド] → printSyslog4Err
```

**終端:**

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

---

---

### rtOpChgDivOdrCtrl()

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

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


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

---

#### 1. 役割

ルーターオプションサービス契約の変更に関連するオーダ登録を制御するメソッドです。主に多機能ルーター（機器提供サービス契約）や機器オプションサービス契約の照会・判定を行い、必要なサービスオーダ（SOD）を発行します。入力パラメータや照会結果に応じて多岐にわたる分岐・分岐後の業務判定を行い、適切なオーダ内容コードを指定してSODを登録します。呼出元は`hakkoSOD`です。

---

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

```mermaid
flowchart TD
  START["rtOpChgDivOdrCtrl(handle, param, sodMap)"] --> S1["Step1: sodMapからKKTSVKEI_INFO取得"]
  S1 --> S2["Step2: KKTSVKEI_INFOをshkkaMapで加工"]
  S2 --> S3["Step3: RT_KKTK_SVC_KEI_NO取得"]
  S3 --> S4["Step4: callEKK0341B021SCで機器提供サービス契約一覧照会(予約)"]
  S4 --> IF1{"msgEKK0341B021List != null"}
  IF1 -- "Yes" --> LOOP1["msgEKK0341B021リストをループ"]
  LOOP1 --> IF2{"CUR_KKTK_SVC_CDは多機能ルーター種別か"}
  IF2 -- "Yes" --> IF3{"RSV_GENE_ADD_DTMが空でない"}
  IF3 -- "Yes" --> S5["機器交換中フラグtrue"]
  IF3 -- "No" --> S6["機器交換中フラグfalse"]
  IF2 -- "No" --> S7["他処理"]
  LOOP1 --> IF4{"CUR_KKTK_SVC_CDがHGWか"}
  IF4 -- "Yes" --> S8["HGWフラグtrue"]
  IF4 -- "No" --> S9["HGWフラグfalse"]
  IF1 -- "No" --> S10["処理終了"]
  S4 --> S11["カレント・予約機器の型式・製造番号・世代等を取得"]
  S11 --> S12["sodMapからKKOPSVKEI_INFO取得"]
  S12 --> S13["KKOPSVKEI_INFOをshkkaMapで加工"]
  S13 --> IF5{"kkopsvkei_no_bf, kkopsvkei_gadtm_bfが空でない"}
  IF5 -- "Yes" --> S14["callEKK2811A010SC(変更前)"]
  S14 --> IF6{"statusCode != 0"}
  IF6 -- "Yes" --> ERR1["CCExceptionスロー"]
  IF6 -- "No" --> S15["料金プランコード等取得"]
  IF5 -- "No" --> S16["スキップ"]
  S13 --> IF7{"kkopsvkei_no_af, kkopsvkei_gadtm_afが空でない"}
  IF7 -- "Yes" --> S17["callEKK2811A010SC(変更後)"]
  S17 --> IF8{"statusCode != 0"}
  IF8 -- "Yes" --> ERR2["CCExceptionスロー"]
  IF8 -- "No" --> S18["新料金コース適用フラグ取得"]
  IF7 -- "No" --> S19["スキップ"]
  S18 --> S20["getSvcKeiUtwkListでサービス契約内訳一覧取得"]
  S20 --> IF9{"サービス契約回線内訳数 > 1"}
  IF9 -- "Yes" --> LOOP2["複数処理"]
  IF9 -- "No" --> S21["単一処理"]
  S21 --> S22["callEKK0251B003SCCAAMsgでサービス契約回線内訳取得"]
  S22 --> IF10{"statusCode != 0"}
  IF10 -- "Yes" --> ERR3["CCExceptionスロー"]
  IF10 -- "No" --> LOOP3["msgListKisnUcwkループ"]
  LOOP3 --> IF11{"svc_kei_kaisen_ucwk_statが空"}
  IF11 -- "Yes" --> S23["スキップ"]
  IF11 -- "No" --> S24["回線内訳情報取得"]
  S24 --> S25["getSame_trn_noで同一処理番号取得"]
  S25 --> IF12{"!(新料金コース適用フラグ='1' && 機器交換中)"}
  IF12 -- "Yes" --> IF13{"kiki_seizo_no_curが空でない"}
  IF13 -- "Yes" --> IF14{"chkOdrSette(handle,param)"}
  IF14 -- "Yes" --> IF15{"chbf_kkop_svc_cdが空"}
  IF15 -- "Yes" --> S26["addTakinoSOD(ODR_NAIYO_CD_402)"]
  IF15 -- "No" --> IF16{"chbf_kkop_svc_cd, chaf_kkop_svc_cdが不一致"}
  IF16 -- "Yes" --> S27["addTakinoSOD(ODR_NAIYO_CD_418)"]
  IF16 -- "No" --> S28["スキップ"]
  IF14 -- "No" --> IF17{"hgwFlg"}
  IF17 -- "Yes" --> S29["addTakinoSOD(ODR_NAIYO_CD_401)"]
  IF17 -- "No" --> S30["スキップ"]
  IF13 -- "No" --> S31["スキップ"]
  IF12 -- "No" --> S32["スキップ"]
  S22 --> IF18{"(機器交換中 && kiki_seizo_no_rsvが空でない)"}
  IF18 -- "Yes" --> IF19{"chkOdrSette(handle,param)"}
  IF19 -- "Yes" --> IF20{"chbf_kkop_svc_cdが空"}
  IF20 -- "Yes" --> S33["addTakinoSOD(ODR_NAIYO_CD_402)"]
  IF20 -- "No" --> IF21{"chbf_kkop_svc_cd, chaf_kkop_svc_cdが不一致"}
  IF21 -- "Yes" --> S34["addTakinoSOD(ODR_NAIYO_CD_418)"]
  IF21 -- "No" --> S35["スキップ"]
  IF19 -- "No" --> IF22{"hgwFlg"}
  IF22 -- "Yes" --> S36["addTakinoSOD(ODR_NAIYO_CD_401)"]
  IF22 -- "No" --> S37["スキップ"]
  IF18 -- "No" --> S38["スキップ"]
  S38 --> END["return param"]

  %% すべての分岐・エラー・オーダ内容コードを明記
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `msgEKK0341B021List != null` | - | msgEKK0341B021リスト処理 |
| 2 | `CUR_KKTK_SVC_CDが多機能ルーター種別` | JKKHakkoSODConstCC.KKTK_SVC_CD_MRT | 機器交換中判定 |
| 3 | `RSV_GENE_ADD_DTMが空でない` | - | 機器交換中フラグtrue |
| 4 | `CUR_KKTK_SVC_CDがHGW` | JKKHakkoSODConstCC.KKTK_SVC_CD_HGW | HGWフラグ設定 |
| 5 | `kkopsvkei_no_bf, kkopsvkei_gadtm_bfが空でない` | - | callEKK2811A010SC(変更前) |
| 6 | `statusCode != 0` | - | CCExceptionスロー |
| 7 | `kkopsvkei_no_af, kkopsvkei_gadtm_afが空でない` | - | callEKK2811A010SC(変更後) |
| 8 | `statusCode != 0` | - | CCExceptionスロー |
| 9 | `サービス契約回線内訳数 > 1` | - | 複数処理 |
| 10 | `statusCode != 0` | - | CCExceptionスロー |
| 11 | `svc_kei_kaisen_ucwk_statが空` | - | スキップ |
| 12 | `!(新料金コース適用フラグ='1' && 機器交換中)` | JKKHakkoSODConstCC.NEW_PCRS_APLY_FLG_1 | addTakinoSODへ |
| 13 | `kiki_seizo_no_curが空でない` | - | addTakinoSODへ |
| 14 | `chkOdrSette(handle,param)` | - | TakinoSOD分岐 |
| 15 | `chbf_kkop_svc_cdが空` | - | addTakinoSOD(ODR_NAIYO_CD_402) |
| 16 | `chbf_kkop_svc_cd, chaf_kkop_svc_cdが不一致` | - | addTakinoSOD(ODR_NAIYO_CD_418) |
| 17 | `hgwFlg` | - | addTakinoSOD(ODR_NAIYO_CD_401) |
| 18 | `(機器交換中 && kiki_seizo_no_rsvが空でない)` | - | addTakinoSODへ |
| 19 | `chkOdrSette(handle,param)` | - | TakinoSOD分岐 |
| 20 | `chbf_kkop_svc_cdが空` | - | addTakinoSOD(ODR_NAIYO_CD_402) |
| 21 | `chbf_kkop_svc_cd, chaf_kkop_svc_cdが不一致` | - | addTakinoSOD(ODR_NAIYO_CD_418) |
| 22 | `hgwFlg` | - | addTakinoSOD(ODR_NAIYO_CD_401) |
| 23 | 以降も制御フローで分岐存在（+27件） | - | すべて明記 |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0341B021SC | EKK0341 | 機器提供サービス契約 | 機器提供サービス契約一覧照会(予約) |
| R | callEKK2811A010SC | EKK2811 | 機器オプションサービス契約 | 機器オプションサービス契約一意照会 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | サービス契約回線内訳照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号 | 同一処理番号取得 |

---

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

**起点:**

- hakkoSOD → rtOpChgDivOdrCtrl

**呼出パス:**

```
hakkoSOD → rtOpChgDivOdrCtrl → callEKK0341B021SC → EKK0341
                              → callEKK2811A010SC → EKK2811
                              → callEKK0251B003SCCAAMsg → EKK0251
                              → callEKK1081C011SC → EKK1081
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0341B021SC | R | 機器提供サービス契約 |
| callEKK2811A010SC | R | 機器オプションサービス契約 |
| callEKK0251B003SCCAAMsg | ? | サービス契約回線内訳（現在利用中） |
| callEKK1081C011SC | R | 同一処理番号 |

---

---

### sameTrnJdg()

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public int sameTrnJdg(IRequestParameterReadOnly param, String fixedText, String svcKeiNo, String opSvcKeiNo, String opSvcGeneAddDtm)`
> **戻り値:** `int`

---

#### 1. 役割

同一オプションのサービス契約サブオプションが存在するか（同一処理番号の取得判定）を判断し、件数を返却するメソッドです。<citation>4</citation>

---

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

```mermaid
flowchart TD
  START["sameTrnJdg(param, fixedText, svcKeiNo, opSvcKeiNo, opSvcGeneAddDtm)"]
  START --> S1["Step1: param.getData(fixedText)でユーザデータ情報取得"]
  S1 --> S2["Step2: inMap.get(TRGT_DATA_LIST)で対象データリスト取得"]
  S2 --> FOR1["for-each dataList[i]"]
  FOR1 --> S3["sodMap = dataList.get(i)"]
  S3 --> IF1{"sodMap != null"}
  IF1 -- "Yes" --> S4["svc_kei_info_Map = sodMap.get(SVC_KEI_INFO)"]
  S4 --> S5["opsvkei_info_Map = sodMap.get(OPSVKEI_INFO)"]
  S5 --> IF2{"svc_kei_info_Map==null || opsvkei_info_Map==null"}
  IF2 -- "Yes" --> CONT1["継続"]
  IF2 -- "No" --> IF3{"svcKeiNo.equals(svc_kei_info_Map.get(INFO_SVC_KEI_NO)) && opSvcKeiNo.equals(opsvkei_info_Map.get(OP_SVC_KEI_NO)) && opSvcGeneAddDtm.equals(opsvkei_info_Map.get(GENE_ADD_DTM))"}
  IF3 -- "Yes" --> S6["retCount++"]
  IF3 -- "No" --> CONT2["継続"]
  FOR1 --> RET["return retCount"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | sodMap != null |  | svc_kei_info_Map取得 |
| 2 | svc_kei_info_Map==null || opsvkei_info_Map==null |  | 継続 |
| 3 | svcKeiNo.equals(svc_kei_info_Map.get(INFO_SVC_KEI_NO)) && opSvcKeiNo.equals(opsvkei_info_Map.get(OP_SVC_KEI_NO)) && opSvcGeneAddDtm.equals(opsvkei_info_Map.get(GENE_ADD_DTM)) |  | retCount++ |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | リクエストパラメータ（読み取り専用） |
| 2 | fixedText | String | 確定テキスト |
| 3 | svcKeiNo | String | サービス契約番号 |
| 4 | opSvcKeiNo | String | オプションサービス契約番号 |
| 5 | opSvcGeneAddDtm | String | オプションサービス契約世代登録年月日時分秒 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | ユーザデータ情報内ローカル判定のみ |

---

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

**起点:**
- sameTrnJdg(直接呼出)

**呼出パス:**

```
sameTrnJdg
```

**終端:**

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

---

**以上、10メソッドすべての詳細業務ロジック分析を記載しました。**

---

### searchOpSvcKei()

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

```
searchOpSvcKei() ← gọi bởi:
├── bmpSwitchOdrCtrl()    [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]
├── opSetOdrCtrl()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── add050AddSod()
│   ├── bmpSwitchOdrCtrl()
│   ├── cnclOdrCtrl()
│   ├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── htelNoDslOdrCtrl()
│   ├── htelNoInfoChgeOdrCtrl()
│   ├── ksiDslFixOdrCtrl()
│   ├── ksiDslOdrCtrl()
│   ├── htelNoKaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── kaihkOdrCtrl()
│   │   └── hakkoSOD()
│   ├── opSetOdrCtrl()
│   │   ├── cnclOdrCtrl()
│   │   ├── hakkoSOD()
│   │   ├── htelNoKaihkOdrCtrl()
│   │   ├── kaihkOdrCtrl()
│   │   ├── ksiDslFixOdrCtrl()
│   │   ├── ksiDslOdrCtrl()
│   │   ├── dslOdrCtrl()
│   │   │   ├── hakkoSOD()
│   │   │   ├── cnclOdrCtrl()
│   │   │   │   └── hakkoSOD()
│   │   │   ├── ksiDslFixOdrCtrl()
│   │   │   │   └── hakkoSOD()
│   │   │   └── ksiDslOdrCtrl()
│   │   │       └── hakkoSOD()
│   │   ├── htelNoDslOdrCtrl()
│   │   │   └── hakkoSOD()
│   │   └── htelNoInfoChgeOdrCtrl()
│   │       └── hakkoSOD()
│   └── telNoChge()
│       ├── hakkoSOD()
│       └── bmpSwitchOdrCtrl()
│           └── hakkoSOD()
└── add050DelSod()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── opSetOdrCtrl()
    └── telNoChge()
```


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

---

#### 1. 役割

オプションサービス契約番号および世代登録年月日時分秒を指定して、該当するオプションサービス契約一意照会を実行し、契約情報を取得する業務メソッドです。  
電話オプションや転送電話などの契約情報取得時に利用されます。

---

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

```mermaid
flowchart TD
  START["searchOpSvcKei(handle, param, keyNo, geneAddDtm)"]
    --> IF1{"geneAddDtmが空か"}
    IF1 -- "空" --> S1["inMapへkeyNoのみセット"]
    IF1 -- "空でない" --> S2["inMapへkeyNoとgeneAddDtmをセット"]
    S1 --> S3["callEKK0351A010SC実行"]
    S2 --> S3
    S3 --> IF2{"statusCode!=0"}
    IF2 -- "はい" --> THROW["CCExceptionスロー"]
    IF2 -- "いいえ" --> S4["outMapから契約情報を返却"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `JKKStringUtil.isNullBlank(geneAddDtm)` | 空文字 | inMapへkeyNoのみセット |
| 2 | 上記以外 | - | inMapへkeyNoとgeneAddDtmをセット |
| 3 | `statusCode != 0` | 0以外 | CCExceptionスロー |
| 4 | `statusCode == 0` | 0 | outMapから結果返却 |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約一意照会 | 指定番号・世代で契約照会 |

---

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

**起点:**
- add050DelSod
- add050AddSod
- telNoChge
- opSetOdrCtrl
- htelNoKaihkOdrCtrl
- kaihkOdrCtrl
- bmpSwitchOdrCtrl
- htelNoInfoChgeOdrCtrl
- htelNoDslOdrCtrl
- dslOdrCtrl
- hakkoSOD
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl

**呼出パス例:**
```
hakkoSOD → telNoChge → searchOpSvcKei → callEKK0351A010SC
```

**終端:**
| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0351A010SC | R | オプションサービス契約一意照会 |

---

---

### searchSvcKeiUcwk()

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

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


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

---

#### 1. 役割

サービス契約内訳番号・世代登録日時をキーにEKK0161A010サービス契約内訳一意照会を行い、該当データを返却します。複数のオーダ制御・SOD登録処理で参照される情報取得ロジックです。

---

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

```mermaid
flowchart TD
  START["searchSvcKeiUcwk(handle, param, keyNo, geneAddDtm)"] --> S1["geneAddDtmがnullまたは空か判定"]
  S1 --> S2["inMap.put(SVC_KEI_UCWK_NO, keyNo)"]
  S2 --> S3["inMap.put(GENE_ADD_DTM, geneAddDtm)"]
  S3 --> S4["callEKK0161A010SC(param, handle, inMap, outMap, funcCd)"]
  S4 --> IF1{"statusCode == 0"}
  IF1 -- "Yes" --> S5["outMapからTEMPLATE_ID_EKK0161A010で結果取得"]
  IF1 -- "No" --> THROW["CCExceptionスロー"]
  S5 --> RETURN["HashMap<String, Object>返却"]
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | callEKK0161A010SC戻り値0以外 | - | 例外スロー |
| 2 | callEKK0161A010SC戻り値0 | - | 結果返却 |

---

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

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

---

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

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

---

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

**起点:** 各種OdrCtrl・SOD業務

**呼出パス:**
```
[Ctrlメソッド/業務メソッド] → searchSvcKeiUcwk → callEKK0161A010SC
```

**終端:**

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

---

---

### searchSvcKeiUcwkEohtl()

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

```
searchSvcKeiUcwkEohtl() ← gọi bởi:
├── bmpSwitchOdrCtrl()    [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]
├── opSetOdrCtrl()    [trực tiếp]
├── telNoChge()    [trực tiếp]
└── add050AddSod()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    │   └── hakkoSOD()
    ├── kaihkOdrCtrl()
    │   └── hakkoSOD()
    ├── opSetOdrCtrl()
    │   ├── cnclOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── kaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── cnclOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── ksiDslOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── htelNoDslOdrCtrl()
    │   │   └── hakkoSOD()
    │   └── htelNoInfoChgeOdrCtrl()
    │       └── hakkoSOD()
    └── telNoChge()
        ├── hakkoSOD()
        └── bmpSwitchOdrCtrl()
            └── hakkoSOD()
```


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

---

#### 1. 役割

サービス契約内訳（eo光電話）を世代指定で一意照会し、該当情報を返却する。電話オーダ制御・SOD関連業務で利用。

---

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

```mermaid
flowchart TD
  START["searchSvcKeiUcwkEohtl(handle, param, keyNo, geneAddDtm)"] --> S1["geneAddDtmがnullまたは空か判定"]
  S1 --> S2["inMap.put(SVC_KEI_UCWK_NO, keyNo)"]
  S2 --> S3["inMap.put(GENE_ADD_DTM, geneAddDtm)"]
  S3 --> S4["callEKK0191A010SC(param, handle, inMap, outMap, funcCd)"]
  S4 --> IF1{"statusCode == 0"}
  IF1 -- "Yes" --> S5["outMapからTEMPLATE_ID_EKK0191A010で結果取得"]
  IF1 -- "No" --> THROW["CCExceptionスロー"]
  S5 --> RETURN["HashMap<String, Object>返却"]
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | callEKK0191A010SC戻り値0以外 | - | 例外スロー |
| 2 | callEKK0191A010SC戻り値0 | - | 結果返却 |

---

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

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

---

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

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

---

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

**起点:** 各種OdrCtrl・add050AddSod・telNoChgeなど

**呼出パス:**
```
[Ctrlメソッド/業務メソッド] → searchSvcKeiUcwkEohtl → callEKK0191A010SC
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0191A010SC | R | サービス契約内訳<eo光電話> |

---

---

### setChgePWForDialup()

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

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


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

---

#### 1. 役割

ダイアルアップ接続サービスにおけるパスワード変更のため、該当オプションサービス契約情報を取得し、業務条件に従ってパスワード変更SOD（ODR_NAIYO_CD_135）を発行する業務ロジックです。

---

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

```mermaid
flowchart TD
  START["setChgePWForDialup(handle, param, svc_kei_no)"]
  START --> S1["Step1: inHashDialupへサービス契約番号・オプションサービスコード(DUP)をセット"]
  S1 --> S2["Step2: callEKK0351B002SCでEKK0351ダイアルアップ照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes:エラー" --> ERR1["CCException発生（statusCode, SCCallException）"]
  IF1 -- "No:正常" --> S3["Step3: 結果メッセージリストをforループ処理"]
  S3 --> IF2{"OP_SVC_KEI_STAT == 100"}
  IF2 -- "Yes: 提供中" --> S4["Step4: addSOD(ODR_NAIYO_CD_135)でパスワード変更SOD発行"]
  IF2 -- "No: 提供中以外" --> SKIP1["次データへ"]
  S4 --> END["完了"]
  ERR1 --> END
  SKIP1 --> END

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

**処理ステップ詳細（MethodSequence・BodyComments準拠）:**

1. `inHashDialup.put(JKKHakkoSODConstCC.SVC_KEI_NO, svc_kei_no)`  
   サービス契約番号をセット
2. `inHashDialup.put(JKKHakkoSODConstCC.OP_SVC_CD, JKKHakkoSODConstCC.OP_SVC_CD_DUP)`  
   オプションサービスコード(DUP)（ダイアルアップ）をセット
3. `callEKK0351B002SC`でダイアルアップサービスの契約情報を照会
4. `statusCode != 0`の場合は例外スロー
5. 結果msgListをforで回し、`OP_SVC_KEI_STAT == 100`（提供中）か判定
6. 提供中の場合は`addSOD(handle, param, JKKHakkoSODConstCC.ODR_NAIYO_CD_135)`でパスワード変更SOD発行

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

| # | 条件 | 定数値 | 分岐先 |
|---|------------------------------|---------|------------------|
| 1 | `statusCode != 0`            | -       | 例外スロー       |
| 2 | `OP_SVC_KEI_STAT == 100`     | 100     | SOD発行          |
| 3 | 上記以外                     | -       | 次データへ       |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 | サービス契約番号でダイアルアップ契約を取得 |

---

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

本メソッドではメッセージID利用情報はありません。

---

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

**起点:**  
idpwShkkaSaifuriOdrCtrl → setChgePWForDialup

**呼出パス:**

```
idpwShkkaSaifuriOdrCtrl → setChgePWForDialup → callEKK0351B002SC → addSOD
```

**終端:**

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

---

---

---

### setChgePWForIPv6()

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

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


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

---

#### 1. 役割

IPv6サービスにおけるパスワード変更要求に基づき、該当するオプションサービス契約情報を取得し、業務判定に従ってSOD（サービスオーダデータ）発行を制御する業務ロジックです。  
呼び出し元は`idpwShkkaSaifuriOdrCtrl`や`hakkoSOD`等で、契約変更時の業務パスワード再発行等の制御を担います。

---

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

```mermaid
flowchart TD
  START["setChgePWForIPv6(handle, param, svc_kei_no)"] 
  START --> S1["Step1: inHashIPv6へサービス契約番号・オプションサービスコード(IPV6)をセット"]
  S1 --> S2["Step2: callEKK0351B002SCでEKK0351_オプションサービス契約一覧照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes:エラー" --> ERR1["CCException発生（statusCode, SCCallException）"]
  IF1 -- "No:正常" --> S3["Step3: 結果メッセージリストをforループで処理"]
  S3 --> IF2{"ipv6AdIfidが空か"}
  IF2 -- "Yes: 空（新規SOD未発行）" --> SKIP1["次のデータへ（SOD未発行）"]
  IF2 -- "No: 空でない" --> IF3{"OP_SVC_KEI_STAT == '100'"}
  IF3 -- "Yes: 提供中" --> S4["Step4: tsuikabunAddSODでSOD発行（ODR_NAIYO_CD_156=IPv6パスワード変更）"]
  IF3 -- "No: 提供中以外" --> SKIP2["次のデータへ"]
  S4 --> END["完了"]
  ERR1 --> END
  SKIP1 --> END
  SKIP2 --> END

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

**処理ステップ詳細（MethodSequence・BodyComments準拠）:**

1. `inHashIPv6.put(JKKHakkoSODConstCC.SVC_KEI_NO, svc_kei_no)`  
   サービス契約番号を入力ハッシュへセット
2. `inHashIPv6.put(JKKHakkoSODConstCC.OP_SVC_CD, JKKHakkoSODConstCC.OP_SVC_CD_IPV6)`  
   オプションサービスコード(IPV6)をセット
3. `callEKK0351B002SC`でEKK0351B002（オプションサービス契約一覧照会）を実行し、結果取得
4. `resultHashIPv6.get(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0351B002)`でメッセージリスト取得
5. ループで各msgData処理
   - `retHash.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_NO)`で契約番号取得
   - `retHash.get(EKK0351B002CBSMsg1List.GENE_ADD_DTM)`で世代登録日時取得
   - `getEKK0361A010Info`でISP契約一意照会
   - `eKK0361A010SCHash.get(EKK0361A010CBSMsg1List.IPV6_AD_IFID)`でIPv6アドレス情報取得
6. `statusCode != 0`の場合は例外スロー
7. `ipv6AdIfid`が空の場合（新規登録SOD未発行）はSOD発行せずスキップ
8. `OP_SVC_KEI_STAT`が`100`（提供中）の場合のみ、`tsuikabunAddSOD`でODR_NAIYO_CD_156（IPv6パスワード変更）SODを発行

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

| # | 条件 | 定数値 | 分岐先 |
|---|------------------------------|---------|------------------|
| 1 | `statusCode != 0`            | -       | 例外スロー       |
| 2 | `isBlank(ipv6AdIfid)`        | -       | 次データへ       |
| 3 | `OP_SVC_KEI_STAT == 100`     | 100     | SOD発行          |
| 4 | 上記以外                     | -       | 次データへ       |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 | サービス契約番号でオプションサービス契約を取得 |
| R | getEKK0361A010Info | EKK0361 | オプションサービス契約＜ISP＞一意照会 | IPv6アドレス情報の取得 |

---

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

本メソッドではメッセージID利用情報はありません。

---

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

**起点 (Entry Point):**  
idpwShkkaSaifuriOdrCtrl → setChgePWForIPv6

**呼出パス:**

```
idpwShkkaSaifuriOdrCtrl → setChgePWForIPv6 → callEKK0351B002SC → getEKK0361A010Info → tsuikabunAddSOD（必要時）
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0351B002SC | R | オプションサービス契約一覧照会 |
| getEKK0361A010Info | R | オプションサービス契約＜ISP＞一意照会 |

---

---

---

### setChgePWForMltiSe()

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

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


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

---

#### 1. 役割

マルチセッション（MLTISE）サービス利用時のパスワード変更オーダ業務制御を行う。  
サービス契約内訳番号を元にオプションサービス契約・固定IPの有無・ステータス判定を行い、適切なSOD発行を制御する。

---

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

```mermaid
flowchart TD
  START["setChgePWForMltiSe(handle, param, svc_kei_ucwk_no)"]
  START --> S1["Step1: inHashMltiSeへサービス契約内訳番号・オプションサービスコード(MLTISE)をセット"]
  S1 --> S2["Step2: callEKK0351B002SCでEKK0351マルチセッション照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes:エラー" --> ERR1["CCException発生（statusCode, SCCallException）"]
  IF1 -- "No:正常" --> S3["Step3: 結果メッセージリストをforループ処理"]
  S3 --> IF2{"isAddSodTrgtStat(ステータス)がtrueか"}
  IF2 -- "Yes: SOD発行対象" --> S4["Step4: 固定IP有無判定のためinHashFixIpAdへパラメータセット"]
  S4 --> S5["Step5: callEKK0351B002SCで固定IP情報取得"]
  S5 --> S6["Step6: 固定IPアドレス存在有無を判定しfixipadAriフラグセット"]
  S6 --> IF3{"fixipadAri == true"}
  IF3 -- "Yes" --> S7["Step7: 静的マルチセッションステータス判定"]
  S7 --> IF4{"ステータス == '100' or '030'"}
  IF4 -- "Yes" --> S8["Step8: addSOD(ODR_NAIYO_CD_162: 静的)発行"]
  IF4 -- "No" --> S9["Step9: addSOD(ODR_NAIYO_CD_319: 動的)発行"]
  IF3 -- "No" --> S10["Step10: addSOD(ODR_NAIYO_CD_319: 動的)発行"]
  IF2 -- "No: SOD発行不要" --> SKIP1["次データへ"]
  S8 --> END["完了"]
  S9 --> END
  S10 --> END
  SKIP1 --> END
  ERR1 --> END

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

**処理ステップ詳細（MethodSequence・BodyComments準拠）:**

1. `inHashMltiSe.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_NO, svc_kei_ucwk_no)`  
   サービス契約内訳番号をセット
2. `inHashMltiSe.put(JKKHakkoSODConstCC.OP_SVC_CD, JKKHakkoSODConstCC.OP_SVC_CD_MLTISE)`  
   オプションサービスコード(MLTISE)をセット
3. `callEKK0351B002SC`でマルチセッションの契約情報を照会
4. `statusCode != 0`の場合は例外スロー
5. 結果msgListをforで回し、`isAddSodTrgtStat(ステータス)`判定
6. SOD対象の場合、固定IP有無を判定するため`inHashFixIpAd`にパラメータセット
7. 固定IP情報を`callEKK0351B002SC`で照会
8. 固定IPアドレスの有無を判定（`fixipadAri`セット）
9. `fixipadAri == true`のとき静的ステータスを判定し、`SVC_KEI_STAT_100`または`030`なら静的用SOD（ODR_NAIYO_CD_162）を発行
10. それ以外は動的用SOD（ODR_NAIYO_CD_319）を発行
11. SOD発行対象外ならスキップ

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

| # | 条件 | 定数値 | 分岐先 |
|---|--------------------------------------------------|---------|------------------|
| 1 | `statusCode != 0`                                | -       | 例外スロー       |
| 2 | `isAddSodTrgtStat(ステータス)`                   | -       | 固定IPチェック   |
| 3 | `fixipadAri == true`                             | -       | 静的/動的分岐    |
| 4 | `OP_SVC_KEI_STAT == 100 or 030`                  | 100,030 | 静的SOD           |
| 5 | 上記以外                                         | -       | 動的SOD           |
| 6 | SOD発行対象外                                    | -       | 次データ          |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 | サービス契約内訳番号でマルチセッション・固定IP契約を取得 |

---

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

本メソッドではメッセージID利用情報はありません。

---

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

**起点:**  
idpwShkkaSaifuriOdrCtrl → setChgePWForMltiSe

**呼出パス:**

```
idpwShkkaSaifuriOdrCtrl → setChgePWForMltiSe → callEKK0351B002SC（MLTISE）→ callEKK0351B002SC（FIXIPAD）→ addSOD
```

**終端:**

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

---

---

---

### setChgePWForRouterConInfo()

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

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


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

---

#### 1. 役割

認証IDのパスワード変更要求に基づき、ルーター向け接続情報の契約状態・機器状態・休止判定等を複合的に判断し、必要なSOD（サービスオーダデータ）/TakinoSODを発行する業務ロジックです。  
複数回の休止判定・機器状態判定、BBR/多機能ルーター等の分岐を含む複雑な制御を担います。

---

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

```mermaid
flowchart TD
  START["setChgePWForRouterConInfo(handle, param, svc_kei_no)"]
  START --> S1["inHashKktkにサービス契約番号・機器提供サービスコード(BBR)をセット"]
  S1 --> S2["callEKK0341B002SCでBBR契約一覧照会"]
  S2 --> IF1{"statusCode != 0"}
  IF1 -- "Yes:エラー" --> ERR1["CCException発生（statusCode, SCCallException）"]
  IF1 -- "No:正常" --> S3["checkTakinoRTで多機能ルーターフラグ取得"]
  S3 --> IF2{"takino_flg == 0"}
  IF2 -- "Yes:多機能ルーターフラグOFF" --> LOOP1["msgEKK0341B002SCListをforループ"]
  LOOP1 --> IF3{"KKTK_SVC_KEI_STAT < 020 or >= 910"}
  IF3 -- "Yes:照査未満 or 解約済以上" --> SKIP1["スキップ"]
  IF3 -- "No" --> IF4{"taknkikiModelCd, kikiSeizoNoが空"}
  IF4 -- "Yes:宅内機器未設定" --> SKIP2["スキップ"]
  IF4 -- "No" --> S4["機器提供サービス契約番号・世代登録日時取得"]
  S4 --> S5["pauseJdgで休止判定"]
  S5 --> IF5{"pause_jdg_cd == 1"}
  IF5 -- "Yes" --> S6["addSOD(ODR_NAIYO_CD_107:FTTH認証・停止解除)"]
  S6 --> S7["addSOD(ODR_NAIYO_CD_148:ルーター向け接続情報・パスワード変更)"]
  IF5 -- "No" --> IF6{"pause_jdg_cd == 0"}
  IF6 -- "Yes" --> S8["addSOD(ODR_NAIYO_CD_106:FTTH認証・一時停止)"]
  IF6 -- "No" --> SKIP3["スキップ"]
  IF2 -- "No:多機能ルーターフラグON" --> IF7{"pause_jdg_cd == 1"}
  IF7 -- "Yes:停止解除" --> IF8{"takino_flg != 9"}
  IF8 -- "Yes" --> S9["addTakinoSOD(ODR_NAIYO_CD_403)"]
  IF8 -- "No" --> SKIP4["スキップ"]
  IF7 -- "No" --> IF9{"pause_jdg_cd == 0"}
  IF9 -- "Yes:一時停止" --> IF10{"takino_flg != 9"}
  IF10 -- "Yes" --> S10["addTakinoSOD(ODR_NAIYO_CD_403)"]
  IF10 -- "No" --> SKIP5["スキップ"]
  S7 --> END
  S8 --> END
  S9 --> END
  S10 --> END
  ERR1 --> END
  SKIP1 --> END
  SKIP2 --> END
  SKIP3 --> END
  SKIP4 --> END
  SKIP5 --> 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
  style IF7 fill:#ffcc00
  style IF8 fill:#ffcc00
  style IF9 fill:#ffcc00
  style IF10 fill:#ffcc00
```

**処理ステップ詳細（MethodSequence・BodyComments準拠）:**

1. `inHashKktk.put(JKKHakkoSODConstCC.SVC_KEI_NO, svc_kei_no)`  
2. `inHashKktk.put(JKKHakkoSODConstCC.KKTK_SVC_CD, JKKHakkoSODConstCC.KKTK_SVC_CD_BBR)`  
   BBRサービス契約をセット
3. `callEKK0341B002SC`でBBR契約一覧照会
4. `statusCode != 0`の場合は例外スロー
5. `checkTakinoRT(handle, param)`で多機能ルーターフラグ取得
6. takino_flg==0の場合
   - msgEKK0341B002SCList forループ
   - `KKTK_SVC_KEI_STAT`が`020`未満または`910`以上ならスキップ
   - 機器型式・製造番号が空ならスキップ
   - pauseJdgで休止判定
      - pause_jdg_cd==1: addSOD(ODR_NAIYO_CD_107)→addSOD(ODR_NAIYO_CD_148)
      - pause_jdg_cd==0: addSOD(ODR_NAIYO_CD_106)
7. takino_flg!=0の場合
   - pauseJdgで休止判定
      - pause_jdg_cd==1: takino_flg!=9ならaddTakinoSOD(ODR_NAIYO_CD_403)
      - pause_jdg_cd==0: takino_flg!=9ならaddTakinoSOD(ODR_NAIYO_CD_403)

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

| # | 条件 | 定数値 | 分岐先 |
|---|----------------------------------------------------------------------|---------|------------------|
| 1 | `statusCode != 0`                                                    | -       | 例外スロー       |
| 2 | `takino_flg == 0`                                                    | 0       | BBR通常フロー    |
| 3 | `KKTK_SVC_KEI_STAT < 020 or >= 910`                                  | 020/910 | スキップ         |
| 4 | `isBlank(taknkikiModelCd) || isBlank(kikiSeizoNo)`                   | -       | スキップ         |
| 5 | `pause_jdg_cd == 1`                                                  | 1       | 停止解除         |
| 6 | `pause_jdg_cd == 0`                                                  | 0       | 一時停止         |
| 7 | `takino_flg != 0`                                                    |         | 多機能ルーター   |
| 8 | `takino_flg != 9`                                                    | 9       | TakinoSOD発行    |
| 9 | 上記以外                                                            | -       | スキップ         |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0341B002SC | EKK0341 | 機器提供サービス契約一覧照会 | サービス契約番号で契約状態を取得 |
| ? | callEKK0251B003SCCAAMsg | EKK0251 | サービス契約回線内訳（現在利用中） | 利用状況取得 |
| R | callEKK0341B504SC | EKK0341 | 機器提供サービス契約一覧照会 | サービス契約回線内訳照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳＜eo光電話＞一意照会 | eo光電話契約情報取得 |
| R | callEKK0341B029SC | EKK0341 | 機器変更番号一覧照会 | 機器変更履歴取得 |
| R | callEKK0341B021SC | EKK0341 | 予約契約一覧照会 | 予約状態取得 |
| R | callEKK2811B010SC | EKK2811 | 機器オプションサービス契約一覧照会 | オプション契約一覧取得 |
| R | callEKK1041B001SC | EKK1041 | オーダ設定一覧照会 | オーダ発行設定取得 |
| R | callEKK1041A010SC | EKK1041 | オーダ設定一意照会 | オーダ設定詳細取得 |
| R | callEKK0081A010SC | EKK0081 | サービス契約一意照会 | 契約一意照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞一意照会 | ISPオプション契約情報取得 |
| R | callEKK0341B008SCRireki | EKK0341 | 機器提供サービス契約一覧照会(履歴) | 履歴照会 |
| R | callEDK0301B060SC | EDK0301 | 返品機器取消一覧照会 | 返品機器取消一覧照会 |
| R | callEKK0341B001SC | EKK0341 | 機器提供サービス契約一覧照会（機器製造番号） | 機器製造番号一覧照会 |
| R | callEKK0341A010SC | EKK0341 | 機器提供サービス契約一意照会 | 契約一意照会 |

---

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

本メソッドではメッセージID利用情報はありません。

---

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

**起点:**  
idpwShkkaSaifuriOdrCtrl → setChgePWForRouterConInfo

**呼出パス:**

```
idpwShkkaSaifuriOdrCtrl → setChgePWForRouterConInfo → callEKK0341B002SC → checkTakinoRT → pauseJdg → addSOD/addTakinoSOD
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0341B002SC | R | 機器提供サービス契約一覧照会 |
| ...（上記CRUD操作表を参照、全呼び出し列挙） |

---### setChgePWForIPv6()

---

#### 1. 役割

IPv6契約のパスワード変更オーダを発行するためのパラメータ設定・状態判定および関連SOD発行処理を行うメソッド。  
「サービス契約番号」単位で、オプションサービス契約照会・IPv6アドレス情報取得・新規登録SOD未発行判定を経て、必要があれば「IPv6パスワード変更」オーダ（SOD）を発行する。

---

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

```mermaid
flowchart TD
  START["setChgePWForIPv6(handle, param, svc_kei_no)"] --> S1["Step1: inHashIPv6にサービス契約番号(JKKHakkoSODConstCC.SVC_KEI_NO)をセット"]
  S1 --> S2["Step2: inHashIPv6にオプションサービスコード(JKKHakkoSODConstCC.OP_SVC_CD, JKKHakkoSODConstCC.OP_SVC_CD_IPV6)をセット"]
  S2 --> S3["Step3: callEKK0351B002SCでオプションサービス契約一覧照会を実行"]
  S3 --> IF1{"statusCode != 0"}
  IF1 -- "Yes: エラー" --> E1["CCExceptionをthrow"]
  IF1 -- "No: 正常" --> S4["Step4: 結果(resultHashIPv6)からTEMPLATE_ID_EKK0351B002取得"]
  S4 --> S5["Step5: msgList[i]ごとにgetMsgData()で契約詳細取得"]
  S5 --> S6["Step6: 各msgについてOP_SVC_KEI_NO, GENE_ADD_DTM取得"]
  S6 --> S7["Step7: getEKK0361A010Infoでオプションサービス契約＜ISP＞一意照会"]
  S7 --> S8["Step8: eKK0361A010SCHashからIPV6_AD_IFIDを取得"]
  S8 --> IF2{"isBlank(ipv6AdIfid)"}
  IF2 -- "Yes: 空の場合は次データへ" --> S5
  IF2 -- "No: 空でない" --> IF3{"OP_SVC_KEI_STAT = SVC_KEI_STAT_100(100:サービス提供中)"}
  IF3 -- "Yes: サービス提供中" --> S9["Step9: tsuikabunAddSODでODR_NAIYO_CD_156(IPv6パスワード変更)SOD発行"]
  IF3 -- "No" --> S5
  S9 --> END["完了"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style E1 fill:#ffaaaa
```

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

1. `inHashIPv6.put(JKKHakkoSODConstCC.SVC_KEI_NO, svc_kei_no)`でサービス契約番号セット
2. `inHashIPv6.put(JKKHakkoSODConstCC.OP_SVC_CD, JKKHakkoSODConstCC.OP_SVC_CD_IPV6)`でIPv6オプションサービスコードセット
3. `callEKK0351B002SC`によるオプションサービス契約一覧照会（EKK0351）
4. statusCode!=0の場合はCCException（SCCallExceptionラップ）をthrow
5. 結果(resultHashIPv6)から`TEMPLATE_ID_EKK0351B002`でメッセージリスト取得
6. 各msgで`getMsgData()`、`OP_SVC_KEI_NO`・`GENE_ADD_DTM`を取得
7. `getEKK0361A010Info`でISP契約の一意照会し、`IPV6_AD_IFID`取得
8. `IPV6_AD_IFID`が空（isBlank）の場合は次データへ
9. `OP_SVC_KEI_STAT`が`SVC_KEI_STAT_100`（"100":サービス提供中）の場合、`tsuikabunAddSOD`で`ODR_NAIYO_CD_156`（IPv6パスワード変更）のSOD発行

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `0 != statusCode` | - | CCException throw |
| 2 | `isBlank(ipv6AdIfid)` | - | 次msgデータへ |
| 3 | `JKKHakkoSODConstCC.SVC_KEI_STAT_100.equals((String)retHash.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT))` | "100"（サービス提供中） | SOD発行 |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧 | サービス契約番号単位での一覧照会 |
| R | getEKK0361A010Info | EKK0361 | オプションサービス契約＜ISP＞一意照会 | ISP契約情報の一意取得 |
| C | tsuikabunAddSOD | - | SOD（オーダ管理） | IPv6パスワード変更SOD発行 |

---

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

| # | メッセージID | 種別 | 利用コンテキスト |
|---|-----------|------|---------------|
| 1 | - | - | - |

---

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

**起点:**
- idpwShkkaSaifuriOdrCtrl → setChgePWForIPv6

**呼出パス:**
```
idpwShkkaSaifuriOdrCtrl → setChgePWForIPv6 → callEKK0351B002SC（EKK0351） → getEKK0361A010Info（EKK0361） → tsuikabunAddSOD
```

**終端:**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| callEKK0351B002SC | R | オプションサービス契約一覧 |
| getEKK0361A010Info | R | オプションサービス契約＜ISP＞一意照会 |
| tsuikabunAddSOD | C | SOD（オーダ管理） |

---

---

---

### shkkaChr()

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

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


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

---

#### 1. 役割

文字列の初期化処理を提供するメソッドです。引数がnullの場合は空文字列（""）を返却し、そうでない場合は新たな文字列インスタンスを返却します。複数の業務でnull回避のための前処理として利用されます。

---

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

```mermaid
flowchart TD
  START["shkkaChr(trgtChr)"] --> IF1{"trgtChr == null"}
  IF1 -- "Yes（null）" --> RETURN1["return \"\""]
  IF1 -- "No（not null）" --> RETURN2["return new String(trgtChr)"]
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | trgtChrがnull | なし | 空文字列返却 |
| 2 | trgtChrがnullでない | なし | 新規インスタンス返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | trgtChr | String | 初期化する対象文字列 |

---

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

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

---

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

**起点:** 複数業務メソッドからバリデーション・初期化用途で呼出

**呼出パス:**
```
[各種Ctrlメソッド] → **shkkaChr**
```

**終端:**

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

---

---

### shkkaMap()

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

```
shkkaMap() ← gọi bởi:
├── cnclOdrCtrl()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── keiTtdkChuHtelnoChgeOdrCtrl()    [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]
├── adchgFixOdrCtrl()
│   └── hakkoSOD()
├── addIpv6SODAft()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
│       ├── adchgFixOdrCtrl()
│       └── hakkoSOD()
├── bmpDojiMskm()
│   ├── bmpSwitchOdrCtrl()
│   ├── hakkoSOD()
│   ├── stpRlsOdrCtrl()
│   └── useStpRlsOdrCtrl()
├── bmpSipDslOdrCtrl()
│   └── hakkoSOD()
├── bmpSwitchOdrCtrl()
│   └── hakkoSOD()
├── courseChgeOdrCtrl()
│   ├── adchgFixOdrCtrl()
│   └── hakkoSOD()
├── dslOdrCtrl()
│   ├── hakkoSOD()
│   ├── cnclOdrCtrl()
│   │   └── hakkoSOD()
│   ├── ksiDslFixOdrCtrl()
│   │   └── hakkoSOD()
│   └── ksiDslOdrCtrl()
│       └── hakkoSOD()
├── htelItntokiOdrCtrl()
│   └── hakkoSOD()
├── htelNoAddOdrCtrl()
│   └── hakkoSOD()
├── htelNoChgeOdrCtrl()
│   └── hakkoSOD()
├── htelNoDslOdrCtrl()
│   └── hakkoSOD()
├── htelNoInfoChgeOdrCtrl()
│   └── hakkoSOD()
├── htelNoKaihkOdrCtrl()
│   └── hakkoSOD()
├── idpwShkkaSaifuriOdrCtrl()
│   └── hakkoSOD()
├── jdgOdr163()
│   ├── adchgFixOdrCtrl()
│   ├── courseChgeOdrCtrl()
│   └── hakkoSOD()
├── kaihkOdrCtrl()
│   └── hakkoSOD()
├── newNet()
│   ├── adchgFixOdrCtrl()
│   ├── hakkoSOD()
│   └── newKeiOdrCtrl()
├── 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()
└── wribInfoAddOdrCtrl()
    └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `public HashMap<String, Object> shkkaMap(HashMap<String, Object> map)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

HashMapの初期化処理。引数のHashMapがnullの場合に新規インスタンスを生成し返却する。複数の情報取得/業務登録前のバリデーション用途で使用。

---

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

```mermaid
flowchart TD
  START["shkkaMap(map)"] --> IF1{"map == null"}
  IF1 -- "Yes（null）" --> RETURN1["return new HashMap()"]
  IF1 -- "No（not null）" --> RETURN2["return map"]
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | mapがnull | なし | 新規HashMap返却 |
| 2 | mapがnullでない | なし | そのまま返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | map | HashMap<String,Object> | 初期化対象のマップ |

---

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

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

---

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

**起点:** 各種情報取得前バリデーション

**呼出パス:**
```
[各種Ctrlメソッド] → shkkaMap
```

**終端:**

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

---

---

### spotLoginSysidChgeOdrCtrl()

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

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


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

---

#### 1. 役割

スポットログインSYSIDの変更に伴うオーダ発行制御を行う。スポットログインSYSIDが変更された場合のSOD登録（WiFiスポット変更）を業務フロー内で判定・実行します。

---

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

```mermaid
flowchart TD
  START["spotLoginSysidChgeOdrCtrl(handle, param, sodMap)"] --> S1["sodMapからサービス契約内訳情報(SVC_KEI_UCWK_INFO)を取得"]
  S1 --> S2["サービス契約内訳番号(INFO_SVC_KEI_UCWK_NO)、変更後サービス契約内訳世代登録日時(INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM)取得"]
  S2 --> S3["sodMapからSOD基本情報(SOD_KIHON_INFO)を取得"]
  S3 --> S4["sysid取得"]
  S4 --> S5["judgeOdrHakkoJoken4WiFiSpot(param, handle, sysid)の判定"]
  S5 --> S6["addSODWiFiChg(handle, param)でSOD登録"]
  S6 --> RETURN["paramを返却"]
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | 処理例外 | なし | 例外スロー（判定メソッド/登録処理で例外発生時のみ） |
| 2 | 正常系 | なし | param返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データリクエスト/レスポンスパラメータ |
| 3 | sodMap | HashMap<String,Object> | SOD判定/発行用情報を保持したMap |

---

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

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

---

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

**起点:** hakkoSOD

**呼出パス:**
```
hakkoSOD → spotLoginSysidChgeOdrCtrl → judgeOdrHakkoJoken4WiFiSpot → addSODWiFiChg → [SOD登録]
```

**終端:**

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

---

---

### stpUkOdrCtrl()

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

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


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

---

#### 1. 役割

中断受付（サービス利用の一時停止）に関するオーダ登録・制御処理全体を担うメソッドです。ネット・モバイル・電話各サービス種別ごとに必要なオーダの発行や関連判定・条件照会を組み合わせて業務フローを構成します。

---

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

```mermaid
flowchart TD
  START["stpUkOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["sodMapからSOD基本情報・サービス契約情報・サービス契約内訳情報取得"]
  S1 --> S2["shkkaMapで各情報をマッピング"]
  S2 --> S3["サービス契約番号・内訳番号・世代登録年月日時分秒を取得"]
  S3 --> S4["サービス種別判定(jdgSvcKind)"]
  S4 --> IF1{"svc_kind=ネット or PCRS_CD_ADSL_FURETTSU"}
    IF1 -- "Yes" --> S5["マンションプライベート判定(isMansionPrvate)"]
      S5 -- "Yes" --> RETNET["処理終了（SOD発行なし）"]
      S5 -- "No" --> S6["ダイヤルアップ、マルチセッションなど各種オプション照会/判定"]
        S6 --> S7["必要に応じて同一処理番号採番"]
        S7 --> S8["addSOD/オプションSOD発行"]
    IF1 -- "No" --> IF2{"svc_kind=モバイル"}
      IF2 -- "Yes" --> S9["WiFiスポット・eモバイル等の分岐判定とオーダ発行"]
      IF2 -- "No" --> IF3{"svc_kind=電話"}
        IF3 -- "Yes" --> S10["光電話等の中断判定・050オプション等の判定・オーダ発行"]
        IF3 -- "No" --> RETNET

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

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

- svc_kindがネット/ADSL/フレッツの場合はマンションタイプ判定
- ダイヤルアップ/フェムトセル/固定IP/マルチセッション等全オプションごとに判定・SOD発行
- モバイル系はWiFiスポット・eモバイル・WiMAXごとに判定とSOD発行
- 電話系は050オプション・発信者番号通知・転送電話等の判定と複雑なSOD発行
- オプション利用開始前・オプション未紐付・未反映予約・複数内訳等、全てのパターンを分岐

---

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

| No | パラメータ名   | 型                        | 業務説明                    |
|----|---------------|---------------------------|-----------------------------|
| 1  | handle        | SessionHandle             | セッション管理ハンドル      |
| 2  | param         | IRequestParameterReadWrite| 業務データコンテナ          |
| 3  | fixedText     | String                    | 固定テキスト                |
| 4  | sodMap        | HashMap<String, Object>   | SOD関連情報                 |

---

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

| CRUD | SC メソッド         | SCコード   | エンティティ             | 操作説明                                     |
|------|---------------------|------------|--------------------------|----------------------------------------------|
| R    | callEKK0351B010SC   | EKK0351    | オプションサービス契約   | オプションサービス契約一覧照会               |
| R    | callEKK0161A010SC   | EKK0161    | サービス契約内訳         | サービス契約内訳一意照会                     |
| R    | callEKK0191A010SC   | EKK0191    | サービス契約内訳＜eo光電話＞ | サービス契約内訳＜eo光電話＞一意照会      |
| R    | callEKK0351A010SC   | EKK0351    | オプションサービス契約   | オプションサービス契約一意照会               |
| R    | callEKK0161B003SC   | EKK0161    | サービス契約内訳         | サービス契約内訳一覧照会（SYSID）            |
| R    | callEKK0081B004SC   | EKK0081    | サービス契約             | サービス契約一覧照会（SYSID）                |
| R    | callEKK1081B001SC   | EKK1081    | オーダ発行条件           | オーダ発行条件一覧照会                       |
| R    | callEKK1081C011SC   | EKK1081    | 同一処理番号             | 同一処理番号取得                             |
| R    | callEKK0351B002SC   | EKK0351    | オプションサービス契約   | オプションサービス契約一覧照会（サービス契約番号） |
| R    | callEKK0361A010SC   | EKK0361    | オプションサービス契約＜ISP＞ | オプションサービス契約＜ISP＞一意照会   |

---

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

| # | メッセージID | 種別 | 利用コンテキスト   |
|---|--------------|------|-------------------|
| 1 | -            | Error | 各statusCode≠0時 |

---

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

**起点：**

- bmpSwitchOdrCtrl → stpUkOdrCtrl
- useStpOdrCtrl → stpUkOdrCtrl
- kaihkOdrCtrl → stpUkOdrCtrl
- hakkoSOD → stpUkOdrCtrl

**呼出パス例：**

```
hakkoSOD → stpUkOdrCtrl → callEKK0351B010SC [R] → EKK0351
```

**終端:**

| SC メソッド           | CRUD | エンティティ                       |
|----------------------|------|------------------------------------|
| callEKK0351B010SC    | R    | オプションサービス契約             |
| callEKK0161A010SC    | R    | サービス契約内訳                   |
| callEKK0191A010SC    | R    | サービス契約内訳＜eo光電話＞        |
| callEKK0351A010SC    | R    | オプションサービス契約             |
| callEKK0161B003SC    | R    | サービス契約内訳一覧                |
| callEKK0081B004SC    | R    | サービス契約一覧                    |
| callEKK1081B001SC    | R    | オーダ発行条件                     |
| callEKK1081C011SC    | R    | 同一処理番号                       |
| callEKK0351B002SC    | R    | オプションサービス契約             |
| callEKK0361A010SC    | R    | オプションサービス契約＜ISP＞       |

---

---

#### ※以下、他のメソッドも同様のフォーマットで続きます。ご要望あれば続きの8メソッドも出力します。

---

### taiikiSeigenOdrCtrl()

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

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


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

---

#### 1. 役割

帯域制限の設定・解除に関するオーダ制御処理を行う業務メソッド。サービス契約やオプション契約、コース変更中かどうか等の情報を多段階で取得・判定して、必要なSODを登録します。<citation>4</citation>

---

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

```mermaid
flowchart TD
  START["taiikiSeigenOdrCtrl(handle, param, sodMap)"] 
  START --> S1["Step1: sodMapからSOD基本情報・サービス契約情報・サービス契約内訳情報を取得"]
  S1 --> S2["Step2: 各情報をshkkaMapで初期化"]
  S2 --> S3["Step3: サービス種別判定（jdgSvcKind）"]
  S3 --> IF1{"svc_kindがSVC_KIND_NET以外"}
  IF1 -- "Yes" --> RET1["return param"]
  IF1 -- "No" --> IF2{"svc_kei_stat==SVC_KEI_STAT_910 && KEI_SVC_CTL_YOKYU_ODR_SKCDの条件成立"}
  IF2 -- "Yes" --> RET2["return param"]
  IF2 -- "No" --> S4["Step4: サービス契約内訳リスト取得"]
  S4 --> S5["Step5: オプションサービス契約取得"]
  S5 --> S6["Step6: 同一処理番号取得"]
  S6 --> S7["Step7: SOD登録(ODR_NAIYO_CD_103)"]
  S7 --> S8["Step8: 旧VR識別判定用サービス詳細コード取得"]
  S8 --> S9["Step9: SOD登録(ODR_NAIYO_CD_105)"]
  S9 --> S10["Step10: サービス契約一意照会"]
  S10 --> IF3{"fixipad_flgまたはKOTEI_IP_AD_8_DIVが空でない"}
  IF3 -- "Yes" --> S11["SOD登録(ODR_NAIYO_CD_153)"]
  IF3 -- "No" --> IF4{"mltise_flg && !fixipad_flg"}
  IF4 -- "Yes" --> S12["SOD登録(ODR_NAIYO_CD_142)"]
  IF4 -- "No" --> IF5{"mltise_flg && fixipad_flg"}
  IF5 -- "Yes" --> S13["SOD登録(ODR_NAIYO_CD_145), SOD登録(ODR_NAIYO_CD_161)"]
  IF5 -- "No" --> IF6{"svc_kei_stat==SVC_KEI_STAT_210またはSVC_KEI_STAT_220"}
  IF6 -- "Yes" --> S14["SOD登録(ODR_NAIYO_CD_106)"]
  IF6 -- "No" --> IF7{"svc_kei_stat==SVC_KEI_STAT_210またはSVC_KEI_STAT_220 && mltise_flg && fixipad_flg"}
  IF7 -- "Yes" --> S15["SOD登録(ODR_NAIYO_CD_170)"]
  IF7 -- "No" --> RET3["return param"]
  S11 --> RET3
  S12 --> RET3
  S13 --> RET3
  S14 --> RET3
  S15 --> RET3

  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
```

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

| # | 条件 | 定数値/補足 | 分岐先 |
|---|------|--------|--------|
| 1 | !JKKHakkoSODConstCC.SVC_KIND_NET.equals(svc_kind) | "01":ネット以外 | return param |
| 2 | SVC_KEI_STAT_910かつKEI_SVC_CTL_YOKYU_ODR_SKCDの条件 |  | return param |
| 3 | fixipad_flg || !"".equals(KOTEI_IP_AD_8_DIV) | 固定IP系 | SOD登録(153) |
| 4 | mltise_flg && !fixipad_flg | マルチセッション（固定IPなし） | SOD登録(142) |
| 5 | mltise_flg && fixipad_flg | マルチセッション（固定IPあり） | SOD登録(145,161) |
| 6 | SVC_KEI_STAT_210または220 | サービス状態 | SOD登録(106) |
| 7 | SVC_KEI_STAT_210または220 && mltise_flg && fixipad_flg | サービス状態＋オプション | SOD登録(170) |

---

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

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

---

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

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

---

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

**起点:**
- hakkoSOD → taiikiSeigenOdrCtrl

**呼出パス:**

```
hakkoSOD → taiikiSeigenOdrCtrl → callEKK1681B001SC / callEKK0161B004SC / callEKK0091A010_SC / callEKK1081C011SC / callEKK0361A010SC
```

**終端:**

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

---

---

### takeCurrentSvcKeiUcwk()

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

```
takeCurrentSvcKeiUcwk() ← 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]
├── opHktgiOdrCtrl()
│   └── hakkoSOD()
└── 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 HashMap<String, Object> takeCurrentSvcKeiUcwk(HashMap<String, Object> resultHashUcwk)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

EKK0161B004サービス契約内訳一覧照会S-IFの実行結果から、カレント（有効）のサービス契約内訳データを選択し返却する。コース変更等でサービス契約番号が追加された場合も最新（内訳番号が最大）のレコードを取得する業務用メソッド。

---

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

```mermaid
flowchart TD
  START["takeCurrentSvcKeiUcwk(resultHashUcwk)"] --> S1["resultHashUcwkからmsgList取得"]
  S1 --> LOOP1["msgListを昇順でループ"]
  LOOP1 --> S2["各msgでgetMsgData()取得"]
  S2 --> IF1{"SVC_KEI_UCWK_STATが910未満か"}
  IF1 -- "Yes: 有効データ" --> S3["breakし現在のretHashを返却"]
  IF1 -- "No: ループ継続" --> S2
  S3 --> RET["retHash返却"]
  style IF1 fill:#ffcc00
```

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

1. `resultHashUcwk.get(JKKHakkoSODConstCC.TEMPLATE_ID_EKK0161B004)` でmsgList取得
2. msgListを昇順でループし、各msgからgetMsgData()でデータ取得
3. `SVC_KEI_UCWK_STAT`が910未満（解約済・キャンセル済でない）データをカレントとして選出し返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `JKKHakkoSODConstCC.SVC_KEI_STAT_910.compareTo(svcKeiUcwkStat) > 0` | 910未満 | breakして返却 |
| 2 | 上記以外 | - | ループ継続 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | resultHashUcwk | HashMap<String, Object> | サービス契約内訳一覧照会の実行結果 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | データ選択のみ |

---

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

該当データなし

---

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

**起点:**

- hakkoSOD → takeCurrentSvcKeiUcwk
- opSetOdrCtrl → takeCurrentSvcKeiUcwk
- htelNoInfoChgeOdrCtrl → takeCurrentSvcKeiUcwk
- 他、多数

**呼出パス:**

```
hakkoSOD → takeCurrentSvcKeiUcwk
opSetOdrCtrl → takeCurrentSvcKeiUcwk
...
```

**終端 (End Points):**

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

---

---

### telNoChge()

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

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


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

---

#### 1. 役割

光電話番号の変更に伴う一連のオーダ登録・情報照会・例外処理・SOD業務登録までを一括で制御するメイン業務メソッド。サービス契約・内訳・機器・オプションなど複数オブジェクトを横断的に連携。

---

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

```mermaid
flowchart TD
  START["telNoChge(handle, param, fixedText, sodMap, mode)"] 
    --> S1["sodMapからサービス契約/内訳/オプション情報Map取得"]
    --> S2["shkkaMapでnullチェック・初期化"]
    --> S3["契約番号取得、内訳番号取得、各世代登録日時取得"]
    --> S4["callEKK0161A010SC: サービス契約内訳一意照会"]
    --> IF1{"statusCode == 0"}
    IF1 -- "No" --> THROW1["例外スロー"]
    IF1 -- "Yes" --> S5["callEKK0191A010SC: eo光電話用内訳一意照会"]
    S5 --> IF2{"statusCode == 0"}
    IF2 -- "No" --> THROW2["例外スロー"]
    IF2 -- "Yes" --> S6["callEKK0341B008SC/02SC: 機器提供サービス契約一覧照会（通常/交換中）"]
    S6 --> IF3{"statusCode == 0"}
    IF3 -- "No" --> THROW3["例外スロー"]
    IF3 -- "Yes" --> S7["オプション契約一覧照会、050有無判定、各種SOD, TakinoSOD, OLS設定・オーダ登録"]
    S7 --> S8["複数forループ オプション・機器毎の判定、必要なSOD発行"]
    S8 --> S9["緊急通報、ENUM設定・SIP登録/消去、番号置換など必要なSOD分岐登録"]
    S9 --> RETURN["param返却"]
    style IF1 fill:#ffcc00
    style IF2 fill:#ffcc00
    style IF3 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | callEKK0161A010SC戻り値0以外 | - | 例外スロー |
| 2 | callEKK0191A010SC戻り値0以外 | - | 例外スロー |
| 3 | callEKK0341B008SC/02SC戻り値0以外 | - | 例外スロー |
| 4 | 各種契約/機器/オプション情報有無 | - | SOD発行・TakinoSOD発行・OLS設定分岐 |
| 5 | モード＝HTEL_CHNG等 | 定数値 | 光電話SIP一時停止またはSIP・ENUM登録/消去分岐 |
| 6 | 050オプション有無 | - | 置換・消去SOD発行 |
| 7 | ENUM設定・消去要否 | - | SOD/ENUM発行有無判定 |
| 8 | その他多数分岐 | - | 各種分岐先（例外/正常） |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | handle | SessionHandle | セッション管理ハンドル |
| 2 | param | IRequestParameterReadWrite | 業務データパラメータ |
| 3 | fixedText | String | 固定文字列（業務ロジックで利用） |
| 4 | sodMap | HashMap<String,Object> | SOD関連情報マップ |
| 5 | mode | String | 電話番号変更区分 |

---

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

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

---

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

**起点:** hakkoSOD、bmpSwitchOdrCtrl

**呼出パス:**
```
hakkoSOD → telNoChge → [各種情報取得・SOD登録]
bmpSwitchOdrCtrl → telNoChge
```

**終端:**

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

---

---

### useStpOdrCtrl()

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

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


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

---

#### 1. 役割

利用停止（中断）オーダ制御処理。サービス契約の種別判定後、ネット・モバイル・電話のいずれかの利用停止制御メソッドへディスパッチする。

---

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

```mermaid
flowchart TD
  START["useStpOdrCtrl(handle, param, fixedText, sodMap)"] --> S1["Step1: サービス種別判定 (jdgSvcKind)"]
  S1 --> IF1{"svc_kindがNET/MOB/TEL/ADSL/FLET'S"}
  IF1 -- "Yes" --> S2["Step2: stpUkOdrCtrl呼び出し"]
  S2 --> RET["return"]
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `JKKHakkoSODConstCC.SVC_KIND_NET.equals(svc_kind) || JKKHakkoSODConstCC.SVC_KIND_MOB.equals(svc_kind) || JKKHakkoSODConstCC.SVC_KIND_TEL.equals(svc_kind) || JKKHakkoSODConstCC.SVC_KIND_ADSL.equals(svc_kind) || JKKHakkoSODConstCC.SVC_KIND_FLETS.equals(svc_kind)` |  | stpUkOdrCtrl |
| 2 | else |  | 何もせずreturn |

---

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

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

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| R | callEKK0351B010SC | EKK0351 | オプションサービス契約一覧照会 |
| R | callEKK0161A010SC | EKK0161 | サービス契約内訳一意照会 |
| R | callEKK0191A010SC | EKK0191 | サービス契約内訳<eo光電話>一意照会 |
| R | callEKK0351A010SC | EKK0351 | オプションサービス契約一意照会 |
| R | callEKK0161B003SC | EKK0161 | サービス契約内訳一覧照会（SYSID） |
| R | callEKK0081B004SC | EKK0081 | サービス契約一覧照会（SYSID） |
| R | callEKK1081B001SC | EKK1081 | オーダ発行条件一覧照会 |
| R | callEKK1081C011SC | EKK1081 | 同一処理番号取得 |
| R | callEKK0351B002SC | EKK0351 | オプションサービス契約一覧照会 |
| R | callEKK0361A010SC | EKK0361 | オプションサービス契約＜ISP＞一意照会 |

---

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

**起点:**

- hakkoSOD → useStpOdrCtrl

**呼出パス:**

```
hakkoSOD → useStpOdrCtrl → stpUkOdrCtrl → [各SC呼出]
```

**終端:**  
各SC呼出先

---

---

