---
title: MCO determination
summary: Resolves claim, billing-provider, and servicing-provider MCO plan enrollment and withhold eligibility for each auditable service.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.Claim.Bill.AutomatedAudit
reference_type: package
operation_id: OP-AA-04
trigger: BillAuditEngine.AuditBill calls clsMCOManager.DetermineMCO(Bill) for bills that are not Worker Reimbursement type
---

# MCO determination

`clsMCOManager.DetermineMCO` resolves, for every auditable service line, whether the claim's managed-care-organization (MCO) enrollment applies, which billing-provider and servicing-provider MCO plans are in effect, and whether the service is eligible for MCO administrative-fee withhold. It reuses resolved state across consecutive services sharing the same service date and provider to avoid redundant lookups.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-AA-04 |
| **Trigger** | `BillAuditEngine.AuditBill` calls `clsMCOManager.DetermineMCO(Bill)` after service edits pass, unless `Bill.BillType = WorkerReimbursement` |
| **Inputs** | `clsBillAudit` with edited, auditable services (`Bill.ServiceData.ForReAudit`) |
| **Outputs** | Per-service `McoEligibilityStatusCode`, `McoID`, `McoPlanID`, `IsMCOWithhold` state on the audited service; cached `clsClaimMCO` on the bill |
| **Primary components** | `clsMCOManager.DetermineMCO`, `clsMCOManager.DetermineClaimMCO`, `clsMCOManager.DetermineBillingProviderMCO`, `clsMCOManager.DetermineServicingProviderMCO`, `clsMCOManager.GetClaimMCO` |
| **Entry point** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsMCOManager.vb` |

## Steps

1. **Start and cache claim MCO.** Start the `"Determine MCO"` trail group, set the current `Bill`, and resolve `Bill.MCOInformation` via `GetClaimMCO(Bill.Claim)`, which caches a `clsClaimMCO` instance per `ClaimID` for the run.*
2. **Iterate auditable services.** For each service in `Bill.ServiceData.ForReAudit`:
   - **Reuse when possible.** If the previous service in the loop shared the same `ServiceDate`, reuse its already-resolved claim MCO and billing-provider MCO state instead of re-querying. If it also shared the same servicing provider location, reuse the servicing-provider MCO/withhold state as well.
   - **Otherwise, resolve claim MCO (`DetermineClaimMCO`).** Call `Bill.MCOInformation.GetMCOEligibility(Service.ServiceDate)`.
     - If no eligibility record is found: log that no enrollment exists and null the audited service's `McoEligibilityStatusCode`, `MCOID`, and `McoPlanID`.
     - Otherwise: log the resolved status/effective date/plan/location and set `McoEligibilityStatusCode`, `McoID`, `McoPlanID` on the audited service.
   - **Resolve billing-provider MCO (`DetermineBillingProviderMCO`).**
     - Seed `IsMandatoryMCO` from `Bill.BillingProvider.ProviderType.IsMandatoryMco`, and `IsMCOProviderAdminFee = False`.
     - Retrieve the billing provider's MCO plan list effective on the service date.

       > **Origin**: This plan list is implemented by [Retrieve MCO provider enrollments](../../saif-business-view-provider/operations/provider-location-ancillary-data.md) in `SAIF.BOF.Business.View.Provider`.
     - By claim MCO status: `"Y"` prefers the same plan ID, falling back to the first plan with `ApplyDiscountCode` in `A`/`P`; `"P"` prefers the same plan ID with `ApplyDiscountCode` in `A`/`P`, falling back to any plan with `ApplyDiscountCode = A`; any other status uses any plan with `ApplyDiscountCode = A`.
     - If a plan is selected, store it as `BillingProviderMCOPlan` and log its ID/description.
   - **Resolve servicing-provider MCO and withhold (`DetermineServicingProviderMCO`).**
     - Default `IsMandatoryMCO` from the billing provider type; retrieve the servicing provider's MCO plan list effective on the service date.

       > **Origin**: This plan list is also implemented by [Retrieve MCO provider enrollments](../../saif-business-view-provider/operations/provider-location-ancillary-data.md) in `SAIF.BOF.Business.View.Provider`.
     - By claim MCO status: `"Y"` requires the same plan ID as the claim's eligibility record; `"P"` requires the same plan ID **and** `ApplyAdminFeeCode = "P"`; any other status disables withhold entirely for this service.
     - If a qualifying plan is found: set `ServicingProviderMCOPlan`, `IsMCOWithhold = True`, `MCOWithholdPlan`, `MCOWithHoldAdminFeeRate`, and `IsMandatoryMCO` from the servicing provider's type; log the selected plan and withhold plan.
     - If a servicing-provider plan was found, set `IsMCOProviderAdminFee = ServicingProviderMCOPlan.IsAdminFee`.
   - **Reconcile withhold eligibility on the audited service.** If the service does not qualify for withhold: null `McoPlanID`, zero `MCOWithHoldAdminFeeRate`, and clear `IsMCOProviderAdminFee` on the audited service. Otherwise, if a servicing-provider plan was resolved, copy its `PlanID` into the audited service's `McoPlanID`.
3. **Stop groups.** Stop the per-service and overall `"Determine MCO"` trail groups.

## Process flow

```mermaid
flowchart TD
	Start([DetermineMCO invoked]) --> CacheClaim[Cache Bill.MCOInformation<br>via GetClaimMCO]
	CacheClaim --> Loop[For each service in ForReAudit]
	Loop --> Reuse{Same ServiceDate<br>as previous service?}
	Reuse -->|Yes| ReuseState[Reuse claim/billing-provider<br>MCO state]
	Reuse -->|No| ClaimMCO[DetermineClaimMCO:<br>GetMCOEligibility]
	ClaimMCO --> BillingMCO[DetermineBillingProviderMCO:<br>select plan by claim MCO status]
	ReuseState --> ServicingCheck{Same servicing<br>provider too?}
	BillingMCO --> ServicingMCO[DetermineServicingProviderMCO:<br>resolve withhold plan]
	ServicingCheck -->|Yes| ReuseServicing[Reuse servicing-provider<br>MCO/withhold state]
	ServicingCheck -->|No| ServicingMCO
	ServicingMCO --> Qualify{Service qualifies<br>for withhold?}
	ReuseServicing --> Qualify
	Qualify -->|No| ClearWithhold[Null McoPlanID;<br>zero admin fee rate]
	Qualify -->|Yes| CopyPlan[Copy ServicingProviderMCOPlan.PlanID<br>to McoPlanID]
	ClearWithhold --> Next{More services?}
	CopyPlan --> Next
	Next -->|Yes| Loop
	Next -->|No| Done([Stop trail groups])
```

## Failure and edge-case behavior

- Skipped entirely for `WorkerReimbursement` bills — those bills never receive MCO plan or withhold data from this operation.
- The reuse optimization in step 2 assumes services are processed in a stable order such that consecutive same-date (and same-provider) services share MCO context; if that ordering assumption does not hold, stale state could be reused.*
- A claim MCO status other than `"Y"` or `"P"` disables servicing-provider withhold entirely, even if a matching plan exists, because the `Else` branch of `DetermineServicingProviderMCO` performs no lookup.
- `clsClaimMCO` is constructed directly (`New clsClaimMCO(DPI, ClaimID)`) rather than through a locally-traced factory; its owning library could not be confirmed from this library's source alone.**

## 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; treat as unknown until verified.

## Sources
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsMCOManager.vb`
