# Eo / Ejb / Cbs / Cbsmsg

## Overview

The `eo.ejb.cbs.cbsmsg` package is the **Central Billing System (CBS) message schema layer** for the eo customer core system. It defines a large family of Java schema classes — nearly 100 source files across 99 indexed classes — that model every structured data exchange between the frontend UI (or EJB callers) and the backend CBS services.

Every class in this package follows a single, uniform convention: it extends `com.fujitsu.futurity.model.base.CAANSchemaInfo`, the Fujitsu Futurity framework's base class for structured data schemas. This means the package does not contain business logic; instead, it provides the **data contracts** that the Futurity framework uses for validation, deserialization, and serialization across EJB boundaries.

The business scope covers a broad range of customer-facing operations within the eo broadband telephone service:

- **Service contract management** — agreements, contents, line details, history, and portability scenarios
- **Equipment provision** — contract details by serial number, device change tracking, installation addresses
- **Option services** — add-on service contracts, sub-option services, ISP agreements, and femto cell provisioning
- **Order processing** — order settings, order issuance conditions, order creation work registration
- **Address changes** — inquiry and detail listing of address modification history
- **Number reservations** — type inquiry for number reservation applications
- **Return equipment** — cancellation tracking with warehouse and shelf codes
- **Construction / installation** — job case inquiries linking service contracts to construction schedules
- **Reference data** — phone number lookups, equipment model codes, business parameter management

## Sub-module Guide

This package does not contain child subpackages; all 99 classes live flat within `eo.ejb.cbs.cbsmsg`. For organizational purposes, the child wiki page groups the classes by business function. Below is a functional tour of the domain areas the package covers.

### Service Contract Agreement Search — `EKK0081`

**Classes:**

- [`EKK0081A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0081A010CBSMsg.java) — header / search-condition wrapper
- [`EKK0081A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0081A010CBSMsg1List.java) — detail rows (~955 lines, ~120 fields)

This is the primary service contract inquiry. The `CBSMsg` header carries standard pagination and sort fields. The `CBSMsg1List` row schema is one of the largest in the package, covering the full contract lifecycle: identifiers (`SVC_KEI_NO`, `SYSID`, `SVC_CD`), pricing (`PRC_GRP_CD`, `PCRS_CD`, `PPLAN_CD`), equipment provisioning references (`TK_HOSHIKI_KEI_NO`), and dates spanning service start, plan start/end, trial period, billing, cancellation, and disconnection.

### Return Equipment Cancellation — `EDK0301`

**Classes:**

- [`EDK0301B060CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EDK0301B060CBSMsg.java) — search header
- [`EDK0301B060CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EDK0301B060CBSMsg1List.java) — detail rows

Handles the return equipment cancellation inquiry. The schema links back to equipment provision service contracts via `KKTK_SVC_KEI_NO` and includes warehouse logistics fields (shelf codes, logistics safety codes), equipment serial numbers, and model codes.

### Service Contract Contents — `EKK0161`, `EKK0191`

**Classes:**

- [`EKK0161A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161A010CBSMsg.java) / [`EKK0161A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161A010CBSMsg1List.java) — header and detail for service contract detail inquiry
- [`EKK0161B003CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B003CBSMsg.java) / [`EKK0161B003CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B003CBSMsg1List.java) — registration detail
- [`EKK0161B004CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B004CBSMsg.java) / [`EKK0161B004CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B004CBSMsg1List.java) — additional processing
- [`EKK0161B008CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B008CBSMsg.java) / [`EKK0161B008CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B008CBSMsg1List.java) — number reservation type inquiry
- [`EKK0161B011CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B011CBSMsg.java) / [`EKK0161B011CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0161B011CBSMsg1List.java) — history list inquiry
- [`EKK0191A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0191A010CBSMsg.java) / [`EKK0191A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0191A010CBSMsg1List.java) — header and detail for eo light phone contract detail inquiry
- [`EKK0191B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0191B001CBSMsg.java) / [`EKK0191B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0191B001CBSMsg1List.java) — eo light phone contract list by contract number (~909 lines)
- [`EKK0191B502CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0191B502CBSMsg.java) / [`EKK0191B502CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0191B502CBSMsg1List.java) — pre-transfer contract contents for portability

