﻿---
title: SAIF.Business.Claim.Bill.AutomatedAudit business rules
summary: Enumerated business rules for SAIF.Business.Claim.Bill.AutomatedAudit.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-30
library: SAIF.Business.Claim.Bill.AutomatedAudit
reference_type: package
---

# SAIF.Business.Claim.Bill.AutomatedAudit business rules

This page captures business rules enforced by `SAIF.Business.Claim.Bill.AutomatedAudit`.

## BR-001: Bill must be valid for audit

| Field | Value |
| --- | --- |
| **Statement** | Bill must be valid for audit |
| **Trigger** | Bill retrieval |
| **Enforcement** | ``BillAuditEngine.AuditBill`` |
| **Outcome** | AuditResults.InvalidBill returned |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\BillAuditEngine.vb` (`AuditBill`, `RetrieveBill`) |

---

## BR-002: Bill status must be valid for audit

| Field | Value |
| --- | --- |
| **Statement** | Bill status must be valid for audit |
| **Trigger** | Status check |
| **Enforcement** | ``BillAuditEngine.AuditBill`` |
| **Outcome** | AuditResults.InvalidStatus returned |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\BillAuditEngine.vb` (`AuditBill`) |

---

## BR-003: Bill edits must pass

| Field | Value |
| --- | --- |
| **Statement** | Bill edits must pass |
| **Trigger** | Edit phase |
| **Enforcement** | ``BillAuditEngine.AuditBill`` |
| **Outcome** | AuditResults.FailBillEdits returned |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\BillAuditEngine.vb` (`AuditBill`) and `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillEditor.vb` (`EditBill`) |

---

## BR-004: Service edits must pass

| Field | Value |
| --- | --- |
| **Statement** | Service edits must pass |
| **Trigger** | Edit phase |
| **Enforcement** | ``BillAuditEngine.AuditBill`` |
| **Outcome** | AuditResults.FailServiceEdits returned |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\BillAuditEngine.vb` (`AuditBill`) and `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` (`EditService`, `AdjustService`) |

---

## BR-005: DRG code required for most inpatient hospital bills

| Field | Value |
| --- | --- |
| **Statement** | An inpatient hospital bill with a UB bill type code of `0111`–`0118` must have a valid DRG code, unless a billed service code starts with `002` or the billing provider is a critical-access hospital. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group |
| **Enforcement** | `clsBillAuditor.ValidateDRGCode` / `clsBillAuditor.IsDRGCodeRequired` / `clsBillAuditor.IsDRGCodeValid` |
| **Outcome** | Message "Invalid or missing DRG Code"; all services on the bill are disallowed with adjustment code `GS` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`ValidateDRGCode`, `IsDRGCodeRequired`, `IsDRGCodeValid`) |

---

## BR-006: Diagnosis and procedure codes must be valid and effective

| Field | Value |
| --- | --- |
| **Statement** | Every diagnosis and procedure code on the bill must resolve to a known, effective code as of the statement-through date; a billing provider type that requires a diagnosis must have at least one, and outpatient hospital bills need at least one diagnosis of type `R`. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group |
| **Enforcement** | `clsBillAuditor.ValidateDiagnosisandProcedureCode` |
| **Outcome** | Warning "One or more diagnosis code is not valid." or "One or more procedure code is not valid."; all services disallowed with adjustment code `GW` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`ValidateDiagnosisandProcedureCode`) |

---

## BR-007: Inpatient hospital admit type code must be valid

| Field | Value |
| --- | --- |
| **Statement** | An inpatient hospital bill's admit type code must be one of `1`, `2`, `3`, `4`, `5`, or `9`. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group |
| **Enforcement** | `clsBillAuditor.ValidateAdmitTypeCode` |
| **Outcome** | Message "Invalid Admit Type Code({0})."; all services disallowed with adjustment code `GY` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`ValidateAdmitTypeCode`) |

---

## BR-008: Audited service line requires a service date

| Field | Value |
| --- | --- |
| **Statement** | Every audited service line must have a service date. |
| **Trigger** | Service edit and adjustment — `#EDIT_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceDateExists` |
| **Outcome** | Message "{0} Invalid service date"; error generated and `ReauditCode` set to `X` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-009: Service through date cannot precede the service from date

