#  業務ロジック  Part 4/12

### editErrorInfo_EKK0161B004CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0161B004CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

「サービス契約内訳一覧照会」SC実行後、レスポンスCAANMsgに含まれるエラー情報（ステータスやエラーメッセージ等）をIRequestParameterReadWrite（param）へ格納する。  
業務のエラーハンドリング基盤として利用され、SCの状態/エラーを業務アプリケーションに伝達する。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0161B004CBS(param, templates, returnCode)"] --> S1["1. ステータス取得 template.getInt(EKK0161B004CBSMsg.STATUS)"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["2. メッセージ取得 JCMAPLConstMgr.getString('RETURN_MESSAGE_' + formatStatus)"]
  S2 --> IF2{"JCMAPLConstMgr.getString == null"}
  IF2 -- "Yes" --> S3["3. formatStatus = String.format('%1$04d', templateStatus)"]
  IF2 -- "No" --> S4["4. param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S3 --> S4
  S4 --> S5["5. param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S5 --> S6["6. param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
  S6 --> IF3{"inMap == null"}
  IF3 -- "Yes" --> S7["新規inMap生成"]
  IF3 -- "No" --> S8["既存inMap利用"]
  S7 --> S9
  S8 --> S9
  S9["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap)"] --> IF4{"!template.isNull(EKK0161B004CBSMsg.KEY_SVC_KEI_NO_ERR)"}
  IF4 -- "Yes" --> IF5{"!inMap.containsKey('svc_kei_no_err')"}
  IF5 -- "Yes" --> S10["inMap.put('svc_kei_no_err', template.getString(EKK0161B004CBSMsg.KEY_SVC_KEI_NO_ERR))"]
  IF5 -- "No" --> S11["（何もしない）"]
  IF4 -- "No" --> IF6{"!template.isNull(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR)"}
  IF6 -- "Yes" --> IF7{"!inMap.containsKey('pcrs_cd_err')"}
  IF7 -- "Yes" --> S12["inMap.put('pcrs_cd_err', template.getString(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR))"]
  IF7 -- "No" --> S13["（何もしない）"]
  IF6 -- "No" --> IF8{"!template.isNull(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR)"}
  IF8 -- "Yes" --> IF9{"!inMap.containsKey('svc_prd_flg_err')"}
  IF9 -- "Yes" --> S14["inMap.put('svc_prd_flg_err', template.getString(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR))"]
  IF9 -- "No" --> S15["（何もしない）"]
  IF8 -- "No" --> S16["return param"]
  S14 --> S16
  S12 --> S14
  S10 --> S12
  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 | returnCode != 0 | - | メッセージ取得処理へ |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus) == null | - | formatStatus作成 |
| 3 | inMap == null | - | 新規inMap作成 |
| 4 | !template.isNull(EKK0161B004CBSMsg.KEY_SVC_KEI_NO_ERR) | - | エラー内容格納 |
| 5 | !inMap.containsKey("svc_kei_no_err") | - | put |
| 6 | !template.isNull(EKK0161B004CBSMsg.KEY_PCRS_CD_ERR) | - | エラー内容格納 |
| 7 | !inMap.containsKey("pcrs_cd_err") | - | put |
| 8 | !template.isNull(EKK0161B004CBSMsg.KEY_SVC_PRD_FLG_ERR) | - | エラー内容格納 |
| 9 | !inMap.containsKey("svc_prd_flg_err") | - | put |
| 10 | return param | - | 正常終了 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 業務データ・エラー情報の格納先 |
| 2 | templates | CAANMsg[] | SC実行結果メッセージ配列 |
| 3 | returnCode | int | SCレスポンスのリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | なし（エラー情報のみマッピング） |

---

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

**起点 (Entry Point):**
- hakkoSOD → getSvcKeiUtwkList → editResultRP_EKK0161B004CBS → **editErrorInfo_EKK0161B004CBS**

**呼出パス:**
```
hakkoSOD → getSvcKeiUtwkList → editResultRP_EKK0161B004CBS → editErrorInfo_EKK0161B004CBS
```

**終端 (End Points):**

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

---

---

### editErrorInfo_EKK0341B002CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0341B002CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

機器提供サービス契約一覧照会（サービス契約番号）のサービスインターフェイス処理結果（エラー情報）を取得し、IRequestParameterReadWriteパラメータへエラー詳細（契約番号・サービスコード・契約番号・ソート区分）を格納する。editResultRP_EKK0341B002CBSやgetKktkSvcKeiList等から呼ばれる。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0341B002CBS(param, templates, returnCode)"] --> S1["template.getInt(EKK0341B002CBSMsg.STATUS)でSCステータス取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["String.formatで返却コード4桁化→JCMAPLConstMgr.getStringでメッセージ取得"]
  S2 --> IF2{"JCMAPLConstMgr.getString(\"RETURN_MESSAGE_\"+...) == null"}
  IF2 -- "Yes" --> S3["メッセージ空文字設定"]
  IF2 -- "No" --> S4["取得したメッセージをセット"]
  S3 --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S4 --> S5
  S5 --> S6["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S6 --> S7["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でユーザデータ取得"]
  S7 --> IF3{"inMap == null"}
  IF3 -- "Yes" --> S8["HashMap新規生成しセット"]
  IF3 -- "No" --> S9["inMapそのまま利用"]
  S8 --> S9
  S9 --> LOOP["各エラー項目(KEY_SVC_KEI_NO_ERR, KEY_KKTK_SVC_CD_ERR, KEY_KKTK_SVC_KEI_NO_ERR, KEY_SORT_KBN_ERR)について templateの該当値がnullでなければ inMap.put(エラー名, template.getString(...))"]
  LOOP --> S10["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap)"]
  S10 --> RET["return param"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

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

1. templateからSCステータス取得。
2. returnCodeが0でなければ、返却コード4桁化しメッセージ取得。なければ空文字。
3. paramへエラーコード・メッセージをセット。
4. ユーザデータinMap取得。なければ新規生成。
5. templateの各エラー項目(KEY_SVC_KEI_NO_ERR, KEY_KKTK_SVC_CD_ERR, KEY_KKTK_SVC_KEI_NO_ERR, KEY_SORT_KBN_ERR)がnullでなく、かつinMapに該当キーがなければinMapに格納。
6. paramへinMapをセット。
7. param返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | メッセージ取得 |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + ...) == null` | - | メッセージ空文字 |
| 3 | `inMap == null` | - | 新規HashMap生成 |
| 4 | `!template.isNull(KEY_SVC_KEI_NO_ERR)` | - | inMap.put実行 |
| 5 | `!template.isNull(KEY_KKTK_SVC_CD_ERR)` | - | inMap.put実行 |
| 6 | `!template.isNull(KEY_KKTK_SVC_KEI_NO_ERR)` | - | inMap.put実行 |
| 7 | `!template.isNull(KEY_SORT_KBN_ERR)` | - | inMap.put実行 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 入出力業務データコンテナ。SC結果やエラー情報を格納。 |
| 2 | templates | CAANMsg[] | SCのCAANメッセージ配列。エラー情報を含む。 |
| 3 | returnCode | int | SC呼び出しの返却コード。 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報編集のみ（CRUD操作なし） |

---

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

**起点:**
- hakkoSOD → newEoMobile → getKktkSvcKeiList → editResultRP_EKK0341B002CBS → **editErrorInfo_EKK0341B002CBS**

**呼出パス:**

```
hakkoSOD → newEoMobile → getKktkSvcKeiList → editResultRP_EKK0341B002CBS → editErrorInfo_EKK0341B002CBS（本メソッド）
```

**終端 (End Points):**
- なし（業務データ編集のみ）

---

---

### editErrorInfo_EKK0351A010CBS()

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

```
editErrorInfo_EKK0351A010CBS() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── add050AddSod()    [trực tiếp]
├── add050DelSod()    [trực tiếp]
├── callEKK0351A010SC()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── getKK0351GeneAddDtm()    [trực tiếp]
├── getKK0351Hash()    [trực tiếp]
├── getOpSvcKei4Eohtel()    [trực tiếp]
├── getOpSvcKeiGaDtm()    [trực tiếp]
├── getOpSvcKeiList()    [trực tiếp]
├── getOpSvcKeiNotDslList()    [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]
├── kaihkOdrCtrl()    [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]
├── searchOpSvcKei()    [trực tiếp]
├── stpRlsOdrCtrl()    [trực tiếp]
├── stpUkOdrCtrl()    [trực tiếp]
├── taiikiSeigenOdrCtrl()    [trực tiếp]
└── editResultRP_EKK0351A010CBS()
    ├── adchgFixOdrCtrl()
    ├── add050AddSod()
    ├── add050DelSod()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── dslOdrCtrl()
    ├── getKK0351GeneAddDtm()
    ├── getKK0351Hash()
    ├── getOpSvcKei4Eohtel()
    ├── getOpSvcKeiList()
    ├── getOpSvcKeiNotDslList()
    ├── hakkoCourseChgSOD()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── malwareBlockingDivOdrCtrl()
    ├── newKeiOdrCtrl()
    ├── opHktgiOdrCtrl()
    ├── opSetOdrCtrl()
    ├── pauseRlsChgeOdrCtrl()
    ├── pauseUkOdrCtrl()
    ├── searchOpSvcKei()
    ├── stpRlsOdrCtrl()
    ├── stpUkOdrCtrl()
    ├── taiikiSeigenOdrCtrl()
    ├── telNoChge()
    ├── useStpOdrCtrl()
    ├── useStpRlsOdrCtrl()
    ├── callEKK0351A010SC()
    │   ├── adchgFixOdrCtrl()
    │   ├── add050AddSod()
    │   ├── add050DelSod()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── cnclOdrCtrl()
    │   ├── hakkoCourseChgSOD()
    │   ├── hakkoSOD()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── malwareBlockingDivOdrCtrl()
    │   ├── pauseRlsChgeOdrCtrl()
    │   ├── pauseUkOdrCtrl()
    │   ├── stpRlsOdrCtrl()
    │   ├── stpUkOdrCtrl()
    │   ├── telNoChge()
    │   ├── useStpOdrCtrl()
    │   ├── useStpRlsOdrCtrl()
    │   ├── courseChgeOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── adchgFixOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── cnclOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── ksiDslOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── getKK0351GeneAddDtm()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── courseChgeOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── useStpRlsOdrCtrl()
    │   │   ├── hakkoCourseChgSOD()
    │   │   │   ├── adchgFixOdrCtrl()
    │   │   │   ├── courseChgeOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── malwareBlockingDivOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── pauseRlsChgeOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── pauseUkOdrCtrl()
    │   │   │   ├── hakkoSOD()
    │   │   │   ├── htelNoKaihkOdrCtrl()
    │   │   │   └── kaihkOdrCtrl()
    │   │   └── stpRlsOdrCtrl()
    │   │       ├── hakkoSOD()
    │   │       └── useStpRlsOdrCtrl()
    │   ├── getKK0351Hash()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── stpRlsOdrCtrl()
    │   │   ├── useStpOdrCtrl()
    │   │   ├── useStpRlsOdrCtrl()
    │   │   └── stpUkOdrCtrl()
    │   │       ├── bmpSwitchOdrCtrl()
    │   │       ├── hakkoSOD()
    │   │       ├── kaihkOdrCtrl()
    │   │       └── useStpOdrCtrl()
    │   ├── getOpSvcKei4Eohtel()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── stpUkOdrCtrl()
    │   │   ├── useStpOdrCtrl()
    │   │   └── htelNoDslOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── kaihkOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── opHktgiOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── opSetOdrCtrl()
    │   │   ├── cnclOdrCtrl()
    │   │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   ├── ksiDslOdrCtrl()
    │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── htelNoKaihkOdrCtrl()
    │   │       └── hakkoSOD()
    │   └── searchOpSvcKei()
    │       ├── bmpSwitchOdrCtrl()
    │       ├── cnclOdrCtrl()
    │       ├── dslOdrCtrl()
    │       ├── hakkoSOD()
    │       ├── htelNoDslOdrCtrl()
    │       ├── htelNoInfoChgeOdrCtrl()
    │       ├── htelNoKaihkOdrCtrl()
    │       ├── kaihkOdrCtrl()
    │       ├── ksiDslFixOdrCtrl()
    │       ├── ksiDslOdrCtrl()
    │       ├── opSetOdrCtrl()
    │       ├── telNoChge()
    │       ├── add050AddSod()
    │       │   ├── bmpSwitchOdrCtrl()
    │       │   ├── cnclOdrCtrl()
    │       │   ├── dslOdrCtrl()
    │       │   ├── hakkoSOD()
    │       │   ├── htelNoDslOdrCtrl()
    │       │   ├── htelNoInfoChgeOdrCtrl()
    │       │   ├── htelNoKaihkOdrCtrl()
    │       │   ├── kaihkOdrCtrl()
    │       │   ├── ksiDslFixOdrCtrl()
    │       │   ├── ksiDslOdrCtrl()
    │       │   ├── opSetOdrCtrl()
    │       │   └── telNoChge()
    │       └── add050DelSod()
    │           ├── bmpSwitchOdrCtrl()
    │           ├── cnclOdrCtrl()
    │           ├── dslOdrCtrl()
    │           ├── hakkoSOD()
    │           ├── htelNoDslOdrCtrl()
    │           ├── htelNoInfoChgeOdrCtrl()
    │           ├── htelNoKaihkOdrCtrl()
    │           ├── kaihkOdrCtrl()
    │           ├── ksiDslFixOdrCtrl()
    │           ├── ksiDslOdrCtrl()
    │           ├── opSetOdrCtrl()
    │           └── telNoChge()
    └── getOpSvcKeiGaDtm()
        ├── adchgFixOdrCtrl()
        ├── hakkoSOD()
        ├── newKeiOdrCtrl()
        ├── taiikiSeigenOdrCtrl()
        ├── getOpSvcKeiList()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   └── newKeiOdrCtrl()
        │       ├── adchgFixOdrCtrl()
        │       └── hakkoSOD()
        └── getOpSvcKeiNotDslList()
            ├── hakkoSOD()
            └── taiikiSeigenOdrCtrl()
                └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0351A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK0351A010（オプションサービス契約一意照会）サービスインターフェイス実行後のエラー情報（リターンコード、メッセージ、エラー詳細）をIRequestParameterReadWriteとユーザデータ情報にマッピングする。オプションサービス契約に対する異常時の詳細通知を実現。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0351A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> IF5{"inMap == null"}
  S6 --> IF5
  IF5 -- "Yes" --> S7["inMap初期化"]
  IF5 -- "No" --> S8["既存inMap利用"]
  S7 --> S9
  S8 --> S9
  S9 --> IF6{"!template.isNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)"}
  IF6 -- "Yes" --> IF7{"!inMap.containsKey('op_svc_kei_no_err')"}
  IF7 -- "Yes" --> S10["inMap.put('op_svc_kei_no_err', template.getString(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR))"]
  IF7 -- "No" --> S11["スキップ"]
  IF6 -- "No" --> S12["スキップ"]
  S10 --> S13
  S11 --> S13
  S12 --> S13
  S13 --> IF8{"!template.isNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR)"}
  IF8 -- "Yes" --> IF9{"!inMap.containsKey('gene_add_dtm_err')"}
  IF9 -- "Yes" --> S14["inMap.put('gene_add_dtm_err', template.getString(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR))"]
  IF9 -- "No" --> S15["スキップ"]
  IF8 -- "No" --> S16["スキップ"]
  S14 --> S17
  S15 --> S17
  S16 --> S17
  S17 --> IF10{"!template.isNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR)"}
  IF10 -- "Yes" --> IF11{"!inMap.containsKey('rsv_aply_ymd_err')"}
  IF11 -- "Yes" --> S18["inMap.put('rsv_aply_ymd_err', template.getString(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR))"]
  IF11 -- "No" --> S19["スキップ"]
  IF10 -- "No" --> S20["スキップ"]
  S18 --> S21["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap)"]
  S19 --> S21
  S20 --> S21
  S21 --> RET["return param"]
  IF1 -- "No" --> S21
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
  style IF6 fill:#ffcc00
  style IF7 fill:#ffcc00
  style IF8 fill:#ffcc00
  style IF9 fill:#ffcc00
  style IF10 fill:#ffcc00
  style IF11 fill:#ffcc00
```

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

1. SC結果のtemplateStatus取得
2. BP側RETURN_CODE取得
3. SCエラーコード判定
4. メッセージ未存在時のデフォルト値設定
5. SC/BPステータス比較（大きい方を返す）
6. inMap（ユーザデータ情報）取得・初期化
7. `op_svc_kei_no_err`, `gene_add_dtm_err`, `rsv_aply_ymd_err` の各エラーフィールドをinMapにセット（既存でなければ）
8. param.setDataで業務データ更新
9. param返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラー分岐 |
| 2 | `JCMAPLConstMgr.getString(...) == null` | - | デフォルトメッセージ |
| 3 | `obj == null` | - | システムエラー |
| 4 | `templateStatus > bpStatus` | - | SC値優先 |
| 5 | `inMap == null` | - | 初期化 |
| 6 | `!template.isNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)` | - | エラーフィールドセット |
| 7 | `!inMap.containsKey('op_svc_kei_no_err')` | - | セット |
| 8 | `!template.isNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM_ERR)` | - | エラーフィールドセット |
| 9 | `!inMap.containsKey('gene_add_dtm_err')` | - | セット |
| 10 | `!template.isNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD_ERR)` | - | エラーフィールドセット |
| 11 | `!inMap.containsKey('rsv_aply_ymd_err')` | - | セット |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

**起点:**  
- editResultRP_EKK0351A010CBS → editErrorInfo_EKK0351A010CBS
- callEKK0351A010SC → editErrorInfo_EKK0351A010CBS

**呼出パス:**

```
[外部業務クラス] → editResultRP_EKK0351A010CBS → **editErrorInfo_EKK0351A010CBS**
[外部業務クラス] → callEKK0351A010SC → **editErrorInfo_EKK0351A010CBS**
```

**終端:**

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

---### editErrorInfoEKK0361A010CBS()

---

#### 1. 役割

EKK0361A010サービスコンポーネント実行後、IRequestParameterReadWriteパラメータにエラー情報（ステータス・リターンコード・メッセージ）をマッピングする。上位BPCheck系や各種オーダ制御メソッドからSC呼出結果のエラー伝達処理として利用される。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0361A010CBS(param, templates, returnCode)"] 
    --> S1["Step1: templates[0].getInt(EKK0361A010CBSMsg.STATUS)でステータス取得"]
    --> IF1{"returnCode != 0"}
    IF1 -- "Yes" --> S2["Step2: ステータスを0に設定"]
    IF1 -- "No" --> S3["Step3: ステータスそのまま利用"]
    S2 --> S4
    S3 --> S4
    S4["Step4: param.getControlMapData(SCControlMapKeys.RETURN_CODE)でBP側リターンコード取得"]
    --> IF2{"JCMAPLConstMgr.getString(\"RETURN_MESSAGE_\" + String.format(\"%1$04d\", templateStatus)) == null"}
    IF2 -- "Yes" --> S5["Step5: メッセージにデフォルトエラー設定"]
    IF2 -- "No" --> S6["Step6: メッセージを取得"]
    S5 --> S7
    S6 --> S7
    S7["Step7: param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
    --> S8["Step8: param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
    --> RET["return param"]

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

**処理ステップ詳細:**
1. `templates[0].getInt(EKK0361A010CBSMsg.STATUS)`でSCステータス取得。
2. `returnCode != 0`ならステータスを0に強制。
3. `param.getControlMapData(SCControlMapKeys.RETURN_CODE)`でBP側リターンコード取得。
4. `"RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)`でメッセージ取得し、nullならエラーメッセージ設定。
5. 取得したコード/メッセージをparamにセット。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | ステータス0強制 |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null` | - | デフォルトエラーメッセージ設定 |
| 3 | `obj == null` | - | エラー扱い |
| 4 | `templateStatus > bpStatus` | - | ステータス上書き |
| 5 | return | - | `param`返却 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報を格納する業務パラメータ |
| 2 | templates | CAANMsg[] | サービスコンポーネントの応答情報 |
| 3 | returnCode | int | サービス呼出のリターンコード |

---

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

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

---

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

（該当データなし）

---

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

**起点 (Entry Point):**
- callEKK0361A010SC → editErrorInfoEKK0361A010CBS

**呼出パス:**
```
呼出元メソッド（例: kaihkOdrCtrl） → callEKK0361A010SC → editErrorInfoEKK0361A010CBS
```

**終端 (End Points):**

| SC メソッド | CRUD | エンティティ |
|-----------|------|-----------|
| 呼出なし | - | - |

---

---

---

### editErrorInfo_EKK0351B002CBS()

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

```
editErrorInfo_EKK0351B002CBS() ← 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]
├── callEKK0351B002SC()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── getOpSvcKei4Eohtel()    [trực tiếp]
├── getOpSvcKeiList()    [trực tiếp]
├── getOpSvcKeiNotDslList()    [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]
├── keiTtdkChuHtelnoChgeOdrCtrl()    [trực tiếp]
├── ksiDslFixOdrCtrl()    [trực tiếp]
├── ksiDslOdrCtrl()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [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]
└── editResultRP_EKK0351B002CBS()
    ├── adchgFixOdrCtrl()
    ├── addIpv6SODAft()
    ├── addTensoDenwaOp()
    ├── bmpDojiMskm()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── dslOdrCtrl()
    ├── getOpSvcKei4Eohtel()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── idpwShkkaSaifuriOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── keiTtdkChuHtelnoChgeOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── newKeiOdrCtrl()
    ├── opSetOdrCtrl()
    ├── setChgePWForDialup()
    ├── setChgePWForIPv6()
    ├── setChgePWForMltiSe()
    ├── stpRlsOdrCtrl()
    ├── stpUkOdrCtrl()
    ├── taiikiSeigenOdrCtrl()
    ├── telNoChge()
    ├── useStpOdrCtrl()
    ├── useStpRlsOdrCtrl()
    ├── callEKK0351B002SC()
    │   ├── adchgFixOdrCtrl()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── cnclOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   ├── keiTtdkChuHtelnoChgeOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── newKeiOdrCtrl()
    │   ├── stpRlsOdrCtrl()
    │   ├── stpUkOdrCtrl()
    │   ├── useStpOdrCtrl()
    │   ├── useStpRlsOdrCtrl()
    │   ├── addIpv6SODAft()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── newKeiOdrCtrl()
    │   ├── addTensoDenwaOp()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── newKeiOdrCtrl()
    │   ├── bmpDojiMskm()
    │   │   ├── hakkoSOD()
    │   │   ├── useStpRlsOdrCtrl()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── stpRlsOdrCtrl()
    │   │       ├── hakkoSOD()
    │   │       └── useStpRlsOdrCtrl()
    │   ├── courseChgeOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── adchgFixOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── cnclOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── ksiDslOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── getOpSvcKei4Eohtel()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── useStpOdrCtrl()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   │   └── hakkoSOD()
    │   │   └── stpUkOdrCtrl()
    │   │       ├── bmpSwitchOdrCtrl()
    │   │       ├── hakkoSOD()
    │   │       ├── kaihkOdrCtrl()
    │   │       └── useStpOdrCtrl()
    │   ├── 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()
    ├── getOpSvcKeiList()
    │   ├── adchgFixOdrCtrl()
    │   ├── hakkoSOD()
    │   └── newKeiOdrCtrl()
    │       ├── adchgFixOdrCtrl()
    │       └── hakkoSOD()
    └── getOpSvcKeiNotDslList()
        ├── hakkoSOD()
        └── taiikiSeigenOdrCtrl()
            └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0351B002CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サービスインターフェイス「オプションサービス契約一覧照会（サービス契約番号）」の実行結果から、エラー情報を取得し、業務パラメータ（IRequestParameterReadWrite）に格納するメソッドである。  
