# Business Logic — FUW02501SFLogic.getCommoninfoBeanInfo() [130 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.FUW02501SF.FUW02501SFLogic` |
| Layer | Service (Web Controller Logic — Service Facade) |
| Module | `FUW02501SF` (Package: `eo.web.webview.FUW02501SF`) |

## 1. Role

### FUW02501SFLogic.getCommoninfoBeanInfo()

This method serves as the **shared form information extractor** for the My Home Page (ホームペ―ジ) screen in the Fujitsu Kopt web platform. Its primary business purpose is to read and consolidate all relevant customer, service contract, and optional service data from the incoming `X31SDataBeanAccess` form bean, then package the extracted information into a `Map<String, Object>` for downstream screen processing.

The method traverses a hierarchical data bean structure starting from the top-level WEB form bean, extracting nested beans for SSO (Single Sign-On) authentication information, current customer contract details, service contract details, service contract line-item breakdowns, billing contract information, and optional service contract information. It applies a multi-layered filtering process to narrow down the optional service contracts to the single record that corresponds to the currently logged-in My Home Page ("B002") user — matching by SSO WEB ID and service code.

Once the matching optional service contract is identified, the method iterates through its sub-option service child records (specifically filtering for "Home Page Access Analysis" — code "D05") and counts only those sub-option contracts that are currently active (i.e., NOT in cancelled "910" or "920" states). This count (`acsBnskCnt`) represents the number of valid access analysis subscription contracts associated with the user's My Home Page.

The method acts as a **data consolidation and routing utility** called by both `execute()` (the main screen entry point) and `init()` (initialization routine) of the same logic class. It implements the **navigator pattern** — extracting, validating, and enriching shared context data that multiple screen operations depend on. If the SSO WEB ID is missing (a configuration or login error), it throws a system error exception (`JCCBusinessException` with `ERROR_CODE_0002`) to prevent further processing.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["getCommoninfoBeanInfo commoninfoBean"])
    STEP1["Initialize resultMap HashMap"]
    STEP2["Extract WEB変更情報 from commoninfoBean"]
    STEP3["Extract SSO情報 from WEB変更情報"]
    STEP4["Get SSO SYSID_21 and WEB_ID_21 values"]
    COND1["ssoInfoWebid is null?"]
    ERROREx["Throw JCCBusinessException ERROR_CODE_0002 System Error"]
    STEP5["Extract 現顧客情報 from WEB変更情報"]
    STEP6["Extract サービス契約情報 from 現顧客情報"]
    STEP7["Extract サービス契約内訳情報 from サービス契約情報"]
    STEP8["Extract 請求契約情報 from サービス契約情報"]
    STEP9["Initialize opSvcKeiInfoBean null"]
    STEP10["Get オプションサービス契約情報 array"]
    LOOP1["For m from 0 to opSvcKeiInfoArray.getCount"]
    STEP11["Get tmpOpSvcKeiInfoBean at index m"]
    STEP12["Get opSvcKeiInfoWebid from tmp bean"]
    STEP13["Get opSvCd option service code from tmp bean"]
    STEP14["Get opSvcKeiStat option service contract status from tmp bean"]
    COND_STATUS["opSvcKeiStat is 020/030/100?"]
    COND_MATCH["ssoInfoWebid equals opSvcKeiInfoWebid AND opSvCd is B002?"]
    STEP15["Set opSvcKeiInfoBean = tmpOpSvcKeiInfoBean Match"]
    STEP16["Continue to next iteration"]
    STEP17["Initialize acsBnskCnt 0"]
    STEP18["Initialize sbopSvcKeiInfoBean null"]
    COND_OP["opSvcKeiInfoBean not null?"]
    STEP19["Get opInfoOpSvcKeiNo from opSvcKeiInfoBean"]
    STEP20["Get サブオプションサービス契約情報 array from first item"]
    LOOP2["For n from 0 to sbopSvcKeiInfoArray.getCount"]
    STEP21["Get tmpSbopSvcKeiInfoBean at index n"]
    STEP22["Get sbopSvcKeiStat sub-option status"]
    STEP23["Get opSvcKeiNo option service contract number"]
    STEP24["Get sbopSvcCd sub-option service code"]
    COND_SBCD["sbopSvcCd is D05?"]
    COND_SBSTAT["sbopSvcKeiStat is 910/920?"]
    COND_MATCHNO["opInfoOpSvcKeiNo equals opSvcKeiNo?"]
    STEP25["Increment acsBnskCnt"]
    STEP26["Continue to next iteration"]
    STEP27["Set resultMap entries from extracted beans"]
    STEP28["Return resultMap"]

    START --> STEP1 --> STEP2 --> STEP3 --> STEP4 --> COND1
    COND1 -- Yes --> ERROREx
    COND1 -- No --> STEP5 --> STEP6 --> STEP7 --> STEP8 --> STEP9 --> STEP10 --> LOOP1
    LOOP1 --> STEP11 --> STEP12 --> STEP13 --> STEP14 --> COND_STATUS
    COND_STATUS -- Yes --> COND_MATCH
    COND_STATUS -- No --> STEP16
    COND_MATCH -- Yes --> STEP15
    COND_MATCH -- No --> STEP16
    STEP15 --> STEP16
    STEP16 --> LOOP1
    LOOP1 --> STEP17 --> STEP18 --> COND_OP
    COND_OP -- Yes --> STEP19 --> STEP20 --> LOOP2
    COND_OP -- No --> STEP27
    LOOP2 --> STEP21 --> STEP22 --> STEP23 --> STEP24 --> COND_SBCD
    COND_SBCD -- Not D05 --> STEP26
    COND_SBCD -- Is D05 --> COND_SBSTAT
    COND_SBSTAT -- 910/920 --> STEP26
    COND_SBSTAT -- Not 910/920 --> COND_MATCHNO
    COND_MATCHNO -- Equal --> STEP25
    COND_MATCHNO -- Not Equal --> STEP26
    STEP25 --> STEP26
    STEP26 --> LOOP2
    LOOP2 --> STEP27
    STEP27 --> STEP28