`EKK0161` covers service contract details with multiple processing variants. The `B008` pair specifically handles number reservation type inquiries, tracking application numbers, dates, and application types.

`EKK0191` focuses on eo light phone contract contents, including phone numbers, VA equipment model codes, port numbers, serial numbers, and cancellation dates. The `B502` variant specifically supports service portability by representing the pre-transfer (former) service contract state.

### Service Contract Line Details — `EKK0251`

**Classes:**

- [`EKK0251B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0251B001CBSMsg.java) / [`EKK0251B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0251B001CBSMsg1List.java) — search by service contract number
- [`EKK0251B003CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0251B003CBSMsg.java) / [`EKK0251B003CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0251B003CBSMsg1List.java) — current usage view

These classes model the line-level breakdown within a service contract — mansion property numbers, line usage date ranges, and residence type codes.

### Equipment Provision Service Contracts — `EKK0341`

**Classes:**

- [`EKK0341A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341A010CBSMsg.java) / [`EKK0341A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341A010CBSMsg1List.java) — header and detail (~1,469 lines, the largest class in the package)
- [`EKK0341B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B001CBSMsg.java) / [`EKK0341B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B001CBSMsg1List.java) — list by equipment serial number
- [`EKK0341B002CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B002CBSMsg.java) / [`EKK0341B002CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B002CBSMsg1List.java) — change detail
- [`EKK0341B008CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B008CBSMsg.java) / [`EKK0341B008CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B008CBSMsg1List.java) — additional processing view
- [`EKK0341B021CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B021CBSMsg.java) / [`EKK0341B021CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B021CBSMsg1List.java) — special handling
- [`EKK0341B022CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B022CBSMsg.java) / [`EKK0341B022CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B022CBSMsg1List.java) — additional detail
- [`EKK0341B029CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B029CBSMsg.java) / [`EKK0341B029CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B029CBSMsg1List.java) — equipment change number search
- [`EKK0341B504CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B504CBSMsg.java) / [`EKK0341B504CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0341B504CBSMsg1List.java) — alternative processing path with line details

This is the most complex functional group, with nine paired classes. The `A010` detail class is the largest in the entire package at over 1,400 lines, covering equipment-level data (serial numbers, model codes), installation addresses (prefecture, city, district, building), and links back to parent service contracts. Different `B`-variant detail classes handle different query axes — by serial number, by change number, by line details — allowing operators to slice the same underlying data in multiple ways.

### Option Service Contracts — `EKK0351`, `EKK0401`, `EKK0411`, `EKK2811`

**Classes:**

- [`EKK0351A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351A010CBSMsg.java) / [`EKK0351A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351A010CBSMsg1List.java) — header and detail for option service contract search
- [`EKK0351B002CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351B002CBSMsg.java) / [`EKK0351B002CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351B002CBSMsg1List.java) — option service list by contract number (~237 lines)
- [`EKK0351B003CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351B003CBSMsg.java) / [`EKK0351B003CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351B003CBSMsg1List.java) — history list inquiry
- [`EKK0351B010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351B010CBSMsg.java) / [`EKK0351B010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0351B010CBSMsg1List.java) — additional view
- [`EKK0361A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0361A010CBSMsg.java) / [`EKK0361A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0361A010CBSMsg1List.java) — option service ISP agreement search
- [`EKK0401A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0401A010CBSMsg.java) / [`EKK0401A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0401A010CBSMsg1List.java) — sub-option service contract search
- [`EKK0401B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0401B001CBSMsg.java) / [`EKK0401B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0401B001CBSMsg1List.java) — additional processing for sub-option
- [`EKK0411A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0411A010CBSMsg.java) / [`EKK0411A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0411A010CBSMsg1List.java) — sub-option service ISP agreement
- [`EKK2811A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2811A010CBSMsg.java) / [`EKK2811A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2811A010CBSMsg1List.java) — equipment option service contract search
- [`EKK2811B010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2811B010CBSMsg.java) / [`EKK2811B010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2811B010CBSMsg1List.java) — equipment option service list