本メソッドは、サービスコンポーネント呼出後のエラーハンドリング・エラーマッピングに特化し、各種エラーフィールド（サービス契約番号、サービス契約内訳番号、オプションサービスコード、基準年月日）を個別に判定・格納する。  
呼び出し元はeditResultRP_EKK0351B002CBSなど多数。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0351B002CBS(param, templates, returnCode)"] 
    --> S1["Step1: templates[0]からステータス取得 template.getInt(EKK0351B002CBSMsg.STATUS)"]
    --> IF1{"returnCode != 0"}
    IF1 -- "Yes" --> S2["Step2: テンプレートステータスからメッセージ取得"]
    S2 --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + formatStatus) == null"}
    IF2 -- "Yes" --> S3["Step3: paramのRETURN_CODE, RETURN_MESSAGEをセット（デフォルトメッセージ）"]
    IF2 -- "No"  --> S4["Step4: paramのRETURN_CODE, RETURN_MESSAGEをセット（取得メッセージ）"]
    S3 --> S5
    S4 --> S5
    IF1 -- "No"  --> S6["Step5: paramからRETURN_CODE取得し、bpStatusと比較"]
    S6 --> IF3{"templateStatus > bpStatus"}
    IF3 -- "Yes" --> S7["Step6: templateStatusを優先的にRETURN_CODE, RETURN_MESSAGEにセット"]
    IF3 -- "No"  --> S8["Step7: 現状値維持"]
    S7 --> S9
    S8 --> S9
    S5 --> S9
    S9["Step8: ユーザデータマップ(param.getData)取得"]
    --> IF4{"inMap == null"}
    IF4 -- "Yes" --> S10["Step9: 新規MapをinMapとしてセット"]
    IF4 -- "No"  --> S11["Step10: 既存inMapを利用"]

    S10 --> S12
    S11 --> S12

    S12["Step11: 各エラー項目判定・セット"]
    --> IF5{"!template.isNull(EKK0351B002CBSMsg.KEY_SVC_KEI_NO_ERR)"}
    IF5 -- "Yes" --> IF6{"!inMap.containsKey('svc_kei_no_err')"}
    IF6 -- "Yes" --> S13["inMap.put('svc_kei_no_err', template.getString(KEY_SVC_KEI_NO_ERR))"]
    IF6 -- "No" --> S14["スキップ"]
    IF5 -- "No" --> S14

    S13 --> IF7{"!template.isNull(EKK0351B002CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR)"}
    S14 --> IF7
    IF7 -- "Yes" --> IF8{"!inMap.containsKey('svc_kei_ucwk_no_err')"}
    IF8 -- "Yes" --> S15["inMap.put('svc_kei_ucwk_no_err', template.getString(KEY_SVC_KEI_UCWK_NO_ERR))"]
    IF8 -- "No" --> S16["スキップ"]
    IF7 -- "No" --> S16

    S15 --> IF9{"!template.isNull(EKK0351B002CBSMsg.KEY_OP_SVC_CD_ERR)"}
    S16 --> IF9
    IF9 -- "Yes" --> IF10{"!inMap.containsKey('op_svc_cd_err')"}
    IF10 -- "Yes" --> S17["inMap.put('op_svc_cd_err', template.getString(KEY_OP_SVC_CD_ERR))"]
    IF10 -- "No" --> S18["スキップ"]
    IF9 -- "No" --> S18

    S17 --> IF11{"!template.isNull(EKK0351B002CBSMsg.KEY_BASE_YMD_ERR)"}
    S18 --> IF11
    IF11 -- "Yes" --> IF12{"!inMap.containsKey('base_ymd_err')"}
    IF12 -- "Yes" --> S19["inMap.put('base_ymd_err', template.getString(KEY_BASE_YMD_ERR))"]
    IF12 -- "No" --> S20["スキップ"]
    IF11 -- "No" --> S20

    S19 --> END["return param"]
    S20 --> END
```

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

1. templates配列の先頭要素から、EKK0351B002CBSMsg.STATUSの値（templateStatus）を取得。
2. 引数returnCodeが0でなければ、templateStatusからメッセージIDを作成しJCMAPLConstMgrからエラーメッセージを取得、paramにRETURN_CODE, RETURN_MESSAGEをセット。
   - メッセージが存在しなければデフォルトメッセージをセット。
3. returnCodeが0の場合、paramに格納されているRETURN_CODEとtemplateStatusを比較し、templateStatusが大きければそれを採用してRETURN_CODE, RETURN_MESSAGEをセット。
4. paramからユーザデータ情報マップ（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP）を取得。なければ新規作成しparamにセット。
5. template内の各エラー情報（KEY_SVC_KEI_NO_ERR, KEY_SVC_KEI_UCWK_NO_ERR, KEY_OP_SVC_CD_ERR, KEY_BASE_YMD_ERR）がnullでなければ、その値をinMapに格納。既存にキーがなければputする。
6. 最終的にparamを返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 |  | メッセージ取得・セット処理へ |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null |  | デフォルトメッセージセット |
| 3 | obj == null |  | 新規inMap作成 |
| 4 | templateStatus > bpStatus |  | templateStatusをRETURN_CODEに採用 |
| 5 | inMap == null |  | 新規inMap作成 |
| 6 | !template.isNull(EKK0351B002CBSMsg.KEY_SVC_KEI_NO_ERR) |  | svc_kei_no_errのput判定 |
| 7 | !inMap.containsKey("svc_kei_no_err") |  | put実行 |
| 8 | !template.isNull(EKK0351B002CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR) |  | svc_kei_ucwk_no_errのput判定 |
| 9 | !inMap.containsKey("svc_kei_ucwk_no_err") |  | put実行 |
| 10 | !template.isNull(EKK0351B002CBSMsg.KEY_OP_SVC_CD_ERR) |  | op_svc_cd_errのput判定 |
| 11 | !inMap.containsKey("op_svc_cd_err") |  | put実行 |
| 12 | !template.isNull(EKK0351B002CBSMsg.KEY_BASE_YMD_ERR) |  | base_ymd_errのput判定 |
| 13 | !inMap.containsKey("base_ymd_err") |  | put実行 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | リクエスト・レスポンスを格納する業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネントからの応答メッセージ配列 |
| 3 | returnCode | int | サービスコンポーネント処理のリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 本メソッドはデータ変換・エラーマッピングのみ |

---

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

| # | メッセージID | 種別 | 利用コンテキスト |
|---|-----------|------|---------------|
| 1 | RETURN_MESSAGE_xxxx | Error | ステータス番号に応じてJCMAPLConstMgrから取得されるエラーメッセージ |

---

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

**起点 (Entry Point — ルートクラスまで遡ること):**

- editResultRP_EKK0351B002CBS
- callEKK0351B002SC
- getOpSvcKeiNotDslList
- getOpSvcKeiList
- getOpSvcKei4Eohtel
- keiTtdkChuHtelnoChgeOdrCtrl
- telNoChge
- bmpDojiMskm
- setChgePWForIPv6
- setChgePWForDialup
- setChgePWForMltiSe
- addIpv6SODAft
- htelNoKaihkOdrCtrl
- opSetOdrCtrl
- courseChgeOdrCtrl
- dslOdrCtrl
- addTensoDenwaOp
- kaihkOdrCtrl
- taiikiSeigenOdrCtrl
- newKeiOdrCtrl
- htelNoDslOdrCtrl
- stpUkOdrCtrl
- bmpSwitchOdrCtrl
- stpRlsOdrCtrl
- idpwShkkaSaifuriOdrCtrl
- hakkoSOD
- htelNoInfoChgeOdrCtrl
- adchgFixOdrCtrl
- ksiDslOdrCtrl
- cnclOdrCtrl
- ksiDslFixOdrCtrl
- useStpOdrCtrl
- useStpRlsOdrCtrl

**呼出パス:**

```
[呼び出し元] → editErrorInfo_EKK0351B002CBS → [業務エラーハンドリング・マッピング]
```

**終端 (End Points):**

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

---

---

---

### editErrorInfo_EKK0351B003CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0351B003CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

オプションサービス契約履歴一覧照会（EKK0351B003CBS）のサービスIF実行後、エラー情報（RETURN_CODE, RETURN_MESSAGE, エラー原因フィールド等）をparamに格納する。  
SCからの戻り値（CAANMsg配列、returnCode等）をもとに、業務パラメータへマッピングする。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0351B003CBS(param, templates, returnCode)"] --> S1["Step1: templates[0].getInt(EKK0351B003CBSMsg.STATUS)でtemplateStatus取得"]
  S1 --> IF1{"if: returnCode != 0"}
  IF1 -- "Yes" --> S2["Step2: エラーメッセージ定義有無チェック"]
  S2 --> IF2{"if: JCMAPLConstMgr.getString('RETURN_MESSAGE_'+String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S3["Step3: param.getControlMapData(SCControlMapKeys.RETURN_CODE)"]
  IF2 -- "No" --> S4["Step4: param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S3 --> S5["Step5: Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE))"]
  S5 --> S6["Step6: param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S4 --> S6
  IF1 -- "No" --> S7["Step7: templateStatus > bpStatus判定"]
  S7 --> IF3{"if: templateStatus > bpStatus"}
  IF3 -- "Yes" --> S8["Step8: ステータス上書き"]
  IF3 -- "No" --> S9["Step9: param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得"]
  S9 --> IF4{"if: inMap == null"}
  IF4 -- "Yes" --> S10["Step10: inMap生成(param.setData)"]
  IF4 -- "No" --> S11["Step11: エラー原因フィールド取得/設定"]
  S11 --> IF5{"if: !template.isNull(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR)"}
  IF5 -- "Yes" --> S12["Step12: if: !inMap.containsKey('svc_kei_no_err')"]
  S12 -- "Yes" --> S13["Step13: inMap.put('svc_kei_no_err', template.getString(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR))"]
  S13 --> RET["return param"]
  S12 -- "No" --> RET
  IF5 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
```

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

