---
title: SAIF.Business.Claim.EAIP architecture
summary: SAIF.Business.Claim.EAIP architecture.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-28
library: SAIF.Business.Claim.EAIP
reference_type: package
---

# SAIF.Business.Claim.EAIP architecture

`SAIF.Business.Claim.EAIP` is a claim-domain business component that persists EAIP billing, period, reimbursement, targeting, and related history records through BOF business objects, Oracle stored procedures, and configuration-driven calculation helpers.

## Responsibilities

- Manage EAIP billing records, expense billing, and bill-generation workflows.
- Maintain pay periods, time cards, expenses, purchases, reassignment records, and related history.
- Calculate and persist reimbursements, reimbursement detail, DCBS balances, and wage-subsidy values.
- Expose search and targeting entry points for EAIP claim and employer workflows.
- Centralize EAIP-specific code-table and utility helpers used across business objects.

## Inherited framework context (from Legends CLI)

Cached `resolvedTypes[].queries[]` results for `SAIF.Business.Claim.EAIP` indicate the following inherited framework behavior:

- `IBusinessCriteria` provides the BOF criteria contract that supplies overridable create/retrieve/insert/update/delete request slots for database and API-backed requests.* (source: `saif-framework-core` library docs)
- `IDataPortalInfo` supplies connection, data-access-layer, API-client, and scalar-execution context to business objects during persistence and retrieval.* (source: `saif-framework-core` library docs)
- `IDataRequest` represents the request abstraction used by the Oracle and SQL portal implementations beneath BOF business objects.* (source: `saif-framework-core` library docs)
- `clsBusinessBase` contributes edit lifecycle support and a per-object `clsRulesManager` used to surface validation state.* (source: `saif-framework-core` library docs)
- `clsBusinessCollectionBase` contributes collection traversal, deleted-item tracking, and `IDataErrorInfo` validation surfacing for collection objects.* (source: `saif-framework-core` library docs)
- `clsResultSet` is identified as a framework result-wrapper type, but no deeper indexed behavior was returned by the cached Legends results.* (source: `saif-framework-core` library docs)
- `clsSAIFDataReader` is identified as a framework data-reader abstraction, but no deeper indexed behavior was returned by the cached Legends results.* (source: `saif-framework-core` library docs)
- `clsSmartDate` is part of the BOF smart-value wrapper set used to carry null-safe date values through business objects.* (source: `saif-framework-core` library docs)
- `clsSmartDecimal` is part of the BOF smart-value wrapper set used to carry null-safe decimal values through business objects.* (source: `saif-framework-core` library docs)
- `clsSmartString` is part of the BOF smart-value wrapper set used to carry null-safe string values through business objects.* (source: `saif-framework-core` library docs)

## Component boundaries

- **Billing boundary**: `Billing\clsBilling`, `clsExpenseBilling`, and `clsGenerateBill` own employer-billing persistence and bill-generation behavior.
- **Period boundary**: `Period\clsPayPeriod`, `clsPayPeriodTimeCard`, `clsExpense`, `clsPurchase`, `clsWageSubsidy`, and related history classes own EAIP operational state.
- **Reimbursement boundary**: `Reimbursement\clsReimbursement`, `clsReimbursementDetail`, `clsAmount`, and `clsDetailAmount` own reimbursement calculation and persistence.
- **Search and targeting boundary**: `Search\*` classes and `Targeting\clsTargeting` expose read-oriented lookup and eligibility-targeting behavior.
- **Utility boundary**: `mdlCodeTables`, `mdlUtility`, and `dcbsMethods` isolate reusable code-table access and helper behavior from entity persistence.

## Interaction model

Application callers construct BOF business objects and criteria, the objects populate SQL or stored-procedure contracts on their criteria classes, and `IDataPortalInfo` routes those requests to Oracle. Billing and wage-subsidy operations additionally read Environment API configuration values before persisting calculated results.

## Architecture diagram

The following diagram shows high-level component interactions.

```mermaid

flowchart TD

    A[Claim applications] --> B[EAIP business objects]

    B --> C[Billing and period modules]

    B --> D[Reimbursement and targeting modules]

    C --> E[Environment API settings]

    C --> F[pk82500_eaip procedures]

    D --> F

    F --> G[Oracle EAIP tables]

```

## Sequence diagram

The following diagram shows the primary request/response sequence.

```mermaid

sequenceDiagram

    participant App as Claim application

    participant EAIP as clsGenerateBill / clsPayPeriod

    participant Config as EnvironmentService

    participant DPI as IDataPortalInfo

    participant DB as pk82500_eaip

    App->>EAIP: Create or update EAIP work item

    EAIP->>Config: Read EAIP rate settings when needed

    Config-->>EAIP: Configuration values

    EAIP->>DPI: Submit criteria SQL or stored-proc request

    DPI->>DB: Execute EAIP insert/update/select

    DB-->>DPI: Oracle rowset or rowcount

    DPI-->>EAIP: Materialized business data

    EAIP-->>App: Updated EAIP object graph

```

## Design constraints

- Persistence is Oracle-centric and largely package-driven through `pk82500_eaip`, with one notable inline `EAIP_PERIOD_TIMECARD` insert path that must stay consistent with package-managed tables.
- EAIP billing and wage-subsidy calculations depend on `claims.eaip.fs2360.rate` and `claims.eaip.wagesubsidyrates`, and the configuration analysis found no local defaults for either key.
- Update and delete flows rely on optimistic-concurrency rowcount checks surfaced as DB-contention errors by BOF lifecycle methods.
- The library is packaged with broad claim-domain dependencies, so changes in adjacent claim, payment, maintenance, and task libraries can affect EAIP orchestration behavior.

## Related documentation

- [Index](index.md)
- [Overview](overview.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Procedures](procedures/index.md)
- [Configuration](configuration.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.EAIP\SAIF.BOF.Business.Claim.EAIP.vbproj`
- `Business\SAIF.Business.Claim.EAIP\SAIF.BOF.Business.Claim.EAIP.nuspec`
- `Business\SAIF.Business.Claim.EAIP\packages.config`
- `Business\SAIF.Business.Claim.EAIP\Pipelines\build-vars.yml`
- `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\clsPayPeriod.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPayPeriodTimeCard.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsPeriod.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsCreditCardPayments.vb`
- `Business\SAIF.Business.Claim.EAIP\Period\clsWageSubsidy.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsReimbursement.vb`
- `Business\SAIF.Business.Claim.EAIP\Reimbursement\clsBalanceDCBS.vb`
- `Business\SAIF.Business.Claim.EAIP\Targeting\clsTargeting.vb`
- `Business\SAIF.Business.Claim.EAIP\Search\clsSearchCriteria.vb`
- `Business\SAIF.Business.Claim.EAIP\mdlCodeTables.vb`