```

**CRITICAL — Constant Resolution:**

| Constant | Resolved Value | Business Meaning |
|----------|---------------|------------------|
| `CD00037_020` | `"020"` | Service contract status — "Viewed" (照会済) |
| `CD00037_030` | `"030"` | Service contract status — "Contracted" (締結済) |
| `CD00037_100` | `"100"` | Service contract status — "Service in Progress" (サービス提供中) |
| `CD00037_910` | `"910"` | Service contract status — "Cancelled/Terminated" (解約済) |
| `CD00037_920` | `"920"` | Service contract status — "Canceled" (キャンセル済) |
| `CD00136_B002` | `"B002"` | Service code — My Home Page (My ホームページ) |
| `CD00137_D05` | `"D05"` | Sub-option service code — Home Page Access Analysis (ホームページアクセス解析) |
| `SBOP_SVC_KEI_CNT` | `"sbop_svc_kei_cnt"` | Map key for sub-option service contract count |
| `DATABEAN_GET_VALUE` | (constant) | X31S data bean accessor — retrieve value from data bean |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `commoninfoBean` | `X31SDataBeanAccess` | The shared form data bean containing the complete hierarchical customer and service contract context. This is a single sign-on (SSO) authenticated data structure that carries WEB变更 information (WEB変更情報) including SSO user identity, current customer details, service contract records, contract line-item breakdowns, billing contract data, and optional service contract records. This bean is typically populated during the screen data load phase and serves as the single source of truth for all shared information accessed by the FUW02501SF screen. |

**Instance/External State Read:**
- None directly — the method is self-contained and derives all state from the parameter and its nested data bean structure.

## 4. CRUD Operations / Called Services

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JFUWebCommon.isNull` | JFUWebCommon | - | Null-check utility call on `ssoInfoWebid` to validate SSO WEB ID presence |
| R | `OneStopDataBeanAccess.getDataBeanArray` | OneStopDataBeanAccess | - | Reads nested WEB変更情報 data bean array from `commoninfoBean` |
| R | `OneStopDataBeanAccess.getDataBean` | OneStopDataBeanAccess | - | Reads SSO情報 data bean at index 0 from the SSO_INFO array |
| R | `OneStopDataBeanAccess.sendMessageString` | OneStopDataBeanAccess | - | Extracts SYSID_21 and WEB_ID_21 string values from the SSO bean |
| R | `OneStopDataBeanAccess.getDataBeanArray` | OneStopDataBeanAccess | - | Reads 現顧客情報 (current customer info) from WEB変更情報 |
| R | `OneStopDataBeanAccess.getDataBean` | OneStopDataBeanAccess | - | Reads サービス契約情報 (service contract info) at index 0 |
| R | `OneStopDataBeanAccess.getDataBeanArray` | OneStopDataBeanAccess | - | Reads サービス契約内訳情報 (service contract line items) from service contract info |
| R | `OneStopDataBeanAccess.getDataBeanArray` | OneStopDataBeanAccess | - | Reads 請求契約情報 (billing contract info) from service contract info |
| R | `OneStopDataBeanAccess.getDataBeanArray` | OneStopDataBeanAccess | - | Reads オプションサービス契約情報 (option service contract info) array |
| R | `OneStopDataBeanAccessArray.getCount` | OneStopDataBeanAccessArray | - | Iteration: returns count of optional service contract records |
| R | `OneStopDataBeanAccessArray.getDataBean` | OneStopDataBeanAccessArray | - | Gets option service contract bean at iteration index `m` |
| R | `OneStopDataBeanAccess.sendMessageString` | OneStopDataBeanAccess | - | Extracts WEB_ID_28 (WEB ID), OP_SVC_CD_28 (option service code), OP_SVC_KEI_STAT_28 (option service status) from each option bean |
| R | `OneStopDataBeanAccess.sendMessageString` | OneStopDataBeanAccess | - | Reads OP_SVC_KEI_NO_28 (option service contract number) from the selected matching option bean |
| R | `OneStopDataBeanAccess.getDataBeanArray` | OneStopDataBeanAccess | - | Reads サブオプションサービス契約情報 (sub-option service contract info) from the first option item |
| R | `OneStopDataBeanAccessArray.getCount` | OneStopDataBeanAccessArray | - | Iteration: returns count of sub-option service contract records |
| R | `OneStopDataBeanAccessArray.getDataBean` | OneStopDataBeanAccessArray | - | Gets sub-option service contract bean at iteration index `n` |
| R | `OneStopDataBeanAccess.sendMessageString` | OneStopDataBeanAccess | - | Extracts SBOP_SVC_KEI_STAT_29, OP_SVC_KEI_NO_29, SBOP_SVC_CD_29 from each sub-option bean |
| - | `JFUStrConst.*` | JFUStrConst | - | Constant lookups for status code comparison (CD00037_*, CD00136_*, CD00137_*) |
| - | `CommonInfoCFConst.*` | CommonInfoCFConst | - | Constant lookups for bean path keys (SSO_INFO, OP_SVC_KEI_INFO, etc.) |

