# Eo / Web / Webview / Kkw02404sf

## Overview

The `KKW02404SF` module is a web view (screen controller) for managing **fixed global IP address information changes** within the contract management system (契約管理システム). Specifically, it handles three types of operations on a customer's optional service contract: **dissolution (解約)**, **reinstatement (回復)**, and **reservation cancellation (予約取消)**. Users navigate to this screen from the optional service contract list screen, and the module validates the current contract status before allowing any operation — ensuring that operations are only permitted in valid states (e.g., you cannot "dissolve" an already-dissolved contract).

The module follows the standard Fujitsu Futurity X31/X33 web framework pattern, with a logic class handling business operations, a comprehensive data bean holding all form fields and list data, dedicated list-item data beans for embedded tables, and a checker class (currently a no-op placeholder) for future GUI validation.

## Key Classes and Interfaces

### KKW02404SFLogic

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFLogic.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFLogic.java)

The central controller class. It extends `JCCWebBusinessLogic` and handles all screen-level business logic for this page. It is referenced by 4 XML config files.

#### Entry Points (action methods)

- **`actionInit()`** — The initial display handler. This is the primary entry point when the user first lands on the page. It:
  1. Fetches screen info and acquires the service form bean.
  2. Calls `setHktgiBean()` to populate the bean with data from the customer contract inheritance list (SYSID, service contract number, error division, error reason codes, operation service contract number, operation division, application number, application detail number).
  3. Calls `executeInitSvc()` to call the **KKSV0264** service (fixed global IP address consultation) and populate the bean with service-level data.
  4. Calls `setDataInit()` to set default values — including deriving the "end-of-use date" (年/月/日) from the "operation date", and handling the case where the end-of-use date equals the maximum date (displayed as empty).
  5. Validates the **operation division (処理区分)** against the **optional service contract status (オプションサービス契約ステータス)** and displays appropriate info/warning messages. If the status does not permit the requested operation, it sets the `chg_kahi_flg` (更新状態可否フラグ) to `false` to disable updates.

- **`actionUpd()`** — The update confirmation button handler. It routes based on the `TRAN_DIV` (処理区分):
  - **Dissolution (解約):** Calls `setDataDsl()` to assemble the end-of-use date and advance special item, then calls `executeDslSvc()` to invoke the KKSV0265 dissolution confirmation service. On success, navigates to screen `KKW02405` (confirmation screen).
  - Error handling: If the service returns a `rtn_msg_id`, displays a replacement error message instead of navigating.

- **`actionFix()`** — The finalize/confirm button handler. It performs the actual business operation based on `TRAN_DIV`:
  - **Dissolution (解約):** Invokes `executeDslSvc()` with `FUNC_CD_1` (the confirmation function code) to execute the dissolution, then navigates to `KKW02406` (completion screen).
  - **Reinstatement (回復):** Calls `setDataKaihk()` to set the reinstatement date to the current operation date, then calls `executeKaihkSvc()` (KKSV0266) with `FUNC_CD_1`.
  - **Reservation Cancellation (予約取消):** Calls `setDataRsvcl()` to set the advance special item, then calls `executeRsvclSvc()` (KKSV0267) with `FUNC_CD_1`.
  - On success, displays a completion message and navigates to screen `KKW02406`.
  - On error, displays the error message with context-specific text (e.g., "operation" for reservation cancellation).

- **`actionClear()`** — Clear/reset handler. Re-fetches service data and reinitializes the bean — useful for resetting the form.

- **`actionBack()`** — Back button handler. Sets the next screen ID to the current screen's ID in the common info bean and returns `true`.

- **`actionFin()`** — Finish handler. Sets the next screen ID to the caller screen (the original list screen) and returns `true`.

- **`actionShusei()`** — Correction handler. Sets the next screen ID to `KKW02404` (the correction screen) for editing.

#### Service Execution Methods

Each operation delegates to a private service execution method that follows a consistent pattern:

| Method | Use Case ID | Mapper | Operation |
|--------|------------|--------|-----------|
| `executeInitSvc()` | KKSV0264 | KKSV0264_KKSV0264OPDBMapper | Fixed global IP address consultation |
| `executeDslSvc()` | KKSV0265 | KKSV0265_KKSV0265OPDBMapper | Dissolution confirmation |
| `executeKaihkSvc()` | KKSV0266 | KKSV0266_KKSV0266OPDBMapper | Reinstatement |
| `executeRsvclSvc()` | KKSV0267 | KKSV0267_KKSV0267OPDBMapper | Reservation cancellation |

