---
title: SAIF.Business.Claim.EAIP operations and processes
summary: Operation catalog and cross-operation hub for the Employer-at-Injury Program business objects.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.Claim.EAIP
reference_type: package
---

# SAIF.Business.Claim.EAIP operations and processes

This page is the operation catalog and cross-operation hub for `SAIF.Business.Claim.EAIP`. The library implements the Employer-at-Injury Program end to end: screening a claim for eligibility, opening a service period, recording purchases and wage subsidies against it, paying them under authority and approval limits, billing the paid expenses to the Department of Consumer and Business Services, and reconciling DCBS remittances back against those bills. Eleven operations cover that lifecycle plus the supporting search, worklist, and caseload-management functions. 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 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Service period management](operations/service-period-management.md) | Open, maintain, and close an EAIP service period on a claim, with its contact, aggravation, and history detail | `clsPeriod.NewPeriod` or `GetPeriod`, followed by property edits and `Save()` | `IDataPortalInfo`, claim number, effective and expiration dates, EAIP user, end reason code, employer contact and aggravation detail, `UpdateNum` | Persisted EAIP period row with cascading expense, history, and user-history children; orphan expense cleanup on delete; overlap and authority rule violations | [BR-PROC-002](business-rules.md#br-proc-002-protect-eaip-period-updates-with-optimistic-concurrency), [BR-PROC-004](business-rules.md#br-proc-004-clean-up-orphan-eaip-expenses-after-deleting-a-period), [BR-PROC-013](business-rules.md#br-proc-013-eaip-service-periods-for-a-claim-may-not-overlap) | [EAIP_PERIOD_SEQ](database-tables.md#eaip_period_seq) | [SQL-004](sql/SQL-004.md), [SQL-012](sql/SQL-012.md), [SQL-021](sql/SQL-021.md), [SQL-032](sql/SQL-032.md), [SQL-042](sql/SQL-042.md) |
| [Expense lifecycle and payment approval](operations/expense-lifecycle.md) | Record purchases against a service period and move them through new, pending approval, pay, and paid status under authority and limit rules | Caller adds or edits an expense on the period's collection and calls `Save()` | Expense type, description, order date, paid and write-off amounts, vendor and payee detail, credit-card transaction date, acting user's payment authority | Persisted expense and purchase rows with appended status history; approval demotions; payment authorization; amendment and correction chains | [BR-PROC-003](business-rules.md#br-proc-003-return-only-credit-card-purchases-paid-for-the-selected-eaip-user), [BR-PROC-005](business-rules.md#br-proc-005-expense-payments-over-the-user-authority-level-require-supervisor-approval), [BR-PROC-006](business-rules.md#br-proc-006-credit-card-purchases-always-require-supervisor-approval), [BR-PROC-009](business-rules.md#br-proc-009-expense-payment-totals-under-100-require-supervisor-approval) | [EAIP_EXPENSE_SEQ](database-tables.md#eaip_expense_seq) | [SQL-007](sql/SQL-007.md), [SQL-048](sql/SQL-048.md) |
| [Wage subsidy worksheet](operations/wage-subsidy-worksheet.md) | Build the pay-period and timecard worksheet behind a wage subsidy and derive the payable subsidy from gross wages | Caller adds pay periods and timecards to a wage subsidy and calls `Save()` | Pay period start and end dates, timecard dates, in/out times, regular and overtime hours, pay rates, wage-subsidy date range and days | Persisted pay period, timecard, and wage subsidy rows; derived gross wages, calculated hours, and paid amount; day-limit and hour-balance rule violations | [BR-PROC-007](business-rules.md#br-proc-007-wage-subsidy-pay-equals-gross-wages-times-the-effective-rate-factor), [BR-PROC-008](business-rules.md#br-proc-008-wage-subsidy-days-may-not-exceed-66-in-a-service-period), [BR-PROC-015](business-rules.md#br-proc-015-timecard-regular-and-overtime-hours-must-equal-calculated-hours) | [EAIP_PAY_PERIOD_SEQ](database-tables.md#eaip_pay_period_seq), [EAIP_PERIOD_TIMECARD](database-tables.md#eaip_period_timecard), [EAIP_PERIOD_TIMECARD_SEQ](database-tables.md#eaip_period_timecard_seq), [EAIP_EXPENSE_SEQ](database-tables.md#eaip_expense_seq) | [SQL-002](sql/SQL-002.md), [SQL-003](sql/SQL-003.md), [SQL-007](sql/SQL-007.md), [SQL-010](sql/SQL-010.md), [SQL-011](sql/SQL-011.md), [SQL-020](sql/SQL-020.md), [SQL-030](sql/SQL-030.md), [SQL-031](sql/SQL-031.md), [SQL-040](sql/SQL-040.md), [SQL-041](sql/SQL-041.md) |
| [Credit-card payment approval](operations/credit-card-payment-approval.md) | Present a supervisor with the credit-card purchases charged by one specialist and apply an approve-or-return decision | `clsCreditCardPayment.GetCreditPayments(dpi, eaipUser)` followed by `clsCreditCardPayments.SaveChanges(approved)` | `IDataPortalInfo`, the EAIP user under review, per-row supervisor-approved selections, one approve/return decision | Expense status advanced to `PAY` or returned to `NEW`; the total of the selected amounts; the reviewing supervisor's formatted name; DB contention errors | [BR-PROC-001](business-rules.md#br-proc-001-protect-expense-status-changes-with-optimistic-concurrency), [BR-PROC-003](business-rules.md#br-proc-003-return-only-credit-card-purchases-paid-for-the-selected-eaip-user), [BR-PROC-006](business-rules.md#br-proc-006-credit-card-purchases-always-require-supervisor-approval) | None linkable* | [SQL-027](sql/SQL-027.md) |
| [Expense status worklist](operations/expense-status-worklist.md) | Retrieve the EAIP expenses currently in a given status, optionally narrowed to one specialist | `clsExpenseByStatus.GetExpenseList(dpi, status, eaipUser)` | `IDataPortalInfo`, an expense status code, an optional specialist mail identifier defaulting to `ALL` | A read-only list of expense projections with claim, worker, specialist, amount, status date, and credit-card date | None registered* | None documented* | None catalogued* |
| [DCBS bill generation and billing records](operations/dcbs-bill-generation.md) | Build the DCBS reimbursement bill for a service period, decide the bill type and admin fee, and move billed expenses forward | `clsGenerateBill.ProcessBills(periodId, reportNode, xPrintDocColl)` or `GenerateBill(period, billAmended:=True)` | Service period identifier, paid purchases and wage subsidies, existing bills, admin-fee limit amount, the wage-subsidy rate setting, worker/claim/policy data | Billing header and expense-billing lines; expenses moved to `Billed` or `Reimbursed` with history; DCBS billing XML with optional cover letter; print document and image index record | [BR-PROC-010](business-rules.md#br-proc-010-only-the-first-bill-for-a-service-period-carries-the-administrative-fee), [BR-PROC-011](business-rules.md#br-proc-011-amended-expenses-are-excluded-from-the-batch-billing-run) | [EAIP_BILLING_SEQ](database-tables.md#eaip_billing_seq) | [SQL-001](sql/SQL-001.md), [SQL-008](sql/SQL-008.md), [SQL-009](sql/SQL-009.md), [SQL-018](sql/SQL-018.md), [SQL-019](sql/SQL-019.md), [SQL-028](sql/SQL-028.md), [SQL-029](sql/SQL-029.md), [SQL-038](sql/SQL-038.md), [SQL-039](sql/SQL-039.md) |
| [Reimbursement recording](operations/reimbursement-recording.md) | Record a DCBS remittance, its per-claim detail lines, and the expense-type amount breakdowns | `clsReimbursement.NewReimbursement(dpi)` or a shared reader, followed by edits and `Save()` | Received, posted, and reconciled dates; reimbursement amount and explanation; per-detail DCBS claim number, worker name, and total; per-type disabling, non-disabling, and reimbursed amounts | Reimbursement header with detail and amount children; resolved claim data on each detail; claim-not-found violations; DB contention errors | None registered beyond the claim check* | [EAIP_REIMB_SEQ](database-tables.md#eaip_reimb_seq), [EAIP_REIMB_DETAIL_SEQ](database-tables.md#eaip_reimb_detail_seq) | [SQL-005](sql/SQL-005.md), [SQL-006](sql/SQL-006.md), [SQL-013](sql/SQL-013.md), [SQL-014](sql/SQL-014.md), [SQL-015](sql/SQL-015.md), [SQL-016](sql/SQL-016.md), [SQL-022](sql/SQL-022.md), [SQL-023](sql/SQL-023.md), [SQL-024](sql/SQL-024.md), [SQL-025](sql/SQL-025.md), [SQL-033](sql/SQL-033.md), [SQL-034](sql/SQL-034.md), [SQL-035](sql/SQL-035.md), [SQL-036](sql/SQL-036.md), [SQL-043](sql/SQL-043.md), [SQL-044](sql/SQL-044.md), [SQL-045](sql/SQL-045.md), [SQL-046](sql/SQL-046.md) |
| [DCBS reimbursement balancing](operations/dcbs-reimbursement-balancing.md) | Match each remittance detail against the claim's unreconciled billed expenses and reconcile when the amounts agree | `clsBalanceDCBS.ProcessOneBatch(postedDate)` | A DCBS posted date, the remittances posted on it, each claim's unreconciled expense billings, resolved claim data | Updated reimbursed amounts and admin-fee links; expenses moved to `Reimbursed`; per-detail and per-remittance reconciled flags; read/reconciled/skipped/name-mismatch counters | [BR-PROC-012](business-rules.md#br-proc-012-a-reimbursement-detail-reconciles-only-when-amounts-match-the-detail-total) | None linkable* | [SQL-018](sql/SQL-018.md), [SQL-028](sql/SQL-028.md), [SQL-029](sql/SQL-029.md), [SQL-035](sql/SQL-035.md) |
| [Claim targeting and eligibility screening](operations/claim-targeting.md) | Record the EAIP eligibility screening decision for a claim with its reviewer and dates | `clsTargeting.NewTargeting(dpi)` or a retrieval method, followed by edits and `Save()` | Claim number, eligibility code, reviewer mail identifier, completed date, claim status code and effective date, begin/end dates, wage-subsidy begin date | Targeting row with eligibility outcome and reviewer; resolved claim identifier, injury date, masked worker name, and policy name; duplicate and date violations | [BR-PROC-014](business-rules.md#br-proc-014-targeting-records-must-be-unique-by-claim-status-date-and-completed-date) | None linkable* | [SQL-017](sql/SQL-017.md), [SQL-026](sql/SQL-026.md), [SQL-037](sql/SQL-037.md), [SQL-047](sql/SQL-047.md) |
| [EAIP claim and employer search](operations/eaip-search.md) | Validate a set of EAIP search criteria and return masked search results from the integration API | User populates `clsSearchCriteria` and calls `clsSearchResult.GetSearchResults` | Worker name, policy number and name with rate/parent indicators, return-to-work load code and mail identifier, specialist, receipt date range, status code selections | Search result rows with conflicted worker names replaced by a placeholder and status codes resolved to descriptions; criteria rule violations | None catalogued as BR entries* | None documented* | None catalogued* |
| [Caseload reassignment](operations/caseload-reassignment.md) | Reassign selected service periods, or every claim on selected policies, to a different EAIP specialist | Supervisor calls `UpdateClaimAssignment(dpi)` or `UpdatePolicyAssignment(dpi)` | Target specialist user name; a list of EAIP period identifiers or a list of policy numbers; acting user | Updated period ownership with force-incremented update number, or one participant staging row per policy; violations when no specialist or no rows were selected | [BR-PROC-002](business-rules.md#br-proc-002-protect-eaip-period-updates-with-optimistic-concurrency) | None linkable* | None catalogued* |

## Process flow diagram

The following diagram shows how the eleven operations relate across the EAIP lifecycle: a claim is screened, a service period is opened, expenses and wage subsidies accumulate against it, payment passes through authority and supervisor gates, paid expenses are billed to DCBS, and DCBS remittances are balanced back against those bills.

```mermaid
flowchart TD
	Search([User finds EAIP work]) --> SearchOp[EAIP claim and employer search]
	Target[Claim targeting and<br>eligibility screening] --> Period[Service period management]
	SearchOp --> Period
	Period --> Expense[Expense lifecycle and<br>payment approval]
	Period --> Wage[Wage subsidy worksheet]
	Wage --> Expense
	Expense --> Gate{Approval required?}
	Gate -->|Credit card charged| CC[Credit-card payment approval]
	Gate -->|Over authority, over limit,<br>or under $100 total| Queue[Expense status worklist]
	Gate -->|No| Paid[Expense set to Paid]
	CC --> Paid
	Queue --> CC
	Paid --> Bill[DCBS bill generation<br>and billing records]
	Bill --> Sent([Bill printed and sent to DCBS])
	Sent --> Remit[Reimbursement recording]
	Remit --> Balance[DCBS reimbursement balancing]
	Balance --> Match{Detail total = matched total?}
	Match -->|Yes| Recon([Detail and remittance reconciled;<br>expenses set to Reimbursed])
	Match -->|No| Back[Transaction rolled back;<br>skipped counter raised]
	Back --> Balance
	Period -.reassignment.-> Reassign[Caseload reassignment]
	Reassign -.-> Period
```

## 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 |
| --- | --- | --- | --- |
| [Service period management](operations/service-period-management.md) | [SQL-004](sql/SQL-004.md), [SQL-012](sql/SQL-012.md), [SQL-021](sql/SQL-021.md), [SQL-032](sql/SQL-032.md), [SQL-042](sql/SQL-042.md) | [EAIP_PERIOD_SEQ](database-tables.md#eaip_period_seq) | Read / Write (stored procedure) |
| [Expense lifecycle and payment approval](operations/expense-lifecycle.md) | [SQL-007](sql/SQL-007.md), [SQL-048](sql/SQL-048.md) | [EAIP_EXPENSE_SEQ](database-tables.md#eaip_expense_seq) | Read / Write (stored procedure) |
| [Wage subsidy worksheet](operations/wage-subsidy-worksheet.md) | [SQL-002](sql/SQL-002.md), [SQL-003](sql/SQL-003.md), [SQL-007](sql/SQL-007.md), [SQL-010](sql/SQL-010.md), [SQL-011](sql/SQL-011.md), [SQL-020](sql/SQL-020.md), [SQL-030](sql/SQL-030.md), [SQL-031](sql/SQL-031.md), [SQL-040](sql/SQL-040.md), [SQL-041](sql/SQL-041.md) | [EAIP_PAY_PERIOD_SEQ](database-tables.md#eaip_pay_period_seq), [EAIP_PERIOD_TIMECARD](database-tables.md#eaip_period_timecard), [EAIP_PERIOD_TIMECARD_SEQ](database-tables.md#eaip_period_timecard_seq), [EAIP_EXPENSE_SEQ](database-tables.md#eaip_expense_seq) | Read / Write (stored procedure plus inline timecard statements) |
| [Credit-card payment approval](operations/credit-card-payment-approval.md) | [SQL-027](sql/SQL-027.md) | None linkable* | Read / Update only (stored procedure) |
| [Expense status worklist](operations/expense-status-worklist.md) | None catalogued* | None documented* | Read (external REST call) |
| [DCBS bill generation and billing records](operations/dcbs-bill-generation.md) | [SQL-001](sql/SQL-001.md), [SQL-008](sql/SQL-008.md), [SQL-009](sql/SQL-009.md), [SQL-018](sql/SQL-018.md), [SQL-019](sql/SQL-019.md), [SQL-028](sql/SQL-028.md), [SQL-029](sql/SQL-029.md), [SQL-038](sql/SQL-038.md), [SQL-039](sql/SQL-039.md) | [EAIP_BILLING_SEQ](database-tables.md#eaip_billing_seq) | Read / Write (stored procedure plus inline bill and policy statements, and an external REST call) |
| [Reimbursement recording](operations/reimbursement-recording.md) | [SQL-005](sql/SQL-005.md), [SQL-006](sql/SQL-006.md), [SQL-013](sql/SQL-013.md), [SQL-014](sql/SQL-014.md), [SQL-015](sql/SQL-015.md), [SQL-016](sql/SQL-016.md), [SQL-022](sql/SQL-022.md), [SQL-023](sql/SQL-023.md), [SQL-024](sql/SQL-024.md), [SQL-025](sql/SQL-025.md), [SQL-033](sql/SQL-033.md), [SQL-034](sql/SQL-034.md), [SQL-035](sql/SQL-035.md), [SQL-036](sql/SQL-036.md), [SQL-043](sql/SQL-043.md), [SQL-044](sql/SQL-044.md), [SQL-045](sql/SQL-045.md), [SQL-046](sql/SQL-046.md) | [EAIP_REIMB_SEQ](database-tables.md#eaip_reimb_seq), [EAIP_REIMB_DETAIL_SEQ](database-tables.md#eaip_reimb_detail_seq) | Read / Write (stored procedure) |
| [DCBS reimbursement balancing](operations/dcbs-reimbursement-balancing.md) | [SQL-018](sql/SQL-018.md), [SQL-028](sql/SQL-028.md), [SQL-029](sql/SQL-029.md), [SQL-035](sql/SQL-035.md) | None linkable* | Read / Write (stored procedure plus an inline write-off query, per-detail transactions) |
| [Claim targeting and eligibility screening](operations/claim-targeting.md) | [SQL-017](sql/SQL-017.md), [SQL-026](sql/SQL-026.md), [SQL-037](sql/SQL-037.md), [SQL-047](sql/SQL-047.md) | None linkable* | Read / Write (stored procedure plus an inline uniqueness query) |
| [EAIP claim and employer search](operations/eaip-search.md) | None catalogued* | None documented* | Read (external REST call) |
| [Caseload reassignment](operations/caseload-reassignment.md) | None catalogued* | None linkable* | Write (inline statements only) |

## Stored procedure operations

Operations implemented in the Oracle package referenced by this library.

| Operation | Description | Source | Link |
| --- | --- | --- | --- |
| Period persistence | Inserts, selects, updates, and deletes EAIP service periods, protecting updates with an update-number check and cleaning up orphan expenses on delete. | `pk82500_eaip.eaip_period_insert`, `_select`, `_update`, `_delete` | [Details](procedures/pk82500_eaip.md#eaip_period_insert) |
| Expense status update | Advances or returns an expense status, matching the caller's update number and returning the affected row count. | `pk82500_eaip.update_expense_status` | [Details](procedures/pk82500_eaip.md#update_expense_status) |
| Credit-card review select | Returns the credit-card purchases with a paid date charged by the named EAIP user. | `pk82500_eaip.credit_payment_select` | [Details](procedures/pk82500_eaip.md#credit_payment_select) |
| Expense status worklist | Returns the expenses in a given status for a specialist, exposed through the EAIP integration API. | `pk82500_eaip.SelectExpensesByStatus_GW`, `SelectExpensesInCheckStatus` | [Details](procedures/pk82500_eaip.md#selectexpensesbystatus_gw) |
| Billing persistence and reads | Inserts, selects, updates, and deletes bill headers, and returns a claim's, a period's, or the system's non-reconciled bills. | `pk82500_eaip.EAIP_Billing_Insert`, `_Select`, `_Update`, `_Delete`, `getBillingsByClaim`, `GetBillingsByPeriod`, `GetNonReconciledBillings` | [Details](procedures/pk82500_eaip.md#eaip_billing_insert) |
| Expense billing persistence | Maintains the line rows that link a bill to the expenses it bills, keyed by bill and expense. | `pk82500_eaip.eaip_expense_billing_insert`, `_select`, `_update`, `_delete`, `GetExpenseBillingByBillingID`, `GetExpenseBillingByExpenseID` | [Details](procedures/pk82500_eaip.md#eaip_expense_billing_insert) |
| Purchase and wage subsidy persistence | Maintains the two concrete expense types under a service period and their reads by expense identifier. | `pk82500_eaip.eaip_purchase_insert`, `_select`, `_update`, `_delete`, `eaip_wage_subsidy_insert`, `_select`, `_update`, `_delete`, `GetPurchaseByExpenseId`, `GetWageSubsidyByExpenseID`, `eaip_expense_insert`, `eaip_expense_update` | [Details](procedures/pk82500_eaip.md#eaip_purchase_insert) |
| Pay period persistence | Maintains the pay periods that carry the wage-subsidy worksheet, including a read by pay period identifier. | `pk82500_eaip.eaip_pay_period_insert`, `_select`, `_update`, `_delete`, `GetPayPeriodByPayPeriodId` | [Details](procedures/pk82500_eaip.md#eaip_pay_period_insert) |
| Reimbursement persistence and reads | Maintains remittance headers and returns them by received date, posted date, or reconciled flag. | `pk82500_eaip.eaip_reimbursement_insert`, `_select`, `_update`, `_delete`, `GetReimbByReceivedDate`, `GetReimbByPostedDate`, `GetReimbReconciledFlag` | [Details](procedures/pk82500_eaip.md#eaip_reimbursement_insert) |
| Reimbursement detail and amount persistence | Maintains the per-claim detail rows and the expense-type amount breakdowns at both header and detail level. | `pk82500_eaip.eaip_reimb_detail_insert`, `_select`, `_update`, `_delete`, `GetReimbDetailByID`, `EAIP_Reimb_Amount_*`, `GetReimbAmountbyType`, `reimb_detail_amount_*`, `GetReimbDetailAmountbyType` | [Details](procedures/pk82500_eaip.md#eaip_reimb_detail_insert) |
| Targeting persistence and reads | Maintains eligibility screening records and returns them for a claim. | `pk82500_eaip.eaip_targeting_insert`, `_update`, `_delete`, `GetTargetingByClaim` | [Details](procedures/pk82500_eaip.md#eaip_targeting_insert) |

## Failure and edge-case behavior

- Optimistic concurrency is the dominant failure mode. Every persisting operation binds the previously read update number, checks the affected row count, and adds a DB contention error rather than throwing ([BR-PROC-001](business-rules.md#br-proc-001-protect-expense-status-changes-with-optimistic-concurrency), [BR-PROC-002](business-rules.md#br-proc-002-protect-eaip-period-updates-with-optimistic-concurrency)). The one deliberate exception is [Caseload reassignment](operations/caseload-reassignment.md), whose inline update force-increments the update number and overwrites concurrent edits.
- Approval gating is layered rather than singular: an expense can be pushed into supervisor approval by user authority, by an expense-type limit, by a small-dollar payment total, or unconditionally by a credit-card transaction date, and any one of them is sufficient ([BR-PROC-005](business-rules.md#br-proc-005-expense-payments-over-the-user-authority-level-require-supervisor-approval), [BR-PROC-006](business-rules.md#br-proc-006-credit-card-purchases-always-require-supervisor-approval), [BR-PROC-009](business-rules.md#br-proc-009-expense-payment-totals-under-100-require-supervisor-approval)).
- Batch operations are not uniformly transactional. Credit-card approval stops at the first contention failure and leaves earlier rows applied; bill generation saves the period before the bills; reimbursement balancing is the only operation that brackets each unit of work in its own transaction and rolls back a unit that fails to reconcile ([BR-PROC-012](business-rules.md#br-proc-012-a-reimbursement-detail-reconciles-only-when-amounts-match-the-detail-total)).
- Amendments are handled by exclusion rather than by a separate object model. The batch billing run refuses to bill them ([BR-PROC-011](business-rules.md#br-proc-011-amended-expenses-are-excluded-from-the-batch-billing-run)), and the balancing run refuses to move an already-amended expense to reimbursed, so an amendment always waits for the explicit on-demand path.
- Three operations depend entirely on external services — the expense status worklist, EAIP search, and the unreconciled admin-fee feed. The admin-fee feed swallows every exception into the logging service and returns nothing, so callers cannot distinguish "none" from "unavailable"; the other two surface whatever the API access layer raises.
- Several routines build statement text by concatenation rather than binding: the reassignment period list and specialist name, and the DCBS write-off claim identifier. The values originate from selection lists and resolved data rather than free text, but the pattern offers no injection protection.*
- Child rows are removed by database triggers on parent delete throughout the billing and reimbursement aggregates; this library issues no explicit cascading child deletes. Expense orphans left by a period delete are cleaned up inside the package instead ([BR-PROC-004](business-rules.md#br-proc-004-clean-up-orphan-eaip-expenses-after-deleting-a-period)).
- Conflicted worker names are masked by the property that exposes them, not by the query that loads them, in both targeting and search. Any consumer reading the underlying storage bypasses the mask.*

## 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)
- [Procedures](procedures/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.

## Sources

- `Business\SAIF.Business.Claim.EAIP\Billing\clsBilling.vb`
- `Business\SAIF.Business.Claim.EAIP\Billing\clsExpenseBilling.vb`
- `Business\SAIF.Business.Claim.EAIP\Billing\clsGenerateBill.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPeriod.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPeriodHistory.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsUserHistory.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsHistoryBase.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsExpense.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsExpenseHistory.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsExpenseByStatus.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPurchase.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsWageSubsidy.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPayPeriod.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPayPeriodTimeCard.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsCreditCardPayments.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsReassignment.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\mdlUtility.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsReimbursement.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsReimbursementDetail.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsAmount.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsDetailAmount.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsBalanceDCBS.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\dcbsMethods.vb`
- `Business\SAIF.Business.Claim.EAIP\Targeting\clsTargeting.vb`
- `Business\SAIF.Business.Claim.EAIP\Search\clsSearchCriteria.vb`
- `Business\SAIF.Business.Claim.EAIP\Search\clsSearchResult.vb`
- `Business\SAIF.Business.Claim.EAIP\Search\EaipSearchResult.vb`
- `Business\SAIF.Business.Claim.EAIP\UnreconciledAdminFees.vb`
- `Business\SAIF.Business.Claim.EAIP\clsRecordInfo.vb`
- `Business\SAIF.Business.Claim.EAIP\clsUpdateInfo.vb`
- `Business\SAIF.Business.Claim.EAIP\mdlCodeTables.vb`
