# Business Logic — JBSbatKKKjFinDataInTrn.getSvcChrgStaymd() [245 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.business.service.JBSbatKKKjFinDataInTrn` |
| Layer | Service (Batch processing — part of the `eo.business.service` package for koptBatch) |
| Module | `service` (Package: `eo.business.service`) |

## 1. Role

### JBSbatKKKjFinDataInTrn.getSvcChrgStaymd()

This method computes the **planned billing start date** (planChrgStaymd) for a telecom service, based on the results of the `RULE0065` rule engine which defines billing start date configuration per service. The method operates as a **data transformation and query dispatch** utility: it extracts configuration data from rule engine output, derives a planned billing start date through relative date calculation, and then cross-references the **billing schedule definition table** (`CH_M_PRC_SCHDL_TEIGI`) to determine the invoice month and event date. The business purpose is to ensure that a customer's billing start date aligns with the configured billing calendar and any event-driven adjustments defined in the schedule.

The method handles the specific case where the rule engine returns `stdDt = "2"` (indicating the plan start date is used as the base date). In this branch, it calculates the planned billing start date using relative date logic, then queries the billing schedule twice — first by the computed plan billing start date to retrieve the invoice month, and second by the invoice month to retrieve the event date. If the event date is before the current operation date, the method adjusts the planned billing start date to the first day of the following month, preventing retroactive billing.

The method implements a **routing/dispatch pattern** with extensive validation and error logging. Every branch that encounters invalid or missing data logs a business error and returns `null`, allowing callers to handle failures at a higher level. This is a shared utility method, called from `execute()` and `insertSvcKeiUcwkNewTv()`, serving the broader batch processing pipeline that handles service contract data entry and work creation.

> v20.00.01 version note: 変更開始/変更終了 markers indicate significant refactoring — converting from boolean flag return to String return, changing parameterized `getRelativeDate()` calls, and modifying error recovery behavior from `return false` to `return null`.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["getSvcChrgStaymd checkList planStaymd"])

    START --> INIT["Initialize local variables stdDt relativeDateCount countMethod priorityStdDt planChrgStaymd seikyuYm eventYmd"]

    INIT --> CHECK_RULE{checkList.get0 is not null}

    CHECK_RULE -- No --> ERROR_NO_RULES["Business Error Log Rule RULE0065 call result missing Return null"]
    CHECK_RULE -- Yes --> EXTRACT_RULE["Extract STD_DT RELATIVE_DATE_COUNT COUNT_METHOD PRIORITY_STD_DT from checkList"]

    EXTRACT_RULE --> CHECK_STD_DT{stdDt equals 2}

    CHECK_STD_DT -- No --> ERROR_STD_DT["Business Error Log Rule RULE0065 base date result error Return null"]
    CHECK_STD_DT -- Yes --> CREATE_MAPS["Create CH_M_PRC_SCHDL_TEIGI maps for SELECT_004 and SELECT_005"]

    CREATE_MAPS --> SET_KJN["Set kjnYmd equals planStaymd Plan start date"]

    SET_KJN --> CALC_PLAN_CHRG["Calculate planChrgStaymd via getRelativeDate relativeDateCount kjnYmd"]

    CALC_PLAN_CHRG --> CHECK_PLAN_CHRG{planChrgStaymd is empty}

    CHECK_PLAN_CHRG -- Yes --> ERROR_PLAN_CHRG["Business Error Log Base date relative date acquisition error Return null"]
    CHECK_PLAN_CHRG -- No --> EXEC_SELECT_004["Execute SELECT_004 with planChrgStaymd parameter"]

    EXEC_SELECT_004 --> GET_SELECT_004["db_CH_M_PRC_SCHDL_TEIGI_004 selectNext"]

    GET_SELECT_004 --> CHECK_SELECT_004{SELECT_004 result not null}

    CHECK_SELECT_004 -- No --> ERROR_SELECT_004["Business Error Log SELECT_004 result missing Return null"]
    CHECK_SELECT_004 -- Yes --> SET_SEIKYU["Set seikyuYm from SELECT_004 result getString SEIKY_YM"]

    SET_SEIKYU --> EXEC_SELECT_005["Execute SELECT_005 with seikyuYm parameter"]

    EXEC_SELECT_005 --> GET_SELECT_005["db_CH_M_PRC_SCHDL_TEIGI_005 selectNext"]

    GET_SELECT_005 --> CHECK_SELECT_005{SELECT_005 result not null}

    CHECK_SELECT_005 -- No --> ERROR_SELECT_005["Business Error Log SELECT_005 result missing Return null"]
    CHECK_SELECT_005 -- Yes --> SET_EVENT["Set eventYmd from SELECT_005 result getString EVENT_YMD"]

    SET_EVENT --> CHECK_EVENT_EMPTY{eventYmd is empty}

    CHECK_EVENT_EMPTY -- Yes --> ERROR_EVENT_EMPTY["Business Error Log SELECT_005 result empty eventYmd Return null"]
    CHECK_EVENT_EMPTY -- No --> CHECK_EVENT_DATE{eventYmd less than or equals opeDate}

    CHECK_EVENT_DATE -- Yes --> KEEP_PLAN_CHRG["Keep planChrgStaymd as-is"]
    CHECK_EVENT_DATE -- No --> ADJUST_PLAN["Adjust planChrgStaymd add 1 month take first day of next month"]

    KEEP_PLAN_CHRG --> LOG_FINAL["Debug Log Rule RULE0065 result planned billing start date"]
    ADJUST_PLAN --> LOG_FINAL

    LOG_FINAL --> RETURN_PLAN["Return planChrgStaymd"]

    ERROR_NO_RULES --> END_END(["END"])
    ERROR_STD_DT --> END_END
    ERROR_PLAN_CHRG --> END_END
    ERROR_SELECT_004 --> END_END
    ERROR_SELECT_005 --> END_END
    ERROR_EVENT_EMPTY --> END_END
    RETURN_PLAN --> END_END