Each method:
1. Creates input/output parameter maps.
2. Instantiates the appropriate mapper class.
3. Sets up CC (confirmation code), SOD (issuance), and WORK mappings.
4. Calls `invokeService()` (inherited from the framework).
5. Retrieves results via the mapper's getter methods.
6. For operations (dsl/kaihk/rsvcl), clears `RTN_MSG_ID` before calling and reads it after to check for errors.

#### Data Setup Methods

- **`setHktgiBean()`** — Populates the bean with data extracted from the customer contract inheritance list. Gets SYSID, service contract number, error division, error reason codes (as a list), operation service contract number, operation division, application number, and application detail number. Also sets the reservation application date to `20991231` (a placeholder).

- **`setDataInit()`** — Sets up the page for initial display. Derives year/month/day components from the operation date for the end-of-use date fields. Handles the special case where the service end date equals the maximum date (displayed as empty). Initializes the aging info list with a single entry (aging subtype code `"002"` for the fixed global IP address). Sets `chg_kahi_flg` to `true` (allowing updates).

- **`setDataDsl()`** — Prepares data for the dissolution confirmation. Composes the end-of-use date from year/month/day components and sets it to both `USE_ENDYMD` and `SVC_ENDYMD`. Sets the service charge end date to the operation date. Sets the advance special item to "固定グローバルIPアドレス情報 解約".

- **`setDataKaihk()`** — Prepares data for reinstatement. Sets the reinstatement date to the current operation date. Sets the advance special item to "固定グローバルIPアドレス情報 回復".

- **`setDataRsvcl()`** — Prepares data for reservation cancellation. Sets the advance special item to "固定グローバルIPアドレス情報 予約取消".

- **`getMsgRep()`** — Provides text replacements for error messages. Given a `TRAN_DIV` and `rtn_msg_id`, it returns a `String[]` with two replacement values. For example, for dissolution errors on past dates (EKB0690-NW), it replaces with ["利用終了日", "過去"]. For reinstatement errors outside the possible period (EKB5440-JW), it replaces with ["回復可能期間外", "回復は"].

### KKW02404SFBean

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFBean.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFBean.java)

The main form/data bean. Extends `X33VViewBaseBean` and implements `X33VListedBeanInterface`, `X31CBaseBean`, and `Serializable`. This is the primary data carrier between the view layer and the business logic layer. Referenced by 3 XML config files.

#### Static Fields (with getter/setter quadruplets)

Each static display field follows a consistent pattern: `*_update` (update flag), `*_value` (display value), `*_enabled` (boolean enable/disable flag, where applicable), and `*_state` (validation/error state).

| Field | Type | Description |
|-------|------|-------------|
| `fixipad` | String/Boolean | Fixed global IP address |
| `sub_netmask` | String/Boolean | Subnet mask |
| `use_staymd` | String/Boolean | Service start date |
| `use_endymd` | String | End-of-use date |
| `use_endymd_year` | String/Boolean | End-of-use date (year) |
| `use_endymd_mon` | String/Boolean | End-of-use date (month) |
| `use_endymd_day` | String/Boolean | End-of-use date (day) |
| `sysid` | String | SYSID |
| `svc_kei_no` | String | Service contract number |
| `ido_div` | String | Error division |
| `op_svc_kei_no` | String | Optional service contract number |
| `tran_div` | String | Operation division (dissolution/reinstatement/reservation cancellation) |
| `use_ymd` | String | Operation date |
| `op_svc_cd` | String | Optional service code |
| `mskm_no` | String | Application number |
| `mskm_dtl_no` | String | Application detail number |
| `last_upd_dtm_op` | String | Last update timestamp (optional service contract) |
| `svc_staymd` | String | Service start date (YMD) |
| `svc_endymd` | String | Service end date (YMD) |
| `svc_chrg_endymd` | String | Service charge end date (YMD) |
| `kaihk_ymd` | String | Reinstatement date (YMD) |
| `rsv_aply_ymd` | String | Reservation application date |
| `rtn_msg_id` | String | Return message ID (from service) |
| `gene_add_dtm` | String | Registration timestamp |
| `svc_kei_stat` | String | Service contract status |
| `svc_kei_ucwk_no` | String | Service contract internal number |
| `gene_add_dtm_svc_kei_ucwk` | String | Registration timestamp (service contract internal number) |
| `op_svc_kei_stat` | String | Optional service contract status |
| `chg_kahi_flg` | Boolean | Update state flag (controls whether the form is editable) |
| `prg_tkjk_1` | String/Boolean | Advance special item 1 |

