# Business Logic — JKKKikiIchiranKkOpKyUpdCC.getPrgTkjk() [159 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `com.fujitsu.futurity.bp.custom.common.JKKKikiIchiranKkOpKyUpdCC` |
| Layer | CC/Common Component |
| Module | `common` (Package: `com.fujitsu.futurity.bp.custom.common`) |

## 1. Role

### JKKKikiIchiranKkOpKyUpdCC.getPrgTkjk()

The `getPrgTkjk` method (short for "tokuteki jiko takuhai Kouka" / **Special事项取得**) is a business logic routing and assembly method responsible for building a human-readable description string (`tkjikou`) that summarizes the **equipment option (機器オプション)** service changes during a device provision service contract operation. It serves as the **summary text builder** for the equipment option screen in the KKE (Equipment Provision) module.

The method dispatches based on the **SOD processing classification (`sodShoriKbn`)** into three distinct branches: **cancellation (DSL, "3")**, **pre-registration update (INI, "0")**, and **general post-cancellation update (default)**. For cancellation and default branches, it queries the equipment option service type name via the `EZM0171A010` service component using the resolved service subtype code. For the INI (pre-registration) branch, it compares before/after plan codes (wired/wireless) from temporary data to display a migration summary. Additionally, for router services active outside of cancellation/disposition states, it appends router effective timing information derived from the new service application flag.

The method implements a **routing/dispatch pattern** combined with **string composition** — it builds a composite result string through successive assignments (append operations), where each conditional branch contributes a different segment. It delegates data enrichment to `callEZM0171A010` for service type name resolution and relies on `getNullToStr` for safe null handling throughout.

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["getPrgTkjk(params)"])

    START --> S1["S1: Get ccMsg from param.getData(dataMapKey)"]
    S1 --> S2["S2: Extract rtNewPcrsAplyFlg from ccMsg via getNullToStr"]
    S2 --> S3["S3: tkjikou = empty string (initialize)"]
    S3 --> S4["S4: pcrsCd = getNullToStr(ekk2811a010Msg_af.getString(PCRS_CD))"]
    S4 --> S5["S5: kkopSvcCd = getNullToStr(ekk2811a010Msg_af.getString(KKOP_SVC_CD))"]
    S5 --> S6["S6: kkopSvcKeiStat = getNullToStr(ekk2811a010Msg_af.getString(KKOP_SVC_KEI_STAT))"]
    S6 --> S7{kkopSvcCd == KIKI_OPT_SVC_CD_RUTAR = G01}
    S7 -- "true" --> S7A["cdSbtCd = CD01613"]
    S7 -- "false" --> S7B{kkopSvcCd == KIKI_OPT_SVC_CD_VA = G02}
    S7B -- "true" --> S7C["cdSbtCd = CD01614"]
    S7B -- "false" --> S7D["cdSbtCd = empty string (unchanged)"]
    S7D --> S8["S8: ezm0171a010Msg = callEZM0171A010(handle, scCall, param, dataMapKey, cdSbtCd, pcrsCd)"]
    S7A --> S8
    S7C --> S8

    S8 --> S9{sodShoriKbn == SOD_SHORI_KBN_DSL = 3}
    S9 -- "true" --> S9A["tkjikou = Device option cancellation functional name + ezm0171a010Msg.getString(CD_DIV_NM)"]
    S9 -- "false" --> S9B["tkjikou = Device option registration functional name + ezm0171a010Msg.getString(CD_DIV_NM)"]

    S9B --> S10{sodShoriKbn == SOD_SHORI_KBN_INI = 0}

    S10 -- "true" --> S11["S11: Get ekk2811a010Msg_bf from temporaryData(KIKI_OPT_SVC_KEI_RUTAR_BF)"]
    S11 --> S12{ekk2811a010Msg_bf != null}
    S12 -- "true" --> S13{pplan_cd == PG0101}
    S13 -- "true" --> S13A["pplan_cd_bf = Wired"]
    S13 -- "false" --> S13B{pplan_cd == PG0201}
    S13B -- "true" --> S13C["pplan_cd_bf = Wireless"]
    S13B -- "false" --> S13D["pplan_cd_bf = None"]
    S13D --> S14{svc_stat == DSL=910 OR svc_stat == CANCEL=920}
    S14 -- "true" --> S14A["pplan_cd_bf = None"]
    S14 -- "false" --> S15["S15: Get ekk2811a010Msg_af, build pplan_cd_af the same way"]
    S15 --> S16{ekk2811a010Msg_af != null}
    S16 -- "true" --> S17{svc_stat == DSL=910 OR svc_stat == CANCEL=920}
    S17 -- "true" --> S17A["pplan_cd_af = None"]
    S17 -- "false" --> S18["tkjikou = Functional change: pplan_cd_bf to pplan_cd_af"]
    S17A --> S18
    S16 -- "false" --> S19["pplan_cd_af = None"]
    S19 --> S18

    S12 -- "false" --> S19
    S13A --> S14
    S13C --> S14

    S10 -- "false" --> S20{kkopSvcCd == ROUTER=G01 AND svc_stat NOT DSL AND svc_stat NOT CANCEL}
    S20 -- "true" --> S21{rtNewPcrsAplyFlg == NEWPCRS=1}
    S21 -- "true" --> S21A["tkjikou += Router effective timing: Use from new course"]
    S21 -- "false" --> S21B["tkjikou += Router effective timing: Use immediately"]
    S20 -- "false" --> S22["S22: return tkjikou"]

    S18 --> S22
    S21A --> S22
    S21B --> S22
    S9A --> S22
    S9B --> S10

    S22 --> END(["End Return tkjikou"])