**Note:** This method performs **no data modification** (no C/U/D operations). It is a pure **read/extraction** operation that navigates the in-memory data bean hierarchy, applies business rule filters (status codes, service codes, WEB ID matching), and computes a count of matching sub-option contracts. No database or external service calls are made.

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Logic: `FUW02501SFLogic.execute()` | `execute()` -> `getCommoninfoBeanInfo(commoninfoBean)` | Terminal: null (pure in-memory extraction) |
| 2 | Logic: `FUW02501SFLogic.init()` | `init()` -> `getCommoninfoBeanInfo(commoninfoBean)` | Terminal: null (pure in-memory extraction) |

**Terminal Operations Summary:** This method produces no database or external service terminal operations. Its terminal outputs are the `sendMessageString` calls (extract values from data beans) and `getDataBean`/`getDataBeanArray` calls (navigate the bean hierarchy), all operating on the in-memory `X31SDataBeanAccess` structure. The only error terminal is the `JCCBusinessException` throw when `ssoInfoWebid` is null.

## 6. Per-Branch Detail Blocks

**Block 1** — [INITIALIZATION] (L393-L395)

> Initialize the result map and begin extracting the shared form bean hierarchy.

| # | Type | Code |
|---|------|------|
| 1 | SET | `resultMap = new HashMap<String, Object>()` // Empty map for consolidated results |
| 2 | EXEC | `webChgInfoBean = commoninfoBean.getDataBeanArray("WEB変更情報").getDataBean(0)` // Extract WEB変更情報 (WEB change info) root bean |
| 3 | EXEC | `ssoInfoBean = webChgInfoBean.getDataBeanArray("SSO情報").getDataBean(0)` // Extract SSO情報 (SSO information) at index 0 |