```

**Constant Resolution:**

| Constant | Actual Value | Business Meaning |
|----------|-------------|------------------|
| `stdDt == "2"` | `"2"` | Plan start date is used as the base date for billing calculation |
| `JPCBatchMessageConstant.EKKB0010CW` | `"EKKB0010CW"` | Batch error log code — triggers business error log output for all error conditions |
| `JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM` | `"SEIKY_YM"` | Database column: Invoice month (YYYYMM format) |
| `JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD` | `"EVENT_YMD"` | Database column: Event date (YYYYMMDD format) |
| `CH_M_PRC_SCHDL_TEIGI_KK_SELECT_004` | `"KK_SELECT_004"` | SQL definition key for billing schedule lookup by plan billing start date |
| `CH_M_PRC_SCHDL_TEIGI_KK_SELECT_005` | `"KK_SELECT_005"` | SQL definition key for billing schedule lookup by invoice month |
| `D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI` | `"CH_M_PRC_SCHDL_TEIGI"` | Database table name: Billing Schedule Definition (special cases) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `checkList` | `ArrayList<ArrayList<HashMap<String, Object>>>` | Nested list of results from the **RULE0065** rule engine invocation. The outer list's first element (`checkList.get(0)`) contains a single map with rule output fields: `STD_DT` (base date type), `RELATIVE_DATE_COUNT` (number of days from base date), `COUNT_METHOD` (actual day vs. business day), and `PRIORITY_STD_DT` (priority base date). Each field is extracted as a String. If the rule engine returned no results, this triggers a business error. |
| 2 | `planStaymd` | `String` | The **plan start date** in YYYYMMDD format — the service start date derived from the identification number (skbtNo) 2 (Service Contract Details). This is used as the base date (kjnYmd) for relative date calculation when stdDt is "2". |

**Instance fields read by this method:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `super.logPrint` | LogPrint (parent class) | Logging utility for debug and business error log output — used throughout the method |
| `opeDate` | `String` | Current operation date — compared against `eventYmd` to determine if the event date is in the past, triggering a month-adjustment |
| `db_CH_M_PRC_SCHDL_TEIGI_004` | `JBSbatSQLAccess` | DB access handle for the billing schedule table (query key SELECT_004) |
| `db_CH_M_PRC_SCHDL_TEIGI_005` | `JBSbatSQLAccess` | DB access handle for the billing schedule table (query key SELECT_005) |

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `JBSbatKKKjFinDataInTrn.executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_004` | EKKxxx (unknown) | `CH_M_PRC_SCHDL_TEIGI` | Executes SQL query (KK_SELECT_004) on the billing schedule table to find schedule matching the plan billing start date |
| R | `JBSbatKKKjFinDataInTrn.executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_004` | EKKxxx (unknown) | `CH_M_PRC_SCHDL_TEIGI` | Reads `SEIKY_YM` (invoice month) from the matched billing schedule record |
| - | `JBSbatKKKjFinDataInTrn.executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_005` | EKKxxx (unknown) | `CH_M_PRC_SCHDL_TEIGI` | Executes SQL query (KK_SELECT_005) on the billing schedule table to find schedule matching the invoice month |
| R | `JBSbatKKKjFinDataInTrn.executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_005` | EKKxxx (unknown) | `CH_M_PRC_SCHDL_TEIGI` | Reads `EVENT_YMD` (event date) from the matched billing schedule record |
| - | `JBSbatKKKjFinDataInTrn.getRelativeDate` | (internal) | - | Computes a relative date from a base date and a day count offset |
| - | `JBSbatKKKjFinDataInTrn.adjustMonth` | (internal) | - | Adjusts a date string by a given number of months (used to advance to next month) |
| - | `JBSbatStringUtil.Rtrim` | JBSbatStringUtil | - | Trims trailing whitespace from database string values |
| - | `JPCBatchMessageConstant.EKKB0010CW` | JPCBatchMessage | - | Error message code constant for business error logging |
| - | `super.logPrint.printDebugLog` | JACBatCommon | - | Debug log output for intermediate calculation results |
| - | `super.logPrint.printBusinessErrorLog` | JKKBatOneTimeLogWriter | - | Business error log output for all error conditions |

## 5. Dependency Trace

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

No screen/batch entry points found within 8 hops. Direct callers found: 2 methods.
Terminal operations from this method: `printDebugLog` [-], `printBusinessErrorLog` [-], `selectBySqlDefine` [R] `CH_M_PRC_SCHDL_TEIGI`, `getString` [R] `CH_M_PRC_SCHDL_TEIGI`.

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Batch: JBSbatKKKjFinDataInTrn | `JBSbatKKKjFinDataInTrn.execute()` -> `getSvcChrgStaymd()` | `selectBySqlDefine [R] CH_M_PRC_SCHDL_TEIGI` |
| 2 | Batch: JBSbatKKKjFinDataInTrn | `JBSbatKKKjFinDataInTrn.insertSvcKeiUcwkNewTv()` -> `getSvcChrgStaymd()` | `selectBySqlDefine [R] CH_M_PRC_SCHDL_TEIGI` |

## 6. Per-Branch Detail Blocks

**Block 1** — [IF] `(checkList.get(0) != null)` (L6022)
> Check if RULE0065 rule engine returned results. Rule name: `RULE0065: Billing Start Date Configuration (Service)`.

| # | Type | Code |
|---|------|------|
| 1 | SET | `stdDt = checkList.get(0).get(0).get("STD_DT")` // Base date type [-> Field: "STD_DT"] |
| 2 | SET | `relativeDateCount = checkList.get(0).get(0).get("RELATIVE_DATE_COUNT")` // Days from base date [-> Field: "RELATIVE_DATE_COUNT"] |
| 3 | SET | `countMethod = checkList.get(0).get(0).get("COUNT_METHOD")` // Actual day/business day [-> Field: "COUNT_METHOD"] |
| 4 | SET | `priorityStdDt = checkList.get(0).get(0).get("PRIORITY_STD_DT")` // Priority base date [-> Field: "PRIORITY_STD_DT"] |
| 5 | EXEC | `super.logPrint.printDebugLog("Related rule call results (base date): " + stdDt)` // Debug log |
| 6 | EXEC | `super.logPrint.printDebugLog("Related rule call results (relative date from base): " + relativeDateCount)` // Debug log |
| 7 | EXEC | `super.logPrint.printDebugLog("Related rule call results (actual day/business day): " + countMethod)` // Debug log |
| 8 | EXEC | `super.logPrint.printDebugLog("Related rule call results (priority base date): " + priorityStdDt)` // Debug log |
| 9 | CALL | Check if `stdDt.equals("2")` — base date is plan start date (see Block 2) |

**Block 2** — [IF] `(stdDt equals "2")` (L6041) `[stdDt = "2"]`
> Rule engine base date configuration: "2" means the plan start date is used as the base date for billing calculation. This is the primary processing branch where the planned billing start date is computed.
>
> Note: The original v20.00.01 code had nested branches for `skbtNo == "1"` (discrepancy agreement) and `skbtNo == "2"` (service contract details), but these were removed in v20.00.01. The simplified branch now sets `kjnYmd = planStaymd` directly.

| # | Type | Code |
|---|------|------|
| 1 | SET | `chMPrcSchdlTeigiMap_004 = new JBSbatCommonDBInterface()` // Map for SELECT_004 SQL execution result (billing schedule definition scheme master acquisition) |
| 2 | SET | `chMPrcSchdlTeigiMap_005 = new JBSbatCommonDBInterface()` // Map for SELECT_005 SQL execution result (billing schedule definition scheme master acquisition) |
| 3 | SET | `kjnYmd = planStaymd` // Set plan start date as base date (kjnYmd) [-> Field: planStaymd parameter] |
| 4 | CALL | `planChrgStaymd = getRelativeDate(relativeDateCount, kjnYmd)` // Compute planned billing start date from base date and relative day count |
| 5 | IF (Block 3) | Check if `planChrgStaymd` is empty (L6086) — relative date calculation failure |

**Block 2.1** — [IF] `("".equals(planChrgStaymd))` (L6086)
> Error handling: relative date calculation returned empty string. The billing start date could not be determined.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printBusinessErrorLog(EKKB0010CW, ["Base date relative date acquisition error (planned billing start date determination)"])` // Business error log |
| 2 | RETURN | `return null` // v20.00.01: changed from `return false` |