| Field | Value |
| --- | --- |
| **Statement** | A service line's through date must not be earlier than its from date. |
| **Trigger** | Service edit and adjustment — `#EDIT_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceDate_ServiceEndDate` |
| **Outcome** | Message "{0} Service through date is before from date"; service error generated |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-010: Services before the date of injury are not payable

| Field | Value |
| --- | --- |
| **Statement** | A service dated before the claim's date of injury is not payable. |
| **Trigger** | Service edit and adjustment — `ADJUST_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceDate_InjuryDate` |
| **Outcome** | Message "{0} Adjustment SE-disallow service before date of injury"; full-charge `SE` adjustment created and `ReauditCode` set to `X` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-011: Non-federal worker-reimbursement requests expire after 730 days

| Field | Value |
| --- | --- |
| **Statement** | A non-federal worker-reimbursement service is not payable if it was received more than 730 days after the service date. |
| **Trigger** | Service edit and adjustment — `ADJUST_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceDate_ReimbursementExpired` |
| **Outcome** | Message "{0} Adjustment FN-disallow worker reimbursement"; full-charge `FN` adjustment created and `ReauditCode` set to `X` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-012: A valid, active place of service is required for most service types

| Field | Value |
| --- | --- |
| **Statement** | A service line must reference a valid, active provider location unless the service is Ambulance, Dental, Pharmacy, or Worker Reimbursement. |
| **Trigger** | Service edit and adjustment — `ADJUST_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceLocation_ValidPlaceOfService` |
| **Outcome** | Message "{0} Service location is invalid or does not exist"; full-charge `TU` adjustment created and `ReauditCode` set to `X` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-013: Secondary service code must resolve to a known service

| Field | Value |
| --- | --- |
| **Statement** | A secondary service code present on a service line must resolve to a known service type. |
| **Trigger** | Service edit and adjustment — `#EDIT_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ValidSecondaryServiceCode` |
| **Outcome** | Message "{0} Invalid secondary service code"; service error generated |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-014: Pharmacy prescriber NPI must be exactly 10 numeric digits

| Field | Value |
| --- | --- |
| **Statement** | When the prescribing provider code is `01` (NPI qualifier), the prescriber ID must be exactly 10 numeric digits. |
| **Trigger** | Service edit and adjustment — `#EDIT_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `ba_ValidatePharmacyPrescriberID` |
| **Outcome** | Message "Prescriber ID must be 10 numeric digits for NPI qualifier ({0})."; service error generated |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-015: Institutional bill lines require a revenue code

| Field | Value |
| --- | --- |
| **Statement** | A service line on an inpatient or outpatient hospital bill must carry a primary or secondary revenue code. |
| **Trigger** | Service edit and adjustment — `#EDIT_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceTypeCode_IsRevenueCode` |
| **Outcome** | Message "{0} Revenue code required"; service error generated |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-016: Interpreter mileage service lines must meet minimum quantity thresholds