```

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `handle` | `SessionHandle` | Database session handle for the current user transaction, used to execute service component calls and access the data layer. |
| 2 | `scCall` | `ServiceComponentRequestInvoker` | Service component invocation bridge used to dispatch remote service component calls (e.g., `callEZM0171A010`). |
| 3 | `param` | `IRequestParameterReadWrite` | Request parameter object carrying screen data; provides `getData(dataMapKey)` to retrieve the ccMsg HashMap containing the new PCR (package/course) application flag. |
| 4 | `dataMapKey` | `String` | Key used to access the ccMsg HashMap within the `param` object. Identifies the data map for this screen's context. |
| 5 | `temporaryData` | `HashMap<String, Object>` | Temporal data store carrying between-method state. Contains the "before" equipment option service details (`KIKI_OPT_SVC_KEI_RUTAR_BF`) used when comparing plan codes before/after a change. |
| 6 | `ekk2811a010Msg_af` | `CAANMsg` | "After" equipment provision service contract message. Contains the current (post-operation) values for PCR service code, service subtype status, plan code, etc. This is the primary source of equipment option data for building the summary. |
| 7 | `prgStat` | `String` | Program status flag (unused in this method — passed through but never referenced in the body). |
| 8 | `sodShoriKbn` | `String` | SOD processing classification — determines which summary branch to execute. Values: `"0"` (initial/nothing — compare before/after plan), `"3"` (cancellation — display cancellation text), other values (default — display registration text with optional router timing). |

**Instance fields / external state read:**
- None directly — all state is passed through parameters. The method reads constants defined within the same class (`JKKKikiIchiranKkOpKyUpdCC`).

## 4. CRUD Operations / Called Services

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

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| R | `callEZM0171A010` | EZM0171A010SC | Equipment option service type master | Calls `callEZM0171A010` (local) to query equipment option service type name by subtype code (CD01613/G01 or CD01614/G02) and PCR service code. Maps to service type display name lookup. |
| R | `getNullToStr` | — | — | Internal utility method within `JKKKikiIchiranKkOpKyUpdCC` — converts null string values to empty strings for safe display. Called 7 times. |

### Method call analysis:

The method delegates to `callEZM0171A010` which internally queries the equipment option service type master table to resolve the display name (`CD_DIV_NM`). The service subtype code (`cdSbtCd`) is mapped as follows:

| `kkopSvcCd` value | Mapped `cdSbtCd` | Business meaning |
|-------------------|-------------------|------------------|
| `"G01"` (KIKI_OPT_SVC_CD_RUTAR) | `"CD01613"` | Equipment option service type — Router |
| `"G02"` (KIKI_OPT_SVC_CD_VA) | `"CD01614"` | Equipment option service type — VA (Virtual Account/Value Added) |
| Other / empty | `""` | No service type mapping (falls through to default) |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | Component:JKKKikiIchiranKkOpKyUpdCC | `execShinchokuToroku()` -> `getPrgTkjk(handle, scCall, param, dataMapKey, temporaryData, ekk2811a010Msg_af, prgStat, sodShoriKbn)` | `callEZM0171A010 [R] Equipment option service type master` |

**Terminal operations from this method:**
- `getNullToStr` [R] — Null-to-string conversion utility (7 calls)
- `callEZM0171A010` [R] — Equipment option service type name lookup (1 call)

**Call chain detail:**
The only direct caller is `execShinchokuToroku()` within the same class (`JKKKikiIchiranKkOpKyUpdCC`). This method is invoked during the equipment option update process (`ShinchokuToroku` = 着工登録 / work registration) and is used to build a change summary description string that is displayed to the user. The caller passes the SOD processing classification (`sodShoriKbn`) to determine which branch of summary text to generate.

## 6. Per-Branch Detail Blocks

**Block 1** — SET (initialization) (L4414)

Extract data and initialize variables from the incoming message.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `ccMsg = (HashMap<String, Object>)param.getData(dataMapKey)` // Retrieve ccMsg HashMap from request parameter |
| 2 | SET | `rtNewPcrsAplyFlg = getNullToStr((String)ccMsg.get("rt_new_pcrs_aply_flg"))` // New PCR application flag — determines router effective timing [ANK-4287-00-00 ADD] |
| 3 | SET | `tkjikou = ""` // Initialize return string |
| 4 | SET | `pcrsCd = getNullToStr(ekk2811a010Msg_af.getString(EKK2811A010CBSMsg1List.PCRS_CD))` // PCR (Package/Course) service code from after-message |
| 5 | SET | `kkopSvcCd = getNullToStr(ekk2811a010Msg_af.getString(EKK2811A010CBSMsg1List.KKOP_SVC_CD))` // Equipment option service code — determines service type branch |
| 6 | SET | `kkopSvcKeiStat = getNullToStr(ekk2811a010Msg_af.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT))` // Equipment option service contract status — DSL=910 means cancellation completed, CANCEL=920 means cancellation reserved [v7.00.01 CHANGE] |

**Block 2** — IF/ELSE-IF (service code dispatch) `(KIKI_OPT_SVC_CD_RUTAR.equals(kkopSvcCd) || KIKI_OPT_SVC_CD_VA.equals(kkopSvcCd))` (L4451)

Map the equipment option service code to the corresponding service subtype code for the EZM0171A010 lookup.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (KIKI_OPT_SVC_CD_RUTAR.equals(kkopSvcCd))` [KIKI_OPT_SVC_CD_RUTAR = "G01" (Equipment option service code — Router)] |
| 2 | SET | `cdSbtCd = "CD01613"` // Router subtype code |
| 3 | ELSE-IF | `else if (KIKI_OPT_SVC_CD_VA.equals(kkopSvcCd))` [KIKI_OPT_SVC_CD_VA = "G02" (Equipment option service code — VA)] |
| 4 | SET | `cdSbtCd = "CD01614"` // VA subtype code |