**Block 2.2** — [EXEC] SELECT_004 query: retrieve invoice month (L6094–6104)

| # | Type | Code |
|---|------|------|
| 1 | SET | `whereChMPrcSchdlTeigi004Param = {planChrgStaymd}` // WHERE parameter for SELECT_004: plan billing start date |
| 2 | CALL | `executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_004(whereChMPrcSchdlTeigi004Param)` // Execute SQL query SELECT_004 on CH_M_PRC_SCHDL_TEIGI table |
| 3 | CALL | `chMPrcSchdlTeigiMap_004 = db_CH_M_PRC_SCHDL_TEIGI_004.selectNext()` // Fetch next result from SELECT_004 query |
| 4 | IF (Block 4) | Check if SELECT_004 result is not null (L6104) — billing schedule definition found? |

**Block 2.2.1** — [IF] `(chMPrcSchdlTeigiMap_004 != null)` (L6104)
> Billing schedule definition SELECT_004 found — extract the invoice month.

| # | Type | Code |
|---|------|------|
| 1 | SET | `seikyuYm = JBSbatStringUtil.Rtrim(chMPrcSchdlTeigiMap_004.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM))` // Invoice month [-> Field: "SEIKY_YM", value in YYYYMM format] |
| 2 | CALL | `executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_005(whereChMPrcSchdlTeigi005Param)` // Execute SELECT_005 with invoice month (Block 6) |

