# Business Logic - JKKMltiseInfoAddCfmCC.analyzeRequestParam() [138 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKMltiseInfoAddCfmCC` |
| Layer | CC / Common Component |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKMltiseInfoAddCfmCC.analyzeRequestParam()

This method serves as a **request parameter extraction and restructuring utility** within the Multi-Session Information Registration Common Component (JKKMltiseInfoAddCfmCC) of the K-Opticom e-Customer Base System (eo K-Opticom customer management system). Its primary purpose is to accept a raw `IRequestParameterReadWrite` object carrying unstructured page-level input data and extract a predefined set of fields into a clean, null-safe `HashMap<String, Object>` with sensible default values (empty strings for all fields except the boolean flag `kotei_ip_um_flg`, which defaults to `false`).

The method implements a **data transformation and sanitization pattern** - it does not branch on service types or dispatch to different processing paths. Instead, it unconditionally extracts the same 17 fields every time, applying null-safety checks (`rootData != null && rootData.containsKey(KEY)`) to prevent null-pointer exceptions when upstream screens or mappings fail to supply a particular key. This ensures the downstream processing flow always receives a well-formed parameter map.

The method also **unwraps a nested list structure** - it takes an `ido_rsn_list` (move reason list) containing HashMap elements with `ido_rsn_cd` and `ido_rsn_memo` sub-elements, and restructures it into two flat String arrays: one for reason codes and one for reason memos. This transformation simplifies subsequent validation or persistence logic by flattening the nested structure.

Finally, the method **sets a hardcoded consumption status code** (`consmbsn_mskm_stat_skbt_cd = "04"`) to designate the service subscription status as "Cable Business Promotion Office Application" (ケーブルビジネスプロモーション窓口申込), which is relevant for cable TV bundle service registrations during the multi-session add confirmation flow.

As a **shared utility CC (Common Component)** method, it is called exclusively by `JKKMltiseInfoAddCfmCC.execute()` and is specific to the multi-session information registration screen (KKSV0031). It does not perform any database operations or invoke external SC/CBS services - its sole responsibility is parameter normalization.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["analyzeRequestParam(params)"])
    INIT["Initialize paramData and lists"]
    GET["Get rootData from param.getData"]
    SUBGET["Extract string fields with null-safe defaults"]
    EXTRACT_FIELDS["Extract: func_code, svc_kei_no, mskm_sbt_cd, unyo_ymd, unyo_dtm, op_svc_cd, sysid, ido_div, oya_kei_skbt_cd, rsv_aply_cd, use_staymd_year, use_staymd_mon, use_staymd_day, rule0059_auto_aply, seik_kei_no, mltise_session_cnt, kotei_ip_um_flg"]
    IDO_RSN["Process IDO_RSN_LIST: iterate paramIdoRsnList, extract ido_rsn_cd and ido_rsn_memo per element"]
    SET_STATUS["Set CONSMBSN_MSKM_STAT_SKBT_CD to 04"]
    RETURN["Return paramData HashMap"]
    START --> INIT --> GET
    GET --> SUBGET
    SUBGET --> EXTRACT_FIELDS
    EXTRACT_FIELDS --> IDO_RSN
    IDO_RSN --> SET_STATUS
    SET_STATUS --> RETURN