#### List Fields

| Field | Type | Description |
|-------|------|-------------|
| `cust_kei_hktgi_list` | `X33VDataTypeList<KKW02404SF01DBean>` | Customer contract inheritance list |
| `ido_rsn_list` | `X33VDataTypeList` | Error reason list (contains `KKW02404SF02DBean` items) |
| `aging_info_list` | `X33VDataTypeList` | Aging information list (contains `KKW02404SF03DBean` items) |

#### Key Methods

- **Constructor** — Initializes the three `X33VDataTypeList` fields. The `cust_kei_hktgi_list` is initialized with 1 pre-created `KKW02404SF01DBean`.
- **`loadModelData()`**, **`storeModelData()`**, **`listKoumokuIds()`**, **`typeModelData()`** — Framework methods for model-based data loading/storing, implementing `X33VListedBeanInterface` and `X31CBaseBean`. These methods map field names to data types and manage the bean's internal data store.
- **`addListDataInstance()`**, **`removeElementFromListData()`**, **`clearListDataInstance()`** — Framework methods for managing list data (adding, removing, and clearing items in typed lists).

### KKW02404SF01DBean

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SF01DBean.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SF01DBean.java)

A list-item data bean representing a single row in the **customer contract inheritance list** (`cust_kei_hktgi_list`). It implements `X33VDataTypeBeanInterface`, `X33VListedBeanInterface`, and `Serializable`.

#### Fields

| Field | Type | Description |
|-------|------|-------------|
| `sysid` | String | SYSID (system ID) |
| `svc_kei_no` | String | Service contract number |
| `ido_div` | String | Error division |
| `ido_rsn_cd_list` | `X33VDataTypeList` | Error reason code list (embedded `KKW02404SF02DBean` items) |
| `op_svc_kei_no_list` | `X33VDataTypeList` | Optional service contract number list |
| `tran_div` | String | Operation division |
| `mskm_no` | String | Application number |
| `mskm_dtl_no` | String | Application detail number |
| `ido_rsn_memo` | String | Error reason memo |
| `index` | int | Row index in the list |

#### Key Methods

- **Constructor** — Initializes `ido_rsn_cd_list` and `op_svc_kei_no_list` as empty `X33VDataTypeList`.
- **`loadModelData()`** — Loads field data from the internal data store using a key/subkey lookup pattern. Maps each field name (e.g., `KKW02404SFConst.SYSID`) to the correct subkey and type.
- **`storeModelData()`** — Stores field data to the internal data store. Three overloaded versions handle simple values, values with type coercion, and values with `isSetAsString` flag for string conversion.
- **`listKoumokuIds()`** — Returns the list of field name strings managed by this bean.
- **`typeModelData()`** — Returns the `Class<?>` for a given field name and subkey, enabling type-safe data access.
- **`addListDataInstance()`**, **`removeElementFromListData()`**, **`clearListDataInstance()`** — Manage the embedded lists (`ido_rsn_cd_list`, `op_svc_kei_no_list`).
- **`getJsflist_ido_rsn_cd()`** / **`getJsflist_op_svc_kei_no()`** — Convert `X33VDataTypeList` contents to `ArrayList<SelectItem>` for JSF dropdown rendering.

### KKW02404SF02DBean

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SF02DBean.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SF02DBean.java)

A list-item data bean representing a single row in the **error reason list** (`ido_rsn_list`). It implements `X33VDataTypeBeanInterface`, `X33VListedBeanInterface`, and `Serializable`.

#### Fields

| Field | Type | Description |
|-------|------|-------------|
| `ido_rsn_cd` | String | Error reason code |
| `ido_rsn_memo` | String | Error reason memo |
| `index` | int | Row index |

Each field has the standard `_update`, `_value`, and `_state` triple.