**Block 2.2.2** — [ELSE] `(chMPrcSchdlTeigiMap_004 == null)` (L6110)
> Billing schedule definition SELECT_004 result is missing — no matching schedule for the computed plan billing start date.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printBusinessErrorLog(EKKB0010CW, ["Billing schedule definition search: SQL define key (KK_SELECT_004) result missing error. Plan billing start date: " + planChrgStaymd])` // Business error log |
| 2 | RETURN | `return null` // v20.00.01: changed from `return false` |

**Block 6** — [EXEC] SELECT_005 query: retrieve event date (L6124–6127)

| # | Type | Code |
|---|------|------|
| 1 | SET | `whereChMPrcSchdlTeigi005Param = {seikyuYm}` // WHERE parameter for SELECT_005: invoice month |
| 2 | CALL | `executeCH_M_PRC_SCHDL_TEIGI_KK_SELECT_005(whereChMPrcSchdlTeigi005Param)` // Execute SQL query SELECT_005 on CH_M_PRC_SCHDL_TEIGI table |
| 3 | CALL | `chMPrcSchdlTeigiMap_005 = db_CH_M_PRC_SCHDL_TEIGI_005.selectNext()` // Fetch next result from SELECT_005 query |
| 4 | IF (Block 7) | Check if SELECT_005 result is not null (L6127) — billing schedule definition found? |

**Block 7** — [IF] `(chMPrcSchdlTeigiMap_005 != null)` (L6127)
> Billing schedule definition SELECT_005 found — extract the event date and apply date comparison logic.

| # | Type | Code |
|---|------|------|
| 1 | SET | `eventYmd = JBSbatStringUtil.Rtrim(chMPrcSchdlTeigiMap_005.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD))` // Event date [-> Field: "EVENT_YMD", value in YYYYMMDD format] |
| 2 | EXEC | `super.logPrint.printDebugLog("Billing schedule definition search result. Invoice month: " + seikyuYm)` // Debug log |
| 3 | EXEC | `super.logPrint.printDebugLog("Billing schedule definition search result. Event date: " + eventYmd)` // Debug log |
| 4 | IF (Block 8) | Check if `eventYmd` is empty (L6137) |
| 5 | IF (Block 9) | If not empty, compare `eventYmd` vs `opeDate` (L6147) |

**Block 7.1** — [IF] `("".equals(eventYmd))` (L6137)
> SELECT_005 result's event date field is empty — invalid schedule data.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printBusinessErrorLog(EKKB0010CW, ["Billing schedule definition search: SQL define key (KK_SELECT_005) result missing error. Invoice month: " + seikyuYm])` // Business error log |
| 2 | RETURN | `return null` // v20.00.01: changed from `return false` |