```

**Processing Summary:**

1. **Initialization (L635-L642):** Creates the output `paramData` HashMap and three empty ArrayLists (`idoRsnList`, `idoRsnMemoList`). Declares additional variables for list element iteration.
2. **Root Data Extraction (L647):** Calls `param.getData(ADDMLTISEINFO)` to retrieve the top-level parameter HashMap from the request.
3. **Field-by-Field Null-Safe Extraction (L649-L732):** For each of 17 keys, checks if `rootData` is non-null and contains the key. If present, retrieves and stores the value; otherwise, stores an empty String (or `false` for the boolean flag `kotei_ip_um_flg`, which defaults to `false`).
4. **Move Reason List Unwrapping (L737-L743):** Iterates over the `paramIdoRsnList` (each element is a HashMap), extracts `ido_rsn_cd` and `ido_rsn_memo` values, and adds them to separate flat lists.
5. **Status Code Assignment (L745):** Hardcodes the consumption subscription status code to `"04"` (Cable Business Promotion Office Application).
6. **Return (L748):** Returns the fully populated `paramData` HashMap.

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `param` | `IRequestParameterReadWrite` | The request parameter object carrying all screen-level input data for the multi-session information registration flow. It contains a nested HashMap under the key `"ADDMLTISEINFO"` which holds the actual field values submitted by the KKSV0031 screen. The object also provides access to a control map for screen navigation metadata. |

**Instance Fields Read by This Method:**

| Field Name | Type | Business Description |
|-----------|------|---------------------|
| `ADDMLTISEINFO` | `String` (constant) | The map key `"ADDMLTISEINFO"` used to retrieve the root parameter block from `param.getData()`. |
| `FUNC_CODE` | `String` (constant) | Map key `"func_code"` - identifies which function within the multi-session screen is being invoked (e.g., initial add vs. edit). |
| `SVC_KEI_NO` | `String` (constant) | Map key `"svc_kei_no"` - Service contract number, uniquely identifying a service contract in the system. |
| `MSKM_SBT_CD` | `String` (constant) | Map key `"mskm_sbt_cd"` - Application type code, classifying the type of application (e.g., new subscription, change, cancellation). |
| `UNYO_YMD` | `String` (constant) | Map key `"unyo_ymd"` - Operation date in YYYYMMDD format, recording the date of the service operation. |
| `UNYO_DTM` | `String` (constant) | Map key `"unyo_dtm"` - Operation datetime including time component, providing precise timestamp of the operation. |
| `OP_SVC_CD` | `String` (constant) | Map key `"op_svc_cd"` - Option service code, identifying optional/add-on services bundled with the main contract. |
| `SYSID` | `String` (constant) | Map key `"sysid"` - System ID, identifying which system/subscriber context the request belongs to. |
| `IDO_DIV` | `String` (constant) | Map key `"ido_div"` - Move division (movement type discriminator), categorizing the type of service line movement or transfer. |
| `OYA_KEI_SKBT_CD` | `String` (constant) | Map key `"oya_kei_skbt_cd"` - Parent contract identification code, linking to the parent service contract for hierarchical relationships. |
| `RSV_APLY_CD` | `String` (constant) | Map key `"rsv_aply_cd"` - Reservation application code, specifying the type of reservation being applied. |
| `RULE0059_AUTO_APLY` | `String` (constant) | Map key `"rule0059_auto_aply"` - Service fee automatic application flag, indicating whether Rule0059 service fees should be auto-applied. |
| `SEIKY_KEI_NO` | `String` (constant) | Map key `"seik_kei_no"` - Billing contract number, identifying the billing arrangement for the service. |
| `MLTISE_SESSION_CNT` | `String` (constant) | Map key `"mltise_session_cnt"` - Multi-session count, tracking the number of sessions in a multi-step registration. |
| `KOTEI_IP_UM_FLG` | `String` (constant) | Map key `"kotei_ip_um_flg"` - Fixed IP existence flag, indicating whether the subscriber has a static/fixed IP address assignment. |
| `IDO_RSN_LIST` | `String` (constant) | Map key `"ido_rsn_list"` - Move reason list, a list of reasons for service line movement/transfer. |
| `IDO_RSN_LIST_ELEMENT` | `String` (constant) | Element key `"ido_rsn_cd"` - Move reason code within each list element. |
| `IDO_RSN_MEMO_LIST` | `String` (constant) | Map key `"ido_rsn_memo_list"` - The output key for the extracted move reason memo list. |
| `IDO_RSN_MEMO_LIST_ELEMENT` | `String` (constant) | Element key `"ido_rsn_memo"` - Move reason memo text within each list element. |
| `CONSMBSN_MSKM_STAT_SKBT_CD` | `String` (constant) | Map key `"consmbsn_mskm_stat_skbt_cd"` - Consumption subscription status classification code. |

## 4. CRUD Operations / Called Services

This method performs **no CRUD operations** and **no external SC/CBS calls**. It is a pure parameter extraction and transformation utility:

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | (none) | - | - | This method reads only from the in-memory `IRequestParameterReadWrite` object and does not invoke any Service Component (SC) or Common Business Service (CBS). No database or entity operations are performed. |

**Note:** The `param.getData(ADDMLTISEINFO)` call reads data from the in-memory request parameter object (populated by the screen's DB mapper), not from a database. This is a data access pattern within the parameter object, not a database query.

## 5. Dependency Trace

### Pre-computed evidence from code analysis graph:

No screen/batch entry points found within 8 hops. Direct callers found: 1 methods.
Terminal operations from this method: - (this method performs no database operations; it only transforms in-memory parameter data).

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | CC: JKKMltiseInfoAddCfmCC | `JKKMltiseInfoAddCfmCC.execute()` -> `JKKMltiseInfoAddCfmCC.analyzeRequestParam(param)` | - (no terminal DB/SC operations; returns HashMap of extracted parameters) |

**Call Context:** The `execute()` method of `JKKMltiseInfoAddCfmCC` calls `analyzeRequestParam()` at the beginning of its processing flow to normalize the incoming request parameters before passing them to subsequent business logic blocks (data validation, SC invocations, mapping operations). The `KKSV0031` screen (Multi-Session Information Registration) is the originating screen that populates the request parameters through its DB mapper (`KKSV0031_OPOperation` -> `KKSV0031OPDBMapper.setAddMltiseInfo()`).

## 6. Per-Branch Detail Blocks

### Block 1 - INIT (Variable Declaration and Instantiation) (L635-L642)

> Initializes the output HashMap and three empty ArrayList instances for move reason code and memo storage.

| # | Type | Code |
|---|------|------|
| 1 | DECLARE | `paramData = null` (HashMap\<String, Object\>) [L635] |
| 2 | DECLARE | `rootData = null` (HashMap\<String, Object\>) [L636] |
| 3 | DECLARE | `idoRsnList = null` (ArrayList) [L637] |
| 4 | DECLARE | `idoRsnMemoList = null` (ArrayList) [L638] |
| 5 | DECLARE | `paramIdoRsnList = null` (ArrayList) [L639] |
| 6 | DECLARE | `paramIdoRsnElement = null` (HashMap) [L640] |
| 7 | SET | `paramData = new HashMap<String, Object>()` [L641] |
| 8 | SET | `idoRsnList = new ArrayList<String>()` [L642] |
| 9 | SET | `idoRsnMemoList = new ArrayList<String>()` [L642] |

### Block 2 - ROOT DATA RETRIEVAL (L647)

> Retrieves the root parameter HashMap from the request by key `ADDMLTISEINFO`.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `rootData = (HashMap<String, Object>)param.getData(ADDMLTISEINFO)` where `ADDMLTISEINFO = "ADDMLTISEINFO"` [L647] |

### Block 3 - FIELD EXTRACTION: func_code (L649-L652)

> Extracts the function code with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(FUNC_CODE)` where `FUNC_CODE = "func_code"` [L649] |
| 2 | SET | `paramData.put(FUNC_CODE, rootData.get(FUNC_CODE))` [L650] - **IF branch** |
| 3 | ELSE | [L651] |
| 4 | SET | `paramData.put(FUNC_CODE, new String())` [L652] - **ELSE branch: default to empty string** |

