Skip to content

Dependencies

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.

Internal dependencies

Dependency Reference Type Project path Usage
SAIF.Framework.Windows NuGet Package — Console application framework: runner, argument container, and lifecycle base classes
SAIF.Agency.Api.Client NuGet Package — Supplies AgencyClient/IAgencyClient; GetAgency and GetAgentsForAgency resolve the agency and appointed servicing agent printed on each notice.

External dependencies

Dependency Version Usage
Oracle.ManagedDataAccess 21.11.0 Managed Oracle driver behind the policyDb NHibernate session factory.
NHibernate 5.3.13 Maps PolicyTerm, RenewalNotice, RenewalNoticeQueueItem, and NoticeTemplate, and provides the unit of work the notice transaction commits through.
Autofac 6.5.0 Container built in RegisterAppDependencies; resolves RenewalNoticeApplication and its services.
Newtonsoft.Json 13.0.3 Serializes the agency and agent payloads exchanged with SAIF.Agency.Api and the notice merge model handed to the template renderer.
log4net 2.0.15 Writes the application log configured in App.config alongside the file0-file2 destinations.
System.Configuration 4.0.0.0 Reads ApplicationHost, ApplicationName, AgencyApiTimeoutSeconds, and PrintFileExtension from App.config.
System.Net.Mail 4.0.0.0 Sends the run summary mail from Finish to renewalnotice.notificationRecipients.

Transitive dependencies

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

API dependencies

Endpoint Method Called from Base URL config key Usage
v1/agencies/{agencyNumber} GET AgentResolver (GetAgency) agency.api.baseUrl 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.

Database connections

Database Config name Schema/User Access method Usage
Policy (Oracle) policyDb POLICY schema, POLICY_APP user NHibernate IUnitOfWork 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.

Dependency risks and notes

  • 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.

Sources

  • src/SAIF.Policy.RenewalNotice/SAIF.Policy.RenewalNotice.csproj
  • src/SAIF.Policy.RenewalNotice/packages.config
  • src/SAIF.Policy.RenewalNotice/App.config
  • src/SAIF.Policy.RenewalNotice/Program.cs
  • src/SAIF.Policy.RenewalNotice/AgentResolver.cs
  • src/SAIF.Policy.RenewalNotice/Mappings/RenewalNoticeMap.cs