Option services form a multi-layered hierarchy: top-level option contracts (`EKK0351`) can have sub-options (`EKK0401`), and some sub-options have ISP agreements (`EKK0411`). The `EKK2811` classes model equipment-specific option services, tying back to equipment provision contracts. These schemas include fields for maximum service counts, femto cell provider codes, and recovery periods.

### Order Processing — `EKK1041`, `EKK1081`, `EKK1551`

**Classes:**

- [`EKK1041A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1041A010CBSMsg.java) / [`EKK1041A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1041A010CBSMsg1List.java) — order settings inquiry
- [`EKK1041B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1041B001CBSMsg.java) / [`EKK1041B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1041B001CBSMsg1List.java) — order settings list
- [`EKK1081B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1081B001CBSMsg.java) / [`EKK1081B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1081B001CBSMsg1List.java) — order issuance conditions list
- [`EKK1081C011CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1081C011CBSMsg.java) — additional processing
- [`EKK1081D010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1081D010CBSMsg.java) — order issuance condition registration
- [`EKK1081E010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1081E010CBSMsg.java) — order issuance condition logical deletion
- [`EKK1551D010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1551D010CBSMsg.java) — order information creation work registration

These classes handle the order lifecycle: settings configuration, issuance condition management, and work-in-progress order creation. The `EKK1081` pair is notable because it includes both search (B001) and write (D010, E010) operations — most other classes in the package are read-only inquiries.

### Address Changes — `EKK2091`, `EKK2101`

**Classes:**