### Block 4 - FIELD EXTRACTION: svc_kei_no (L653-L656)

> Extracts the service contract number with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(SVC_KEI_NO)` where `SVC_KEI_NO = "svc_kei_no"` [L653] |
| 2 | SET | `paramData.put(SVC_KEI_NO, rootData.get(SVC_KEI_NO))` [L654] - **IF branch** |
| 3 | ELSE | [L655] |
| 4 | SET | `paramData.put(SVC_KEI_NO, new String())` [L656] - **ELSE branch: default to empty string** |

### Block 5 - FIELD EXTRACTION: mskm_sbt_cd (L657-L660)

> Extracts the application type code with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(MSKM_SBT_CD)` where `MSKM_SBT_CD = "mskm_sbt_cd"` [L657] |
| 2 | SET | `paramData.put(MSKM_SBT_CD, rootData.get(MSKM_SBT_CD))` [L658] - **IF branch** |
| 3 | ELSE | [L659] |
| 4 | SET | `paramData.put(MSKM_SBT_CD, new String())` [L660] - **ELSE branch: default to empty string** |

### Block 6 - FIELD EXTRACTION: unyo_ymd (L661-L664)

> Extracts the operation date (YYYYMMDD) with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(UNYO_YMD)` where `UNYO_YMD = "unyo_ymd"` [L661] |
| 2 | SET | `paramData.put(UNYO_YMD, rootData.get(UNYO_YMD))` [L662] - **IF branch** |
| 3 | ELSE | [L663] |
| 4 | SET | `paramData.put(UNYO_YMD, new String())` [L664] - **ELSE branch: default to empty string** |

### Block 7 - FIELD EXTRACTION: unyo_dtm (L665-L668)

> Extracts the operation datetime (YYYYMMDDHHmmss) with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(UNYO_DTM)` where `UNYO_DTM = "unyo_dtm"` [L665] |
| 2 | SET | `paramData.put(UNYO_DTM, rootData.get(UNYO_DTM))` [L666] - **IF branch** |
| 3 | ELSE | [L667] |
| 4 | SET | `paramData.put(UNYO_DTM, new String())` [L668] - **ELSE branch: default to empty string** |

