SAIF.Policy.RenewalNotice has a small, entirely package-based dependency
surface: there are no project references in the repository. It takes two
internal NuGet packages — SAIF.Framework.Windows for the console lifecycle and
SAIF.Agency.Api.Client for agency and agent lookups — and picks up the rest of
the SAIF framework transitively through them. Externally it depends on the Oracle
managed driver, NHibernate, Autofac, and the usual JSON and logging packages. All
persistence is against a single Oracle database registered as policyDb, and the
only outbound HTTP calls are to SAIF.Agency.Api.
Dependencies in this section are inherited from framework packages — for a console application on SAIF.Framework.Windows this includes SAIF.Framework.Common, SAIF.Framework.Data.NHibernate, SAIF.HashUtil, and SAIF.Web.API.Clients. They are not directly referenced by this application but are required at runtime.
Dependency
Source framework
Type
Usage
IConsoleLogService
SAIF.Framework.Common
Transitive
Console and file logging surface injected into ConsoleBase†
IUnitOfWork
SAIF.Framework.Data.NHibernate
Transitive
NHibernate unit of work resolved from the container†
IEnvironmentService
SAIF.Framework.Core
Transitive
Environment API configuration retrieval†
SaifConsoleException
SAIF.Framework.Windows
Transitive
Exception hierarchy that maps DatabaseErrorException, DataErrorException, FileInputOutputException, and NoDataFoundException to exit codes 2, 3, 4, and 6.†
SaifStandardCommandLineParser
SAIF.Framework.Windows
Transitive
Parses the named arguments and echoes each resolved value before Initialize runs.†
SAIF.HashUtil
SAIF.Framework.Common
Transitive
Produces the notice document hash stored on POLICY.RENEWAL_NOTICE so a regenerated notice can be compared to the queued one.†
JsonHttpClient
SAIF.Web.API.Clients
Transitive
HTTP surface underneath AgencyClient: request composition, the API key header, timeout enforcement, and the result envelope.†
Resolves the agency name and mailing address printed in the notice footer, and serves as the Initialize health probe for the agency number in renewalnotice.healthProbeAgencyNumber.
v1/agencies/{agencyNumber}/agents
GET
AgentResolver (GetAgentsForAgency)
agency.api.baseUrl
Returns the agents appointed at the agency; the appointed servicing agent for the policy term is selected from this list and printed as the contact.
Reads eligible terms from POLICY.POLICY_TERM and the template from POLICY.NOTICE_TEMPLATE; inserts POLICY.RENEWAL_NOTICE and POLICY.RENEWAL_NOTICE_QUEUE rows in the per-notice transaction.
SAIF.Framework.Windows is consumed as a NuGet package, so the argument
parser, the exit-code mapping, and the header and footer output change only
when the package version is bumped and the application is redeployed. The exit
codes the operational runbook documents come from that package, not from
Program.cs.
SAIF.Agency.Api.Client 3.2.0 is compiled against the v1 routes of
SAIF.Agency.Api. A breaking change on the API side surfaces here as skipped
notices rather than a failed run, because agent resolution failures are
per-term recoverable errors — the failure count in the run summary is the only
signal.
The agency client is constructed once in Initialize and reused for the whole
batch. A mid-run outage of SAIF.Agency.Api therefore skips every remaining
term instead of failing fast, which is why the summary mail lists affected
policy numbers.
Oracle.ManagedDataAccess 21.11.0 is pinned by a binding redirect to match the
version SAIF.Framework.Data.NHibernate was built against. Upgrading it for
this application alone reintroduces the redirect conflict.
Newtonsoft.Json 13.0.3 arrives both directly and transitively through
SAIF.Web.API.Clients; the redirect in App.config is what keeps the two
consistent at run time.
The application has no project references, so nothing in this repository can be
changed in a way that affects a run without a package version change. That
makes deployments predictable but means a fix in the agency client requires a
package release rather than a rebuild.