This bean is simpler than `KKW02404SF01DBean` — it has no embedded lists and no `SelectItem` conversion methods. It follows the same `loadModelData()` / `storeModelData()` / `typeModelData()` pattern for data management.

### KKW02404SF03DBean

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SF03DBean.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SF03DBean.java)

A list-item data bean representing a single row in the **aging information list** (`aging_info_list`). It implements `X33VDataTypeBeanInterface`, `X33VListedBeanInterface`, and `Serializable`.

#### Fields

| Field | Type | Description |
|-------|------|-------------|
| `aging_sbt_cd` | String | Aging subtype code (always `"002"` for fixed global IP address) |
| `aging_tg_value` | String | Aging target value (the value to age) |
| `index` | int | Row index |

Like `KKW02404SF02DBean`, this is a straightforward data holder without embedded lists or special conversion methods.

### KKW02404SFChecker

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFChecker.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFChecker.java)

Implements `X31SGuiCheckBase` from the Futurity X31 framework. Its constructor receives a reference to the business logic class (`KKW02404SFLogic`). The `checkMethod()` currently always returns `true`, making it a no-op placeholder. This is likely a framework hook for future GUI-level validation (e.g., field-by-field checks before submission) that has not yet been implemented.

### KKW02404SFConst

**Path:** [source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFConst.java](source/koptWebB/src/eo/web/webview/KKW02404SF/KKW02404SFConst.java)

A constants utility class (private constructor, all `public static final String` fields). It defines all the field name keys used throughout the module for data bean communication. Key constants include:

- **Core identifiers:** `FIXIPAD` (固定グローバルIPアドレス), `SUB_NETMASK` (サブネットマスク), `SYSID` (SYSID), `SVC_KEI_NO` (サービス契約番号), `OP_SVC_KEI_NO` (オプションサービス契約番号)
- **Dates:** `USE_STAYMD` (利用開始日), `USE_ENDYMD` (利用終了日), `USE_ENDYMD_YEAR/MON/DAY`, `USE_YMD` (運用年月日), `SVC_STAYMD` (サービス開始年月日), `SVC_ENDYMD` (サービス終了年月日), `KAIHK_YMD` (回復年月日)
- **Error handling:** `IDO_DIV` (異動区分), `IDO_RSN_LIST` (異動理由リスト), `IDO_RSN_CD` / `IDO_RSN_MEMO` (異動理由コード/メモ)
- **Operations:** `TRAN_DIV` (処理区分), `MSKM_NO` (申請番号), `MSKM_DTL_NO` (申請明細番号)
- **Aging:** `AGING_INFO_LIST` (エイジング情報リスト), `AGING_SBT_CD` (エイジング種別コード), `AGING_TG_VALUE` (エイジング対象値)
- **Status/flags:** `SVC_KEI_STAT` (サービス契約ステータス), `OP_SVC_KEI_STAT` (オプションサービス契約ステータス), `CHG_KAHI_FLG` (更新状態可否フラグ), `RTN_MSG_ID` (返却メッセージID), `PRG_TKJK_1` (進捗特記事項1)
- **Inheritance list sub-keys:** `SYSID_01`, `SVC_KEI_NO_01`, `IDO_DIV_01`, `IDO_RSN_CD_01`, `IDO_RSN_MEMO_01`, `TRAN_DIV_01`, `OP_SVC_KEI_NO_01`, `MSKM_NO_01`, `MSKM_DTL_NO_01`
- **Aging list sub-keys:** `AGING_SBT_CD_03`, `AGING_TG_VALUE_03`

## How It Works

### Typical Request Flow (Dissolution)

Here is a step-by-step trace of a dissolution (解約) operation:

```
flowchart TD
    A["User: Navigate from
Optional Service Contract List"] --> B["actionInit()"]
    B --> C["setHktgiBean()
Extract data from
customer contract
inheritance list"]
    B --> D["executeInitSvc()
Call KKSV0264
(consultation service)"]
    B --> E["setDataInit()
Set defaults:
- End-of-use date
- Aging info list
- Enable flag"]
    E --> F["Validate TRAN_DIV
vs OP_SVC_KEI_STAT"]
    F -->|Valid| G["Display page
with data"]
    F -->|Invalid| H["Set chg_kahi_flg = false
Show warning message"]

    G --> I["User: Click Update
Confirmation Button"]
    I --> J["actionUpd()"]
    J --> K["setDataDsl()
Assemble end-of-use date"]
    J --> L["executeDslSvc()
Call KKSV0265
(dissolution confirmation)"]
    L --> M{rtn_msg_id?
Error?}
    M -->|No| N["Navigate to
KKW02405
(confirmation screen)"]
    M -->|Yes| O["Display error
message"]

    N --> P["User: Click
Confirm Button"]
    P --> Q["actionFix()"]
    Q --> R["executeDslSvc()
KKSV0265 with
FUNC_CD_1
(execution)"]
    R --> S{rtn_msg_id?
Error?}
    S -->|No| T["Display completion
message"]
    S -->|Yes| O
    T --> U["Navigate to
KKW02406
(completion screen)"]
```

### Status-Based Operation Guards

The `actionInit()` method enforces which operations are available based on the current contract status:

- **Dissolution (解約):** Only allowed when the optional service contract status is `030` (結済), `100` (サービス提供中), or `210` (休止・中断中). Otherwise, a warning is displayed and the form is disabled.
- **Reinstatement (回復):** Only allowed when status is `910` (解約済). Otherwise, a warning is displayed and the form is disabled.
- **Reservation Cancellation (予約取消):** Only allowed when status is `010` (受付済), `020` (照会済), `030` (結済), or `100` (サービス提供中). Otherwise, a warning is displayed and the form is disabled.

### Error Message Replacement

The `getMsgRep()` method provides context-aware error message text replacement. When the service layer returns an error message ID, this method maps it to human-readable replacement text. Examples:

- **EKB0690-NW** (dissolution): "End-of-use date" / "past date" — used when the dissolution date is before today.
- **EKB5440-JW** (reinstatement): "Outside possible reinstatement period" / "Reinstatement is" — used when trying to reinstate outside the allowed window.
- **EKB5420-JW** (reservation cancellation): "Optional" / "reservation cancellation is not possible" — used when the service does not support reservation cancellation.

## Data Model

### Bean Hierarchy

The data model follows a master-detail structure with nested lists:

```
KKW02404SFBean (main form bean)
├── cust_kei_hktgi_list: X33VDataTypeList<KKW02404SF01DBean>
│   └── Each row contains:
│       ├── sysid, svc_kei_no, ido_div, tran_div
│       ├── mskm_no, mskm_dtl_no, ido_rsn_memo
│       ├── ido_rsn_cd_list: X33VDataTypeList (embedded list)
│       │   └── KKW02404SF02DBean (error reason code + memo)
│       └── op_svc_kei_no_list: X33VDataTypeList
├── ido_rsn_list: X33VDataTypeList
│   └── Each row: KKW02404SF02DBean (error reason code + memo)
├── aging_info_list: X33VDataTypeList
│   └── Each row: KKW02404SF03DBean (aging subtype + target value)
└── 30+ flat scalar fields (strings and booleans)
```

### Three-Layer Field Naming Convention

Every field that participates in the X33 framework follows a naming convention with three variants:
- `*_value` — The current data value.
- `*_update` — A flag indicating whether the field has been modified.
- `*_state` — Validation or error state information.
- `*_enabled` (boolean fields only) — Whether the field is interactive.

### Service Communication

The module communicates with backend services through four use cases:

| Use Case ID | Mapper Class | Purpose |
|-------------|-------------|---------|
| KKSV0264 | KKSV0264_KKSV0264OPDBMapper | Fixed global IP address consultation (initial load) |
| KKSV0265 | KKSV0265_KKSV0265OPDBMapper | Dissolution confirmation/execution |
| KKSV0266 | KKSV0266_KKSV0266OPDBMapper | Reinstatement |
| KKSV0267 | KKSV0267_KKSV0267OPDBMapper | Reservation cancellation |

Each mapper handles the mapping between DataBean fields and service parameters/return values through the X31 framework's `invokeService()` mechanism.

## Dependencies and Integration

### Inbound Dependencies (who uses this module)

| XML Config | Uses |
|------------|------|
| `WEBGAMEN_KKW024040PJP.xml` | `KKW02404SFBean`, `KKW02404SFLogic` |
| `WEBGAMEN_KKW024050PJP.xml` | `KKW02404SFBean`, `KKW02404SFLogic` |
| `WEBGAMEN_KKW024060PJP.xml` | `KKW02404SFBean`, `KKW02404SFLogic` |
| `WEBGAMEN_KKA149010PJP.xml` | `KKW02404SFBean` |
| `x31business_logic_KKW02404SF.xml` | `KKW02404SFLogic` |