**Block 3** — EXEC (service component call) (L4462)

Invoke the service component to resolve the equipment option service type display name.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `ezm0171a010Msg = callEZM0171A010(handle, scCall, param, dataMapKey, cdSbtCd, pcrsCd)` // Query equipment option service type name by subtype code and PCR service code |

**Block 4** — IF/ELSE (sodShoriKbn — cancellation vs default) `(SOD_SHORI_KBN_DSL.equals(sodShoriKbn))` (L4465)

Build the base summary text: cancellation text for DSL processing, or registration text for default processing.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (SOD_SHORI_KBN_DSL.equals(sodShoriKbn))` [SOD_SHORI_KBN_DSL = "3" (SOD processing classification — cancellation)] |
| 2 | SET | `tkjikou = "機器オプション解約 機能名：" + getNullToStr(ezm0171a010Msg.getString(EZM0171A010CBSMsg1List.CD_DIV_NM))` // "Device option cancellation  Functional name: [service type name]" |
| 3 | ELSE | `else` |
| 4 | SET | `tkjikou = "機器オプション登録 機能名：" + getNullToStr(ezm0171a010Msg.getString(EZM0171A010CBSMsg1List.CD_DIV_NM))` // "Device option registration  Functional name: [service type name]" |

**Block 5** — IF (sodShoriKbn — INI pre-registration update) `(SOD_SHORI_KBN_INI.equals(sodShoriKbn))` (L4475)

[ANK-2394-00-00] When SOD processing classification is "INI" (initial/pre-registration), compare before/after plan codes to display the functional change summary (wired -> wireless or vice versa).

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (SOD_SHORI_KBN_INI.equals(sodShoriKbn))` [SOD_SHORI_KBN_INI = "0" (SOD processing classification — initial/nothing)] |
| 2 | SET | `pplan_cd_bf` // Before plan code variable (declaration) |
| 3 | SET | `pplan_cd_af` // After plan code variable (declaration) |
| 4 | SET | `ekk2811a010Msg_bf = (CAANMsg)temporaryData.get(KIKI_OPT_SVC_KEI_RUTAR_BF)` // Retrieve "before" equipment option message [KIKI_OPT_SVC_KEI_RUTAR_BF = "KIKI_OPT_SVC_KEI_RUTAR_BF"] |