**Block 2** — [READ & VALIDATE] (L397-L404)

> Extract SSO system ID and WEB ID. If WEB ID is null, throw a system error — the user session is invalid.

| # | Type | Code |
|---|------|------|
| 1 | SET | `ssoInfoSysid = ssoInfoBean.sendMessageString("SYSID_21", DATABEAN_GET_VALUE)` // Extract SSO system ID |
| 2 | SET | `ssoInfoWebid = ssoInfoBean.sendMessageString("WEB_ID_21", DATABEAN_GET_VALUE)` // Extract SSO WEB ID |
| 3 | EXEC | `JFUWebCommon.isNull(ssoInfoWebid)` // Null-check on WEB ID |
| 4 | EXEC | `JCCBusinessException(JFUStrConst.ERROR_CODE_0002)` // [ERROR] Throw system error — SSO WEB ID not set (SSO情報 WebID未設定エラー) |

**Block 3** — [EXTRACT NESTED BEANS] (L406-L416)

> Extract all nested bean hierarchies: current customer info, service contract info, service contract line items, billing contract info, and the optional service contract info array.

| # | Type | Code |
|---|------|------|
| 1 | SET | `genCustKeiInfoBean = webChgInfoBean.getDataBeanArray("現顧客情報").getDataBean(0)` // Extract 現顧客情報 (current customer info) |
| 2 | SET | `svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray("サービス契約情報").getDataBean(0)` // Extract サービス契約情報 (service contract info) |
| 3 | SET | `svcKeiUcwkInfoBean = svcKeiInfoBean.getDataBeanArray("サービス契約内訳情報").getDataBean(0)` // Extract サービス契約内訳情報 (service contract breakdown) |
| 4 | SET | `seikyKeiInfoBean = svcKeiInfoBean.getDataBeanArray("請求契約情報").getDataBean(0)` // Extract 請求契約情報 (billing contract info) |
| 5 | SET | `opSvcKeiInfoBean = null` // Optional: will be populated below |
| 6 | EXEC | `opSvcKeiInfoArray = svcKeiUcwkInfoBean.getDataBeanArray("オプションサービス契約情報")` // Get optional service contract info array |

**Block 4** — [FIND MATCHING OPTION SERVICE CONTRACT] (L418-L451)

> Iterate through all optional service contracts, filtering for active statuses ("020: Viewed", "030: Contracted", "100: Service in Progress"), then match by SSO WEB ID and My Home Page service code "B002".

| # | Type | Code |
|---|------|------|
| 1 | SET | `m = 0` // Loop counter |
| 2 | CONDITION | `m < opSvcKeiInfoArray.getCount()` // Iteration guard |
| 3 | SET | `tmpOpSvcKeiInfoBean = opSvcKeiInfoArray.getDataBean(m)` // Get optional service contract bean at index m (作業用 = for processing) |
| 4 | SET | `opSvcKeiInfoWebid = tmpOpSvcKeiInfoBean.sendMessageString("WEB_ID_28", DATABEAN_GET_VALUE)` // Extract WEB ID from this optional service contract |
| 5 | SET | `opSvCd = tmpOpSvcKeiInfoBean.sendMessageString("OP_SVC_CD_28", DATABEAN_GET_VALUE)` // Extract option service code (オプションサービスコード) |
| 6 | SET | `opSvcKeiStat = tmpOpSvcKeiInfoBean.sendMessageString("OP_SVC_KEI_STAT_28", DATABEAN_GET_VALUE)` // Extract option service contract status (オプションサービス契約ステータス) |

**Block 4.1** — [IF] [status filter] `(opSvcKeiStat equals "020" OR "030" OR "100")` [CD00037_020="020"/CD00037_030="030"/CD00037_100="100"] (L427-L443)

