# Eo / Web / Webview / Crw03409sf

## Overview

The `CRW03409SF` module is a view-level business logic class for the **Contract Cancellation Prevention Inquiry Response** screen (解約阻止問合せ対応). It serves as the central hub for a customer service representative's primary workspace, where they manage inquiry lifecycles — accepting, rejecting, closing, escalating, and reassigning inquiries — while also launching dozens of related sub-screens via popups. This module is the main entry point for agents handling customer inquiries in the cancellation prevention domain, integrating data from the core inquiry system (CRW03407SF) and orchestrating interactions with external systems like Image System, Power CIS, Member Rank, and Lease Contract screens.

The class extends `JCCWebBusinessLogic` from the Futurity X31 web framework and follows the standard six-phase pattern used throughout the codebase: (1) retrieve inherited info, (2) set up the service form bean, (3) invoke services, (4) set processing results, (5) set inherited info for navigation, and (6) set up the common form bean.

## Key Classes and Interfaces

### CRW03409SFLogic

**Source:** [CRW03409SFLogic.java](source/koptWebB/src/eo/web/webview/CRW03409SF/CRW03409SFLogic.java)

This is the sole class in the module, implementing 36 public methods. It acts as a screen controller that both processes inquiry actions and delegates to popup screens for sub-tasks. The class was created in November 2011 and has evolved through numerous version updates — most recently adding support for new electricity systems (2015), premium support measures (2016), televili service integration (2020), CX strategy alignment (2021), and SMS messaging (2021).

The class holds two static constants for screen navigation:
- `SENYO_TAB_ID` — set to `JCRScreenConst.SCREEN_ID_CRW03409`
- `SENYO_TAB_NAME` — set to `JCRScreenConst.SCREEN_NAME_CRW03409`

#### Core Screen Flow Methods

**`init()`** (lines 103–276) — The primary entry point. Called on the initial display of the inquiry response screen. Its responsibilities are:

1. Retrieves the service form bean and common info bean.
2. Loads inherited screen information via `JCRWebCommon.getScreenInfo()`.
3. Resets button/link status on both beans.
4. Clears multiple array data beans for cancellation messages, machine business, advancement, electricity, and billing info (using constants from `CRW03407SFConst`).
5. If the service contract number (`SVC_KEI_NO`) or SYSID is not set in the bean, it initializes the next-screen ID and returns early without calling a backend service.
6. If both values are present, it builds a comprehensive mapping request via the `CRSV0084_CRSV0084OPDBMapper`, invoking 18+ setter methods to bind bean data into a `dataMap`, calls `invokeService()`, then reads back results through getter methods.
7. Calculates service fees (`JIM_FEE_RSLT`) via `JCRWebCommon.getJimFee()`.
8. Replaces `20991231` placeholder dates with "blackout" (blank) for display purposes using `JZMWebCommon.replaceTendymd()`.
9. Calls `getMainData()` to transfer the inquiry status (from `SHINSA_STA_NM`) to the dedicated tab's `STATUS` field.
10. Sets the next screen ID/name in the common form bean.

This is the most complex method in the class — it performs database-backed data enrichment via the mapper, fee calculations, date normalization, and shared inquiry main data population.

**`display()`** (lines 528–573) — Called when the user clicks the display button on the inquiry response main screen. It retrieves MYBOX count, QUEBOX count, and mail count by calling `JCRWebCommon.getMyboxQueboxMailCnt()` with both the service form bean and common info bean. This refreshes the notification counters displayed on the main screen.

**`refresh()`** (lines 1688–1744) — Performs a full page refresh of the inquiry history list screen. It reinitializes the screen info, calls `JCRWebCommon.refreshPage()` to reload all inquiry data, displays a specific message if the previous screen was the document delivery registration screen (screen `CRW04101`), and then calls `init()` to re-render the main inquiry screen from scratch. This is the method that gets called at the end of most inquiry lifecycle actions (accept, reject, close, force-get, restart).

**`clickTab()`** (lines 700–771) — Handles tab navigation on the main screen. It reads the `CURRENTTAB` field from the bean to determine which tab the user clicked. If the main screen tab (`SENYO_TAB_ID`) is selected, it calls `init()` to reinitialize. Otherwise, it sets up parent screen IDs for all 15 possible child screens (MYBOX, QUEBOX, mail, inquiry input/update, escalation, cancellation, customer edit, customer info search, memo, mail reply, mail forward, etc.), then copies bean data to the next tab via `JCRWebCommon.copyBeanToNextTab()`.

