---
title: Service reference lookups
summary: Resolves and caches billable-service reference data — descriptions, fee schedules, CPT bundling, MCO fee exemptions, and type/location/modifier code lists — used to validate and describe bill and procedure lines.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.Claim.Bill
reference_type: package
operation_id: OP-CB-06
trigger: Any read of a service's description, fee schedule, CPT bundling, or MCO fee exemption through clsServiceInfo or clsServiceManager
---

# Service reference lookups

Service reference lookups resolve a service code and type to its full reference profile: descriptions, fee schedules, CPT bundling relationships, and MCO fee exemptions, plus the process-wide code-table lists (service type, location, modifier, category, sub-category) used elsewhere in the library. Every class here is read-only against Oracle reference tables — none of them write. `clsServiceManager` caches resolved `clsServiceInfo` objects by `code#type` key so repeated lookups for the same service avoid re-querying the database.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-CB-06 |
| **Trigger** | Any read of `clsServiceInfo.ServiceDescriptions`, `.FeeSchedule`, `.CPTServices`, `.MCOFeeExeptions`, or `.BundledItems`; or a direct call to `clsServiceManager.GetService(code, type)` |
| **Inputs** | Service code, service type code, effective date (for date-scoped lookups) |
| **Outputs** | Cached `clsServiceInfo` with lazily-loaded description, fee, CPT, and bundle collections; process-wide code-table lists (`clsServiceTypeCodeMap`, service location/modifier/category/sub-category lists) |
| **Primary components** | `clsServiceManager.GetService`, `clsServiceManager.RetrieveService`, `clsServiceManager.GetDescriptions`, `clsServiceManager.GetFees`, `clsServiceManager.GetCPTServices`, `clsServiceManager.GetCPTBundledItems`, `clsServiceManager.GetMCOFeeExemptions`, `clsServiceManager.IsInBundle`, `mdlServices.GetServiceManager` |
| **Entry point** | `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\ServiceManager.vb` |

## Steps

1. **Obtain the cached service manager.** `mdlServices.GetServiceManager(inDPI, refresh)` returns a module-level cached singleton; passing `refresh = True` discards the cache and creates a new manager.
2. **Resolve a service by code and type (`GetService`).** The manager builds a cache key of `code#type`; if not already cached, it calls `RetrieveService` to load it, then returns the cached `clsServiceInfo` (or `Nothing` if no matching service exists).
   - `RetrieveService` queries `cbp_service_code` by code and type, maps the `bill_service_type_code` through `GetServiceTypeCodeMap(...)`, constructs a `clsServiceInfo(...)`, stores it in the in-memory cache, and returns whether any row was found. This table is not currently listed in the SQL catalog or database-tables document for this library.**
3. **Get a service type code for a date (`GetServiceTypeCode`).** A scalar query against `cbp_service_code` filters by code and an effective/expiration date window and returns the type code, or an empty string if the result is null/DBNull. This table is not currently listed in the SQL catalog for this library.**
4. **Load service descriptions (lazy, `clsServiceInfo.ServiceDescriptions`).** On first access, `Manager.GetDescriptions(Me)` queries `cbp_service_description` by service code and type and builds a `clsServiceDescriptionList` of `clsServiceDescriptionInfo` entries (each carrying description text and effective/expiration dates). This table is not currently listed in the SQL catalog for this library.**
   - `clsServiceDescriptionList.GetDescription(inDate)` returns the first description in effect on the requested date.
5. **Load the fee schedule (lazy, `clsServiceInfo.FeeSchedule`).** On first access, `Manager.GetFees(Me)` queries `cbp_service_fee`, computes a `FeeKey` from the effective date, expiration date (or a sentinel), and service-modifier code, resolves the modifier through the process-wide modifier list, and builds a `clsServiceFeeList` of `clsServiceFee` entries carrying maximum amount, relative quantities, and percent-off/package-eligibility flags. This table is not currently listed in the SQL catalog for this library.**
6. **Load CPT service flags (lazy, `clsServiceInfo.CPTServices`).** On first access, `Manager.GetCPTServices(Me)` queries `cbp_cpt_service` by code and type and builds a `clsCPTServiceList` of `clsCPTServiceInfo` entries carrying global-day quantity and surgical/E&M/DME/IME/multiple-surgery flags. This table is not currently listed in the SQL catalog for this library.**
   - `clsCPTServiceList.GetCPTService(inEffectiveDate)` returns the entry in effect on the requested date.