> Only active optional service contracts are considered. Status "020" (照会済 - Viewed), "030" (締結済 - Contracted), and "100" (サービス提供中 - Service in Progress) are eligible.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `JFUStrConst.CD00037_020.equals(opSvcKeiStat)` [CD00037_020="020" 照会済] // Status = Viewed |
| 2 | CONDITION | `JFUStrConst.CD00037_030.equals(opSvcKeiStat)` [CD00037_030="030" 締結済] // Status = Contracted |
| 3 | CONDITION | `JFUStrConst.CD00037_100.equals(opSvcKeiStat)` [CD00037_100="100" サービス提供中] // Status = Service in Progress |

**Block 4.1.1** — [IF] [MY HOME PAGE MATCH] `(ssoInfoWebid equals opSvcKeiInfoWebid AND opSvCd equals "B002")` (L430-L438)

> The optional service contract must belong to the currently logged-in user (WEB ID match) and must be the My Home Page service ("B002"). This is the core matching logic.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `ssoInfoWebid.equals(opSvcKeiInfoWebid)` // SSO WEB ID matches this optional service contract's WEB ID |
| 2 | CONDITION | `JFUStrConst.CD00136_B002.equals(opSvCd)` [CD00136_B002="B002" My ホームページ] // Service code = My Home Page |
| 3 | SET | `opSvcKeiInfoBean = tmpOpSvcKeiInfoBean` // Option service contract info (確定 = confirmed/selected) |

**Block 4.2** — [ELSE-BRANCH] status not in [020, 030, 100] (L427-L447)

> Skip this optional service contract — its status does not represent an active contract.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `continue` // Skip to next iteration — status not eligible |

**Block 4.3** — [ELSE-BRANCH] status matches but WEB ID/code don't match (L430-L447)

> The contract has an active status but doesn't belong to this user's My Home Page.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `continue` // Skip — no match on WEB ID or service code |

**Block 5** — [INITIALIZE COUNTERS] (L453-L456)

> Prepare variables for the sub-option service contract analysis.

| # | Type | Code |
|---|------|------|
| 1 | SET | `acsBnskCnt = 0` // Access analysis service subscription count (アクセス解析サービス申込契約数) |
| 2 | SET | `sbopSvcKeiInfoBean = null` // Sub-option service contract info (initially null) |

**Block 6** — [SUB-OPTION SERVICE ANALYSIS] (L458-L503)

> If a matching optional service contract was found, analyze its sub-option service contracts to count active Home Page Access Analysis subscriptions.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `opSvcKeiInfoBean != null` // A matching optional service contract was found |

**Block 6.1** — [IF] optional service contract exists (L460-L502)

> The user has a matching My Home Page optional service contract. Now analyze sub-option records.

| # | Type | Code |
|---|------|------|
| 1 | SET | `opInfoOpSvcKeiNo = opSvcKeiInfoBean.sendMessageString("OP_SVC_KEI_NO_28", DATABEAN_GET_VALUE)` // Option service contract number (オプションサービス契約番号) |
| 2 | EXEC | `sbopSvcKeiInfoArray = opSvcKeiInfoArray.getDataBean(0).getDataBeanArray("サブオプションサービス契約情報")` // Get sub-option array from first item (サブオプションサービス契約情報配列 => オプションサービス契約情報の配列の1番目から取得) |

**Block 6.1.1** — [FOR LOOP] sub-option iteration (L463-L502)

> Iterate through all sub-option service contracts, filtering for Home Page Access Analysis service ("D05") with active status, then matching contract numbers to count.

| # | Type | Code |
|---|------|------|
| 1 | SET | `n = 0` // Loop counter |
| 2 | CONDITION | `n < sbopSvcKeiInfoArray.getCount()` // Iteration guard |
| 3 | SET | `tmpSbopSvcKeiInfoBean = sbopSvcKeiInfoArray.getDataBean(n)` // Get sub-option service contract bean at index n (作業用 = for processing) |
| 4 | SET | `sbopSvcKeiStat = tmpSbopSvcKeiInfoBean.sendMessageString("SBOP_SVC_KEI_STAT_29", DATABEAN_GET_VALUE)` // Sub-option service contract status (サブオプションサービス契約ステータス) |
| 5 | SET | `opSvcKeiNo = tmpSbopSvcKeiInfoBean.sendMessageString("OP_SVC_KEI_NO_29", DATABEAN_GET_VALUE)` // Option service contract number (オプションサービス契約番号) |
| 6 | SET | `sbopSvcCd = tmpSbopSvcKeiInfoBean.sendMessageString("SBOP_SVC_CD_29", DATABEAN_GET_VALUE)` // Sub-option service code (サブオプションサービスコード) |