**Block 5.1** — IF/ELSE (before message null check) `(ekk2811a010Msg_bf != null)` (L4484)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (ekk2811a010Msg_bf != null)` // Before message exists in temporary data |

**Block 5.1.1** — IF/ELSE-IF/ELSE (before plan code mapping) (`"PG0101".equals(getNullToStr(ekk2811a010Msg_bf.getString(EKK2811A010CBSMsg1List.PPLAN_CD)))`) (L4489)

Map the before plan code to a human-readable Japanese label.

| # | Type | Code |
|---|------|------|
| 1 | IF | `"PG0101".equals(...)` // Plan code PG0101 = Wired connection |
| 2 | SET | `pplan_cd_bf = "有線"` // "Wired" |
| 3 | ELSE-IF | `"PG0201".equals(...)` // Plan code PG0201 = Wireless connection |
| 4 | SET | `pplan_cd_bf = "無線"` // "Wireless" |
| 5 | ELSE | — |
| 6 | SET | `pplan_cd_bf = "なし"` // "None" |

**Block 5.1.2** — IF (before DSL/cancel status override) `(KKOPT_SVC_KEI_STAT_DSL.equals(...) || KKOPT_SVC_KEI_STAT_CANCEL.equals(...))` (L4499)

[OM-2015-0000768] If the before service status is already DSL (cancellation completed) or CANCEL (cancellation reserved), override the plan code to "None" since the service is no longer active.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if ((KKOPT_SVC_KEI_STAT_DSL.equals(getNullToStr(...KKOP_SVC_KEI_STAT))) || (KKOPT_SVC_KEI_STAT_CANCEL.equals(getNullToStr(...KKOP_SVC_KEI_STAT))))` [KKOPT_SVC_KEI_STAT_DSL = "910" (DSL), KKOPT_SVC_KEI_STAT_CANCEL = "920" (CANCEL)] |
| 2 | SET | `pplan_cd_bf = "なし"` // Override to "None" — service already cancelled |

**Block 5.2** — ELSE (before message is null) (L4508)

| # | Type | Code |
|---|------|------|
| 1 | SET | `pplan_cd_bf = "なし"` // "None" — no before data available |

**Block 5.3** — IF/ELSE (after message null check) `(ekk2811a010Msg_af != null)` (L4514)