#### Inquiry Workflow Actions

These methods execute inquiry lifecycle state changes by calling backend services and then refreshing:

**`accept()`** (lines 1517–1564) — Calls `JCRWebCommon.execAccept()` with the service and common info beans, then calls `refresh()` to reload the screen. This transitions an inquiry into the "accepted" state.

**`reject()`** (lines 1460–1507) — Calls `JCRWebCommon.execReject()` with both beans, then calls `refresh()`. Returns the inquiry to a rejected/unaccepted state.

**`closeToiawase()`** (lines 946–993) — Calls `JCRWebCommon.execClose()` to close the inquiry, then calls `refresh()`.

**`getKyosei()`** (lines 1574–1621) — Calls `JCRWebCommon.execGetKyosei()` to perform a "force get" (強制取得), taking ownership of an inquiry held by another agent. Followed by `refresh()`.

**`restart()`** (lines 1631–1678) — Calls `JCRWebCommon.execRestart()` to restart/resume an inquiry, followed by `refresh()`.

**`insertEasyMemo()`** (lines 647–690) — Calls `JCRWebCommon.execInsertEasyMemo()` to update a quick memo on the inquiry, followed by `refresh()`.

#### Popup Screen Openers

This category contains ~15 methods, all following an identical pattern: get the service form bean and common info bean, call `JCRWebCommon.setScreenId()` to set the parent screen ID, call `JCRWebCommon.setScreenInfo()` with a dedicated data-copying method (e.g., `copyBeanToToiawaseIns()`, `copyBeanToEscalation()`), and return `true`. None of these methods invoke a backend service.

| Method | Popup Screen | Screen ID | Data Copy Method |
|---|---|---|---|
| `openCrw00101Ins()` | Inquiry Input (問合せ入力) | `CRW00101` | `copyBeanToToiawaseIns()` |
| `openCrw00101Upd()` | Inquiry Update (問合せ更新) | `CRW00101` | `copyBeanToToiawaseUpd()` |
| `openCrw04001()` | Escalation Execution (エスカレーション実行) | `CRW04001` | `copyBeanToEscalation()` |
| `openCrw03901()` | Inquiry Cancellation Registration (問合せキャンセル登録) | `CRW03901` | `copyBeanToCancel()` |
| `openCrw02603()` | Customer Edit (問合せ客編集) | Conditional: `CRW02602`/`CRW02604` based on whether `PROSCST_NO` and `SVC_KEI_NO` exist | `copyBeanToProscstUpd()` |
| `openCrw00401()` | Hotvoice Registration (ホットボイス登録) | `CRW00401` | `copyBeanToHotvoice()` |
| `openCrw04101()` | Document Delivery Registration (資料送付登録) | `CRW04101` | `copyBeanToSendSiryo()` |
| `openCrw02401()` | Customer Info Search (問合せ客情報一覧照会) | `CRW02401` | `copyBeanToProscstSearch()` |
| `openCrw00601()` | Memo Registration (メモ登録) | `CRW00601` | `copyBeanToMemo()` |
| `openCrw00701()` | Mail Reply (メール返信) | `CRW00701` | `copyBeanToMailHensin()` |
| `openCrw00801()` | Mail Forward (メール転送) | `CRW00801` | `copyBeanToMailTenso()` |
| `openCrw10901()` | SMS Send (SMS送信) | `CRW10901` | `copyBeanToSmsSend()` |

Notably, `openCrw02603()` (Customer Edit) has special conditional logic: if neither the inquiry customer number (`PROSCST_NO`) nor the service contract number (`SVC_KEI_NO`) is set, it navigates to screen `CRW02602`; otherwise it uses `CRW02604`. This appears to route between different customer edit flows depending on what context is available.

#### Navigation and External System Links

These methods open or navigate to external/related screens that are not simple popups:

**`clickLinkSeikyYm()`** (lines 286–352) — Opens the billing breakdown screen (請求内訳画面) as a popup (`CHW00105`). It extracts the selected detail row index, billing type number, billing target date, and billing number from the bean's detail array (`ECH0011B016CBSMSG1LIST`), passes them to the child screen via `JCHCommonConst` keys, and sets up screen info.

**`clickLinkMyboxCnt()`** (lines 362–407) — Opens the MYBOX list screen (`CRW01301`) as a popup, passing bean data via `JCRWebCommon.copyBeanToMyBOX()`.

**`clickLinkQueboxCnt()`** (lines 417–462) — Opens the QUEBOX list screen (`CRW01401`) as a popup, passing bean data via `JCRWebCommon.copyBeanToQueBOX()`.