### Block 8 - FIELD EXTRACTION: op_svc_cd (L669-L672)

> Extracts the option service code with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(OP_SVC_CD)` where `OP_SVC_CD = "op_svc_cd"` [L669] |
| 2 | SET | `paramData.put(OP_SVC_CD, rootData.get(OP_SVC_CD))` [L670] - **IF branch** |
| 3 | ELSE | [L671] |
| 4 | SET | `paramData.put(OP_SVC_CD, new String())` [L672] - **ELSE branch: default to empty string** |

### Block 9 - FIELD EXTRACTION: sysid (L673-L676)

> Extracts the system ID with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(SYSID)` where `SYSID = "sysid"` [L673] |
| 2 | SET | `paramData.put(SYSID, rootData.get(SYSID))` [L674] - **IF branch** |
| 3 | ELSE | [L675] |
| 4 | SET | `paramData.put(SYSID, new String())` [L676] - **ELSE branch: default to empty string** |

### Block 10 - FIELD EXTRACTION: ido_div (L677-L680)

> Extracts the move division code with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(IDO_DIV)` where `IDO_DIV = "ido_div"` [L677] |
| 2 | SET | `paramData.put(IDO_DIV, rootData.get(IDO_DIV))` [L678] - **IF branch** |
| 3 | ELSE | [L679] |
| 4 | SET | `paramData.put(IDO_DIV, new String())` [L680] - **ELSE branch: default to empty string** |

### Block 11 - FIELD EXTRACTION: oya_kei_skbt_cd (L681-L684)

> Extracts the parent contract identification code with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(OYA_KEI_SKBT_CD)` where `OYA_KEI_SKBT_CD = "oya_kei_skbt_cd"` [L681] |
| 2 | SET | `paramData.put(OYA_KEI_SKBT_CD, rootData.get(OYA_KEI_SKBT_CD))` [L682] - **IF branch** |
| 3 | ELSE | [L683] |
| 4 | SET | `paramData.put(OYA_KEI_SKBT_CD, new String())` [L684] - **ELSE branch: default to empty string** |