| Field | Value |
| --- | --- |
| **Statement** | An interpreter mileage service (`D0041`) must meet the minimum billed quantity in effect for its date of service (60.01 units before 4/1/2012, 15 units on/after). |
| **Trigger** | Service edit and adjustment — `ADJUST_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rule `cse_ServiceQuantity_MinimumInterpreterMileage` |
| **Outcome** | Message "{0} Adjustment IC-disallow service"; full-charge `IC` adjustment created and `ReauditCode` set to `X` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-017: Pharmacy bills require prescriber ID, Rx-written date, and prescriber last name

| Field | Value |
| --- | --- |
| **Statement** | A service billed by a Pharmacy provider type (`PH`) must include a prescriber ID, a Rx-written date that is not after the service date, and the prescriber's last name. |
| **Trigger** | Service edit and adjustment — `ADJUST_SERVICE#` rule group |
| **Enforcement** | `clsServiceEditor` rules `ba_ValidatePharmacyInfo` and `ba_ValidatePharmacyRXDate` |
| **Outcome** | Messages "Invalid pharmacy information ({0})." or "Date rx written cannot be after the service date' ({0})."; full-charge `GX` adjustment created and `ReauditCode` set to `X` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb` |

---

## BR-018: Bills for voided claims cannot be paid

| Field | Value |
| --- | --- |
| **Statement** | A bill belonging to a claim in void status cannot be paid. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group |
| **Enforcement** | `clsBillAuditor.CheckVoidedClaim` |
| **Outcome** | Warning "Bill belongs to voided claim"; all services disallowed with adjustment code `WG` |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`CheckVoidedClaim`) |

---

## BR-019: Non-MCO provider services past the grace period may be disallowed

| Field | Value |
| --- | --- |
| **Statement** | For a claim with mandatory-MCO status, a service performed more than 14 days after the MCO effective date, by a non-anesthesiology servicing provider, and not already subject to MCO withhold, may be fully disallowed. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group (`FinalAuditChecks`) |
| **Enforcement** | `clsBillAuditor.CheckForNonMCOProvider` |
| **Outcome** | Full-charge adjustment code `MG` applied |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`CheckForNonMCOProvider`) |

---

## BR-020: Late-filed bills are subject to time-based payment reductions or disallowance

| Field | Value |
| --- | --- |
| **Statement** | An original (non-rebill) service billed past its era's filing deadline is reduced or fully disallowed: before 4/1/2006 (or Vocational Rehabilitation any time), 10% per month after 60 days, with Vocational Rehabilitation fully disallowed after 180 days; from 4/1/2006–6/30/2007, a compounding 10% monthly reduction after 90 days; after 6/30/2007, full disallowance after 365 days. Worker-reimbursement bills are exempt. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group (`FinalAuditChecks`) |
| **Enforcement** | `clsBillAuditor.CheckForLateFiling` |
| **Outcome** | Reduction or full disallowance applied with adjustment code `FD` (reduction) or `SO` (Vocational Rehabilitation full disallowance) |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`CheckForLateFiling`) |

---

## BR-021: Duplicate services are reduced to the unpaid remainder or flagged

| Field | Value |
| --- | --- |
| **Statement** | A service matching a historical or current duplicate pattern (same provider/date/service/charge, or equivalent pharmacy/NDC match) is marked as a definite (`D`) or possible (`U`) duplicate on `OriginalBillCode`, linked to the original bill/service, and reduced by the amount already paid. |
| **Trigger** | Bill audit rule execution — `AuditBill` rule group (`FinalAuditChecks`) |
| **Enforcement** | `clsBillAuditor.CheckForDuplicates` |
| **Outcome** | Adjustment code `PA` (original fully paid), `PB` (no prior allowed amount found), or `PC` (original incomplete but prior payment exists); warning message "{code} Possible duplicate" or "{code} Dup. with positive allowed amt" / "{code} Duplicate service" |
| **Confidence** | Verified |
| **Source** | `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillAuditor.vb` (`CheckForDuplicates`) |

---

## Inherited business rules

Rules in this section are inherited from shared BOF framework behavior.

### From `clsBusinessBase` (`saif-framework-core`)

## INH-001: Framework rule execution

| Field | Value |
| --- | --- |
| **Statement** | Inherited BOF business objects evaluate property and object rules through the shared rules manager.* |
| **Trigger** | When a property setter or save path triggers rule evaluation |
| **Enforcement** | Inherited `clsBusinessBase` rules-manager flow |
| **Outcome** | Broken-rule state is captured and exposed to consumers.* |
| **Confidence** | Inherited |
| **Origin** | `saif-framework-core — clsBusinessBase` |
| **Source** | Retrieved from dependency documentation via Legends CLI |

---

## INH-002: Collection validation surfacing

| Field | Value |
| --- | --- |
| **Statement** | Inherited BOF collections surface aggregated validation state through `IDataErrorInfo`.* |
| **Trigger** | When child items or collection state contain broken rules |
| **Enforcement** | Inherited `clsBusinessCollectionBase` validation behavior |
| **Outcome** | Consumers can read collection-level error state without querying each child directly.* |
| **Confidence** | Inherited |
| **Origin** | `saif-framework-core — clsBusinessCollectionBase` |
| **Source** | Retrieved from dependency documentation via Legends CLI |

---

## Notes
- Rule identifiers in this document are documentation identifiers for this generated library set.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.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\SAIF.BOF.Business.Claim.Bill.AutomatedAudit.vbproj`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\SAIF.BOF.Business.Claim.Bill.AutomatedAudit.nuspec`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\packages.config`
- `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\clsBillAuditor.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsBillEditor.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsServiceEditor.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsAuditCalculator.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsMCOManager.vb`
- `Business\SAIF.Business.Claim.Bill.AutomatedAudit\AuditUtilities\clsPharmacyEnrollment.vb`