**Block 7.2** — [IF] `(0 <= eventYmd.compareTo(opeDate))` (L6147) `[eventYmd <= opeDate]`
> Event date is less than or equal to the operation date — the event has occurred or is today. In this case, the plan billing start date is kept as-is (no adjustment needed).

| # | Type | Code |
|---|------|------|
| 1 | EXEC | (No action — keep planChrgStaymd as-is) // Comment: "The plan billing start date remains as-is" |
| 2 | ELSE (Block 10) | Else: event date is before operation date — needs month adjustment |

**Block 7.2.1** — [ELSE] `eventYmd < opeDate` (L6152)
> The event date is before the current operation date. The plan billing start date must be pushed forward to the first day of the month following the plan billing start date. This prevents retroactive billing when an event date has already passed.

| # | Type | Code |
|---|------|------|
| 1 | SET | `date = JBSbatDateUtil.adjustMonth(planChrgStaymd, 1)` // Advance plan billing start date by 1 month [-> Method call: adjustMonth(planChrgStaymd, 1)] |
| 2 | SET | `planChrgStaymd = date.substring(0, 6) + "01"` // Take first 6 characters (YYYYMM) and append "01" → first day of next month |

**Block 10** — [ELSE] `(checkList.get(0) == null)` (L6165)
> RULE0065 rule engine returned no results at all. This is a critical error — the rule engine should always produce at least one result.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printBusinessErrorLog(EKKB0010CW, ["Rule RULE0065: Billing Start Date Configuration (Service) call result missing. checkList.get(0): " + checkList.get(0)])` // Business error log |
| 2 | RETURN | `return null` // v20.00.01: changed from `return false` |

**Block 11** — [ELSE] `(stdDt does NOT equal "2")` (L6155)
> The rule engine returned results, but the base date type is not "2" (plan start date). This means the rule engine configured a different base date strategy. This method only handles the "2" case — for any other base date type, it is a configuration error.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printBusinessErrorLog(EKKB0010CW, ["Rule RULE0065: Billing Start Date Configuration (Service) base date (" + stdDt + ") result error"])` // Business error log — v20.00.01 simplified message (removed svcCd_151 reference) |
| 2 | RETURN | `return null` // v20.00.01: changed from `return false` |