### Block 12 - FIELD EXTRACTION: rsv_aply_cd (L685-L688)

> Extracts the reservation application code with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(RSV_APLY_CD)` where `RSV_APLY_CD = "rsv_aply_cd"` [L685] |
| 2 | SET | `paramData.put(RSV_APLY_CD, rootData.get(RSV_APLY_CD))` [L686] - **IF branch** |
| 3 | ELSE | [L687] |
| 4 | SET | `paramData.put(RSV_APLY_CD, new String())` [L688] - **ELSE branch: default to empty string** |

### Block 13 - FIELD EXTRACTION: use_staymd_year (L689-L692)

> Extracts the usage start date year component with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(USE_STAYMD_YEAR)` where `USE_STAYMD_YEAR = "use_staymd_year"` [L689] |
| 2 | SET | `paramData.put(USE_STAYMD_YEAR, rootData.get(USE_STAYMD_YEAR))` [L690] - **IF branch** |
| 3 | ELSE | [L691] |
| 4 | SET | `paramData.put(USE_STAYMD_YEAR, new String())` [L692] - **ELSE branch: default to empty string** |

### Block 14 - FIELD EXTRACTION: use_staymd_mon (L693-L696)

> Extracts the usage start date month component with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(USE_STAYMD_MON)` where `USE_STAYMD_MON = "use_staymd_mon"` [L693] |
| 2 | SET | `paramData.put(USE_STAYMD_MON, rootData.get(USE_STAYMD_MON))` [L694] - **IF branch** |
| 3 | ELSE | [L695] |
| 4 | SET | `paramData.put(USE_STAYMD_MON, new String())` [L696] - **ELSE branch: default to empty string** |

### Block 15 - FIELD EXTRACTION: use_staymd_day (L697-L700)

> Extracts the usage start date day component with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(USE_STAYMD_DAY)` where `USE_STAYMD_DAY = "use_staymd_day"` [L697] |
| 2 | SET | `paramData.put(USE_STAYMD_DAY, rootData.get(USE_STAYMD_DAY))` [L698] - **IF branch** |
| 3 | ELSE | [L699] |
| 4 | SET | `paramData.put(USE_STAYMD_DAY, new String())` [L700] - **ELSE branch: default to empty string** |

### Block 16 - FIELD EXTRACTION: rule0059_auto_aply (L701-L704)

> Extracts the Rule0059 service fee auto-application flag with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(RULE0059_AUTO_APLY)` where `RULE0059_AUTO_APLY = "rule0059_auto_aply"` [L701] |
| 2 | SET | `paramData.put(RULE0059_AUTO_APLY, rootData.get(RULE0059_AUTO_APLY))` [L702] - **IF branch** |
| 3 | ELSE | [L703] |
| 4 | SET | `paramData.put(RULE0059_AUTO_APLY, new String())` [L704] - **ELSE branch: default to empty string** |

### Block 17 - FIELD EXTRACTION: seik_kei_no (L705-L708)

> Extracts the billing contract number with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(SEIKY_KEI_NO)` where `SEIKY_KEI_NO = "seik_kei_no"` [L705] |
| 2 | SET | `paramData.put(SEIKY_KEI_NO, rootData.get(SEIKY_KEI_NO))` [L706] - **IF branch** |
| 3 | ELSE | [L707] |
| 4 | SET | `paramData.put(SEIKY_KEI_NO, new String())` [L708] - **ELSE branch: default to empty string** |

### Block 18 - FIELD EXTRACTION: mltise_session_cnt (L709-L712)