Build the "after" plan code label using the same logic as the before block. Note: `ekk2811a010Msg_af` is the same message passed as parameter.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (ekk2811a010Msg_af != null)` |

**Block 5.3.1** — IF/ELSE-IF/ELSE (after plan code mapping) (L4518)

| # | Type | Code |
|---|------|------|
| 1 | IF | `"PG0101".equals(...)` // Plan code PG0101 = Wired |
| 2 | SET | `pplan_cd_af = "有線"` // "Wired" |
| 3 | ELSE-IF | `"PG0201".equals(...)` // Plan code PG0201 = Wireless |
| 4 | SET | `pplan_cd_af = "無線"` // "Wireless" |
| 5 | ELSE | — |
| 6 | SET | `pplan_cd_af = "なし"` // "None" |

**Block 5.3.2** — IF (after DSL/cancel status override) (L4530)

[OM-2015-0000768] Same override logic as before block — if after status is DSL or CANCEL, force plan to "None".

| # | Type | Code |
|---|------|------|
| 1 | IF | `if ((KKOPT_SVC_KEI_STAT_DSL.equals(getNullToStr(...KKOP_SVC_KEI_STAT))) || (KKOPT_SVC_KEI_STAT_CANCEL.equals(getNullToStr(...KKOP_SVC_KEI_STAT))))` |
| 2 | SET | `pplan_cd_af = "なし"` // Override to "None" |

**Block 5.4** — ELSE (after message is null) (L4540)

| # | Type | Code |
|---|------|------|
| 1 | SET | `pplan_cd_af = "なし"` // "None" — no after data available |

**Block 5.5** — SET (functional change summary) (L4546)

| # | Type | Code |
|---|------|------|
| 1 | SET | `tkjikou = "機能変更：" + pplan_cd_bf + "→" + pplan_cd_af` // "Functional change: [before plan]→[after plan]" — e.g., "機能変更：有線→無線" |

**Block 6** — IF (router service effective timing) `(JKKStrConst.KKOP_SVC_CD_ROUTER.equals(kkopSvcCd) && !KKOPT_SVC_KEI_STAT_DSL.equals(kkopSvcKeiStat) && !KKOPT_SVC_KEI_STAT_CANCEL.equals(kkopSvcKeiStat))` (L4551)

[ANK-4287-00-00 ADD] When the service code is Router and the service status is NOT DSL (cancellation completed) and NOT CANCEL (cancellation reserved), append the router effective timing information.

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (JKKStrConst.KKOP_SVC_CD_ROUTER.equals(kkopSvcCd) && !KKOPT_SVC_KEI_STAT_DSL.equals(kkopSvcKeiStat) && !KKOPT_SVC_KEI_STAT_CANCEL.equals(kkopSvcKeiStat))` [KKOP_SVC_CD_ROUTER = "G01", KKOPT_SVC_KEI_STAT_DSL = "910", KKOPT_SVC_KEI_STAT_CANCEL = "920"] |

**Block 6.1** — IF/ELSE (router effective timing flag) `(JKKStrConst.NEW_PCRS_APLY_FLG_NEWPCRS.equals(rtNewPcrsAplyFlg))` (L4556)

| # | Type | Code |
|---|------|------|
| 1 | IF | `if (JKKStrConst.NEW_PCRS_APLY_FLG_NEWPCRS.equals(rtNewPcrsAplyFlg))` [NEW_PCRS_APLY_FLG_NEWPCRS = "1" (Use from new course)] |
| 2 | SET | `tkjikou = tkjikou + " ルーター機能の有効タイミング：新コースから利用する"` // Append "Router effective timing: Use from new course" |
| 3 | ELSE | — |
| 4 | SET | `tkjikou = tkjikou + " ルーター機能の有効タイミング：すぐに利用する"` // Append "Router effective timing: Use immediately" |

**Block 7** — RETURN (L4566)