7. **Load CPT bundling relationships (lazy, `clsServiceInfo.BundledItems`).** On first access, `Manager.GetCPTBundledItems(Me)` queries `cbp_cpt_service_bundle` for rows where the service is either the bundle or a component, resolves both the bundle and component services through `GetService` (values retrieved but not further used in the bundled-item construction), and builds `clsCPTBundledItem` entries with an exemption flag. This table is not currently listed in the SQL catalog for this library.**
   - Derived properties on `clsServiceInfo` classify the service using this list: `IsCPTBundle` (service owns a bundle), `BundledServices` (its component services), `IsInBundle` (service is a component of some bundle), `BundleOwners` (the bundle(s) it belongs to).
8. **Check bundle membership without loading the full list (`IsInBundle`).** `clsServiceManager.IsInBundle(inService)` runs a scalar `count(*)` against `cbp_cpt_service_bundle` and returns whether the count is greater than zero, without materializing bundle rows. This table is not currently listed in the SQL catalog for this library.**
9. **Load MCO fee exemptions (lazy, `clsServiceInfo.MCOFeeExeptions`).** On first access, `Manager.GetMCOFeeExemptions(Me)` queries `MCO_FEE_EXEMPTION` by service code and (trimmed) service type and builds a `clsMCOFeeExemptionList` of `clsMCOFeeExemption` entries carrying an MCO plan ID and effective/expiration dates. This table is not currently listed in the SQL catalog for this library.**
   - `clsMCOFeeExemptionList.FeeExists(...)` is overloaded to check by date, by date and plan ID, or by plan ID alone.
10. **Resolve process-wide code-table lists.** `mdlServices.GetServiceTypeCodeMap`, `GetServiceLocations` ([SQL-018](../sql/SQL-018-saif-business-claim-bill.md), [CBP_SERVICE_LOCATION_CODE](../database-tables.md#cbp_service_location_code)), `GetServiceModifiers` ([SQL-019](../sql/SQL-019-saif-business-claim-bill.md), [CBP_SERVICE_MODIFIER_CODE](../database-tables.md#cbp_service_modifier_code)), `GetServiceCategories` ([SQL-017](../sql/SQL-017-saif-business-claim-bill.md), [CBP_SERVICE_CATEGORY_CODE](../database-tables.md#cbp_service_category_code)), and `GetServiceSubCategories` ([SQL-020](../sql/SQL-020-saif-business-claim-bill.md), [CBP_SERVICE_SUBCAT_CODE](../database-tables.md#cbp_service_subcat_code)) are each cached module-level lookups, reloaded only when the cache is missing or a refresh is requested.

## Process flow

The following diagram visualizes the cached lookup pattern used across all service reference data.

```mermaid
flowchart TD
	Start([Caller requests service<br>reference data]) --> Cached{Service cached<br>by code#type?}
	Cached -->|Yes| Return[Return cached clsServiceInfo]
	Cached -->|No| Retrieve[Query cbp_service_code;<br>build clsServiceInfo]
	Retrieve --> Store[Store in manager cache]
	Store --> Return
	Return --> Access{Which sub-collection<br>is accessed?}
	Access -->|Descriptions| Desc[Lazy-load cbp_service_description]
	Access -->|Fees| Fees[Lazy-load cbp_service_fee]
	Access -->|CPT| CPT[Lazy-load cbp_cpt_service]
	Access -->|Bundles| Bundle[Lazy-load cbp_cpt_service_bundle]
	Access -->|MCO exemptions| MCO[Lazy-load MCO_FEE_EXEMPTION]
	Desc --> Done([Sub-collection returned<br>and cached on the object])
	Fees --> Done
	CPT --> Done
	Bundle --> Done
	MCO --> Done
```

## Failure and edge-case behavior

- `clsServiceInfo.MCOFeeExeptions` is misspelled in source (missing the second "m" in "Exemptions"); the name is preserved here to describe the code accurately rather than corrected.*
- `GetCPTBundledItems` resolves both the bundle-side and component-side services via `GetService` but does not use the returned objects beyond triggering the cache population, so a missing bundle or component service silently returns `Nothing` from `GetService` without surfacing an error.*
- None of the classes in this operation write to the database; all failures are read-miss conditions (empty list, `Nothing` return, or empty string) rather than validation errors or broken rules.
- Several reference tables queried here (`cbp_service_code`, `cbp_cpt_service`, `cbp_cpt_service_bundle`, `cbp_service_fee`, `cbp_service_description`, `MCO_FEE_EXEMPTION`) are not currently represented in this library's SQL catalog or database-tables document; table names above are cited directly from source rather than from a documented SQL ID.**

## Related documentation

- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts. Statements marked with `**` could not be confirmed against
> existing documentation artifacts; treat as unknown until verified.

## Sources

- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\AbastractServiceClasses.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\ServiceManager.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\clsCPTBundle.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\clsCPTService.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\clsMCOFeeExemption.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\clsServiceDescription.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\clsServiceFee.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\clsServiceInfo.vb`
- `Business\SAIF.Business.Claim.Bill\AuditSupport\Services\mdlServices.vb`