> Extracts the multi-session count with null-safe default.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(MLTISE_SESSION_CNT)` where `MLTISE_SESSION_CNT = "mltise_session_cnt"` [L709] |
| 2 | SET | `paramData.put(MLTISE_SESSION_CNT, rootData.get(MLTISE_SESSION_CNT))` [L710] - **IF branch** |
| 3 | ELSE | [L711] |
| 4 | SET | `paramData.put(MLTISE_SESSION_CNT, new String())` [L712] - **ELSE branch: default to empty string** |

### Block 19 - FIELD EXTRACTION: kotei_ip_um_flg (L713-L716)

> Extracts the fixed IP existence flag. **Special case** - defaults to `false` (Boolean) instead of empty String.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(KOTEI_IP_UM_FLG)` where `KOTEI_IP_UM_FLG = "kotei_ip_um_flg"` [L713] |
| 2 | SET | `paramData.put(KOTEI_IP_UM_FLG, (Boolean)rootData.get(KOTEI_IP_UM_FLG))` [L714] - **IF branch: casts to Boolean** |
| 3 | ELSE | [L715] |
| 4 | SET | `paramData.put(KOTEI_IP_UM_FLG, false)` [L716] - **ELSE branch: default to `false` (Boolean)** |

### Block 20 - FIELD EXTRACTION: ido_rsn_list (L717-L720)

> Extracts the move reason list. This is the only reference field (ArrayList) rather than a primitive value.

| # | Type | Code |
|---|------|------|
| 1 | IF | `rootData != null && rootData.containsKey(IDO_RSN_LIST)` where `IDO_RSN_LIST = "ido_rsn_list"` [L717] |
| 2 | SET | `paramIdoRsnList = (ArrayList)rootData.get(IDO_RSN_LIST)` [L718] - **IF branch: stores reference for unwrapping** |
| 3 | ELSE | [L719] |
| 4 | SET | `paramData.put(IDO_RSN_LIST, new ArrayList<String>())` [L720] - **ELSE branch: default to empty ArrayList** |

### Block 21 - MOVE REASON LIST UNWRAPPING (L723-L743)

> Iterates over the move reason list elements, extracting `ido_rsn_cd` and `ido_rsn_memo` from each HashMap element into separate flat String lists. This transforms a nested list-of-maps structure into two parallel arrays.

| # | Type | Code |
|---|------|------|
| 1 | FOR | `for(int i = 0; i < paramIdoRsnList.size(); i++)` [L723] |
| 2 | SET | `paramIdoRsnElement = (HashMap)paramIdoRsnList.get(i)` [L725] - **LOOP body: cast current element to HashMap** |
| 3 | EXEC | `idoRsnList.add(paramIdoRsnElement.get(IDO_RSN_LIST_ELEMENT))` [L726] - **where `IDO_RSN_LIST_ELEMENT = "ido_rsn_cd"`** |
| 4 | EXEC | `idoRsnMemoList.add(paramIdoRsnElement.get(IDO_RSN_MEMO_LIST_ELEMENT))` [L727] - **where `IDO_RSN_MEMO_LIST_ELEMENT = "ido_rsn_memo"`** |
| 5 | SET | `paramData.put(IDO_RSN_LIST, idoRsnList)` [L728] - **After loop: put unwrapped code list** |
| 6 | SET | `paramData.put(IDO_RSN_MEMO_LIST, idoRsnMemoList)` [L729] - **After loop: put unwrapped memo list** |

### Block 22 - CONSUMPTION STATUS CODE ASSIGNMENT (L731)