1. CAANMsg配列からtemplateStatusを取得。
2. returnCodeが0でない場合は、エラーメッセージ定義の有無を判定。なければparamからRETURN_CODEを取得し、format。RETURN_MESSAGE再設定。
3. ステータス値比較（templateStatus > bpStatus）で必要に応じて上書き。
4. ユーザデータ情報マップ取得。なければ生成。
5. templateのKEY_SVC_KEI_NO_ERRがnullでなければ、inMapにsvc_kei_no_errフィールドを追加。
6. paramを返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラーメッセージ再設定 |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null` | - | paramからRETURN_CODE取得 |
| 3 | `templateStatus > bpStatus` | - | ステータス上書き |
| 4 | `inMap == null` | - | inMap生成 |
| 5 | `!template.isNull(EKK0351B003CBSMsg.KEY_SVC_KEI_NO_ERR)` | - | エラー原因フィールド追加 |
| 6 | `!inMap.containsKey("svc_kei_no_err")` | - | inMap.put実行 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 業務パラメータ（エラー情報格納先） |
| 2 | templates | CAANMsg[] | サービスIFレスポンスCAANMsg配列 |
| 3 | returnCode | int | サービスIFリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報編集のみ（CRUDなし） |

---

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

| # | メッセージID | 種別 | 利用コンテキスト |
|---|-----------|------|---------------|
| 1 | SCCallException | Error | SC呼出時のリターンコード異常・テンプレートステータス異常時 |

---

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

**起点:**

- editResultRP_EKK0351B003CBS → editErrorInfo_EKK0351B003CBS

**呼出パス:**

```
editResultRP_EKK0351B003CBS → editErrorInfo_EKK0351B003CBS
```

**終端:**

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

---

---

### editErrorInfo_EKK0361A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0361A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

オプションサービス契約＜ISP＞一意照会のサービスインターフェイス処理結果（エラー情報）を取得し、IRequestParameterReadWriteパラメータへエラー詳細を格納する。呼び出し元はeditResultRP_EKK0361A010CBSやgetOpSvcKeiIsp等。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0361A010CBS(param, templates, returnCode)"] --> S1["template.getInt(EKK0361A010CBSMsg.STATUS)でSCステータス取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["String.formatで返却コード4桁化→JCMAPLConstMgr.getStringでメッセージ取得"]
  S2 --> IF2{"JCMAPLConstMgr.getString(\"RETURN_MESSAGE_\"+...) == null"}
  IF2 -- "Yes" --> S3["メッセージ空文字設定"]
  IF2 -- "No" --> S4["取得したメッセージをセット"]
  S3 --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S4 --> S5
  S5 --> S6["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S6 --> S7["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でユーザデータ取得"]
  S7 --> IF3{"inMap == null"}
  IF3 -- "Yes" --> S8["HashMap新規生成しセット"]
  IF3 -- "No" --> S9["inMapそのまま利用"]
  S8 --> S9
  S9 --> IF4{"!template.isNull(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)"}
  IF4 -- "Yes" --> IF5{"!inMap.containsKey('op_svc_kei_no_err')"}
  IF5 -- "Yes" --> S10["inMap.put('op_svc_kei_no_err', template.getString(...))"]
  IF5 -- "No" --> S11["スキップ"]
  IF4 -- "No" --> S11
  S10 --> IF6{"!template.isNull(EKK0361A010CBSMsg.KEY_GENE_ADD_DTM_ERR)"}
  IF6 -- "Yes" --> IF7{"!inMap.containsKey('gene_add_dtm_err')"}
  IF7 -- "Yes" --> S12["inMap.put('gene_add_dtm_err', template.getString(...))"]
  IF7 -- "No" --> S13["スキップ"]
  IF6 -- "No" --> S13
  S12 --> S14["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap)"]
  S13 --> S14
  S11 --> S14
  S14 --> 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
```

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

1. templateからSCステータス取得。
2. returnCodeが0でなければ、返却コード4桁化しメッセージ取得。なければ空文字。
3. paramへエラーコード・メッセージをセット。
4. ユーザデータinMap取得。なければ新規生成。
5. templateのKEY_OP_SVC_KEI_NO_ERR, KEY_GENE_ADD_DTM_ERRがnullでなく、かつinMapに該当キーがなければinMapへ格納。
6. paramへinMapをセット。
7. param返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | メッセージ取得 |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + ...) == null` | - | メッセージ空文字 |
| 3 | `inMap == null` | - | 新規HashMap生成 |
| 4 | `!template.isNull(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR)` | - | inMap.put判定 |
| 5 | `!inMap.containsKey("op_svc_kei_no_err")` | - | inMap.put実行 |
| 6 | `!template.isNull(EKK0361A010CBSMsg.KEY_GENE_ADD_DTM_ERR)` | - | inMap.put判定 |
| 7 | `!inMap.containsKey("gene_add_dtm_err")` | - | inMap.put実行 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 入出力業務データコンテナ。SC結果やエラー情報を格納。 |
| 2 | templates | CAANMsg[] | SCのCAANメッセージ配列。エラー情報を含む。 |
| 3 | returnCode | int | SC呼び出しの返却コード。 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報編集のみ（CRUD操作なし） |

---

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

**起点:**
- hakkoSOD → newKeiOdrCtrl → getOpSvcKeiIsp → editResultRP_EKK0361A010CBS → **editErrorInfo_EKK0361A010CBS**

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → getOpSvcKeiIsp → editResultRP_EKK0361A010CBS → editErrorInfo_EKK0361A010CBS（本メソッド）
```

**終端 (End Points):**
- なし（業務データ編集のみ）

---

---

### editErrorInfo_EKK0401B001CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK0401B001CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

