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.
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).
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.
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.†
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.
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.