**`clickLinkMailCnt()`** (lines 472–517) — Opens the mail simple send screen (`CRW10301`) as a popup, passing bean data via `JCRWebCommon.copyBeanToSendMail()`.

**`execute()`** (lines 583–636) — Opens an external system screen as a popup. Calls `JCRWebCommon.execute()` which handles a password/credential flow for launching an external system. After the call returns, it resets the next screen ID to the main screen.

**`clickLinkMskmshoNoUk()`** (lines 1805–1857) — Handles clicking the application document number (receipt) link. It retrieves an external URL from system constants (`JZDStrConst.PROP_KEY_MSKMSHO_SANSHO_URL`), obtains a one-time password via `JCRWebCommon.getOnetPwdImgSys()`, formats a URL with the application change document number and the one-time password, stores it in the bean as `IMG_SYS_URL`, sets a display flag `IMG_SYS_DSP_FLG` to `true`, and returns to the main screen.

**`clickLinkTrank()`** (lines 2121–2170) — Handles clicking the member rank link. Transitions to screen `KKW00196` (Member Rank inquiry screen) using `JCRWebCommon.clickLinkTrank()` for data preparation. This was added in v26.00.00 as part of premium support policy measures.

**`clickLinkVcms()`** (lines 2182–2231) — Handles the "transition to lease contract screen" link. Transitions to screen `KKW00198` (lease contract screen) using `JCRWebCommon.clickLinkVcms()`. Added as part of the televili service integration.

**`executeCis()`** (lines 2063–2109) — Handles the Power CIS button press. Calls `JCRWebCommon.executeCis()` to integrate with the external Power Customer Information System. Reset the next screen ID back to the main screen afterward.

**`clickSaihakko()`** (lines 1883–1984) — Handles the reissue button press for ID registration certificate re-issuance. It calls the `CRSV0281_CRSV0281OPDBMapper` service with a use case ID of `CRSV0281`. The service validates that the user is a master member (individual or legal entity); if not, it displays an error message (`EKB1040_JW`). On success, it sets `CRW03410_OPN_FLG` to `true`, enabling the `openCrw03410()` popup. This feature was added in v13.00.00 as part of ID registration certificate re-issuance improvements.

**`openCrw03410()`** (lines 1994–2051) — Opens the ID registration certificate re-issuance information output screen as a popup (`CRW03410`). It passes URL info, web access NS key, NS key password, and expiration datetime from the bean to the child screen via `paramMap2`. It resets `CRW03410_OPN_FLG` to `false` before processing.

**`transferToMain()`** (lines 1755–1796) — Navigates back to the inquiry response main screen (`CRW01201`), copying bean data via `JCRWebCommon.copyBeanToInitMain()`. This is used when the user wants to return to the menu-level main screen from a child tab.

**`getMainData()`** (lines 1863–1871) — A private helper that transfers the inquiry main screen's status (from `SHINSA_STA_NM`) to the dedicated tab's `STATUS` field (`CRW03407SFConst.STATUS`). This ensures the status is visible in the dedicated tab view.

## How It Works

### Typical Request Flow

When a user first navigates to the inquiry response screen:

1. The X31 framework routes the request to `CRW03409SFLogic.init()`.
2. The service form bean is populated with inherited info (screen ID, SYSID, service contract number).
3. If the inherited info is incomplete (no service contract number or SYSID), the method returns early with the next screen set to `CRW03409`.
4. If complete, a comprehensive service call is made via `CRSV0084_CRSV0084OPDBMapper`. The mapper binds data from the form bean across 18+ setter methods (covering inquiry data, billing info, machine info, etc.), calls `invokeService()` to execute the backend service, and then reads back all results.
5. Post-processing includes: fee calculation, date blanking (20991231 → blank), main data transfer, and setting up the common info bean for navigation.
6. The screen renders with enriched inquiry data, notification counts, and all action buttons visible.

### Inquiry Lifecycle Flow

A typical inquiry interaction follows this pattern:

```
init() → user reviews inquiry → action (accept/reject/close/...) → refresh() → init()
```

Each action method (accept, reject, close, getKyosei, restart, insertEasyMemo) follows an identical pattern:
1. Acquire both beans.
2. Call the appropriate `JCRWebCommon.execXXX()` method to execute the backend service.
3. Call `refresh()` which in turn calls `refreshPage()` (to reload all data), then calls `init()` to reinitialize the main screen.