**Block 6.1.2** — [IF] [FILTER: service code is D05] `(sbopSvcCd != "D05")` [CD00137_D05="D05"] (L485-L488)

> Non-Home Page Access Analysis sub-option contracts are skipped.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `JFUStrConst.CD00137_D05.equals(sbopSvcCd)` [CD00137_D05="D05" ホームページアクセス解析] // Service code = Home Page Access Analysis |
| 2 | EXEC | `continue` // Not a D05 sub-option — skip |

**Block 6.1.3** — [IF] [FILTER: status cancelled/canceled] `(sbopSvcKeiStat is "910" OR "920")` (L493-L497)

> Sub-option contracts that have been terminated ("910: 解約済 - Cancelled") or canceled ("920: キャンセル済 - Canceled") are skipped.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `JFUStrConst.CD00037_910.equals(sbopSvcKeiStat)` [CD00037_910="910" 解約済] // Status = Cancelled/Terminated |
| 2 | CONDITION | `JFUStrConst.CD00037_920.equals(sbopSvcKeiStat)` [CD00037_920="920" キャンセル済] // Status = Canceled |
| 3 | EXEC | `continue` // Contract is terminated or canceled — skip |

**Block 6.1.4** — [IF] [NUMBER MATCH] `(opInfoOpSvcKeiNo equals opSvcKeiNo)` (L500-L501)

> When the parent optional service contract number matches the sub-option contract number, increment the access analysis subscription count.

| # | Type | Code |
|---|------|------|
| 1 | CONDITION | `opInfoOpSvcKeiNo.equals(opSvcKeiNo)` // Contract numbers match |
| 2 | SET | `acsBnskCnt++` // Increment count — valid access analysis subscription contract |

**Block 7** — [POPULATE RESULT MAP] (L506-L518)

> Set all extracted bean references and computed values into the result map.

| # | Type | Code |
|---|------|------|
| 1 | SET | `resultMap.put("SYSID_21", ssoInfoSysid)` // SSO system ID |
| 2 | SET | `resultMap.put("WEB_ID_21", ssoInfoWebid)` // SSO WEB ID |
| 3 | SET | `resultMap.put("SSO情報", ssoInfoBean)` // SSO情報 (SSO information) |
| 4 | SET | `resultMap.put("現顧客情報", genCustKeiInfoBean)` // 現顧客情報 (current customer info) |
| 5 | SET | `resultMap.put("サービス契約情報", svcKeiInfoBean)` // サービス契約情報 (service contract info) |
| 6 | SET | `resultMap.put("サービス契約内訳情報", svcKeiUcwkInfoBean)` // サービス契約内訳情報 (service contract breakdown info) |
| 7 | SET | `resultMap.put("請求契約情報", seikyKeiInfoBean)` // 請求契約情報 (billing contract info) |
| 8 | SET | `resultMap.put("オプションサービス契約情報", opSvcKeiInfoBean)` // オプションサービス契約情報 (option service contract info) — may be null |
| 9 | SET | `resultMap.put("サブオプションサービス契約情報", sbopSvcKeiInfoBean)` // サブオプションサービス契約情報 (sub-option service contract info) — remains null (not assigned in this method) |
| 10 | SET | `resultMap.put("sbop_svc_kei_cnt", acsBnskCnt)` // サブオプションサービス契約数 (sub-option service contract count) |