Screens `KKW02405` (update confirmation) and `KKW02406` (completion) are navigation targets from this module, sharing the same bean.

### Framework Dependencies

- **Fujitsu Futurity X31/X33:** The module relies on the X31 framework for GUI checking (`X31SGuiCheckBase`), data bean access (`X31SDataBeanAccess`, `X31SDataBeanAccessArray`), and web components (`X31CBaseBean`, `X31CWebComponent`). The X33 framework provides typed data beans (`X33VViewBaseBean`, `X33VDataTypeList`, `X33VDataTypeBeanInterface`).
- **JCCWebBusinessLogic:** The base business logic class that provides `invokeService()`, `getServiceFormBean()`, `getCommonInfoBean()`, and common utilities.
- **Mapping classes:** Four DB mapper classes in `eo.web.webview.mapping` handle the data mapping for each use case.

### Cross-Module References

The module imports from:
- `eo.web.webview.common` (common utilities: `JCCWebCommon`, `JKKCommonConst`, `JKKScreenConst`)
- `eo.web.webview.CommonInfoCF` (common info constants)
- `eo.common.constant` (model constants, online message constants)
- `eo.web.webview.mapping` (DB mappers)
- `com.fujitsu.futurity.bp.custom.common` (Fujitsu platform utilities)

## Notes for Developers

### Operation Division Codes

The `TRAN_DIV` field determines which operation path is taken. These codes are defined in `JKKCommonConst`:

| Code | Operation | Japanese |
|------|-----------|----------|
| `OP_TRAN_DIV_DSL` | Dissolution | 解約 |
| `OP_TRAN_DIV_KAIHK` | Reinstatement | 回復 |
| `OP_TRAN_DIV_RSV_CL` | Reservation Cancellation | 予約取消 |

### Service Contract Status Codes

These are referenced from `JKKCommonConst` for status validation in `actionInit()`:

| Code | Status | Japanese |
|------|--------|----------|
| `SVC_KEI_STAT_010` | Received | 受付済 |
| `SVC_KEI_STAT_020` | Inquired | 照会済 |
| `SVC_KEI_STAT_030` | Completed | 結済 |
| `SVC_KEI_STAT_100` | In Service | サービス提供中 |
| `SVC_KEI_STAT_210` | Suspended | 休止・中断中 |
| `SVC_KEI_STAT_910` | Dissolved | 解約済 |

### Max Date Handling

The constant `JKKCommonConst.MAX_YMD` represents the maximum valid date. When a service date equals this value, it is displayed as an empty string on the form (indicating "no end date"). See the fix in v2.00 (IT1-2012-0000433).

### Update Flag Pattern

The `chg_kahi_flg` (更新状態可否フラグ) field controls whether the entire form is editable. When a status mismatch is detected (e.g., trying to dissolve a contract that is already in an incompatible state), this flag is set to `false`, effectively read-only mode.

### Checker Class

`KKW02404SFChecker` implements `X31SGuiCheckBase` but its `checkMethod()` currently always returns `true`. If GUI-level validation needs to be added (e.g., field-by-field checks before the server-side logic runs), this is where it would go. The `patternID` from `param.patternID` could be used to route different validation logic for different screen events.

### Date Format

Dates are stored as 8-digit strings in `YYYYMMDD` format (e.g., `"20260628"`). When the form needs to display them as separate year/month/day fields, the logic extracts substrings: `substr(0,4)` for year, `substr(4,6)` for month, `substr(6,8)` for day.

### Logging

Every action method calls `JSYwebLog.println(JSYwebLog.DataBean_Dump, ...)` to log the full DataBean state at the end of processing. This is useful for debugging but should be monitored in production if the data volume is large.

### Screen Flow

```
KKW02404 (this screen)
  └── actionUpd → KKW02405 (update confirmation screen)
        └── actionFix → KKW02406 (completion screen)

KKW02404
  └── actionBack / actionFin → returns to caller screen

KKW02404
  └── actionShusei → KKW02404 (correction screen, same screen ID)
```