This ensures the screen always displays the latest state after any inquiry action.

### Tab Navigation Flow

The main screen uses a tabbed interface. When the user clicks a tab:
1. `clickTab()` reads `CURRENTTAB` to determine which tab was clicked.
2. MYBOX/QUEBOX/mail tabs update the notification counts via `getMyboxQueboxMailCnt()`.
3. The main screen tab calls `init()` to reinitialize all data.
4. Any other tab has its screen ID set, parent ID set, and bean data copied, enabling navigation to the child tab view.

### Popup Screen Pattern

All popup screen openers follow the same pattern:
1. Get `bean` (service form) and `commoninfoBean` (common info).
2. Call `JCRWebCommon.setScreenId(this, targetScreenId, parentId)` to establish parent-child relationship.
3. Call `JCRWebCommon.setScreenInfo(this, targetScreenId, dataMap)` with bean data prepared by a `copyBeanToXXX()` helper.
4. Return `true` to trigger the popup.

No popup opens involve backend service calls at the point of opening — all service communication happens on the child screens themselves.

## Data Model

This module does not define its own entity classes. Instead, it works exclusively with `X31SDataBeanAccess` and `X31SDataBeanAccessArray` objects from the X31 framework. Data flows through the following channels:

### Service Form Bean (`X31SDataBeanAccess`)

The primary data carrier, populated from `getServiceFormBean()`. Contains:
- Inquiry identification: `SVC_KEI_NO` (service contract number), `SYSID`, `PROSCST_NO` (inquiry customer number)
- Inquiry status: `SHINSA_STA_NM` (review status name) → copied to `STATUS` for the dedicated tab
- Billing data: `SEIKY_KEI_NO`, `SLCT_DETAIL_INDEX`, and array `ECH0011B016CBSMSG1LIST` (billing detail rows with dates, numbers)
- Date fields: `OPE_DATE` (operation date), various date fields cleared during init
- Flags: `DSP_FLG` (display flag), `CRW03410_OPN_FLG` (reissue popup enable flag), `IMG_SYS_DSP_FLG` (image system display flag)
- Fee data: `ICJKN_SETTE_CD`, `JIM_FEE`, `TMP_PAY_PRC_AMNT` → `JIM_FEE_RSLT`
- External system fields: `KEI_CHGE_MSKMSHO_NO`, `ONET_PWD`, `IMG_SYS_URL`, `URL_INFO`, `WEB_ACCSS_NSKEY`, `WEB_ACCSS_NSKEY_PWD`, `YK_KIGEN_DTM`

### Common Info Bean (`X31SDataBeanAccess`)

Obtained via `getCommonInfoBean()`. Contains shared navigation state:
- `NEXT_SCREEN_ID` / `NEXT_SCREEN_NAME` — destination for navigation after the action completes

### Mapper Data Maps

During `init()`, a `HashMap<String, Object>` (dataMap) is built using the `CRSV0084_CRSV0084OPDBMapper`. The mapper's 18+ `setXXX()` methods bind bean data into the map, and the subsequent `getXXX()` methods write service results back into the bean. The use case ID for this service call is `CRSV0084`.

During reissue handling (`clickSaihakko()`), the `CRSV0281_CRSV0281OPDBMapper` is used with use case ID `CRSV0281` to validate the user's membership type.

### Screen Navigation Keys

Child screens receive data via `JCRWebCommon.setScreenInfo()`, which serializes a `Map<String, Object>` into the shared context. Key data keys include:
- `JCHCommonConst.SCREEN_HKTGI_SEIKY_KEI_NO` — billing type number
- `JCHCommonConst.SCREEN_HKTGI_SEIKY_YM` — billing target date (YYYYMM)
- `JCHCommonConst.SCREEN_HKTGI_SEIKY_NO` — billing number

### Cross-Module Data References

The module imports constants from many other screen modules, referencing their model fields directly:
- `CRW03407SFConst` — the parent inquiry screen's constants (used extensively for field names)
- `CRW01201SFConst` — main inquiry screen tab constant (`CURRENTTAB`)
- `JACScreenConst` — billing screen IDs and keys
- `JCRScreenConst` — numerous inquiry-related screen IDs
- `JKKScreenConst` — member rank and lease contract screen IDs
- `CommonInfoCFConst` — shared navigation constants
- `JPCModelConstant` — function codes for service invocation
- `JPCOnlineMessageConstant` — message code keys for displaying feedback to users

## Dependencies and Integration

### Internal Dependencies

The module depends on a wide range of internal packages for shared utilities and constants:

| Package/Class | Purpose |
|---|---|
| `eo.web.webview.CRW03407SF.CRW03407SFConst` | Constants from the parent inquiry response screen |
| `eo.web.webview.CRW01201SF.CRW01201SFConst` | Main inquiry screen tab constants |
| `eo.web.webview.CommonInfoCF.CommonInfoCFConst` | Shared common info constants |
| `eo.web.webview.JCCWebBusinessLogic` | Parent class providing base business logic |
| `eo.web.webview.common.JCRWebCommon` | Shared web utilities (screen setup, data copying, action execution) |
| `eo.web.webview.common.JCCWebCommon` | Common web utilities (screen info, external system launch) |
| `eo.web.webview.common.JZMWebCommon` | Date processing utilities |
| `eo.web.webview.common.JZDWebCommon` | System constant retrieval |
| `eo.web.webview.common.JCHCommonConst` | Cross-screen data transfer constants |
| `eo.web.webview.common.JACScreenConst` | Billing screen constants |
| `eo.web.webview.common.JKKScreenConst` | Member/lease contract screen constants |
| `eo.web.webview.common.JCRScreenConst` | Inquiry screen constants |
| `eo.web.webview.mapping.CRSV0084_CRSV0084OPDBMapper` | Data mapping for inquiry data retrieval |
| `eo.web.webview.mapping.CRSV0281_CRSV0281OPDBMapper` | Data mapping for reissue validation |
| `eo.common.util.JCRUtilCommon` | Null-check and utility methods |
| `eo.common.constant.JPCModelConstant` | Function code constants |
| `eo.common.constant.JPCOnlineMessageConstant` | Message code constants |
| `eo.common.constant.JCRStrConst` / `JZDStrConst` | String constants |

### Inbound Dependencies

Two XML configuration files reference this logic class:

- `WEBGAMEN_CRW034090PJP.xml` — Web page configuration mapping the UI to this logic class
- `x31business_logic_CRW03409SF.xml` — X31 business logic configuration wiring this class into the framework

### External System Integrations

The module interfaces with several external systems:

1. **Image System (IMS)** — Accessed via `clickLinkMskmshoNoUk()`. Constructs a URL with a one-time password for viewing application documents.
2. **Power CIS** — Accessed via `executeCis()`. An external customer information system for power services.
3. **Member Rank System** — Accessed via `clickLinkTrank()`. Navigates to the `KKW00196` screen for member rank inquiries.
4. **Lease Contract System (VCMS)** — Accessed via `clickLinkVcms()`. Navigates to the `KKW00198` screen for lease contract management.
5. **SMS Service** — Accessed via `openCrw10901()`. Opens a popup for sending SMS messages.
6. **Backend EJB Services** — Accessed via `CRSV0084` and `CRSV0281` use case IDs through `invokeService()`.

## Notes for Developers

### Adding a New Popup Screen

If you need to add a new popup screen opener, follow the existing pattern:
1. Create a public method returning `boolean` that throws `Exception`.
2. Get both `bean` and `commoninfoBean`.
3. Call `JCRWebCommon.setScreenId(this, newScreenId, SENYO_TAB_ID)`.
4. Call `JCRWebCommon.setScreenInfo(this, newScreenId, JCRWebCommon.copyBeanToXXX(bean, commoninfoBean))`.
5. Return `true`.
6. Add the corresponding `copyBeanToXXX()` method in `JCRWebCommon` if one doesn't already exist.
7. Define a screen ID constant in the appropriate `*ScreenConst` class.

### Inquiry Lifecycle Actions

For new inquiry lifecycle actions (like accept/reject/close), the pattern is:
1. Create a method that gets both beans.
2. Create a `paramBean` array: `{bean, commoninfoBean}`.
3. Call the appropriate `JCRWebCommon.execXXX(paramBean, this)` method.
4. Call `refresh()` to reload the screen.

### Important Gotchas