**Block 12** — [RETURN] (L6175)
> End of method — final debug logging and return.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `super.logPrint.printDebugLog("Rule RULE0065: Billing Start Date Configuration (Service) call result. Plan billing start date: " + planChrgStaymd)` // Debug log final result |
| 2 | RETURN | `return planChrgStaymd` // v20.00.01: changed from `return rule65Flg` (boolean flag) — now returns the computed date string |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `planChrgStaymd` | Field | Planned billing start date — the date from which the customer's service billing begins, calculated as a date string in YYYYMMDD format |
| `planStaymd` | Field | Plan start date — the service's original planned start date (parameter), typically the contract start date |
| `kjnYmd` | Field | Base date (base date year/month/day) — the anchor date used for relative date calculations. In this method, it is set to `planStaymd` |
| `seikyuYm` | Field | Invoice month — the billing period in YYYYMM format, retrieved from the billing schedule definition table |
| `eventYmd` | Field | Event date — the date of a scheduled event (e.g., activation, promotion end) retrieved from the billing schedule, in YYYYMMDD format |
| `stdDt` | Field | Standard base date type — a code from RULE0065 that determines which date serves as the base for billing calculation. Value "2" means plan start date |
| `relativeDateCount` | Field | Relative day count — number of days to add or subtract from the base date to compute the billing start date |
| `countMethod` | Field | Counting method — specifies whether to count actual days (calendar days) or business days |
| `priorityStdDt` | Field | Priority base date — a secondary base date with higher precedence, provided by RULE0065 |
| `checkList` | Field | Rule engine result list — the output from invoking the RULE0065 rule engine, containing rule evaluation results for billing start date configuration |
| `opeDate` | Field | Operation date — the current batch processing date (system date for the run) |
| RULE0065 | Rule | Billing Start Date Configuration (Service) — a business rule that determines how the billing start date should be calculated for a service |
| `CH_M_PRC_SCHDL_TEIGI` | DB Table | Billing Schedule Definition (Special Cases) — master table defining billing calendar schedules for special service types |
| `SEIKY_YM` | DB Column | Invoice month column in `CH_M_PRC_SCHDL_TEIGI` table, format YYYYMM |
| `EVENT_YMD` | DB Column | Event date column in `CH_M_PRC_SCHDL_TEIGI` table, format YYYYMMDD |
| KK_SELECT_004 | SQL Key | SQL definition key for querying the billing schedule by plan billing start date (planChrgStaymd) |
| KK_SELECT_005 | SQL Key | SQL definition key for querying the billing schedule by invoice month (seikyuYm) |
| EKKB0010CW | Error Code | Batch error message code for business error log output |
| `getRelativeDate()` | Method | Internal method that computes a date by adding a relative day count to a base date |
| `adjustMonth()` | Method | Internal method that adds N months to a date string |
| `Rtrim()` | Method | Utility method that trims trailing whitespace from strings |
| Service Contract | Business term | The agreement between the provider and customer for telecom services, identified by identification number (skbtNo) |
| 課金開始日 | Field | Japanese field concept: Billing start date — the date when billing for a service begins |
| 料金スケジュール定義 | Field | Japanese field concept: Billing schedule definition — the configuration of billing calendar dates and events |
| 運用日 | Field | Japanese field concept: Operation date — the date the batch process runs |
