---
title: SAIF.Business.Claim.Bill.AutomatedAudit operations and processes
summary: Operation catalog and cross-operation hub for the automated bill audit engine.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.Claim.Bill.AutomatedAudit
reference_type: package
---

# SAIF.Business.Claim.Bill.AutomatedAudit operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Business.Claim.Bill.AutomatedAudit`. The library exposes six operations: the top-level audit orchestration pipeline, the bill-level and service-level edit passes it drives, MCO (managed-care-organization) determination, the large rule-based audit engine that computes payable amounts, and a standalone audit-comparison utility. Each operation's detailed, step-by-step logic lives in its own page under `operations/`.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md) | Retrieve a bill, generate/enrich its audit data, run bill and service edits, determine MCO status, run the audit rule engine, and save the result | Caller invokes `BillAuditEngine.AuditBill(BillID, ForceCompleteReAudit, ReadOnlyMode)` | `BillID`, `ForceCompleteReAudit`, `ReadOnlyMode`, `IDataPortalInfo` | `AuditResults` code and message; populated `clsBillAudit` in `ProcessedAuditData`; persisted audit data (unless read-only) | [BR-001](business-rules.md#br-001-bill-must-be-valid-for-audit), [BR-002](business-rules.md#br-002-bill-status-must-be-valid-for-audit), [BR-003](business-rules.md#br-003-bill-edits-must-pass), [BR-004](business-rules.md#br-004-service-edits-must-pass) | [CBP_BILL](database-tables.md#cbp_bill) | Persistence delegated to `clsBillAudit.Save` (`SAIF.Business.Claim.Bill`)* |
| [Bill edit validation](operations/bill-edit-validation.md) | Validate the bill header, diagnoses, and procedures before audit | `BillAuditEngine.AuditBill` calls `clsBillEditor.EditBill(Bill)` | Populated `clsBillAudit` | Pass/fail per rule group; audit messages on the bill; broken rules propagated to the engine | [BR-003](business-rules.md#br-003-bill-edits-must-pass) | — | — |
| [Service edit and adjustment](operations/service-edit-and-adjustment.md) | Validate and normalize each billed service line, then apply full-charge disallowance adjustments for services that fail eligibility checks | `BillAuditEngine.AuditBill` calls `clsServiceEditor.EditService`/`AdjustService` per service | `clsBillAudit`, `clsBillAuditService` per line | Normalized service data; `ReauditCode` transitions; full-charge adjustments; audit messages | [BR-004](business-rules.md#br-004-service-edits-must-pass), [BR-008](business-rules.md#br-008-audited-service-line-requires-a-service-date), [BR-009](business-rules.md#br-009-service-through-date-cannot-precede-the-service-from-date), [BR-010](business-rules.md#br-010-services-before-the-date-of-injury-are-not-payable), [BR-011](business-rules.md#br-011-non-federal-worker-reimbursement-requests-expire-after-730-days), [BR-012](business-rules.md#br-012-a-valid-active-place-of-service-is-required-for-most-service-types), [BR-013](business-rules.md#br-013-secondary-service-code-must-resolve-to-a-known-service), [BR-014](business-rules.md#br-014-pharmacy-prescriber-npi-must-be-exactly-10-numeric-digits), [BR-015](business-rules.md#br-015-institutional-bill-lines-require-a-revenue-code), [BR-016](business-rules.md#br-016-interpreter-mileage-service-lines-must-meet-minimum-quantity-thresholds), [BR-017](business-rules.md#br-017-pharmacy-bills-require-prescriber-id-rx-written-date-and-prescriber-last-name) | — | — |
| [MCO determination](operations/mco-determination.md) | Resolve claim, billing-provider, and servicing-provider MCO plan enrollment and withhold eligibility for each auditable service | `BillAuditEngine.AuditBill` calls `clsMCOManager.DetermineMCO(Bill)` for non-Worker-Reimbursement bills | `clsBillAudit`, per-service MCO/plan state | Resolved MCO plan IDs, eligibility status codes, and withhold admin-fee rate/amount on each audited service | None registered* | — | — |
| [Bill audit rule execution](operations/bill-audit-rule-execution.md) | Run the ordered audit rule set that computes basic allowance, applies provider contracts, checks cross-service and historical rules, and finalizes payable amounts | `BillAuditEngine.AuditBill` calls `clsBillAuditor.AuditBill(Bill)` after edits and MCO determination | `clsBillAudit` with edited, MCO-resolved services | Computed `AllowedAmount`/`TotalAdjustmentAmount` per service; bill audit totals; adjustment codes and audit messages | [BR-005](business-rules.md#br-005-drg-code-required-for-most-inpatient-hospital-bills), [BR-006](business-rules.md#br-006-diagnosis-and-procedure-codes-must-be-valid-and-effective), [BR-007](business-rules.md#br-007-inpatient-hospital-admit-type-code-must-be-valid), [BR-018](business-rules.md#br-018-bills-for-voided-claims-cannot-be-paid), [BR-019](business-rules.md#br-019-non-mco-provider-services-past-the-grace-period-may-be-disallowed), [BR-020](business-rules.md#br-020-late-filed-bills-are-subject-to-time-based-payment-reductions-or-disallowance), [BR-021](business-rules.md#br-021-duplicate-services-are-reduced-to-the-unpaid-remainder-or-flagged) | [CBP_DRG_CODE](database-tables.md#cbp_drg_code) | [SQL-001](sql/SQL-001-saif-business-claim-bill-automatedaudit.md) |
| [Audit bill comparison](operations/audit-bill-comparison.md) | Compare two `clsBillAudit` snapshots (typically before/after an audit) field-by-field and report mismatches | Caller invokes `clsAuditCompare.CompareBills(Audit1, Audit2, ForceCompare)` | Two `clsBillAudit` instances, optional `ForceCompare` flag | Boolean match result; collection of comparison error messages | None registered* | — | — |

<!--
  STRICT: The Operation name in each catalog row MUST link to that operation's
  detail page at operations/<operation-slug>.md (never an on-page anchor). The
  step-by-step logic, per-step rule/SQL citations, and embedded dependency logic
  live in the per-operation document (see templates/operation-document.md), not
  on this hub page. The Rules column lists the primary business rules the
  operation enforces, each as a link to business-rules.md.
-->

## Process flow diagram

The following diagram shows how the six operations relate across a single automated-audit run: the orchestration operation retrieves and enriches the bill, drives the bill/service edit and MCO operations, invokes the rule-based audit engine, and saves the result. Audit bill comparison is a standalone utility outside this pipeline.

```mermaid
flowchart TD
	Start([Caller invokes AuditBill]) --> Retrieve[Retrieve bill and prior audit]
	Retrieve --> Valid{Bill valid?}
	Valid -->|No| InvalidBill([AuditResult = InvalidBill;<br>no data saved])
	Valid -->|Yes| Status{Status eligible<br>for audit?}
	Status -->|No| InvalidStatus([AuditResult = InvalidStatus])
	Status -->|Yes| Generate[Generate/enrich audit data:<br>claim, provider, NDC lookups]
	Generate -->|Failed| FailGen([AuditResult = FailAuditGeneration])
	Generate -->|Ok| BillEdits[Bill edit validation]
	BillEdits -->|Fatal error| FailBillEdits([AuditResult = FailBillEdits;<br>new audit data discarded])
	BillEdits -->|Ok| ServiceEdits[Service edit and adjustment<br>per service line]
	ServiceEdits --> ForAudit{Services scheduled<br>for re-audit?}
	ForAudit -->|No| Save
	ForAudit -->|Yes, edits failed| FailServiceEdits([AuditResult = FailServiceEdits])
	ForAudit -->|Yes, edits passed| MCO[MCO determination<br>unless Worker Reimbursement]
	MCO --> Audit[Bill audit rule execution]
	Audit -->|Failed| FailAuditCheck([AuditResult = FailAuditCheck])
	Audit -->|Ok| Save[Save audit data<br>unless read-only]
	Save -->|Failed| FailSave([AuditResult = FailAuditSave])
	Save -->|Ok| Success([AuditResult = Success])
	Compare[Audit bill comparison]:::standalone --> CompareResult([Match/mismatch report])

	classDef standalone fill:#eee,stroke:#999,stroke-dasharray: 5 5
```

## Inherited operations and processes

Operations in this section originate from base classes or services provided by dependency framework and same-repo libraries. They are inherited or delegated, not implemented in this library.

### From `clsBusinessBase` (`SAIF.BOF.Framework`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Edit lifecycle and rules-manager evaluation | Supports `BeginEdit`/`CancelEdit`/`ApplyEdit` and broken-rule collection/propagation for business objects.* | `clsBusinessBase` | `SAIF.BOF.Framework` | [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md), [Bill edit validation](operations/bill-edit-validation.md), [Service edit and adjustment](operations/service-edit-and-adjustment.md), [Bill audit rule execution](operations/bill-audit-rule-execution.md) |

> **Origin**: This lifecycle behavior is defined in `SAIF.BOF.Framework` / `clsBusinessBase` and inherited by `BillAuditEngine` and the audit utility classes. No dedicated operation page exists for this framework dependency; behavior is summarized inline in the consuming operation pages.

### From `clsBill` (`SAIF.Business.Claim.Bill`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Bill CRUD | Persists the bill header and cascades save into diagnosis, procedure, service, and status collections. | `clsBill` | `SAIF.Business.Claim.Bill` | [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md) |
| Audit and audited services | Persists the audit header, audited-service lines, adjustments, and audit messages generated during automated audit. | `clsBill`/`clsAudit` | `SAIF.Business.Claim.Bill` | [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md) |
| National drug validation | Retrieves a national drug code's master record and price history. | `clsNationalDrug` | `SAIF.Business.Claim.Bill` | [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md) |
| Service reference lookups | Resolves and caches billable-service reference data (descriptions, fee schedules, CPT bundling, MCO fee exemptions). | `clsServiceManager`/`clsServiceInfo` | `SAIF.Business.Claim.Bill` | [Bill audit rule execution](operations/bill-audit-rule-execution.md), [Service edit and adjustment](operations/service-edit-and-adjustment.md) |

> **Origin**: These operations are defined in `SAIF.Business.Claim.Bill` and inherited or delegated by this component. Their step-by-step logic is embedded inline (with `> Origin` callouts) in the consuming operation's detail page. See [Bill CRUD](../saif-business-claim-bill/operations/bill-crud.md), [Audit and audited services](../saif-business-claim-bill/operations/audit-and-audited-services.md), [National drug validation](../saif-business-claim-bill/operations/national-drug-validation.md), and [Service reference lookups](../saif-business-claim-bill/operations/service-reference-lookups.md) in the `SAIF.Business.Claim.Bill` documentation set.

### From `clsClaimData` (`SAIF.Business.View.Claim`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Retrieve claim summary data | Loads claim-level summary values (status, injury date, jurisdiction, merge/replacement chain) used to validate and enrich a bill. | `clsClaimData` | `SAIF.Business.View.Claim` | [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md), [Bill edit validation](operations/bill-edit-validation.md) |

> **Origin**: This operation is defined in `SAIF.Business.View.Claim`, which is documented in the previous format (no per-operation page exists). See [Retrieve claim summary data](../saif-business-view-claim/operations/claim-summary-and-detail-retrieval.md) in the `SAIF.Business.View.Claim` documentation set.

### From `clsProviderLocation` (`SAIF.BOF.Business.View.Provider`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Retrieve provider location | Loads billing/servicing/prescribing provider location detail, provider type, and tax IDs used to validate a bill and its services. | `clsProviderLocation` | `SAIF.BOF.Business.View.Provider` | [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md), [Bill edit validation](operations/bill-edit-validation.md) |
| Retrieve DCBS cost charges | Loads the effective cost/charge conversion factor used for cost-charge basic allowance computation. | `clsProviderLocation` | `SAIF.BOF.Business.View.Provider` | [Bill audit rule execution](operations/bill-audit-rule-execution.md) |
| Retrieve provider service contracts | Loads active provider service contracts used to compute contract-based allowance. | `clsProviderLocation` | `SAIF.BOF.Business.View.Provider` | [Bill audit rule execution](operations/bill-audit-rule-execution.md) |
| Retrieve MCO provider enrollments | Loads MCO plan enrollment for a provider location used to resolve billing/servicing-provider MCO plans. | `clsProviderLocation` | `SAIF.BOF.Business.View.Provider` | [MCO determination](operations/mco-determination.md) |

> **Origin**: These operations are defined in `SAIF.BOF.Business.View.Provider`, which is documented in the previous format (no per-operation page exists). See [Retrieve provider location](../saif-business-view-provider/operations/provider-location-retrieval.md), [Retrieve DCBS cost charges](../saif-business-view-provider/operations/provider-location-ancillary-data.md), [Retrieve provider service contracts](../saif-business-view-provider/operations/provider-location-ancillary-data.md), and [Retrieve MCO provider enrollments](../saif-business-view-provider/operations/provider-location-ancillary-data.md) in the `SAIF.BOF.Business.View.Provider` documentation set.

## Database interactions

The following table summarizes which operations read from or write to the database. Per-step SQL and table citations live in each operation's detail page under `operations/`.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md) | — (persistence delegated to `clsBillAudit.Save` in `SAIF.Business.Claim.Bill`)* | [CBP_BILL](database-tables.md#cbp_bill) | Write* |
| [Bill audit rule execution](operations/bill-audit-rule-execution.md) | [SQL-001](sql/SQL-001-saif-business-claim-bill-automatedaudit.md) | [CBP_DRG_CODE](database-tables.md#cbp_drg_code) | Read |

Two additional SQL statements are used in support of this pipeline but are executed by supporting utility classes rather than the operations above: [SQL-002](sql/SQL-002-saif-business-claim-bill-automatedaudit.md) (historical bill/service data, [CBP_BILL](database-tables.md#cbp_bill)) backs the service history lookups consumed inside [Bill audit rule execution](operations/bill-audit-rule-execution.md), and [SQL-003](sql/SQL-003-saif-business-claim-bill-automatedaudit.md) (pharmacy eligibility, [CL_PHARMACY_ELIGIBILITY_REPORT](database-tables.md#cl_pharmacy_eligibility_report)) backs a lazily-loaded property on `clsBillAudit` consumed during [Automated bill audit orchestration](operations/automated-bill-audit-orchestration.md).

## Failure and edge-case behavior
- An invalid bill or an ineligible bill status short-circuits the pipeline before any data is generated, edited, or saved; `AuditBill` still returns `True` in these cases because they are not environment errors ([BR-001](business-rules.md#br-001-bill-must-be-valid-for-audit), [BR-002](business-rules.md#br-002-bill-status-must-be-valid-for-audit)).
- If bill edits fail with a fatal error, any audit-service rows that were newly generated for this run are discarded so they are not saved with an invalid bill.
- `AuditBill` returns `False` only for `EnvironmentError`, `FailAuditGeneration`, or `FailAuditSave` — business-rule failures such as `InvalidBill`, `InvalidStatus`, `FailBillEdits`, `FailServiceEdits`, and `FailAuditCheck` all return `True`, so callers must inspect `AuditResult`, not just the boolean return value, to detect a failed audit.*
- `ReadOnlyMode` suppresses all persistence: only an in-memory status record is generated and `Bill.Save()` is never called.
- Unhandled exceptions anywhere in the pipeline are caught, recorded in `AuditExceptions`, and reported as `EnvironmentError`.
- Oracle schema, sequence, or procedure changes in the underlying tables can alter audit behavior without any local code change.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [API reference](api/index.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\BillAuditEngine.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\clsBillAudit.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\clsBillAuditService.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\AuditTrailManager.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsAuditCalculator.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsAuditCompare.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditUtility.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillEditor.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsClaimBillHistory.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsMCOManager.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsPharmacyEnrollment.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb`