**Block 8** — [RETURN] (L520)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return resultMap` // Return consolidated shared form bean info |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `commoninfoBean` | Parameter | Shared form data bean — the top-level data structure carrying all customer, service contract, and SSO context for the My Home Page screen |
| `x31s` | Acronym | X31S — Fujitsu's web data access framework for managing hierarchical form bean data |
| `SSO` | Acronym | Single Sign-On — authentication system providing user identity (SYSID, WEB ID) across the platform |
| `SYSID_21` | Field | SSO system ID — internal system identifier for the authenticated user from the SSO context |
| `WEB_ID_21` | Field | SSO WEB ID — the web-level user identifier used to match user identity across service contracts |
| `WEB_ID_28` | Field | Option service contract WEB ID — the user ID associated with a specific optional service contract record |
| `WEB変更情報` | Field | WEB change info — the root data bean containing all WEB session-related information |
| `SSO情報` | Field | SSO information — nested bean holding the user's single sign-on identity data |
| `現顧客情報` | Field | Current customer info — business contract details for the active customer |
| `サービス契約情報` | Field | Service contract info — summary of the customer's service subscription records |
| `サービス契約内訳情報` | Field | Service contract breakdown info — detailed line items within a service contract |
| `請求契約情報` | Field | Billing contract info — billing-related contract data associated with the service contract |
| `オプションサービス契約情報` | Field | Option service contract info — additional/enhanced service subscriptions beyond the base service contract |
| `サブオプションサービス契約情報` | Field | Sub-option service contract info — nested sub-services within an option service contract |
| `OP_SVC_CD_28` | Field | Option service contract service code — identifies the type of option service (e.g., "B002" = My Home Page) |
| `OP_SVC_KEI_STAT_28` | Field | Option service contract status — lifecycle status code for the option service (020/030/100 = active states) |
| `OP_SVC_KEI_NO_28` | Field | Option service contract number — unique identifier for the option service contract |
| `SBOP_SVC_KEI_STAT_29` | Field | Sub-option service contract status — lifecycle status code for the sub-option service (910/920 = terminated) |
| `OP_SVC_KEI_NO_29` | Field | Option service contract number (sub-option context) — reference to the parent option service contract number |
| `SBOP_SVC_CD_29` | Field | Sub-option service code — identifies the sub-option service type (e.g., "D05" = Home Page Access Analysis) |
| `CD00037_010` | Constant | Code category: Service contract status — "Received" (受注済) |
| `CD00037_020` | Constant | Code category: Service contract status — "Viewed" (照会済) |
| `CD00037_030` | Constant | Code category: Service contract status — "Contracted" (締結済) |
| `CD00037_100` | Constant | Code category: Service contract status — "Service in Progress" (サービス提供中) |
| `CD00037_210` | Constant | Code category: Service contract status — "Suspended/Interrupted" (休止・中断中) |
| `CD00037_220` | Constant | Code category: Service contract status — "Stopped" (停止中) |
| `CD00037_910` | Constant | Code category: Service contract status — "Terminated/Canceled" (解約済) |
| `CD00037_920` | Constant | Code category: Service contract status — "Canceled" (キャンセル済) |
| `CD00136_B002` | Constant | Service code "B002" — My Home Page (My ホームページ) — the primary Fujitsu internet service portal |
| `CD00137_D05` | Constant | Sub-option service code "D05" — Home Page Access Analysis (ホームページアクセス解析) — usage analytics for the My Home Page |
| `acsBnskCnt` | Field | Access analysis service subscription count — number of active Home Page Access Analysis sub-option contracts |
| `SBOP_SVC_KEI_CNT` | Constant | Map key `"sbop_svc_kei_cnt"` — key for storing the sub-option service contract count in the result map |
| `JFUWebCommon.isNull()` | Method | Null-check utility that returns true if the input string is null or empty |
| `JCCBusinessException` | Class | Business exception — thrown for user-facing business logic errors with error codes |
| `ERROR_CODE_0002` | Constant | System error code — thrown when SSO WEB ID is not set, indicating a session/authentication problem |
| `DATABEAN_GET_VALUE` | Constant | Data bean accessor constant — used with `sendMessageString()` to retrieve a value from a data bean |
| FTTH | Business term | Fiber To The Home — fiber-optic broadband internet service (contextual domain term for option services) |
| `resultMap` | Field | Consolidated output map — contains all extracted SSO, customer, service contract, and option service data for downstream screen processing |
