---
title: Dependencies
summary: Internal libraries, external packages, framework components, API endpoints, and database connections.
status: draft
owner: Premium Audit Team
last_reviewed: 2026-08-14
---

# Dependencies

`SAIF.PremiumAudit.Batch` is a .NET Framework 4.8 console application with a
deliberately narrow dependency surface: it runs unattended at 02:00 under
Windows Task Scheduler, so anything that prompts, caches per-user state, or
requires an interactive desktop is excluded by design. It takes two internal
NuGet packages — the SAIF batch framework that supplies the run lifecycle and
the shared validation library — plus one same-repo project reference for data
access. Externally it depends on the SQL Server client, log4net, and
Newtonsoft.Json. It makes no HTTP calls, and all data access is against a single
SQL Server database in the `dbo` schema.

## Internal dependencies

| Dependency | Reference Type | Project path | Usage |
| --- | --- | --- | --- |
| SAIF.Framework.Batch | NuGet Package | packages/SAIF.Framework.Batch.4.2.1 | Supplies `clsBatchBase`, the `Execute` lifecycle that drives `ValidateCommandLine`, `PreProcess`, `RunAppLogic`, and finalization, and the File0/File1/File2 stream writers. |
| SAIF.Framework.Validation | NuGet Package | packages/SAIF.Framework.Validation.2.6.0 | Validates payroll amounts, class code format, and policy effective date ranges for each audit before any premium is recalculated (BR-001, BR-002). |
| SAIF.PremiumAudit.Batch.DataAccess | Project Reference | src/SAIF.PremiumAudit.Batch.DataAccess/SAIF.PremiumAudit.Batch.DataAccess.vbproj | Wraps `dbo.usp_GetPendingAudits` and the `PremiumTransaction` insert, and owns the per-audit `SqlTransaction` that `AuditProcessor` commits or rolls back. |
| SAIF.Framework.Notification | NuGet Package | packages/SAIF.Framework.Notification.3.1.4 | Sends the on-call notification email when the per-audit failure count exceeds `ErrorThreshold`. |
| SAIF.PremiumAudit.Batch.Reports | Project Reference | src/SAIF.PremiumAudit.Batch.Reports/SAIF.PremiumAudit.Batch.Reports.vbproj | Formats the File1 success detail and File2 error detail lines. No documentation set was generated for this project. |

## External dependencies

| Dependency | Version | Usage |
| --- | --- | --- |
| System.Data.SqlClient | 4.8.5 | Opens the policy administration connection in `PreProcess` and executes `dbo.usp_GetPendingAudits` and the `PremiumTransaction` insert through the data access layer. |
| log4net | 2.0.15 | Writes run start and end entries, checkpoint lines, and unhandled exceptions to the shared batch log alongside the File0 stream. |
| Newtonsoft.Json | 13.0.3 | Deserializes the `ValidationResult` payloads returned by `SAIF.Framework.Validation` when writing rejection detail to the File2 report. |
| System.Configuration | 4.0.0.0 | Reads the environment connection strings, `ErrorThreshold`, log directory, and `NotificationRecipients` values from `App.config`. |
| System.Net.Mail | 4.0.0.0 | Provides the SMTP client that `SAIF.Framework.Notification` uses to deliver the threshold-exceeded email. |
| System.Transactions | 4.0.0.0 | Supplies the transaction scope semantics the data access layer relies on for the per-audit commit and rollback. |

## Transitive dependencies

Dependencies in this section are inherited from dependency framework libraries — including SAIF batch framework components such as `clsBatchBase`. They are not directly referenced by this application but are required at runtime through framework packages.

| Dependency | Source framework | Type | Usage |
| --- | --- | --- | --- |
| `clsBatchBase` | `SAIF.Framework.Batch` | Transitive | Batch lifecycle framework: owns `Execute`, the return code enumeration, and the File0/File1/File2 stream contract the job writes through.† |
| SAIF.Framework.Core | `SAIF.Framework.Validation` | Transitive | Supplies `ValidationComponentBase`, framework tracing, and the initialization guard the validation engine inherits.† |
| SAIF.Framework.Policy.Types | `SAIF.Framework.Validation` | Transitive | Provides the `PolicyPeriod` and `JurisdictionCode` value types used by the effective-date and state-scoped payroll rules.† |
| SAIF.Framework.Environment | `SAIF.Framework.Core` | Transitive | Resolves the environment key passed as argument 1 to the connection string and mail profile selected during `PreProcess`.† |
| SAIF.Framework.Diagnostics | `SAIF.Framework.Core` | Transitive | Provides the trace listener that framework component trace entries are routed to during the processing loop.† |

## Database connections

| Database | Schema/User | Access method | Usage |
| --- | --- | --- | --- |
| PolicyAdmin | `dbo` | ADO.NET `SqlConnection` via SAIF.PremiumAudit.Batch.DataAccess | Reads pending audits through `dbo.usp_GetPendingAudits`, reads `dbo.PolicyAuditDetail` and `dbo.PayrollClassCode`, inserts `dbo.PremiumTransaction` and `dbo.PolicyAuditReject` rows, and updates `dbo.PolicyAudit.Status` inside the per-audit transaction. |
| PolicyAdmin | `dbo` | ADO.NET `SqlConnection` via SAIF.Framework.Validation | Reads `dbo.ClassCodeValidation` once during `PreProcess` for the valid class code ranges and payroll limits used by BR-001 and BR-002. |

## Dependency risks and notes
- `SAIF.Framework.Batch` 4.2.1 is consumed as a NuGet package, so a change to
  the lifecycle or the return code enumeration reaches this job only when the
  package version is bumped and the job is redeployed. The return codes the
  operational runbook documents come from this package, not from
  `Program.vb`.
- `SAIF.Framework.Validation` 2.6.0 is shared with `SAIF.Claims.Intake`. The two
  applications can run different versions, so a rule change must be verified in
  both before the package is rolled forward across the estate.
- `log4net` 2.0.15 is the version pinned across the SAIF .NET Framework 4.8
  estate. Upgrading it for this job alone would produce assembly binding
  redirect conflicts with the framework packages.
- `System.Data.SqlClient` 4.8.5 is in maintenance only; new SQL Server client
  features ship in `Microsoft.Data.SqlClient`. A move would touch every command
  in the data access project and is coupled to the .NET Framework 4.8 target.
- The job holds a single connection open for the whole run rather than opening
  one per audit. A network interruption after the loop starts fails the
  remaining audits, which is why the restart checkpoint written to File0 every
  100 audits matters operationally.
- `SAIF.PremiumAudit.Batch.Reports` has no documentation set, so the exact File1
  and File2 line layouts that operations parses are undocumented. It is a
  project reference in the same repository and should be added to the
  documentation scope.
- The job makes no outbound HTTP calls. Adding one would introduce a network
  timeout path into a loop that currently only has database and file failure
  modes, and the operational runbook would need a matching failure mode.

## Related documentation
- Index
- [Overview](overview.md)
- Architecture
- [Batch lifecycle](batch-lifecycle.md)
- [Operational runbook](operational-runbook.md)

## Sources
- `src/SAIF.PremiumAudit.Batch/SAIF.PremiumAudit.Batch.vbproj`
- `src/SAIF.PremiumAudit.Batch/packages.config`
- `src/SAIF.PremiumAudit.Batch/App.config`
- `src/SAIF.PremiumAudit.Batch/Program.vb`
- `src/SAIF.PremiumAudit.Batch/AuditProcessor.vb`
- `src/SAIF.PremiumAudit.Batch.DataAccess/AuditRepository.vb`