- [`EKK2091A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2091A010CBSMsg.java) / [`EKK2091A010CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2091A010CBSMsg1List.java) — address change inquiry
- [`EKK2101B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2101B001CBSMsg.java) / [`EKK2101B001CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2101B001CBSMsg1List.java) — address change detail list
- [`EKK2101B002CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2101B002CBSMsg.java) / [`EKK2101B002CBSMsg1List`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK2101B002CBSMsg1List.java) — address change detail by pre-change ID

### Miscellaneous

The remaining classes cover additional operational areas:

| Domain | Classes |
|---|---|
| Line usage contracts | [`EKK0881A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0881A010CBSMsg.java) / `CBSMsg1List` |
| Delivery method contracts | [`EKK0891A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0891A010CBSMsg.java) / [`EKK0891B504CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0891B504CBSMsg.java) |
| Relocation reservations | [`EKK1681B001CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK1681B001CBSMsg.java) / `CBSMsg1List` |
| Pricing course inquiry | [`EKK0791A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKK0791A010CBSMsg.java) / `CBSMsg1List` |
| Construction job case | [`EKU0011A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKU0011A010CBSMsg.java) / `CBSMsg1List` |
| Service-construction linkage | [`EKU0081B010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EKU0081B010CBSMsg.java) / `CBSMsg1List` |
| Number reservation construction | [`ETU0011B010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/ETU0011B010CBSMsg.java) / `CBSMsg1List` |
| Phone number inquiry | [`EZM0121A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EZM0121A010CBSMsg.java) / `CBSMsg1List` |
| Business parameter management | [`EZM0321A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EZM0321A010CBSMsg.java) / `CBSMsg1List` |
| Indoor equipment model codes | [`EZM0411A010CBSMsg`](Source/koptModel/src/eo/ejb/cbs/cbsmsg/EZM0411A010CBSMsg.java) / `CBSMsg1List` |

### Relationship Summary

These functional areas do not operate in isolation. The schemas share entity keys across boundaries, creating a network of referential relationships:

```mermaid
flowchart LR
    subgraph ServiceContracts["Service Contracts"]
        SC_A["EKK0081A010
Service Contract Agreement
Search"]
        SC_191A["EKK0191A010
Service Contract Contents
<eo光電話> Search"]
        SC_191B["EKK0191B001
Service Contract Contents
List by Contract No"]
    end

    subgraph EquipmentContracts["Equipment Provision Contracts"]
        EQ_A["EKK0341A010
Equipment Provision Service
Contract Search"]
        EQ_B001["EKK0341B001
Equipment Provision List
by Serial No"]
        EQ_B504["EKK0341B504
Equipment Provision List
with Line Details"]
    end

    subgraph OptionContracts["Option Service Contracts"]
        OPT_A["EKK0351A010
Option Service Contract
Search"]
        OPT_B002["EKK0351B002
Option Service List
by Contract No"]
        OPT_ISP["EKK0361A010
Option Service ISP
Agreement Search"]
    end

    subgraph OtherOperations["Other Operations"]
        RET_E["EDK0301B060
Return Equipment
Cancellation Search"]
        NR_B008["EKK0161B008
Number Reservation Type
Inquiry"]
        LOC_A["EKK2091A010
Address Change
Inquiry"]
        ORD_A["EKK1041A010
Order Settings
Inquiry"]
        TELES["EZM0121A010
Phone Number
Inquiry"]
    end

    SC_A -- shares SVC_KEI_NO --> EQ_B001
    SC_A -- shares SVC_KEI_NO --> OPT_B002
    SC_191A -- shares TELNO --> TELES
    OPT_B002 -- shares SBOP_SVC --> OPT_ISP
    EQ_B504 -- shares SVC_KEI_NO --> SC_191B
    RET_E -- shares KKTK_SVC_KEI_NO --> EQ_B001
    NR_B008 -- links to --> SC_A
    LOC_A -- links to --> SC_A
    ORD_A -- links to --> SC_A
```

The most frequently shared key is `SVC_KEI_NO` (service contract number), which appears across service contracts (`EKK0081`), line details (`EKK0251`), equipment provision (`EKK0341`), option services (`EKK0351`), and address changes (`EKK2101`). This cross-cutting relationship means a single customer's service record is queryable from many different angles using different schema pairs.

## Key Patterns and Architecture

### Two-class parent-child pattern

Every business function in this package follows a strict two-class convention:

| Convention | Responsibility |
|---|---|
| `CBSMsg` (e.g., `EKK0081A010CBSMsg`) | Header-level fields — pagination, search conditions, error flags. Contains a `getContents()` method returning the full `Object[][]` template. |
| `CBSMsg1List` (e.g., `EKK0081A010CBSMsg1List`) | Detail rows — the actual business data columns returned per record. Also contains `getContents()`. |

The `CBSMsg` class embeds a reference to its `CBSMsg1List[]` array inside its `CONTENTS` definition, establishing a parent-child relationship. The Futurity framework uses this structure for:

1. Validating incoming request data against the schema template.
2. Mapping database result sets or domain objects into strongly-typed schema instances.
3. Serializing the structured message across EJB boundaries.

### Universal header fields

All ~23 `CBSMsg` header classes share an identical set of common header fields, regardless of their business function. This includes service identifiers (`templateID`, `identifyCD`), operator tracking (`operatorID`, `operateDate`), authorization fields (`ac_group_cd`, `func_code`), pagination controls (`max_search_num`, `display_page_num`, `total_search_num`, `total_page_num`), and per-field error tracking (`search_err_flg` and associated `*_err` fields).

### Schema definition structure

Each class declares a `static final Object[][] CONTENTS` array at the top, followed by `static final String` constants for every field name. A static initializer block binds the constants to their string values, and `getContents()` returns the template. This pattern lets the Futurity `CAANSchemaInfo` framework introspect the schema at runtime without any reflection or annotation processing.

```
Typical structure of a CBSMsg class:

  CONTENTS[] = {
    { "templateID", "String", "テンプレートID" },
    { "identifyCD", "String", "識別CD" },
    // ... common header fields ...
    { "CONTENTS", "EKKxxxxCBSMsg1List[]", ... }  // child reference
  }

  static { TEMPLATEID = "templateID"; IDENTIFYCD = "identifyCD"; ... }

  public Object[][] getContents() { return CONTENTS; }
```

### Error tracking fields

Every header class includes error tracking fields following a consistent pattern:

| Pattern | Purpose |
|---|---|
| `*_err` | Per-field validation error flags |
| `*_err_err` | Nested error for the error flag itself |
| `*_List_err` | Error for the embedded list data |

The UI layer reads these flags to render inline error messages next to form fields.

### Common data flow

```mermaid
flowchart TD
    subgraph Frontend["Frontend / UI"]
        UI["Web UI
Operator Console"]
    end

    subgraph EJB["EJB Layer"]
        SVC["CBS EJB Services
Business Logic"]
    end

    subgraph Schema["CBSMsg Schema Package
eo.ejb.cbs.cbsmsg"]
        Header["CBSMsg Header Classes
Query conditions, pagination,
error tracking (~23 common fields)"]
        Detail["CBSMsg1List Detail Classes
Function-specific data columns"]
    end

    subgraph CBS["Central Billing System"]
        DB["Relational Database
Service contracts, equipment,
option services, orders"]
    end

    UI -->|"1. Search Request
CBSMsg"| SVC
    SVC -->|"2. Schema Validation"| Header
    SVC -->|"3. DB Query"| DB
    DB -->|"4. Result Set"| SVC
    SVC -->|"5. Map to CBSMsg1List[]"| Detail
    Header -->|"6. Embed List"| Header
    SVC -->|"7. Response
CBSMsg + CBSMsg1List[]"| UI
```

A typical request cycle flows through seven steps: the operator submits a search through the UI, the EJB layer receives the `CBSMsg` and validates it against the schema template, executes a database query, maps results into `CBSMsg1List` rows, embeds the row array inside the header, and returns the complete message to the frontend.

## Dependencies and Integration

- **Framework dependency**: All classes extend `com.fujitsu.futurity.model.base.CAANSchemaInfo` from the Fujitsu Futurity application framework. This base class provides the serialization, validation, and schema introspection infrastructure. There are no other direct package-level imports in this schema layer.
- **EJB layer**: The package path `eo.ejb.cbs.cbsmsg` indicates these message classes are part of the EJB module communicating with the CBS (Central Billing System). They serve as the contract boundary between frontend callers and backend service implementations.
- **Cross-module references**: While no explicit cross-module dependencies are indexed within this subpackage, the field names (service contract numbers, equipment serial numbers, pricing codes) reference entities defined in other model packages. The schemas act as a shared vocabulary across the eo system.

## Notes for Developers

### Naming conventions

- **`EKK` prefix**: Used for equipment/service-related operations.
- **`EDK` prefix**: Used for return/equipment-related operations.
- **`EKU` prefix**: Used for construction/installation-related operations.
- **`ETU` prefix**: Used for number reservation construction operations.
- **`EZM` prefix**: Used for reference data operations (phone numbers, parameters, equipment models).
- **`A010` suffix on headers**: Indicates the primary search/inquiry variant.
- **`Bxxx` suffix on details**: Indicates specific processing detail variants (B001 = primary detail, B002 = change detail, etc.).

### Adding a new business function

1. Create a new `CBSMsg` header class following the existing pattern — define `CONTENTS` with the common header fields, declare `static final String` constants, and add any function-specific search key fields.
2. Create a `CBSMsg1List` detail class — define `CONTENTS` with the function-specific data columns.
3. Reference the `CBSMsg1List[]` type inside the `CBSMsg` `CONTENTS` array to establish the parent-child link.
4. Export column-name constants as `public static final String` for cross-module reference.

### Large schema classes

Some `CBSMsg1List` classes are exceptionally large (1,400+ lines for `EKK0341A010CBSMsg1List`, the largest in the package). When working with these:

- Use the method list in the child wiki to locate specific methods by line number rather than scrolling through the entire file.
- The field count grows organically over time — new business requirements add columns. Consider whether a split into sub-detail classes is warranted for very wide tables.
- Always check for `_nm` suffix columns, which are display-name variants maintained in parallel with code columns.

### Japanese source comments

All source files contain Japanese documentation in the header block and as inline comments on data columns. The field comments follow the pattern `{ fieldName, type }`, where the trailing comment is the Japanese business description (e.g., `// サービス契約番号`). These comments are the authoritative source for understanding field semantics when no additional documentation exists.