| # | Type | Code |
|---|------|------|
| 1 | RETURN | `return tkjikou` // Return the assembled summary string |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| `tkjikou` | Field | Return value — the assembled summary text describing equipment option changes |
| `pcrsCd` | Field | PCR (Package/Course) service code — identifies the product/service package being processed |
| `kkopSvcCd` | Field | Equipment option service code (機器オプションサービスコード) — identifies which equipment option service is being handled (G01=Router, G02=VA) |
| `kkopSvcKeiStat` | Field | Equipment option service contract status (機器オプションサービス契約ステータス) — DSL=910 means cancellation completed, CANCEL=920 means cancellation reserved |
| `cdSbtCd` | Field | Service subtype code (サービスサブタイプコード) — maps equipment option service code to the subtype used for EZM0171A010 lookup |
| `sodShoriKbn` | Field | SOD processing classification (SOD処理区分) — determines the processing branch: "0"=initial, "3"=cancellation, other=default |
| `rtNewPcrsAplyFlg` | Field | Router new PCR application flag (ルーター新規PCR適用フラグ) — determines whether router function takes effect from a new course or immediately |
| `pplan_cd_bf` | Field | Plan code before (変更前プランコード) — human-readable plan code label before the change |
| `pplan_cd_af` | Field | Plan code after (変更後プランコード) — human-readable plan code label after the change |
| `ekk2811a010Msg_af` | Field | After equipment provision service contract message (変更後機器提供サービス契約メッセージ) — contains post-operation equipment option data |
| `ekk2811a010Msg_bf` | Field | Before equipment provision service contract message (変更前機器提供サービス契約メッセージ) — retrieved from temporaryData, contains pre-operation data |
| SOD | Acronym | Service Order Data — the core order fulfillment entity in the telecom system |
| KIKI | Acronym | 機器 (Kiki) — Equipment, referring to customer-provided equipment (CPE) |
| OPT | Abbreviation | オプション (Option) — Equipment option / value-added service |
| PCRS | Abbreviation | Package/Course — product package or service course in the telecom offering |
| VA | Business term | Value Added — a type of equipment option service (V附加サービス) |
| DSL | Acronym | Disposition/Contract Cancellation (解約) — in this codebase, refers to equipment option service contract cancellation |
| INI | Abbreviation | Initial (初期) — Pre-registration state, meaning the operation is happening before the SOD is formally registered |
| ROUTER | Business term | Router equipment option — provides router functionality for the customer's internet connection |
| CD01613 | Constant | Service subtype code — Router equipment option |
| CD01614 | Constant | Service subtype code — VA (Value Added) equipment option |
| PG0101 | Constant | Plan code — Wired connection plan |
| PG0201 | Constant | Plan code — Wireless connection plan |
| G01 | Constant | Equipment option service code — Router (KIKI_OPT_SVC_CD_RUTAR) |
| G02 | Constant | Equipment option service code — VA (KIKI_OPT_SVC_CD_VA) |
| 910 | Constant | Service contract status — Cancellation completed (KKOPT_SVC_KEI_STAT_DSL) |
| 920 | Constant | Service contract status — Cancellation reserved (KKOPT_SVC_KEI_STAT_CANCEL) |
| 有線 | Japanese | Wired (connection) |
| 無線 | Japanese | Wireless (connection) |
| なし | Japanese | None / Not applicable |
| 機器オプション | Japanese | Equipment option — value-added services for customer-provided equipment |
| 機能変更 | Japanese | Functional change — plan code change between wired/wireless |
| 機器オプション解約 | Japanese | Equipment option cancellation |
| 機器オプション登録 | Japanese | Equipment option registration |
| ルーター機能の有効タイミング | Japanese | Router function effective timing — when the router function becomes active |
| 新コースから利用する | Japanese | Use from new course — router becomes active when a new course is selected |
| 次に利用する | Japanese | Use immediately — router becomes active right away |
| EKK2811A010 | CBS | Equipment provision service contract main CBS — provides the after-message with equipment option data |
| EZM0171A010 | SC | Equipment option service type name lookup SC — resolves the display name for a given service subtype code and PCR service code |
| callEZM0171A010 | Method | Local method on `JKKKikiIchiranKkOpKyUpdCC` that delegates to the EZM0171A010 service component for service type name resolution |