サブオプションサービス契約一覧照会におけるサービスインターフェイスの処理結果（エラー情報）を取得し、IRequestParameterReadWriteパラメータへ格納する。呼び出し元はeditResultRP_EKK0401B001CBSやgetSbOpSvcKeiListなどで、SC実行結果に応じてエラーコード・エラーメッセージ・エラー詳細を業務データに追加する。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK0401B001CBS(param, templates, returnCode)"] --> S1["template.getInt(EKK0401B001CBSMsg.STATUS)でサービスコンポーネントのステータス取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["String.formatで返却コードを4桁0埋め化し、JCMAPLConstMgr.getStringでメッセージ取得"]
  S2 --> IF2{"JCMAPLConstMgr.getString(\"RETURN_MESSAGE_\"+...) == null"}
  IF2 -- "Yes" --> S3["メッセージを空文字に設定"]
  IF2 -- "No" --> S4["取得したメッセージをセット"]
  S3 --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S4 --> S5
  S5 --> S6["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S6 --> S7["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でユーザデータ情報取得"]
  S7 --> IF3{"inMap == null"}
  IF3 -- "Yes" --> S8["HashMap新規生成しセット"]
  IF3 -- "No" --> S9["inMapをそのまま利用"]
  S8 --> S9
  S9 --> IF4{"!template.isNull(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR)"}
  IF4 -- "Yes" --> IF5{"!inMap.containsKey('op_svc_kei_no_err')"}
  IF5 -- "Yes" --> S10["inMap.put('op_svc_kei_no_err', template.getString(...))"]
  IF5 -- "No" --> S11["スキップ"]
  IF4 -- "No" --> S11
  S10 --> S12["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap)"]
  S11 --> S12
  S12 --> RET["return param"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
  style IF5 fill:#ffcc00
```

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

1. templateからSCステータスコードを取得。
2. returnCodeが0でなければ、返却コードを4桁0埋め文字列化し、JCMAPLConstMgrからエラーメッセージを取得。なければ空文字に設定。
3. paramへエラーコード（SCControlMapKeys.RETURN_CODE）とメッセージ（SCControlMapKeys.RETURN_MESSAGE）をセット。
4. ユーザデータ情報（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP）を取得。なければ新規HashMap生成。
5. templateのKEY_OP_SVC_KEI_NO_ERRがnullでなく、かつinMapに"op_svc_kei_no_err"が無ければ、inMapへセット。
6. paramへinMapを再セット。
7. paramを返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | メッセージ取得・セットへ |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null` | - | メッセージ空文字セット |
| 3 | `inMap == null` | - | 新規HashMap生成 |
| 4 | `!template.isNull(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO_ERR)` | - | エラー値セット判定 |
| 5 | `!inMap.containsKey("op_svc_kei_no_err")` | - | inMap.put実行 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 入出力業務データコンテナ。SCの業務結果やエラー情報を格納する。 |
| 2 | templates | CAANMsg[] | SCのCAANメッセージ配列。エラー情報を含む。 |
| 3 | returnCode | int | SC呼び出しの返却コード。 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報編集のみ（CRUD操作なし） |

---

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

**起点:**
- hakkoSOD → newKeiOdrCtrl → getSbOpSvcKeiList → editResultRP_EKK0401B001CBS → **editErrorInfo_EKK0401B001CBS**

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → getSbOpSvcKeiList → editResultRP_EKK0401B001CBS → editErrorInfo_EKK0401B001CBS（本メソッド）
```

**終端 (End Points):**
- なし（業務データ編集のみ）

---

---

### editErrorInfo_EKK1081C011CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK1081C011CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK1081C011サービスインターフェイスのエラー情報を取得し、IRequestParameterReadWriteオブジェクトへリターンコード・メッセージをマッピングする。SC/BPでステータス不一致時の優先処理、エラーコード未存在時のデフォルト設定など、共通的なエラー情報編集を担う。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK1081C011CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> RET["return param"]
  S6 --> RET
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. SCからステータス（templateStatus）取得
2. BP側のステータス（bpStatus, obj）取得
3. returnCode判定でエラー系処理分岐
4. メッセージ未存在時のデフォルト値設定
5. SC/BPステータス比較で大きい方を優先
6. paramへ結果格納

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラー分岐 |
| 2 | `JCMAPLConstMgr.getString(...) == null` | - | デフォルトメッセージ |
| 3 | `obj == null` | - | システムエラー |
| 4 | `templateStatus > bpStatus` | - | SC値優先 |
| 5 | それ以外 | - | BP値優先 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

**起点:**  
- editResultRP_EKK1081C011CBS → editErrorInfo_EKK1081C011CBS

**呼出パス:**

```
[外部業務クラス] → editResultRP_EKK1081C011CBS → **editErrorInfo_EKK1081C011CBS**
```

**終端:**

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

---

---

### editErrorInfo_EKK1081D010CBS()

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

```
editErrorInfo_EKK1081D010CBS() ← gọi bởi:
├── add050AddSod()    [trực tiếp]
├── add050DelSod()    [trực tiếp]
├── addSOD()    [trực tiếp]
├── addSODDupNew()    [trực tiếp]
├── addSODEmailNew()    [trực tiếp]
├── addSODFtthNew()    [trực tiếp]
├── addSODHPAccessAdd()    [trực tiếp]
├── addSODHPCapaChg()    [trực tiếp]
├── addSODHPNew()    [trực tiếp]
├── addSODMailAliasAdd()    [trực tiếp]
├── addSODMailCapaChg()    [trực tiếp]
├── addSODMListNew()    [trực tiếp]
├── addSODMRTChgRTSta()    [trực tiếp]
├── addSODTelNew()    [trực tiếp]
├── addSODTelVAChange()    [trực tiếp]
├── addSODUQWIMAXKaitoriNew()    [trực tiếp]
├── addSODUQWIMAXNew()    [trực tiếp]
├── addSODVirusChkAdd()    [trực tiếp]
├── addSODWiFiChg()    [trực tiếp]
├── addSODWiFiNew()    [trực tiếp]
├── addTakinoSOD()    [trực tiếp]
├── addTensoDenwaOp()    [trực tiếp]
├── addTokiSOD()    [trực tiếp]
├── bmpDojiMskm()    [trực tiếp]
├── bmpSipDslOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── enumAddOdrCtrl()    [trực tiếp]
├── enumDelOdrCtrl()    [trực tiếp]
├── executeOdrHakkoJokenAdd()    [trực tiếp]
├── hakkoCourseChgSOD()    [trực tiếp]
├── hakkouIpv6()    [trực tiếp]
├── htelItntokiOdrCtrl()    [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]
├── jdgOdr163()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── keiTtdkChuHtelnoChgeOdrCtrl()    [trực tiếp]
├── koteiIpAd8DivOdrCtrl()    [trực tiếp]
├── malwareBlockingDivOdrCtrl()    [trực tiếp]
├── newEoMobile()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── newNet()    [trực tiếp]
├── opHktgiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── pauseRlsChgeOdrCtrl()    [trực tiếp]
├── pauseUkOdrCtrl()    [trực tiếp]
├── rtOpChgDivOdrCtrl()    [trực tiếp]
├── setChgePWForDialup()    [trực tiếp]
├── setChgePWForIPv6()    [trực tiếp]
├── setChgePWForMltiSe()    [trực tiếp]
├── setChgePWForRouterConInfo()    [trực tiếp]
├── spotLoginSysidChgeOdrCtrl()    [trực tiếp]
├── stpRlsOdrCtrl()    [trực tiếp]
├── stpUkOdrCtrl()    [trực tiếp]
├── taiikiSeigenOdrCtrl()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── tsuikabunAddSOD()    [trực tiếp]
├── vLanIdChgOdrCtrl()    [trực tiếp]
├── vLanIdVaChangeOdrCtrl()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
└── editResultRP_EKK1081D010CBS()
    ├── adchgFixOdrCtrl()
    ├── add050AddSod()
    ├── add050DelSod()
    ├── addSOD()
    ├── addSODDupNew()
    ├── addSODEmailNew()
    ├── addSODFtthNew()
    ├── addSODHPAccessAdd()
    ├── addSODHPCapaChg()
    ├── addSODHPNew()
    ├── addSODMailAliasAdd()
    ├── addSODMailCapaChg()
    ├── addSODMListNew()
    ├── addSODMRTChgRTSta()
    ├── addSODTelNew()
    ├── addSODTelVAChange()
    ├── addSODUQWIMAXKaitoriNew()
    ├── addSODUQWIMAXNew()
    ├── addSODVirusChkAdd()
    ├── addSODWiFiChg()
    ├── addSODWiFiNew()
    ├── addTakinoSOD()
    ├── addTensoDenwaOp()
    ├── addTokiSOD()
    ├── bmpDojiMskm()
    ├── bmpSipDslOdrCtrl()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── dslOdrCtrl()
    ├── enumAddOdrCtrl()
    ├── enumDelOdrCtrl()
    ├── hakkoCourseChgSOD()
    ├── hakkoSOD()
    ├── hakkouIpv6()
    ├── htelItntokiOdrCtrl()
    ├── htelNoAddOdrCtrl()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── idpwShkkaSaifuriOdrCtrl()
    ├── jdgIpv6()
    ├── jdgOdr163()
    ├── kaihkOdrCtrl()
    ├── keiTtdkChuHtelnoChgeOdrCtrl()
    ├── koteiIpAd8DivOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── malwareBlockingDivOdrCtrl()
    ├── newEoMobile()
    ├── newKeiOdrCtrl()
    ├── newNet()
    ├── opHktgiOdrCtrl()
    ├── opSetOdrCtrl()
    ├── pauseRlsChgeOdrCtrl()
    ├── pauseUkOdrCtrl()
    ├── rtOpChgDivOdrCtrl()
    ├── setChgePWForDialup()
    ├── setChgePWForIPv6()
    ├── setChgePWForMltiSe()
    ├── setChgePWForRouterConInfo()
    ├── spotLoginSysidChgeOdrCtrl()
    ├── stpRlsOdrCtrl()
    ├── stpUkOdrCtrl()
    ├── taiikiSeigenOdrCtrl()
    ├── telNoChge()
    ├── tsuikabunAddSOD()
    ├── useStpOdrCtrl()
    ├── useStpRlsOdrCtrl()
    ├── vLanIdChgOdrCtrl()
    ├── vLanIdVaChangeOdrCtrl()
    ├── wribInfoAddOdrCtrl()
    └── executeOdrHakkoJokenAdd()
        ├── adchgFixOdrCtrl()
        ├── add050AddSod()
        ├── add050DelSod()
        ├── addSODMRTChgRTSta()
        ├── addTensoDenwaOp()
        ├── addTokiSOD()
        ├── bmpDojiMskm()
        ├── bmpSipDslOdrCtrl()
        ├── bmpSwitchOdrCtrl()
        ├── cnclOdrCtrl()
        ├── courseChgeOdrCtrl()
        ├── dslOdrCtrl()
        ├── enumAddOdrCtrl()
        ├── enumDelOdrCtrl()
        ├── hakkoCourseChgSOD()
        ├── hakkoSOD()
        ├── hakkouIpv6()
        ├── htelItntokiOdrCtrl()
        ├── htelNoAddOdrCtrl()
        ├── htelNoDslOdrCtrl()
        ├── htelNoInfoChgeOdrCtrl()
        ├── htelNoKaihkOdrCtrl()
        ├── idpwShkkaSaifuriOdrCtrl()
        ├── jdgIpv6()
        ├── jdgIpv6EKK0361A010()
        ├── jdgOdr163()
        ├── kaihkOdrCtrl()
        ├── keiTtdkChuHtelnoChgeOdrCtrl()
        ├── koteiIpAd8DivOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── malwareBlockingDivOdrCtrl()
        ├── newEoMobile()
        ├── newKeiOdrCtrl()
        ├── newNet()
        ├── opHktgiOdrCtrl()
        ├── opSetOdrCtrl()
        ├── pauseRlsChgeOdrCtrl()
        ├── pauseUkOdrCtrl()
        ├── rtOpChgDivOdrCtrl()
        ├── setChgePWForDialup()
        ├── setChgePWForIPv6()
        ├── setChgePWForMltiSe()
        ├── setChgePWForRouterConInfo()
        ├── spotLoginSysidChgeOdrCtrl()
        ├── stpRlsOdrCtrl()
        ├── stpUkOdrCtrl()
        ├── taiikiSeigenOdrCtrl()
        ├── telNoChge()
        ├── useStpOdrCtrl()
        ├── useStpRlsOdrCtrl()
        ├── vLanIdChgOdrCtrl()
        ├── vLanIdVaChangeOdrCtrl()
        ├── wribInfoAddOdrCtrl()
        ├── addSOD()
        │   ├── adchgFixOdrCtrl()
        │   ├── bmpSwitchOdrCtrl()
        │   ├── cnclOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── keiTtdkChuHtelnoChgeOdrCtrl()
        │   ├── ksiDslFixOdrCtrl()
        │   ├── ksiDslOdrCtrl()
        │   ├── newKeiOdrCtrl()
        │   ├── useStpOdrCtrl()
        │   ├── useStpRlsOdrCtrl()
        │   ├── add050AddSod()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── opSetOdrCtrl()
        │   │   └── telNoChge()
        │   ├── add050DelSod()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── opSetOdrCtrl()
        │   │   └── telNoChge()
        │   ├── addTensoDenwaOp()
        │   │   ├── adchgFixOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   └── newKeiOdrCtrl()
        │   ├── addTokiSOD()
        │   │   ├── bmpDojiMskm()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── pauseRlsChgeOdrCtrl()
        │   │   ├── pauseUkOdrCtrl()
        │   │   ├── stpRlsOdrCtrl()
        │   │   ├── stpUkOdrCtrl()
        │   │   ├── useStpOdrCtrl()
        │   │   └── useStpRlsOdrCtrl()
        │   ├── bmpDojiMskm()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── stpRlsOdrCtrl()
        │   │   └── useStpRlsOdrCtrl()
        │   ├── bmpSipDslOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── courseChgeOdrCtrl()
        │   │   ├── adchgFixOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── dslOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   └── ksiDslOdrCtrl()
        │   ├── enumAddOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── enumDelOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── hakkoCourseChgSOD()
        │   │   ├── adchgFixOdrCtrl()
        │   │   ├── courseChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelItntokiOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelNoDslOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelNoInfoChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelNoKaihkOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── idpwShkkaSaifuriOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── kaihkOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── koteiIpAd8DivOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── malwareBlockingDivOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── opHktgiOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── opSetOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   └── ksiDslOdrCtrl()
        │   ├── pauseRlsChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── pauseUkOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   └── kaihkOdrCtrl()
        │   ├── setChgePWForDialup()
        │   │   ├── hakkoSOD()
        │   │   └── idpwShkkaSaifuriOdrCtrl()
        │   ├── setChgePWForMltiSe()
        │   │   ├── hakkoSOD()
        │   │   └── idpwShkkaSaifuriOdrCtrl()
        │   ├── setChgePWForRouterConInfo()
        │   │   ├── hakkoSOD()
        │   │   └── idpwShkkaSaifuriOdrCtrl()
        │   ├── stpRlsOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   └── useStpRlsOdrCtrl()
        │   ├── stpUkOdrCtrl()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── kaihkOdrCtrl()
        │   │   └── useStpOdrCtrl()
        │   ├── taiikiSeigenOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── telNoChge()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── vLanIdChgOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── vLanIdVaChangeOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── wribInfoAddOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODDupNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        │       ├── adchgFixOdrCtrl()
        │       ├── hakkoSOD()
        │       └── newKeiOdrCtrl()
        ├── addSODEmailNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newKeiOdrCtrl()
        │   ├── newNet()
        │   └── newEoMobile()
        │       ├── adchgFixOdrCtrl()
        │       ├── hakkoSOD()
        │       └── newKeiOdrCtrl()
        ├── addSODFtthNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODHPAccessAdd()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODHPCapaChg()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODHPNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODMailAliasAdd()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODMailCapaChg()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODMListNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODTelNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── kaihkOdrCtrl()
        │   └── newKeiOdrCtrl()
        │       ├── adchgFixOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODTelVAChange()
        │   ├── hakkoSOD()
        │   └── htelNoAddOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODUQWIMAXKaitoriNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   └── newKeiOdrCtrl()
        ├── addSODUQWIMAXNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   └── newKeiOdrCtrl()
        ├── addSODVirusChkAdd()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODWiFiChg()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── spotLoginSysidChgeOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODWiFiNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   └── newKeiOdrCtrl()
        ├── addTakinoSOD()
        │   ├── adchgFixOdrCtrl()
        │   ├── addIpv6SODAft()
        │   ├── bmpSwitchOdrCtrl()
        │   ├── cnclOdrCtrl()
        │   ├── courseChgeOdrCtrl()
        │   ├── dslOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── htelNoDslOdrCtrl()
        │   ├── htelNoInfoChgeOdrCtrl()
        │   ├── htelNoKaihkOdrCtrl()
        │   ├── idpwShkkaSaifuriOdrCtrl()
        │   ├── jdgIpv6()
        │   ├── jdgIpv6EKK0361A010()
        │   ├── kaihkOdrCtrl()
        │   ├── ksiDslFixOdrCtrl()
        │   ├── ksiDslOdrCtrl()
        │   ├── newKeiOdrCtrl()
        │   ├── newNet()
        │   ├── opSetOdrCtrl()
        │   ├── setChgePWForRouterConInfo()
        │   ├── telNoChge()
        │   ├── vLanIdChgOdrCtrl()
        │   ├── vLanIdVaChangeOdrCtrl()
        │   ├── wribInfoAddOdrCtrl()
        │   ├── hakkouIpv6()
        │   │   ├── addIpv6SODAft()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── jdgIpv6()
        │   │   ├── jdgIpv6EKK0361A010()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── newKeiOdrCtrl()
        │   │   └── opSetOdrCtrl()
        │   ├── jdgOdr163()
        │   │   ├── adchgFixOdrCtrl()
        │   │   ├── courseChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── rtOpChgDivOdrCtrl()
        │       └── hakkoSOD()
        └── tsuikabunAddSOD()
            ├── adchgFixOdrCtrl()
            ├── addIpv6SODAft()
            ├── cnclOdrCtrl()
            ├── courseChgeOdrCtrl()
            ├── dslOdrCtrl()
            ├── hakkoSOD()
            ├── hakkouIpv6()
            ├── htelNoDslOdrCtrl()
            ├── htelNoInfoChgeOdrCtrl()
            ├── htelNoKaihkOdrCtrl()
            ├── idpwShkkaSaifuriOdrCtrl()
            ├── jdgIpv6()
            ├── jdgIpv6EKK0361A010()
            ├── jdgOdr163()
            ├── kaihkOdrCtrl()
            ├── ksiDslFixOdrCtrl()
            ├── ksiDslOdrCtrl()
            ├── opSetOdrCtrl()
            └── setChgePWForIPv6()
                ├── hakkoSOD()
                └── idpwShkkaSaifuriOdrCtrl()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK1081D010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

オーダ発行条件登録のサービスインターフェイス処理結果（エラー情報）を取得し、IRequestParameterReadWriteパラメータへ各種エラー詳細を格納する。主にSC実行後のeditResultRP_EKK1081D010CBSやaddSODHPAccessAdd等から呼ばれ、エラーコード・エラーメッセージ・各業務項目のエラー詳細をマッピングする。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK1081D010CBS(param, templates, returnCode)"] --> S1["template.getInt(EKK1081D010CBSMsg.STATUS)でSCステータス取得"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["String.formatで返却コード4桁化→JCMAPLConstMgr.getStringでメッセージ取得"]
  S2 --> IF2{"JCMAPLConstMgr.getString(\"RETURN_MESSAGE_\"+...) == null"}
  IF2 -- "Yes" --> S3["メッセージ空文字設定"]
  IF2 -- "No" --> S4["取得したメッセージをセット"]
  S3 --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S4 --> S5
  S5 --> S6["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S6 --> S7["param.getMappingWorkArea()取得"]
  S7 --> IF3{"workMap == null"}
  IF3 -- "Yes" --> S8["HashMap新規生成"]
  IF3 -- "No" --> S9["workMapそのまま利用"]
  S8 --> S9
  S9 --> S10["param.setMappingWorkArea(workMap)"]
  S10 --> S11["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)取得"]
  S11 --> IF4{"inMap == null"}
  IF4 -- "Yes" --> S12["HashMap新規生成"]
  IF4 -- "No" --> S13["inMapそのまま利用"]
  S12 --> S13
  S13 --> LOOP["すべてのエラーキーについて templateの該当エラー値がnullでなければ inMap.put(エラー名, template.getString(...))"]
  LOOP --> S14["param.setData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP, inMap)"]
  S14 --> RET["return param"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. templateからSCステータス取得。
2. returnCodeが0でなければ、返却コード4桁化しメッセージ取得。なければ空文字に。
3. paramへエラーコード・メッセージをセット。
4. paramからmappingWorkArea取得。なければ新規生成。
5. SC用ユーザデータinMap取得。なければ新規生成。
6. すべてのエラー項目（svc_kei_no_err, svc_kei_ucwk_no_err, ...）について、templateの該当値がnullでなければinMapへ格納。全43項目。
7. paramへinMapをセット。
8. param返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | メッセージ取得 |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + ...) == null` | - | メッセージ空文字 |
| 3 | `workMap == null` | - | 新規HashMap生成 |
| 4 | `inMap == null` | - | 新規HashMap生成 |
| 5 | `!template.isNull(各エラー項目)` | - | inMap.put実行（全43項目） |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 入出力業務データコンテナ。SC結果やエラー情報を格納。 |
| 2 | templates | CAANMsg[] | SCのCAANメッセージ配列・エラー情報含む。 |
| 3 | returnCode | int | SC呼び出しの返却コード。 |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報編集のみ（CRUD操作なし） |

---

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

**起点:**
- hakkoSOD → addSOD → editResultRP_EKK1081D010CBS → **editErrorInfo_EKK1081D010CBS**

**呼出パス:**

```
hakkoSOD → addSOD → editResultRP_EKK1081D010CBS → editErrorInfo_EKK1081D010CBS（本メソッド）
```

**終端 (End Points):**
- なし（業務データ編集のみ）

---

---

### editErrorInfo_EKK1551D010CBS()

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

```
editErrorInfo_EKK1551D010CBS() ← gọi bởi:
├── add050AddSod()    [trực tiếp]
├── add050DelSod()    [trực tiếp]
├── addSOD()    [trực tiếp]
├── addSODDupNew()    [trực tiếp]
├── addSODEmailNew()    [trực tiếp]
├── addSODFtthNew()    [trực tiếp]
├── addSODHPAccessAdd()    [trực tiếp]
├── addSODHPCapaChg()    [trực tiếp]
├── addSODHPNew()    [trực tiếp]
├── addSODMailAliasAdd()    [trực tiếp]
├── addSODMailCapaChg()    [trực tiếp]
├── addSODMListNew()    [trực tiếp]
├── addSODMRTChgRTSta()    [trực tiếp]
├── addSODTelNew()    [trực tiếp]
├── addSODTelVAChange()    [trực tiếp]
├── addSODUQWIMAXKaitoriNew()    [trực tiếp]
├── addSODUQWIMAXNew()    [trực tiếp]
├── addSODVirusChkAdd()    [trực tiếp]
├── addSODWiFiChg()    [trực tiếp]
├── addSODWiFiNew()    [trực tiếp]
├── addTakinoSOD()    [trực tiếp]
├── addTensoDenwaOp()    [trực tiếp]
├── addTokiSOD()    [trực tiếp]
├── bmpDojiMskm()    [trực tiếp]
├── bmpSipDslOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── enumAddOdrCtrl()    [trực tiếp]
├── enumDelOdrCtrl()    [trực tiếp]
├── executeOdrInfoSakseiWkAdd()    [trực tiếp]
├── hakkoCourseChgSOD()    [trực tiếp]
├── hakkouIpv6()    [trực tiếp]
├── htelItntokiOdrCtrl()    [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]
├── jdgOdr163()    [trực tiếp]
├── kaihkOdrCtrl()    [trực tiếp]
├── keiTtdkChuHtelnoChgeOdrCtrl()    [trực tiếp]
├── koteiIpAd8DivOdrCtrl()    [trực tiếp]
├── malwareBlockingDivOdrCtrl()    [trực tiếp]
├── newEoMobile()    [trực tiếp]
├── newKeiOdrCtrl()    [trực tiếp]
├── newNet()    [trực tiếp]
├── opHktgiOdrCtrl()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
├── pauseRlsChgeOdrCtrl()    [trực tiếp]
├── pauseUkOdrCtrl()    [trực tiếp]
├── rtOpChgDivOdrCtrl()    [trực tiếp]
├── setChgePWForDialup()    [trực tiếp]
├── setChgePWForIPv6()    [trực tiếp]
├── setChgePWForMltiSe()    [trực tiếp]
├── setChgePWForRouterConInfo()    [trực tiếp]
├── spotLoginSysidChgeOdrCtrl()    [trực tiếp]
├── stpRlsOdrCtrl()    [trực tiếp]
├── stpUkOdrCtrl()    [trực tiếp]
├── taiikiSeigenOdrCtrl()    [trực tiếp]
├── telNoChge()    [trực tiếp]
├── tsuikabunAddSOD()    [trực tiếp]
├── vLanIdChgOdrCtrl()    [trực tiếp]
├── vLanIdVaChangeOdrCtrl()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
└── editResultRP_EKK1551D010CBS()
    ├── adchgFixOdrCtrl()
    ├── add050AddSod()
    ├── add050DelSod()
    ├── addSOD()
    ├── addSODDupNew()
    ├── addSODEmailNew()
    ├── addSODFtthNew()
    ├── addSODHPAccessAdd()
    ├── addSODHPCapaChg()
    ├── addSODHPNew()
    ├── addSODMailAliasAdd()
    ├── addSODMailCapaChg()
    ├── addSODMListNew()
    ├── addSODMRTChgRTSta()
    ├── addSODTelNew()
    ├── addSODTelVAChange()
    ├── addSODUQWIMAXKaitoriNew()
    ├── addSODUQWIMAXNew()
    ├── addSODVirusChkAdd()
    ├── addSODWiFiChg()
    ├── addSODWiFiNew()
    ├── addTakinoSOD()
    ├── addTensoDenwaOp()
    ├── addTokiSOD()
    ├── bmpDojiMskm()
    ├── bmpSipDslOdrCtrl()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── dslOdrCtrl()
    ├── enumAddOdrCtrl()
    ├── enumDelOdrCtrl()
    ├── hakkoCourseChgSOD()
    ├── hakkoSOD()
    ├── hakkouIpv6()
    ├── htelItntokiOdrCtrl()
    ├── htelNoAddOdrCtrl()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── idpwShkkaSaifuriOdrCtrl()
    ├── jdgIpv6()
    ├── jdgOdr163()
    ├── kaihkOdrCtrl()
    ├── keiTtdkChuHtelnoChgeOdrCtrl()
    ├── koteiIpAd8DivOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── malwareBlockingDivOdrCtrl()
    ├── newEoMobile()
    ├── newKeiOdrCtrl()
    ├── newNet()
    ├── opHktgiOdrCtrl()
    ├── opSetOdrCtrl()
    ├── pauseRlsChgeOdrCtrl()
    ├── pauseUkOdrCtrl()
    ├── rtOpChgDivOdrCtrl()
    ├── setChgePWForDialup()
    ├── setChgePWForIPv6()
    ├── setChgePWForMltiSe()
    ├── setChgePWForRouterConInfo()
    ├── spotLoginSysidChgeOdrCtrl()
    ├── stpRlsOdrCtrl()
    ├── stpUkOdrCtrl()
    ├── taiikiSeigenOdrCtrl()
    ├── telNoChge()
    ├── tsuikabunAddSOD()
    ├── useStpOdrCtrl()
    ├── useStpRlsOdrCtrl()
    ├── vLanIdChgOdrCtrl()
    ├── vLanIdVaChangeOdrCtrl()
    ├── wribInfoAddOdrCtrl()
    └── executeOdrInfoSakseiWkAdd()
        ├── adchgFixOdrCtrl()
        ├── add050AddSod()
        ├── add050DelSod()
        ├── addSODMRTChgRTSta()
        ├── addTensoDenwaOp()
        ├── addTokiSOD()
        ├── bmpDojiMskm()
        ├── bmpSipDslOdrCtrl()
        ├── bmpSwitchOdrCtrl()
        ├── cnclOdrCtrl()
        ├── courseChgeOdrCtrl()
        ├── dslOdrCtrl()
        ├── enumAddOdrCtrl()
        ├── enumDelOdrCtrl()
        ├── hakkoCourseChgSOD()
        ├── hakkoSOD()
        ├── hakkouIpv6()
        ├── htelItntokiOdrCtrl()
        ├── htelNoAddOdrCtrl()
        ├── htelNoDslOdrCtrl()
        ├── htelNoInfoChgeOdrCtrl()
        ├── htelNoKaihkOdrCtrl()
        ├── idpwShkkaSaifuriOdrCtrl()
        ├── jdgIpv6()
        ├── jdgIpv6EKK0361A010()
        ├── jdgOdr163()
        ├── kaihkOdrCtrl()
        ├── keiTtdkChuHtelnoChgeOdrCtrl()
        ├── koteiIpAd8DivOdrCtrl()
        ├── ksiDslFixOdrCtrl()
        ├── ksiDslOdrCtrl()
        ├── malwareBlockingDivOdrCtrl()
        ├── newEoMobile()
        ├── newKeiOdrCtrl()
        ├── newNet()
        ├── opHktgiOdrCtrl()
        ├── opSetOdrCtrl()
        ├── pauseRlsChgeOdrCtrl()
        ├── pauseUkOdrCtrl()
        ├── rtOpChgDivOdrCtrl()
        ├── setChgePWForDialup()
        ├── setChgePWForIPv6()
        ├── setChgePWForMltiSe()
        ├── setChgePWForRouterConInfo()
        ├── spotLoginSysidChgeOdrCtrl()
        ├── stpRlsOdrCtrl()
        ├── stpUkOdrCtrl()
        ├── taiikiSeigenOdrCtrl()
        ├── telNoChge()
        ├── useStpOdrCtrl()
        ├── useStpRlsOdrCtrl()
        ├── vLanIdChgOdrCtrl()
        ├── vLanIdVaChangeOdrCtrl()
        ├── wribInfoAddOdrCtrl()
        ├── addSOD()
        │   ├── adchgFixOdrCtrl()
        │   ├── bmpSwitchOdrCtrl()
        │   ├── cnclOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── keiTtdkChuHtelnoChgeOdrCtrl()
        │   ├── ksiDslFixOdrCtrl()
        │   ├── ksiDslOdrCtrl()
        │   ├── newKeiOdrCtrl()
        │   ├── useStpOdrCtrl()
        │   ├── useStpRlsOdrCtrl()
        │   ├── add050AddSod()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── opSetOdrCtrl()
        │   │   └── telNoChge()
        │   ├── add050DelSod()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── opSetOdrCtrl()
        │   │   └── telNoChge()
        │   ├── addTensoDenwaOp()
        │   │   ├── adchgFixOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   └── newKeiOdrCtrl()
        │   ├── addTokiSOD()
        │   │   ├── bmpDojiMskm()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── pauseRlsChgeOdrCtrl()
        │   │   ├── pauseUkOdrCtrl()
        │   │   ├── stpRlsOdrCtrl()
        │   │   ├── stpUkOdrCtrl()
        │   │   ├── useStpOdrCtrl()
        │   │   └── useStpRlsOdrCtrl()
        │   ├── bmpDojiMskm()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── stpRlsOdrCtrl()
        │   │   └── useStpRlsOdrCtrl()
        │   ├── bmpSipDslOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── courseChgeOdrCtrl()
        │   │   ├── adchgFixOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── dslOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   └── ksiDslOdrCtrl()
        │   ├── enumAddOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── enumDelOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── hakkoCourseChgSOD()
        │   │   ├── adchgFixOdrCtrl()
        │   │   ├── courseChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelItntokiOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelNoDslOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelNoInfoChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── htelNoKaihkOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── idpwShkkaSaifuriOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── kaihkOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── koteiIpAd8DivOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── malwareBlockingDivOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── opHktgiOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── opSetOdrCtrl()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   └── ksiDslOdrCtrl()
        │   ├── pauseRlsChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── pauseUkOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   └── kaihkOdrCtrl()
        │   ├── setChgePWForDialup()
        │   │   ├── hakkoSOD()
        │   │   └── idpwShkkaSaifuriOdrCtrl()
        │   ├── setChgePWForMltiSe()
        │   │   ├── hakkoSOD()
        │   │   └── idpwShkkaSaifuriOdrCtrl()
        │   ├── setChgePWForRouterConInfo()
        │   │   ├── hakkoSOD()
        │   │   └── idpwShkkaSaifuriOdrCtrl()
        │   ├── stpRlsOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   └── useStpRlsOdrCtrl()
        │   ├── stpUkOdrCtrl()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── kaihkOdrCtrl()
        │   │   └── useStpOdrCtrl()
        │   ├── taiikiSeigenOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── telNoChge()
        │   │   ├── bmpSwitchOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── vLanIdChgOdrCtrl()
        │   │   └── hakkoSOD()
        │   ├── vLanIdVaChangeOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── wribInfoAddOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODDupNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        │       ├── adchgFixOdrCtrl()
        │       ├── hakkoSOD()
        │       └── newKeiOdrCtrl()
        ├── addSODEmailNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newKeiOdrCtrl()
        │   ├── newNet()
        │   └── newEoMobile()
        │       ├── adchgFixOdrCtrl()
        │       ├── hakkoSOD()
        │       └── newKeiOdrCtrl()
        ├── addSODFtthNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODHPAccessAdd()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODHPCapaChg()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODHPNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODMailAliasAdd()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODMailCapaChg()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODMListNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODTelNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── kaihkOdrCtrl()
        │   └── newKeiOdrCtrl()
        │       ├── adchgFixOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODTelVAChange()
        │   ├── hakkoSOD()
        │   └── htelNoAddOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODUQWIMAXKaitoriNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   └── newKeiOdrCtrl()
        ├── addSODUQWIMAXNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   └── newKeiOdrCtrl()
        ├── addSODVirusChkAdd()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── newNet()
        ├── addSODWiFiChg()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   ├── newKeiOdrCtrl()
        │   └── spotLoginSysidChgeOdrCtrl()
        │       └── hakkoSOD()
        ├── addSODWiFiNew()
        │   ├── adchgFixOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── newEoMobile()
        │   └── newKeiOdrCtrl()
        ├── addTakinoSOD()
        │   ├── adchgFixOdrCtrl()
        │   ├── addIpv6SODAft()
        │   ├── bmpSwitchOdrCtrl()
        │   ├── cnclOdrCtrl()
        │   ├── courseChgeOdrCtrl()
        │   ├── dslOdrCtrl()
        │   ├── hakkoSOD()
        │   ├── htelNoDslOdrCtrl()
        │   ├── htelNoInfoChgeOdrCtrl()
        │   ├── htelNoKaihkOdrCtrl()
        │   ├── idpwShkkaSaifuriOdrCtrl()
        │   ├── jdgIpv6()
        │   ├── jdgIpv6EKK0361A010()
        │   ├── kaihkOdrCtrl()
        │   ├── ksiDslFixOdrCtrl()
        │   ├── ksiDslOdrCtrl()
        │   ├── newKeiOdrCtrl()
        │   ├── newNet()
        │   ├── opSetOdrCtrl()
        │   ├── setChgePWForRouterConInfo()
        │   ├── telNoChge()
        │   ├── vLanIdChgOdrCtrl()
        │   ├── vLanIdVaChangeOdrCtrl()
        │   ├── wribInfoAddOdrCtrl()
        │   ├── hakkouIpv6()
        │   │   ├── addIpv6SODAft()
        │   │   ├── cnclOdrCtrl()
        │   │   ├── dslOdrCtrl()
        │   │   ├── hakkoSOD()
        │   │   ├── htelNoDslOdrCtrl()
        │   │   ├── htelNoInfoChgeOdrCtrl()
        │   │   ├── htelNoKaihkOdrCtrl()
        │   │   ├── jdgIpv6()
        │   │   ├── jdgIpv6EKK0361A010()
        │   │   ├── kaihkOdrCtrl()
        │   │   ├── ksiDslFixOdrCtrl()
        │   │   ├── ksiDslOdrCtrl()
        │   │   ├── newKeiOdrCtrl()
        │   │   └── opSetOdrCtrl()
        │   ├── jdgOdr163()
        │   │   ├── adchgFixOdrCtrl()
        │   │   ├── courseChgeOdrCtrl()
        │   │   └── hakkoSOD()
        │   └── rtOpChgDivOdrCtrl()
        │       └── hakkoSOD()
        └── tsuikabunAddSOD()
            ├── adchgFixOdrCtrl()
            ├── addIpv6SODAft()
            ├── cnclOdrCtrl()
            ├── courseChgeOdrCtrl()
            ├── dslOdrCtrl()
            ├── hakkoSOD()
            ├── hakkouIpv6()
            ├── htelNoDslOdrCtrl()
            ├── htelNoInfoChgeOdrCtrl()
            ├── htelNoKaihkOdrCtrl()
            ├── idpwShkkaSaifuriOdrCtrl()
            ├── jdgIpv6()
            ├── jdgIpv6EKK0361A010()
            ├── jdgOdr163()
            ├── kaihkOdrCtrl()
            ├── ksiDslFixOdrCtrl()
            ├── ksiDslOdrCtrl()
            ├── opSetOdrCtrl()
            └── setChgePWForIPv6()
                ├── hakkoSOD()
                └── idpwShkkaSaifuriOdrCtrl()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfo_EKK1551D010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

オーダ情報作成ワーク登録（EKK1551D010）のサービスインターフェイス処理結果（エラー情報）を取得し、業務パラメータ（param）に格納する。  
各種エラーフィールド（オーダ発行条件番号、オーダ内容コード、サービス契約番号、各世代登録日時等）を個別に判定・格納する。

---

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

```mermaid
flowchart TD
  START["editErrorInfo_EKK1551D010CBS(param, templates, returnCode)"] 
    --> S1["templates[0]からステータス取得 template.getInt(EKK1551D010CBSMsg.STATUS)"]
    --> IF1{"returnCode != 0"}
    IF1 -- "Yes" --> S2["メッセージID作成・JCMAPLConstMgrからメッセージ取得"]
    S2 --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + formatStatus) == null"}
    IF2 -- "Yes" --> S3["paramのRETURN_CODE, RETURN_MESSAGEをセット（デフォルトメッセージ）"]
    IF2 -- "No"  --> S4["paramのRETURN_CODE, RETURN_MESSAGEをセット（取得メッセージ）"]
    S3 --> S5
    S4 --> S5
    IF1 -- "No"  --> S6["paramからRETURN_CODE取得し、bpStatusと比較"]
    S6 --> IF3{"templateStatus > bpStatus"}
    IF3 -- "Yes" --> S7["templateStatusをRETURN_CODE, RETURN_MESSAGEにセット"]
    IF3 -- "No"  --> S8["現状値維持"]
    S7 --> S9
    S8 --> S9
    S5 --> S9
    S9["ユーザデータマップ(param.getData)取得"]
    --> IF4{"inMap == null"}
    IF4 -- "Yes" --> S10["新規MapをinMapとしてセット"]
    IF4 -- "No"  --> S11["既存inMapを利用"]
    S10 --> S12
    S11 --> S12
    S12["各エラー項目判定・セット（全54項目）"]
    --> END["return param"]
```

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

- templates配列の先頭要素から、EKK1551D010CBSMsg.STATUSの値（templateStatus）を取得。
- returnCodeが0でなければ、templateStatusからメッセージIDを作成しJCMAPLConstMgrからエラーメッセージを取得、paramにRETURN_CODE, RETURN_MESSAGEをセット。
- returnCodeが0の場合、paramに格納されているRETURN_CODEとtemplateStatusを比較し、templateStatusが大きければそれを採用してRETURN_CODE, RETURN_MESSAGEをセット。
- paramからユーザデータ情報マップ（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP）を取得。なければ新規作成しparamにセット。
- template内の全エラー情報（54項目）をnull判定し、inMapに格納。既存にキーがなければputする。
- 最終的にparamを返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 |  | メッセージ取得・セット処理へ |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null |  | デフォルトメッセージセット |
| 3 | obj == null |  | 新規inMap作成 |
| 4 | templateStatus > bpStatus |  | templateStatusをRETURN_CODEに採用 |
| 5 | inMap == null |  | 新規inMap作成 |
| 6 | !template.isNull(EKK1551D010CBSMsg.ODR_HAKKO_JOKEN_NO_ERR) |  | odr_hakko_joken_no_errのput判定 |
| 7 | !inMap.containsKey("odr_hakko_joken_no_err") |  | put実行 |
| ... | ...（全54項目） |  |  |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント応答メッセージ配列 |
| 3 | returnCode | int | サービスコンポーネント処理のリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 本メソッドはデータ変換・エラーマッピングのみ |

---

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

**起点:**
- editResultRP_EKK1551D010CBS
- executeOdrInfoSakseiWkAdd
- addSODMListNew
- addSODVirusChkAdd
- ...（全呼出元列挙）

**呼出パス:**

```
editResultRP_EKK1551D010CBS → editErrorInfo_EKK1551D010CBS
```

**終端:**

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

---

---

---

### editErrorInfoEKK0081A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK0081A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK0081A010サービスコンポーネント実行後に、IRequestParameterReadWriteへエラー情報（リターンコード・メッセージ）をマッピングする共通処理。オーダ発行・照会・状態遷移など、広範な業務制御のエラーハンドリング基盤。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0081A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> RET["return param"]
  S6 --> RET
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. SC結果のtemplateStatus取得
2. BP側RETURN_CODE取得
3. SCエラーコード判定
4. メッセージ未存在時のデフォルト値設定
5. SC/BPステータス比較（大きい方を返す）
6. param返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラー分岐 |
| 2 | `JCMAPLConstMgr.getString(...) == null` | - | デフォルトメッセージ |
| 3 | `obj == null` | - | システムエラー |
| 4 | `templateStatus > bpStatus` | - | SC値優先 |
| 5 | それ以外 | - | BP値優先 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

**起点:**  
- callEKK0081A010SC → editErrorInfoEKK0081A010CBS

**呼出パス:**

```
[外部業務クラス] → callEKK0081A010SC → **editErrorInfoEKK0081A010CBS**
```

**終端:**

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

---

---

### editErrorInfoEKK0341A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK0341A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK0341A010サービスコンポーネント実行後に、IRequestParameterReadWriteへエラー情報（リターンコード・メッセージ）をマッピングする。各種オーダ・照会系制御のエラー発生時に共通利用される。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0341A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> RET["return param"]
  S6 --> RET
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. SC結果のtemplateStatus取得
2. BP側のRETURN_CODE取得
3. returnCodeによるエラー判定・分岐
4. メッセージ未定義時は9999コード・デフォルトメッセージ設定
5. SC/BPステータス比較で大きい方を優先
6. param返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラー分岐 |
| 2 | `JCMAPLConstMgr.getString(...) == null` | - | デフォルトメッセージ |
| 3 | `obj == null` | - | システムエラー |
| 4 | `templateStatus > bpStatus` | - | SC値優先 |
| 5 | それ以外 | - | BP値優先 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

**起点:**  
- callEKK0341A010SC → editErrorInfoEKK0341A010CBS

**呼出パス:**

```
[外部業務クラス] → callEKK0341A010SC → **editErrorInfoEKK0341A010CBS**
```

**終端:**

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

---

---

### editErrorInfoEKK0361A010CBS()

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

```
editErrorInfoEKK0361A010CBS() ← gọi bởi:
├── adchgFixOdrCtrl()    [trực tiếp]
├── add050AddSod()    [trực tiếp]
├── add050DelSod()    [trực tiếp]
├── addIpv6SODAft()    [trực tiếp]
├── addSOD()    [trực tiếp]
├── addTensoDenwaOp()    [trực tiếp]
├── addTokiSOD()    [trực tiếp]
├── bmpDojiMskm()    [trực tiếp]
├── bmpSipDslOdrCtrl()    [trực tiếp]
├── bmpSwitchOdrCtrl()    [trực tiếp]
├── cnclOdrCtrl()    [trực tiếp]
├── courseChgeOdrCtrl()    [trực tiếp]
├── dslOdrCtrl()    [trực tiếp]
├── enumAddOdrCtrl()    [trực tiếp]
├── enumDelOdrCtrl()    [trực tiếp]
├── getEKK0361A010Info()    [trực tiếp]
├── hakkoCourseChgSOD()    [trực tiếp]
├── hakkoSOD()    [trực tiếp]
├── htelItntokiOdrCtrl()    [trực tiếp]
├── htelNoDslOdrCtrl()    [trực tiếp]
├── htelNoInfoChgeOdrCtrl()    [trực tiếp]
├── htelNoKaihkOdrCtrl()    [trực tiếp]
├── idpwShkkaSaifuriOdrCtrl()    [trực tiếp]
├── jdgIpv6EKK0361A010()    [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]
├── setChgePWForRouterConInfo()    [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]
├── vLanIdChgOdrCtrl()    [trực tiếp]
├── vLanIdVaChangeOdrCtrl()    [trực tiếp]
├── wribInfoAddOdrCtrl()    [trực tiếp]
└── callEKK0361A010SC()
    ├── adchgFixOdrCtrl()
    ├── add050AddSod()
    ├── add050DelSod()
    ├── addIpv6SODAft()
    ├── addTensoDenwaOp()
    ├── addTokiSOD()
    ├── bmpDojiMskm()
    ├── bmpSipDslOdrCtrl()
    ├── bmpSwitchOdrCtrl()
    ├── cnclOdrCtrl()
    ├── courseChgeOdrCtrl()
    ├── enumAddOdrCtrl()
    ├── enumDelOdrCtrl()
    ├── hakkoCourseChgSOD()
    ├── hakkoSOD()
    ├── htelItntokiOdrCtrl()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── idpwShkkaSaifuriOdrCtrl()
    ├── jdgIpv6EKK0361A010()
    ├── keiTtdkChuHtelnoChgeOdrCtrl()
    ├── koteiIpAd8DivOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── malwareBlockingDivOdrCtrl()
    ├── newKeiOdrCtrl()
    ├── pauseRlsChgeOdrCtrl()
    ├── pauseUkOdrCtrl()
    ├── setChgePWForDialup()
    ├── setChgePWForIPv6()
    ├── setChgePWForMltiSe()
    ├── setChgePWForRouterConInfo()
    ├── stpRlsOdrCtrl()
    ├── stpUkOdrCtrl()
    ├── taiikiSeigenOdrCtrl()
    ├── telNoChge()
    ├── useStpOdrCtrl()
    ├── useStpRlsOdrCtrl()
    ├── vLanIdChgOdrCtrl()
    ├── vLanIdVaChangeOdrCtrl()
    ├── addSOD()
    │   ├── adchgFixOdrCtrl()
    │   ├── bmpSwitchOdrCtrl()
    │   ├── cnclOdrCtrl()
    │   ├── dslOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── kaihkOdrCtrl()
    │   ├── keiTtdkChuHtelnoChgeOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   ├── ksiDslOdrCtrl()
    │   ├── newKeiOdrCtrl()
    │   ├── opHktgiOdrCtrl()
    │   ├── opSetOdrCtrl()
    │   ├── useStpOdrCtrl()
    │   ├── useStpRlsOdrCtrl()
    │   ├── wribInfoAddOdrCtrl()
    │   ├── add050AddSod()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── cnclOdrCtrl()
    │   │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   ├── ksiDslOdrCtrl()
    │   │   ├── opSetOdrCtrl()
    │   │   └── telNoChge()
    │   ├── add050DelSod()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── cnclOdrCtrl()
    │   │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   ├── htelNoInfoChgeOdrCtrl()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   ├── ksiDslOdrCtrl()
    │   │   ├── opSetOdrCtrl()
    │   │   └── telNoChge()
    │   ├── addTensoDenwaOp()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── newKeiOdrCtrl()
    │   │       ├── adchgFixOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── addTokiSOD()
    │   │   ├── bmpDojiMskm()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── cnclOdrCtrl()
    │   │   ├── dslOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoDslOdrCtrl()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── ksiDslFixOdrCtrl()
    │   │   ├── ksiDslOdrCtrl()
    │   │   ├── pauseRlsChgeOdrCtrl()
    │   │   ├── pauseUkOdrCtrl()
    │   │   ├── stpRlsOdrCtrl()
    │   │   ├── stpUkOdrCtrl()
    │   │   ├── useStpOdrCtrl()
    │   │   └── useStpRlsOdrCtrl()
    │   ├── bmpDojiMskm()
    │   │   ├── hakkoSOD()
    │   │   ├── stpRlsOdrCtrl()
    │   │   ├── useStpRlsOdrCtrl()
    │   │   └── bmpSwitchOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── bmpSipDslOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── courseChgeOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── adchgFixOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── enumAddOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── enumDelOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── hakkoCourseChgSOD()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── courseChgeOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── htelItntokiOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── htelNoDslOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── htelNoKaihkOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── koteiIpAd8DivOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── malwareBlockingDivOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── pauseRlsChgeOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── pauseUkOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── htelNoKaihkOdrCtrl()
    │   │   └── kaihkOdrCtrl()
    │   ├── setChgePWForDialup()
    │   │   ├── hakkoSOD()
    │   │   └── idpwShkkaSaifuriOdrCtrl()
    │   ├── setChgePWForMltiSe()
    │   │   ├── hakkoSOD()
    │   │   └── idpwShkkaSaifuriOdrCtrl()
    │   ├── setChgePWForRouterConInfo()
    │   │   ├── hakkoSOD()
    │   │   └── idpwShkkaSaifuriOdrCtrl()
    │   ├── stpRlsOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   └── useStpRlsOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── stpUkOdrCtrl()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── kaihkOdrCtrl()
    │   │   └── useStpOdrCtrl()
    │   │       └── hakkoSOD()
    │   ├── taiikiSeigenOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── telNoChge()
    │   │   ├── bmpSwitchOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── vLanIdChgOdrCtrl()
    │   │   └── hakkoSOD()
    │   └── vLanIdVaChangeOdrCtrl()
    │       └── hakkoSOD()
    ├── dslOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── cnclOdrCtrl()
    │   │   └── hakkoSOD()
    │   ├── ksiDslFixOdrCtrl()
    │   │   └── hakkoSOD()
    │   └── ksiDslOdrCtrl()
    │       └── hakkoSOD()
    ├── getEKK0361A010Info()
    │   ├── adchgFixOdrCtrl()
    │   ├── addIpv6SODAft()
    │   ├── hakkoSOD()
    │   ├── idpwShkkaSaifuriOdrCtrl()
    │   ├── kaihkOdrCtrl()
    │   ├── newKeiOdrCtrl()
    │   ├── jdgIpv6EKK0361A010()
    │   │   ├── adchgFixOdrCtrl()
    │   │   ├── hakkoSOD()
    │   │   ├── kaihkOdrCtrl()
    │   │   ├── newKeiOdrCtrl()
    │   │   └── addIpv6SODAft()
    │   │       ├── adchgFixOdrCtrl()
    │   │       ├── hakkoSOD()
    │   │       └── newKeiOdrCtrl()
    │   └── setChgePWForIPv6()
    │       ├── hakkoSOD()
    │       └── idpwShkkaSaifuriOdrCtrl()
    ├── kaihkOdrCtrl()
    │   └── hakkoSOD()
    ├── opHktgiOdrCtrl()
    │   └── hakkoSOD()
    ├── opSetOdrCtrl()
    │   ├── cnclOdrCtrl()
    │   ├── dslOdrCtrl()
    │   ├── hakkoSOD()
    │   ├── htelNoDslOdrCtrl()
    │   ├── htelNoInfoChgeOdrCtrl()
    │   ├── htelNoKaihkOdrCtrl()
    │   ├── kaihkOdrCtrl()
    │   ├── ksiDslFixOdrCtrl()
    │   └── ksiDslOdrCtrl()
    └── wribInfoAddOdrCtrl()
        └── hakkoSOD()
```


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK0361A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK0361A010サービスコンポーネント実行後に、IRequestParameterReadWriteオブジェクトへエラー情報（リターンコードおよびメッセージ）をマッピングする業務処理である。様々なオーダ制御・オーダ発行処理のエラー発生時に必ず呼ばれ、BP側にSC実行結果の詳細エラー情報を一貫した形式で通知する役割を持つ。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0361A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> RET["return param"]
  S6 --> RET
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. `template.getInt(EKK0361A010CBSMsg.STATUS)` でSC結果のステータスを取得
2. `param.getControlMapData(SCControlMapKeys.RETURN_CODE)` で現在のリターンコードを取得
3. `Integer.parseInt(...)` でbpStatusを取得
4. `String.format("%1$04d", templateStatus)` により4桁ゼロ埋めでコード生成
5. `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus)` で対応メッセージ取得
6. `param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)` でリターンコード設定
7. `param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)` で詳細メッセージ設定
8. システムエラー時は `"システムエラー"` をセット
9. SCとBPでステータスが異なる場合は大きい方をセット
10. 最終的に `param` を返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | メッセージ取得・エラー処理 |
| 2 | `JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null` | - | デフォルト値設定 |
| 3 | `obj == null` | - | システムエラー文字列設定 |
| 4 | `templateStatus > bpStatus` | - | SCステータスを優先 |
| 5 | それ以外 | - | BPステータスを優先 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

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

---

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

**起点:**

- callEKK0361A010SC → editErrorInfoEKK0361A010CBS
- getEKK0361A010Info → editErrorInfoEKK0361A010CBS

**呼出パス:**

```
[外部業務クラス] → callEKK0361A010SC → **editErrorInfoEKK0361A010CBS**（エラー情報構築）→ 業務層へ返却
```

**終端:**

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

---

---

### editErrorInfoEKK0401A010CBS()

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

```
editErrorInfoEKK0401A010CBS() ← 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()    [trực tiếp]
├── opSetOdrCtrl()    [trực tiếp]
└── callEKK0401A010SC()
    ├── cnclOdrCtrl()
    ├── dslOdrCtrl()
    ├── hakkoSOD()
    ├── htelNoDslOdrCtrl()
    ├── htelNoInfoChgeOdrCtrl()
    ├── htelNoKaihkOdrCtrl()
    ├── kaihkOdrCtrl()
    ├── ksiDslFixOdrCtrl()
    ├── ksiDslOdrCtrl()
    ├── 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:** `private IRequestParameterReadWrite editErrorInfoEKK0401A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK0401A010サービス呼出後のエラー情報をIRequestParameterReadWriteへ反映する編集処理。  
エラー発生時にコントロールマップへエラーコードとメッセージをセットする。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0401A010CBS(param, templates, returnCode)"] --> S1["template.getInt(EKK0401A010CBSMsg.STATUS)"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["JCMAPLConstMgr.getStringでエラーメッセージ取得"]
  IF1 -- "No" --> S3["正常処理"]
  S2 --> S4["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S4 --> S5["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S5 --> RET["return param"]
  S3 --> RET

  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 | - | エラー時のみエラーコード・メッセージ編集 |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus) == null | - | メッセージなし扱い |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 編集対象パラメータ |
| 2 | templates | CAANMsg[] | SCからのテンプレート配列 |
| 3 | returnCode | int | SC返却リターンコード |

---

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

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

---

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

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

---

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

**起点:**
- callEKK0401A010SC → editErrorInfoEKK0401A010CBS
- opHktgiOdrCtrl → editErrorInfoEKK0401A010CBS
- ...他、多数

**呼出パス:**
```
[callEKK0401A010SC] → [editErrorInfoEKK0401A010CBS]
```

**終端:**

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

---

---

### editErrorInfoEKK0411A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK0411A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK0411A010サービス呼出後に返却されたエラー情報をIRequestParameterReadWriteへ反映する編集処理。  
SCの実行結果（エラー発生時）に基づき、コントロールマップへ適切なエラーコード・エラーメッセージをセットする。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0411A010CBS(param, templates, returnCode)"] --> S1["template.getInt(EKK0411A010CBSMsg.STATUS)"]
  S1 --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S2["JCMAPLConstMgr.getStringでエラーメッセージ取得"]
  IF1 -- "No" --> S3["正常処理"]
  S2 --> S4["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S4 --> S5["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S5 --> RET["return param"]
  S3 --> RET

  style IF1 fill:#ffcc00
```

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 | - | エラー時のみエラーコード・メッセージ編集 |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus) == null | - | メッセージなし扱い |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | 編集対象パラメータ |
| 2 | templates | CAANMsg[] | SCからのテンプレート配列 |
| 3 | returnCode | int | SC返却リターンコード |

---

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

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

---

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

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

---

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

**起点:**
- callEKK0411A010SC → editErrorInfoEKK0411A010CBS
- opSetOdrCtrl → editErrorInfoEKK0411A010CBS
- ...他、多数

**呼出パス:**
```
[callEKK0411A010SC] → [editErrorInfoEKK0411A010CBS]
```

**終端:**

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

---

---

### editErrorInfoEKK0881A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK0881A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

**EKK0881A010サービス実行後、IRequestParameterReadWriteにエラー情報（ステータス、エラーメッセージ）をマッピングする処理。**
SC呼出後のテンプレート内容やreturnCodeをもとに、業務パラメータにエラー関連情報を設定する。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0881A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S1["templateStatus = template.getInt(EKK0881A010CBSMsg.STATUS)"]
  S1 --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + format(templateStatus)) == null"}
  IF2 -- "Yes" --> S2["独自メッセージを設定"]
  IF2 -- "No" --> S3["既存メッセージを設定"]
  S2 --> IF3{"obj == null"}
  S3 --> IF3
  IF3 -- "Yes" --> S4["エラー時のデフォルト処理"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["templateStatusを優先して設定"]
  IF4 -- "No" --> S6["bpStatusを優先して設定"]
  S4 --> RET["return param"]
  S5 --> RET
  S6 --> RET
  IF1 -- "No" --> RET

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 | - | エラー処理分岐 |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null | - | 独自メッセージ設定 |
| 3 | obj == null | - | デフォルトエラー処理 |
| 4 | templateStatus > bpStatus | - | templateStatus優先設定 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報をマッピングするパラメータ |
| 2 | templates | CAANMsg[] | SC実行結果のテンプレート配列 |
| 3 | returnCode | int | SC実行の戻りコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報のマッピングのみ |

---

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

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

---

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

**起点 (Entry Point):**
- callEKK0881A010_SC
- getDammyPplanCd
- malwareBlockingDivOdrCtrl
- koteiIpAd8DivOdrCtrl
- hakkoSOD

**呼出パス:**

```
callEKK0881A010_SC → editErrorInfoEKK0881A010CBS
getDammyPplanCd → editErrorInfoEKK0881A010CBS
malwareBlockingDivOdrCtrl → editErrorInfoEKK0881A010CBS
koteiIpAd8DivOdrCtrl → editErrorInfoEKK0881A010CBS
hakkoSOD → editErrorInfoEKK0881A010CBS
```

**終端 (End Points):**

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

---

---

### editErrorInfoEKK0891A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK0891A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

**EKK0891A010サービス実行後、IRequestParameterReadWriteにエラー情報（コード・メッセージ）をマッピングする処理。**
サービスの実行結果（ステータスコード）を元に、業務パラメータへエラーコード・メッセージを設定する。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK0891A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S1["templateStatus = template.getInt(EKK0891A010CBSMsg.STATUS)"]
  S1 --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + format(templateStatus)) == null"}
  IF2 -- "Yes" --> S2["独自メッセージを設定"]
  IF2 -- "No" --> S3["既存メッセージを設定"]
  S2 --> IF3{"obj == null"}
  S3 --> IF3
  IF3 -- "Yes" --> S4["エラー時のデフォルト処理"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["templateStatusを優先して設定"]
  IF4 -- "No" --> S6["bpStatusを優先して設定"]
  S4 --> RET["return param"]
  S5 --> RET
  S6 --> RET
  IF1 -- "No" --> RET

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 | - | エラー処理分岐 |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null | - | 独自メッセージ設定 |
| 3 | obj == null | - | デフォルトエラー処理 |
| 4 | templateStatus > bpStatus | - | templateStatus優先設定 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報をマッピングするパラメータ |
| 2 | templates | CAANMsg[] | SC実行結果のテンプレート配列 |
| 3 | returnCode | int | SC実行の戻りコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報のマッピングのみ |

---

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

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

---

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

**起点 (Entry Point):**
- callEKK0891A010_SC
- koteiIpAd8DivOdrCtrl
- malwareBlockingDivOdrCtrl
- hakkoSOD

**呼出パス:**

```
callEKK0891A010_SC → editErrorInfoEKK0891A010CBS
koteiIpAd8DivOdrCtrl → editErrorInfoEKK0891A010CBS
malwareBlockingDivOdrCtrl → editErrorInfoEKK0891A010CBS
hakkoSOD → editErrorInfoEKK0891A010CBS
```

**終端 (End Points):**

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

---

---

### editErrorInfoEKK1081C011CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private IRequestParameterReadWrite editErrorInfoEKK1081C011CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EKK1081C011サービス実行後、IRequestParameterReadWriteのエラー情報（リターンコード／メッセージ）を編集し、業務層にSCエラー状態を一貫した方式で伝達する。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEKK1081C011CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> RET["return param"]
  S6 --> RET
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. SC結果のtemplateStatus取得
2. BP側RETURN_CODE取得
3. SCエラーコード判定
4. メッセージ未存在時のデフォルト値設定
5. SC/BPステータス比較（大きい方を返す）
6. param返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラー分岐 |
| 2 | `JCMAPLConstMgr.getString(...) == null` | - | デフォルトメッセージ |
| 3 | `obj == null` | - | システムエラー |
| 4 | `templateStatus > bpStatus` | - | SC値優先 |
| 5 | それ以外 | - | BP値優先 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

**起点:**  
- callEKK1081C011SC → editErrorInfoEKK1081C011CBS

**呼出パス:**

```
[外部業務クラス] → callEKK1081C011SC → **editErrorInfoEKK1081C011CBS**
```

**終端:**

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

---

---

### editErrorInfoEZM0321A010CBS()

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

```
editErrorInfoEZM0321A010CBS() ← 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 IRequestParameterReadWrite editErrorInfoEZM0321A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

**EZM0321A010サービス実行後、IRequestParameterReadWriteにエラー情報（ステータス、エラーメッセージ）をマッピングする処理。**
SC呼出後のテンプレートの内容やreturnCodeをもとに、業務パラメータにエラー関連情報を設定する。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEZM0321A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> S1["templateStatus = template.getInt(EZM0321A010CBSMsg.STATUS)"]
  S1 --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + format(templateStatus)) == null"}
  IF2 -- "Yes" --> S2["独自メッセージを設定"]
  IF2 -- "No" --> S3["既存メッセージを設定"]
  S2 --> IF3{"obj == null"}
  S3 --> IF3
  IF3 -- "Yes" --> S4["エラー時のデフォルト処理"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["templateStatusを優先して設定"]
  IF4 -- "No" --> S6["bpStatusを優先して設定"]
  S4 --> RET["return param"]
  S5 --> RET
  S6 --> RET
  IF1 -- "No" --> RET

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | returnCode != 0 | - | エラー処理分岐 |
| 2 | JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null | - | 独自メッセージ設定 |
| 3 | obj == null | - | デフォルトエラー処理 |
| 4 | templateStatus > bpStatus | - | templateStatus優先設定 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報をマッピングするパラメータ |
| 2 | templates | CAANMsg[] | SC実行結果のテンプレート配列 |
| 3 | returnCode | int | SC実行の戻りコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | エラー情報のマッピングのみ |

---

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

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

---

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

**起点 (Entry Point):**
- callEZM0321A010_SC
- getDammyPplanCd
- getDummySvcKeiNo
- malwareBlockingDivOdrCtrl
- koteiIpAd8DivOdrCtrl
- hakkoSOD

**呼出パス:**

```
callEZM0321A010_SC → editErrorInfoEZM0321A010CBS
getDammyPplanCd → editErrorInfoEZM0321A010CBS
getDummySvcKeiNo → editErrorInfoEZM0321A010CBS
malwareBlockingDivOdrCtrl → editErrorInfoEZM0321A010CBS
koteiIpAd8DivOdrCtrl → editErrorInfoEZM0321A010CBS
hakkoSOD → editErrorInfoEZM0321A010CBS
```

**終端 (End Points):**

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

---

---

### editErrorInfoEZM0411A010CBS()

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

```
editErrorInfoEZM0411A010CBS() ← 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 IRequestParameterReadWrite editErrorInfoEZM0411A010CBS(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)`
> **戻り値:** `IRequestParameterReadWrite`

---

#### 1. 役割

EZM0411A010サービスコンポーネント実行後に、IRequestParameterReadWriteへエラー情報（リターンコード・メッセージ）をマッピングする標準処理。機器情報関連の照会/登録エラー時に利用。

---

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

```mermaid
flowchart TD
  START["editErrorInfoEZM0411A010CBS(param, templates, returnCode)"] --> IF1{"returnCode != 0"}
  IF1 -- "Yes" --> IF2{"JCMAPLConstMgr.getString('RETURN_MESSAGE_' + String.format('%1$04d', templateStatus)) == null"}
  IF2 -- "Yes" --> S1["param.setControlMapData(SCControlMapKeys.RETURN_CODE, '9999')"]
  IF2 -- "No" --> S2["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  S1 --> S3["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message)"]
  S2 --> S3
  S3 --> IF3{"obj == null"}
  IF3 -- "Yes" --> S4["param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, 'システムエラー')"]
  IF3 -- "No" --> IF4{"templateStatus > bpStatus"}
  IF4 -- "Yes" --> S5["param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus)"]
  IF4 -- "No" --> S6["param.setControlMapData(SCControlMapKeys.RETURN_CODE, bpStatus)"]
  S5 --> RET["return param"]
  S6 --> RET
  IF1 -- "No" --> RET
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
  style IF4 fill:#ffcc00
```

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

1. SC結果のtemplateStatus取得
2. BP側RETURN_CODE取得
3. SCエラーコード判定
4. メッセージ未存在時のデフォルト値設定
5. SC/BPステータス比較（大きい方を返す）
6. param返却

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `returnCode != 0` | - | エラー分岐 |
| 2 | `JCMAPLConstMgr.getString(...) == null` | - | デフォルトメッセージ |
| 3 | `obj == null` | - | システムエラー |
| 4 | `templateStatus > bpStatus` | - | SC値優先 |
| 5 | それ以外 | - | BP値優先 |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadWrite | エラー情報受け渡し用の業務データコンテナ |
| 2 | templates | CAANMsg[] | サービスコンポーネント出力メッセージ配列 |
| 3 | returnCode | int | SC実行で返却されたリターンコード |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | CRUD操作なし。データ変換・設定のみ |

---

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

**起点:**  
- callEZM0411A010SC → editErrorInfoEZM0411A010CBS

**呼出パス:**

```
[外部業務クラス] → callEZM0411A010SC → **editErrorInfoEZM0411A010CBS**
```

**終端:**

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

---

---

### editInMsg_EKK0081A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0081A010CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

本メソッドは「サービス契約一意照会」用のSC入力メッセージをマッピングする。  
リクエストパラメータから必要な制御情報・業務データをテンプレートへセットし、CAANMsg生成用のパラメータマップを返却する。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0081A010CBS(param)"] --> S1["paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID())"]
  S1 --> S2["paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID())"]
  S2 --> S3["paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID())"]
  S3 --> S4["paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType())"]
  S4 --> S5["paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME))"]
  S5 --> S6["paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP))"]
  S6 --> S7["paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID))"]
  S7 --> S8["paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID))"]
  S8 --> S9["template.set(EKK0081A010CBSMsg.TEMPLATEID, template_id)"]
  S9 --> S10["template.set(EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2)"]
  S10 --> S11["editBasicCmn(param, template)"]
  S11 --> S12["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得"]
  S12 --> IF1{"inMap==null or svc_kei_no==null or empty?"}
  IF1 -- "Yes" --> S13["template.setNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO)"]
  IF1 -- "No" --> S14["template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, inMap.get('svc_kei_no'))"]
  S13 --> S15
  S14 --> S15
  S15 --> IF2{"inMap==null or gene_add_dtm==null or empty?"}
  IF2 -- "Yes" --> S16["template.setNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM)"]
  IF2 -- "No" --> S17["template.set(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, inMap.get('gene_add_dtm'))"]
  S16 --> S18
  S17 --> S18
  S18 --> IF3{"inMap==null or rsv_aply_ymd==null or empty?"}
  IF3 -- "Yes" --> S19["template.setNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD)"]
  IF3 -- "No" --> S20["template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, inMap.get('rsv_aply_ymd'))"]
  S19 --> S21
  S20 --> S21
  S21 --> S22["paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates)"]
  S22 --> RET["return paramMap"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | inMap==null or inMap.get("svc_kei_no")==null or "".equals(inMap.get("svc_kei_no")) | - | template.setNull(EKK0081A010CBSMsg.KEY_SVC_KEI_NO) |
| 2 | それ以外 | - | template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, ...) |
| 3 | inMap==null or inMap.get("gene_add_dtm")==null or "".equals(inMap.get("gene_add_dtm")) | - | template.setNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM) |
| 4 | それ以外 | - | template.set(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, ...) |
| 5 | inMap==null or inMap.get("rsv_aply_ymd")==null or "".equals(inMap.get("rsv_aply_ymd")) | - | template.setNull(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD) |
| 6 | それ以外 | - | template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, ...) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | リクエスト入力情報保持 |
| - | - | - | テンプレートは内部で生成・編集 |

---

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

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

---

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

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

---

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

**起点:**
- getSvcKeiInfo → editInMsg_EKK0081A010CBS
- koteiIpAd8DivOdrCtrl → editInMsg_EKK0081A010CBS
- ...他、多数

**呼出パス:**
```
[getSvcKeiInfo] → [editInMsg_EKK0081A010CBS] → [editBasicCmn]
```

**終端:**

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

---

---

### editInMsg_EKK0161B003CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0161B003CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

サービス契約内訳一覧照会（SYSID）用の上りメッセージ（CAANMsg）を生成。IRequestParameterReadOnlyからSYSIDを抽出し、SC入力メッセージへマッピングする。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0161B003CBS(param)"] --> S1["paramMapに電文ヘッダ情報put"]
  S1 --> S2["paramMapにコントロールマップ情報put"]
  S2 --> S3["EKK0161B003CBSMsg.class.getName()テンプレートID取得"]
  S3 --> S4["template.set(TEMPLATEID, template_id)"]
  S4 --> S5["template.set(FUNC_CODE, JPCModelConstant.FUNC_CD_1)"]
  S5 --> S6["editBasicCmn(param, template)で共通部設定"]
  S6 --> S7["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得"]
  S7 --> IF1{"inMap == null || inMap.get('sysid') == null || ''"}
  IF1 -- "Yes" --> S8["template.setNull(KEY_SYSID)"]
  IF1 -- "No" --> S9["template.set(KEY_SYSID, inMap.get('sysid'))"]
  S8 --> S10["paramMap.put(TEMPLATE_LIST_KEY, templates)"]
  S9 --> S10
  S10 --> RET["return paramMap"]
  style IF1 fill:#ffcc00
```

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

1. paramから電文ヘッダ・コントロールマップ情報をparamMapにput。
2. テンプレートIDをクラス名で取得しtemplateにセット。
3. templateに機能コード（一覧照会）をセット。
4. editBasicCmnで共通部設定。
5. inMapからSYSIDを取得し、空ならsetNull、値があればset。
6. paramMapへTEMPLATE_LIST_KEYでtemplatesをput。
7. paramMap返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `inMap == null || inMap.get('sysid') == null || ""` | - | template.setNull(KEY_SYSID) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | SC照会用の入力パラメータ |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 上りメッセージ生成/編集のみ |

---

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

**起点:**
- hakkoSOD → newKeiOdrCtrl → getSvcKeiUtwkListSysid → **editInMsg_EKK0161B003CBS**

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → getSvcKeiUtwkListSysid → editInMsg_EKK0161B003CBS（本メソッド）
```

**終端 (End Points):**
- なし（メッセージ編集のみ）

---

---

### editInMsg_EKK0161B004CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0161B004CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

サービス契約内訳一覧照会のための上りメッセージ（CAANMsg）を構築。IRequestParameterReadOnlyの値をもとに、サービス契約番号、料金コースコード、サービス期間中フラグ等をSC照会入力へマッピングする。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0161B004CBS(param)"] --> S1["paramMapに電文ヘッダ情報をput"]
  S1 --> S2["paramMapにコントロールマップ情報をput"]
  S2 --> S3["EKK0161B004CBSMsg.class.getName()取得→templateにセット"]
  S3 --> S4["template.set(FUNC_CODE, JPCModelConstant.FUNC_CD_1)"]
  S4 --> S5["editBasicCmn(param, template)で共通部設定"]
  S5 --> S6["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得"]
  S6 --> IF1{"inMap == null || inMap.get('svc_kei_no') == null || ''"}
  IF1 -- "Yes" --> S7["template.setNull(KEY_SVC_KEI_NO)"]
  IF1 -- "No" --> S8["template.set(KEY_SVC_KEI_NO, inMap.get('svc_kei_no'))"]
  S7 --> IF2
  S8 --> IF2
  IF2{"inMap == null || inMap.get('pcrs_cd') == null || ''"}
  IF2 -- "Yes" --> S9["template.setNull(KEY_PCRS_CD)"]
  IF2 -- "No" --> S10["template.set(KEY_PCRS_CD, inMap.get('pcrs_cd'))"]
  S9 --> IF3
  S10 --> IF3
  IF3{"inMap == null || inMap.get('svc_prd_flg') == null || ''"}
  IF3 -- "Yes" --> S11["template.setNull(KEY_SVC_PRD_FLG)"]
  IF3 -- "No" --> S12["template.set(KEY_SVC_PRD_FLG, inMap.get('svc_prd_flg'))"]
  S11 --> S13["paramMap.put(TEMPLATE_LIST_KEY, templates)"]
  S12 --> S13
  S13 --> RET["return paramMap"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
  style IF3 fill:#ffcc00
```

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

1. paramから電文ヘッダ・コントロールマップ情報をparamMapにput。
2. テンプレートIDをクラス名で取得しtemplateにセット。
3. 機能コード（一覧照会）をセット。
4. editBasicCmnで共通部設定。
5. inMapからサービス契約番号・料金コースコード・サービス期間中フラグを取得し、空ならsetNull、値があればset。
6. paramMapへTEMPLATE_LIST_KEYでtemplatesをput。
7. paramMap返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `inMap == null || inMap.get('svc_kei_no') == null || ""` | - | template.setNull(KEY_SVC_KEI_NO) |
| 2 | `inMap == null || inMap.get('pcrs_cd') == null || ""` | - | template.setNull(KEY_PCRS_CD) |
| 3 | `inMap == null || inMap.get('svc_prd_flg') == null || ""` | - | template.setNull(KEY_SVC_PRD_FLG) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | SC照会用の入力パラメータ |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 上りメッセージ生成/編集のみ |

---

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

**起点:**
- hakkoSOD → newKeiOdrCtrl → getSvcKeiUtwkList → **editInMsg_EKK0161B004CBS**

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → getSvcKeiUtwkList → editInMsg_EKK0161B004CBS（本メソッド）
```

**終端 (End Points):**
- なし（メッセージ編集のみ）

---

---

### editInMsg_EKK0341B002CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0341B002CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

**「機器提供サービス契約一覧照会（サービス契約番号）」の上りメッセージ（CAANMsg）に必要なデータを事前にマッピングする処理。**
本メソッドはサービスコンポーネント実行直前に、入力パラメータやコントロールマップから取得した値をテンプレートへセットし、SC呼出用のパラメータマップを構築する。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0341B002CBS(param)"] --> S1["Step1: paramから電文ID・ユースケースID・オペレーションID・呼出区分を取得し、paramMapへput"]
  S1 --> S2["Step2: コントロールマップからホスト名・IPアドレス・画面ID・オペレータIDを取得し、paramMapへput"]
  S2 --> S3["Step3: テンプレートオブジェクトを生成し、テンプレートID、機能コード（一覧照会）をセット"]
  S3 --> S4["Step4: 共通部を設定（editBasicCmn呼出）"]
  S4 --> S5["Step5: ユーザデータ情報（JKKHakkoSODConstCC.HAKKOSODCCWORKMAP）から業務データMap取得（inMap）"]
  S5 --> IF1{"inMap == null<br>または inMap.get('svc_kei_no') == null<br>または ''.equals(inMap.get('svc_kei_no'))"}
  IF1 -- "Yes" --> S6["テンプレートのKEY_SVC_KEI_NOをnullにセット"]
  IF1 -- "No" --> S7["テンプレートのKEY_SVC_KEI_NOにinMap.get('svc_kei_no')をセット"]
  S6 --> IF2
  S7 --> IF2
  IF2{"inMap == null<br>または inMap.get('kktk_svc_cd') == null<br>または ''.equals(inMap.get('kktk_svc_cd'))"}
  IF2 -- "Yes" --> S8["テンプレートのKEY_KKTK_SVC_CDをnullにセット"]
  IF2 -- "No" --> S9["テンプレートのKEY_KKTK_SVC_CDにinMap.get('kktk_svc_cd')をセット"]
  S8 --> IF3
  S9 --> IF3
  IF3{"inMap == null<br>または inMap.get('kktk_svc_kei_no') == null<br>または ''.equals(inMap.get('kktk_svc_kei_no'))"}
  IF3 -- "Yes" --> S10["テンプレートのKEY_KKTK_SVC_KEI_NOをnullにセット"]
  IF3 -- "No" --> S11["テンプレートのKEY_KKTK_SVC_KEI_NOにinMap.get('kktk_svc_kei_no')をセット"]
  S10 --> IF4
  S11 --> IF4
  IF4{"inMap == null<br>または inMap.get('sort_kbn') == null<br>または ''.equals(inMap.get('sort_kbn'))"}
  IF4 -- "Yes" --> S12["テンプレートのKEY_SORT_KBNをnullにセット"]
  IF4 -- "No" --> S13["テンプレートのKEY_SORT_KBNにinMap.get('sort_kbn')をセット"]
  S12 --> S14["テンプレートリストとしてparamMapにput"]
  S13 --> S14
  S14 --> RET["return paramMap"]

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

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

1. paramから電文ヘッダ情報（電文ID、ユースケースID、オペレーションID、サービス呼出区分）を取得し、paramMapに格納。
2. コントロールマップ（SCControlMapKeys）から依頼先ホスト名、依頼元IPアドレス、依頼元画面ID、オペレータIDを取得し、paramMapに格納。
3. テンプレートオブジェクトを生成し、テンプレートIDおよび機能コード（一覧照会用定数）をセット。
4. 共通部の設定処理（editBasicCmn）を呼出し。
5. ユーザデータ情報(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)をparamから取得し、inMapへ格納。
6. inMapのサービス契約番号（svc_kei_no）について、値が存在しない場合はテンプレートのKEY_SVC_KEI_NOにnullをセット、存在する場合はその値をセット。
7. 上記と同様に、機器提供サービスコード（kktk_svc_cd）、機器提供サービス契約番号（kktk_svc_kei_no）、ソート区分（sort_kbn）についても値の有無に応じてnullまたは値をセット。
8. 最終的に、テンプレートリストをparamMapにputし、paramMapを返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | inMap == null または inMap.get("svc_kei_no") == null または "".equals(inMap.get("svc_kei_no")) | - | → テンプレートのKEY_SVC_KEI_NOをnullにセット |
| 2 | inMap == null または inMap.get("kktk_svc_cd") == null または "".equals(inMap.get("kktk_svc_cd")) | - | → テンプレートのKEY_KKTK_SVC_CDをnullにセット |
| 3 | inMap == null または inMap.get("kktk_svc_kei_no") == null または "".equals(inMap.get("kktk_svc_kei_no")) | - | → テンプレートのKEY_KKTK_SVC_KEI_NOをnullにセット |
| 4 | inMap == null または inMap.get("sort_kbn") == null または "".equals(inMap.get("sort_kbn")) | - | → テンプレートのKEY_SORT_KBNをnullにセット |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | 各種リクエスト情報・コントロールマップ・業務データ（SCインプット共通データ） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | データマッピング（SC呼出用パラメータ編集のみ） |

---

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

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

---

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

**起点 (Entry Point):**
- getKktkSvcKeiList
- newEoMobile
- newKeiOdrCtrl
- adchgFixOdrCtrl
- hakkoSOD

**呼出パス:**

```
getKktkSvcKeiList → editInMsg_EKK0341B002CBS
newEoMobile → editInMsg_EKK0341B002CBS
newKeiOdrCtrl → editInMsg_EKK0341B002CBS
adchgFixOdrCtrl → editInMsg_EKK0341B002CBS
hakkoSOD → editInMsg_EKK0341B002CBS
```

**終端 (End Points):**

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

---

---

### editInMsg_EKK0351A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0351A010CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

「オプションサービス契約一意照会」用のSC入力メッセージ編集処理。  
リクエストパラメータから必要な共通・業務情報をテンプレートへセットし、CAANMsg生成用パラメータマップを返却する。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0351A010CBS(param)"] --> S1["paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID())"]
  S1 --> S2["paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID())"]
  S2 --> S3["paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID())"]
  S3 --> S4["paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType())"]
  S4 --> S5["paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME))"]
  S5 --> S6["paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP))"]
  S6 --> S7["paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID))"]
  S7 --> S8["paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID))"]
  S8 --> S9["template.set(EKK0351A010CBSMsg.TEMPLATEID, template_id)"]
  S9 --> S10["template.set(EKK0351A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2)"]
  S10 --> S11["editBasicCmn(param, template)"]
  S11 --> S12["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得"]
  S12 --> IF1{"inMap==null or op_svc_kei_no==null or empty?"}
  IF1 -- "Yes" --> S13["template.setNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO)"]
  IF1 -- "No" --> S14["template.set(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, inMap.get('op_svc_kei_no'))"]
  S13 --> S15
  S14 --> S15
  S15 --> IF2{"inMap==null or gene_add_dtm==null or empty?"}
  IF2 -- "Yes" --> S16["template.setNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM)"]
  IF2 -- "No" --> S17["template.set(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM, inMap.get('gene_add_dtm'))"]
  S16 --> S18
  S17 --> S18
  S18 --> IF3{"inMap==null or rsv_aply_ymd==null or empty?"}
  IF3 -- "Yes" --> S19["template.setNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD)"]
  IF3 -- "No" --> S20["template.set(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, inMap.get('rsv_aply_ymd'))"]
  S19 --> S21
  S20 --> S21
  S21 --> S22["paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates)"]
  S22 --> RET["return paramMap"]

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

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | inMap==null or inMap.get("op_svc_kei_no")==null or "".equals(inMap.get("op_svc_kei_no")) | - | template.setNull(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO) |
| 2 | それ以外 | - | template.set(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, ...) |
| 3 | inMap==null or inMap.get("gene_add_dtm")==null or "".equals(inMap.get("gene_add_dtm")) | - | template.setNull(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM) |
| 4 | それ以外 | - | template.set(EKK0351A010CBSMsg.KEY_GENE_ADD_DTM, ...) |
| 5 | inMap==null or inMap.get("rsv_aply_ymd")==null or "".equals(inMap.get("rsv_aply_ymd")) | - | template.setNull(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD) |
| 6 | それ以外 | - | template.set(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, ...) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | 入力情報保持オブジェクト |

---

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

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

---

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

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

---

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

**起点:**
- getOpSvcKeiGaDtm → editInMsg_EKK0351A010CBS
- getOpSvcKeiList → editInMsg_EKK0351A010CBS
- ...他、多数

**呼出パス:**
```
[getOpSvcKeiGaDtm] → [editInMsg_EKK0351A010CBS] → [editBasicCmn]
```

**終端:**

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

---

---

### editInMsg_EKK0351B002CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0351B002CBS(IRequestParameterReadOnly param, String yykSvcKeiUcwkNo)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

オプションサービス契約一覧照会（サービス契約番号）（EKK0351B002）実行前に、CAANMsgに必要な業務データをparamからマッピングする。
トランザクションID・ユースケースID・オペレーションID・コールタイプ等をテンプレートにセットし、サービス契約番号・予約サービス契約内訳番号も条件に応じてマッピングする。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0351B002CBS(param, yykSvcKeiUcwkNo)"]
    --> S1["共通項目（ID類）をparamMapにput"]
    --> S2["EKK0351B002CBSMsg用テンプレート生成"]
    --> S3["テンプレートID・機能コードセット"]
    --> S4["editBasicCmn(param, template)呼出"]
    --> S5["ユーザデータ取得：param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
    --> IF1{"inMap == null || inMap.get('svc_kei_no') == null || ''.equals(inMap.get('svc_kei_no'))"}
    IF1 -- "Yes" --> S6["template.setNull(KEY_SVC_KEI_NO)"]
    IF1 -- "No"  --> S7["template.set(KEY_SVC_KEI_NO, inMap.get('svc_kei_no'))"]
    S6 --> IF2{"yykSvcKeiUcwkNo == null || ''.equals(yykSvcKeiUcwkNo)"}
    S7 --> IF2
    IF2 -- "Yes" --> S8["template.setNull(KEY_SVC_KEI_UCWK_NO)"]
    IF2 -- "No"  --> S9["template.set(KEY_SVC_KEI_UCWK_NO, yykSvcKeiUcwkNo)"]
    S8 --> S10["template.setNull(KEY_OP_SVC_CD), setNull(KEY_BASE_YMD)"]
    S9 --> S10
    S10 --> S11["paramMapにテンプレート配列をセット"]
    S11 --> END["return paramMap"]
```

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

- 共通項目（ID類）をparamMapにput。
- サービス契約番号・予約サービス契約内訳番号が空であればsetNull、値があればset。
- オプションサービスコード・基準年月日は常にsetNull。
- paramMapにテンプレート配列をセットして返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no")) |  | template.setNull(KEY_SVC_KEI_NO) |
| 2 | else |  | template.set(KEY_SVC_KEI_NO, inMap.get("svc_kei_no")) |
| 3 | yykSvcKeiUcwkNo == null || "".equals(yykSvcKeiUcwkNo) |  | template.setNull(KEY_SVC_KEI_UCWK_NO) |
| 4 | else |  | template.set(KEY_SVC_KEI_UCWK_NO, yykSvcKeiUcwkNo) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | インプット業務データ |
| 2 | yykSvcKeiUcwkNo | String | 予約サービス契約内訳番号 |

---

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

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

---

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

**起点:**
- getOpSvcKeiList
- getOpSvcKeiNotDslList
- newKeiOdrCtrl
- taiikiSeigenOdrCtrl
- adchgFixOdrCtrl
- hakkoSOD

**呼出パス:**

```
[呼び出し元] → editInMsg_EKK0351B002CBS → [SC呼出(データはテンプレート化される)]
```

**終端:**

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

---

---

### editInMsg_EKK0351B003CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0351B003CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

オプションサービス契約履歴一覧照会（EKK0351B003CBS）のSC入力メッセージマッピングを行う。  
IRequestParameterReadOnly paramから必要な項目をCAANMsgテンプレートにセットし、SC呼出用のパラメータマップを生成する。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0351B003CBS(param)"] --> S1["Step1: paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID())"]
  S1 --> S2["Step2: paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID())"]
  S2 --> S3["Step3: paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID())"]
  S3 --> S4["Step4: paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType())"]
  S4 --> S5["Step5: paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME))"]
  S5 --> S6["Step6: paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP))"]
  S6 --> S7["Step7: paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID))"]
  S7 --> S8["Step8: paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID))"]
  S8 --> S9["Step9: テンプレートID・機能コード設定(template.set)"]
  S9 --> S10["Step10: this.editBasicCmn(param, template)"]
  S10 --> S11["Step11: ユーザデータ取得(param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP))"]
  S11 --> IF1{"if: inMap == null || inMap.get('svc_kei_no') == null || ''.equals(inMap.get('svc_kei_no'))"}
  IF1 -- "Yes" --> S12["Step12: template.setNull(EKK0351B002CBSMsg.KEY_SVC_KEI_NO)"]
  IF1 -- "No" --> S13["Step13: template.set(EKK0351B002CBSMsg.KEY_SVC_KEI_NO, (String)inMap.get('svc_kei_no'))"]
  S12 --> S14["Step14: paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates)"]
  S13 --> S14
  S14 --> RET["return paramMap"]
  style IF1 fill:#ffcc00
```

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

1. paramから電文ID、ユースケースID、オペレーションID、サービス呼出区分、ホスト名、IPアドレス、画面ID、オペレータIDを取得し、paramMapにセット。
2. テンプレートID、機能コード（一覧照会）をセット。
3. 共通部設定（editBasicCmn呼出）。
4. ユーザデータ情報（サービス契約番号）を取得。なければtemplate.setNull。
5. サービス契約番号が空でなければtemplate.setでセット。
6. paramMapにテンプレートリストをセットして返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `inMap == null || inMap.get("svc_kei_no") == null || "".equals(inMap.get("svc_kei_no"))` | - | template.setNull |
| 2 | else | - | template.set |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | 業務パラメータ（SC入力情報の取得元） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | SC入力データ編集のみ、CRUDなし |

---

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

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

---

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

**起点:**

- getOpSvcKeiList → editInMsg_EKK0351B003CBS

**呼出パス:**

```
getOpSvcKeiList → editInMsg_EKK0351B003CBS → editBasicCmn
```

**終端:**

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

---

---

### editInMsg_EKK0361A010CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0361A010CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

オプションサービス契約＜ISP＞一意照会のための上りメッセージ（CAANMsg）を生成する。IRequestParameterReadOnlyパラメータから必要な業務項目を抽出し、SC呼び出し前の入力CAANMsgマッピングを行う。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0361A010CBS(param)"] --> S1["paramMapに電文ヘッダ情報をput (TRANZACTION_ID_KEY, USECASE_ID_KEY, OPERATION_ID_KEY, CALL_TYPE_KEY)"]
  S1 --> S2["paramMapにコントロールマップ情報をput (CLIENT_HOST_NAME_KEY, CLIENT_IP_ADDRESS_KEY, INVOKE_GAMEN_ID_KEY, OPERATOR_ID_KEY)"]
  S2 --> S3["EKK0361A010CBSMsg.class.getName()を呼び出しtemplate_id取得"]
  S3 --> S4["template.set(TEMPLATEID, template_id)"]
  S4 --> S5["template.set(FUNC_CODE, JPCModelConstant.FUNC_CD_2)"]
  S5 --> S6["editBasicCmn(param, template)で共通部設定"]
  S6 --> S7["param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でinMap取得"]
  S7 --> IF1{"inMap == null || inMap.get('op_svc_kei_no') == null || ''"}
  IF1 -- "Yes" --> S8["template.setNull(KEY_OP_SVC_KEI_NO)"]
  IF1 -- "No" --> S9["template.set(KEY_OP_SVC_KEI_NO, inMap.get('op_svc_kei_no'))"]
  S8 --> IF2
  S9 --> IF2
  IF2{"inMap == null || inMap.get('gene_add_dtm') == null || ''"}
  IF2 -- "Yes" --> S10["template.setNull(KEY_GENE_ADD_DTM)"]
  IF2 -- "No" --> S11["template.set(KEY_GENE_ADD_DTM, inMap.get('gene_add_dtm'))"]
  S10 --> S12["paramMap.put(TEMPLATE_LIST_KEY, templates)"]
  S11 --> S12
  S12 --> RET["return paramMap"]
  style IF1 fill:#ffcc00
  style IF2 fill:#ffcc00
```

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

1. paramから電文ID・ユースケースID・オペレーションID・呼び出し区分などをparamMapへput。
2. コントロールマップ（依頼先ホスト名、IP、画面ID、オペレータID）もparamMapへput。
3. EKK0361A010CBSMsg.class.getName()でテンプレートIDを取得し設定。
4. templateに機能コード（FUNC_CD_2: current）をセット。
5. 共通部editBasicCmnでtemplateへ設定。
6. inMapから"op_svc_kei_no"および"gene_add_dtm"の有無でNull/値設定分岐。
7. paramMapへTEMPLATE_LIST_KEYでtemplatesをput。
8. paramMap返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | `inMap == null || inMap.get('op_svc_kei_no') == null || "".equals(...)` | - | template.setNull(KEY_OP_SVC_KEI_NO) |
| 2 | `inMap == null || inMap.get('gene_add_dtm') == null || "".equals(...)` | - | template.setNull(KEY_GENE_ADD_DTM) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | SC照会用の入力パラメータ（読み取り専用） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 上りメッセージ生成/編集のみ |

---

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

**起点:**
- hakkoSOD → newKeiOdrCtrl → getOpSvcKeiIsp → **editInMsg_EKK0361A010CBS**

**呼出パス:**

```
hakkoSOD → newKeiOdrCtrl → getOpSvcKeiIsp → editInMsg_EKK0361A010CBS（本メソッド）
```

**終端 (End Points):**
- なし（メッセージ編集のみ）

---

---

### editInMsg_EKK0401B001CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK0401B001CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

サブオプションサービス契約一覧照会（EKK0401B001）をサービスコンポーネントに対して実行する前に、CAANMsgに必要な業務データをマッピングする。
業務パラメータ（IRequestParameterReadOnly）から必要な項目（トランザクションID/ユースケースID/オペレーションID/コールタイプ/ホスト名等）を取得してテンプレートにセットする。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK0401B001CBS(param)"]
    --> S1["paramMapにトランザクションID、ユースケースID、オペレーションID、コールタイプ等セット"]
    --> S2["EKK0401B001CBSMsg用テンプレート生成"]
    --> S3["テンプレートID・機能コードセット"]
    --> S4["editBasicCmn(param, template)呼出"]
    --> S5["ユーザデータ取得：param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)"]
    --> IF1{"inMap == null || inMap.get('op_svc_kei_no') == null || ''.equals(inMap.get('op_svc_kei_no'))"}
    IF1 -- "Yes" --> S6["template.setNull(KEY_OP_SVC_KEI_NO)"]
    IF1 -- "No"  --> S7["template.set(KEY_OP_SVC_KEI_NO, inMap.get('op_svc_kei_no'))"]
    S6 --> S8["paramMapにテンプレート配列をセット"]
    S7 --> S8
    S8 --> END["return paramMap"]
```

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

1. paramからトランザクションID、ユースケースID、オペレーションID、コールタイプ、依頼先ホスト名、依頼元IPアドレス、依頼元画面ID、オペレータIDをparamMapにput。
2. EKK0401B001CBSMsg用のテンプレートを生成し、テンプレートID・機能コード（一覧照会）をセット。
3. 共通部設定のためeditBasicCmn(param, template)を呼び出す。
4. param.getData(JKKHakkoSODConstCC.HAKKOSODCCWORKMAP)でユーザデータを取得し、サブオプションサービス契約番号を取得。
5. ユーザデータが空、または"op_svc_kei_no"が空（nullまたは空文字）の場合はtemplate.setNull(KEY_OP_SVC_KEI_NO)、そうでなければセット。
6. paramMapにテンプレート配列をセットして返却。

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

| # | 条件 | 定数値 | 分岐先 |
|---|------|--------|--------|
| 1 | inMap == null || inMap.get("op_svc_kei_no") == null || "".equals(inMap.get("op_svc_kei_no")) |  | template.setNull(KEY_OP_SVC_KEI_NO) |
| 2 | else |  | template.set(KEY_OP_SVC_KEI_NO, inMap.get("op_svc_kei_no")) |

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | インプット業務データ（照会条件、ユーザー情報等） |

---

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

| CRUD | SC メソッド | SCコード | エンティティ | 操作説明 |
|------|-----------|---------|------------|---------|
| - | - | - | - | 本メソッドはデータマッピングのみ |

---

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

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

**呼出パス:**

```
[呼び出し元] → editInMsg_EKK0401B001CBS → [SC呼出(データはテンプレート化される)]
```

**終端:**

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

---

---

---

### editInMsg_EKK1081C011CBS()

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

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


> **Class:** `com.fujitsu.futurity.bp.custom.common.JKKHakkoSODCC`
> **Method:** `private HashMap<String, Object> editInMsg_EKK1081C011CBS(IRequestParameterReadOnly param)`
> **戻り値:** `HashMap<String, Object>`

---

#### 1. 役割

同一処理番号採番（EKK1081C011）用に、サービスコンポーネント実行前のCAANMsgを業務データparamから生成・マッピングするメソッド。
主にトランザクションID、ユースケースID、オペレーションID、コールタイプ、依頼者情報をテンプレートに設定する。

---

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

```mermaid
flowchart TD
  START["editInMsg_EKK1081C011CBS(param)"]
    --> S1["paramMapにトランザクションID、ユースケースID、オペレーションID、コールタイプ等セット"]
    --> S2["EKK1081C011CBSMsg用テンプレート生成"]
    --> S3["テンプレートID・機能コードセット"]
    --> S4["editBasicCmn(param, template)呼出"]
    --> S5["paramMapにテンプレート配列をセット"]
    --> END["return paramMap"]
```

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

- paramから全共通項目をparamMapへput。
- テンプレートID・機能コードをセットし、editBasicCmnで共通部を設定。
- paramMapにテンプレート配列をセットして返却。

---

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

| No | パラメータ名 | 型 | 業務説明 |
|----|-------------|-----|---------|
| 1 | param | IRequestParameterReadOnly | インプット業務データ |

---

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

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

---

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

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

**呼出パス:**

```
[呼び出し元] → editInMsg_EKK1081C011CBS → [SC呼出(データはテンプレート化される)]
```

**終端:**

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

---

---

---