- **`init()` returns early** if `SVC_KEI_NO` or `SYSID` is not set in the bean. In this case, no backend service is called and the screen just shows the parent tab identifier. Always ensure the inherited info is complete before expecting service data.
- **The mapper in `init()` has been extended** over time. Each new data field added to the screen required a corresponding `setXXX()` and `getXXX()` method on the `CRSV0084` mapper. Do not remove any existing mapper calls in `init()` without understanding the downstream impact.
- **`refresh()` calls `init()`** at the end. This means calling `refresh()` will re-execute the entire service call from `init()`, including the mapper operations. Be aware of the performance implications if called frequently.
- **`clickLinkVcms()` and `clickLinkTrank()`** navigate to different screens (`KKW00198` and `KKW00196`) rather than opening popups. This is because they use `JCRWebCommon.clickLinkXXX()` which may trigger a full-page transition rather than a popup.
- **`openCrw02603()` has conditional screen routing** based on whether `PROSCST_NO` and `SVC_KEI_NO` are set. This is an unusual pattern — most popup openers go to a single target screen. Document this branching behavior clearly in the code.
- **The `receiveMessageWeb()` override** (lines 88–93) is auto-generated and simply returns `false`. It does not perform any custom logic and should be left unchanged.
- **The `getMainData()` method** is the only `private` method in the class and exists solely to transfer the inquiry status from the main screen's `SHINSA_STA_NM` field to the dedicated tab's `STATUS` field.

### Version History Highlights

- **v12.00.00** — Added dedicated tab support with new mapper fields.
- **v12.01.00** — Commonized inquiry response main screen items across multiple screens.
- **v13.00.00** — Added ID registration certificate re-issuance feature.
- **v16.00.00** — Added new electricity system support.
- **v26.00.00** — Added premium support policy measures (member rank link).
- **v36.00.00** — Performance improvements.
- **v48.00.00** — Televili service business integration.
- **v53.00.00** — CX strategy WG alignment (September release lease division).

### Diagram

The following diagram shows the main class and its method groupings:

```mermaid
flowchart TD
    CRW03409SF["CRW03409SFLogic<br/>Contract Cancellation Inquiry Response"]

    subgraph CoreFlows["Core Screen Flows"]
        INIT["init() - Initial display<br/>mapper-based data enrichment"]
        DISPLAY["display() - Refresh<br/>MYBOX/QUEBOX/mail counts"]
        REFRESH["refresh() - Full page<br/>reload + init"]
        TAB["clickTab() - Tab navigation"]
    end

    subgraph WorkflowActions["Inquiry Workflow Actions"]
        ACCEPT["accept() - Accept inquiry"]
        REJECT["reject() - Reject inquiry"]
        CLOSE["closeToiawase() - Close inquiry"]
        KYOSEI["getKyosei() - Force take over"]
        RESTART["restart() - Resume inquiry"]
        MEMO["insertEasyMemo() - Update quick memo"]
    end

    subgraph PopupScreens["Popup Screen Openers"]
        INQ_INS["openCrw00101Ins() - Create inquiry"]
        INQ_UPD["openCrw00101Upd() - Update inquiry"]
        ESCALATION["openCrw04001() - Escalation"]
        CANCEL["openCrw03901() - Cancel inquiry"]
        PROSCST_UPD["openCrw02603() - Edit customer<br/>(conditional routing)"]
        HOTVOICE["openCrw00401() - Hotvoice reg."]
        SIRYO["openCrw04101() - Document delivery"]
        PROSCST_SRH["openCrw02401() - Customer search"]
        MEMO_REG["openCrw00601() - Memo reg."]
        MAIL_HEN["openCrw00701() - Mail reply"]
        MAIL_TEN["openCrw00801() - Mail forward"]
        SMS["openCrw10901() - SMS send"]
        ID_REISSUE["openCrw03410() - ID cert. reissue"]
    end

    subgraph NavigationLinks["Navigation & External Links"]
        SEIKIY["clickLinkSeikyYm() - Billing detail"]
        MYBOX_LINK["clickLinkMyboxCnt() - MYBOX list"]
        QUEBOX_LINK["clickLinkQueboxCnt() - QUEBOX list"]
        MAIL_CNT["clickLinkMailCnt() - Mail send"]
        MSKMSHO["clickLinkMskmshoNoUk() - App. doc. number"]
        TRANK["clickLinkTrank() - Member rank"]
        VCMS["clickLinkVcms() - Lease contract"]
        REISSUE["clickSaihakko() - Reissue button<br/>(validates member type)"]
        CIS["executeCis() - Power CIS"]
        EXECUTE["execute() - External system"]
    end

    INIT --> TAB
    TAB --> DISPLAY
    ACCEPT --> REFRESH
    REJECT --> REFRESH
    KYOSEI --> REFRESH
    RESTART --> REFRESH
    CLOSE --> REFRESH
    MEMO --> REFRESH

    CRW03409SF --> CoreFlows
    CRW03409SF --> WorkflowActions
    CRW03409SF --> PopupScreens
    CRW03409SF --> NavigationLinks
```