> Sets a hardcoded consumption subscription status code to `"04"` (Cable Business Promotion Office Application - ケーブルビジネスプロモーション窓口申込). This code categorizes the subscription under the cable business promotion office category.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramData.put(CONSMBSN_MSKM_STAT_SKBT_CD, String.valueOf("04"))` [L731] - **`CONSMBSN_MSKM_STAT_SKBT_CD = "consmbsn_mskm_stat_skbt_cd"`, value `"04"` = Cable Business Promotion Office Application** |

### Block 23 - RETURN (L734)

> Returns the fully populated parameter HashMap containing all extracted and defaulted fields.

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return paramData` [L734] |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `func_code` | Field | Function code - identifies the specific function or operation type within the multi-session information registration screen (e.g., initial add, edit, delete). |
| `svc_kei_no` | Field | Service contract number - the unique identifier for a service contract (service line) in the K-Opticom system. |
| `mskm_sbt_cd` | Field | Application type code - classifies the type of application being processed (new subscription, change, cancellation, etc.). MSKM = マルチセッショングループ (Multi-Session Group). |
| `unyo_ymd` | Field | Operation date - the date of the service operation in YYYYMMDD format. UNYO = 運用 (operation/execution). |
| `unyo_dtm` | Field | Operation datetime - the precise timestamp of the service operation, including time component. |
| `op_svc_cd` | Field | Option service code - identifies optional or add-on services bundled with the main service contract. OP = オプション (option). |
| `sysid` | Field | System ID - identifies the subscriber system or context, used for multi-tenant or multi-system isolation. |
| `ido_div` | Field | Move division (movement type) - classifies the type of service line movement, transfer, or reassignment. IDO = 異動 (movement/transfer). |
| `oya_kei_skbt_cd` | Field | Parent contract identification code - identifies the parent service contract for hierarchical contract relationships. OYA = 親 (parent). |
| `rsv_aply_cd` | Field | Reservation application code - specifies the type of reservation or booking being applied for. |
| `rule0059_auto_aply` | Field | Rule0059 service fee automatic application flag - controls whether service fees defined under business Rule0059 are automatically applied to the contract. |
| `seik_kei_no` | Field | Billing contract number - identifies the billing arrangement or contract responsible for charging the subscriber. SEIKY = 請求 (billing/invoicing). |
| `mltise_session_cnt` | Field | Multi-session count - tracks the number of sessions in a multi-step registration process. MLTISE = マルチセッション (multi-session). |
| `kotei_ip_um_flg` | Field | Fixed IP existence flag - boolean flag indicating whether the subscriber has a static/fixed IP address assignment. KOTEI IP = 固定IP (fixed IP). UM = 有無 (existence/non-existence). |
| `ido_rsn_list` | Field | Move reason list - a list of codes explaining why a service line movement/transfer was requested. |
| `ido_rsn_cd` | Field | Move reason code - the individual reason code within each move reason list element. |
| `ido_rsn_memo` | Field | Move reason memo - free-text explanation accompanying a move reason code. |
| `consmbsn_mskm_stat_skbt_cd` | Field | Consumption subscription status classification code - categorizes the type of subscription. `"04"` = Cable Business Promotion Office Application (ケーブルビジネスプロモーション窓口申込). |
| `use_staymd_year` / `use_staymd_mon` / `use_staymd_day` | Fields | Usage start date (year / month / day) - the three components of the date when the service usage begins. STAYMD = 利用開始日 (usage start date). |
| `ADDMLTISEINFO` | Constant | Map key `"ADDMLTISEINFO"` - the root parameter key used to retrieve the multi-session information registration data block from the request parameter object. |
| KKSV0031 | Screen | Multi-Session Information Registration screen - the web screen responsible for registering multi-session service information. |
| JKKMltiseInfoAddCfmCC | Class | Multi-Session Information Add Confirmation Common Component - the Common Component class that provides shared logic for multi-session information registration. CC = Common Component. |
| `IRequestParameterReadWrite` | Interface | Request parameter read-write interface - the contract for objects that carry screen-level input data, providing methods like `getData()` and control map access. |
| `RequestParameterException` | Exception | Exception thrown when request parameter processing fails (e.g., null parameter, type mismatch). |
| Cable Business Promotion Office | Business term | A cable TV service promotional office category. Subscription status code `"04"` indicates the service was subscribed through this channel. |
