SAIF.Policy.RenewalNotice runs unattended at 02:30 on BATCHPRD02 and queues
renewal notices for print and email delivery. A failed run is not immediately
customer-facing, but notices have statutory lead times, so a night that is missed
must be rerun before the print vendor pickup at 05:00. Reruns are safe with the
same arguments: a POLICY.RENEWAL_NOTICE row is written only inside the
transaction that queues the notice, so anything that failed is still eligible and
nothing is noticed twice.
SAIF.Policy.RenewalNotice.exe -NoticeDate 2026-09-18 -NoticeType Standard -BatchSize 500
Arguments are named and may also be supplied as --<Argument>, /<Argument>, <Argument>:<value>, or <Argument>=<value>.† See Arguments for the full contract.
The scheduled task on BATCHPRD02 runs the equivalent of:
D:\Apps\RenewalNotice\SAIF.Policy.RenewalNotice.exe -NoticeDate 2026-09-18 -NoticeType Standard
<ApplicationName> began at <time> / ended at <time>
ConsoleBase header/footer
Includes total running time†
Exit Code: <n>
SaifStandardProgramBase
Final line of every run†
A healthy nightly run shows four resolved arguments, Running as: svc_batch on
track: PROD, a notice window line naming the eligible date range, and
Exit Code: 0.
Log destinations are configured through machine-level environment variablesfile0–file4 on the host that runs the executable. Each variable's value is a log file path.†
Environment variable
Content
Retention
file0
Run control log: header block, resolved arguments, notice window, progress every 100 notices, totals, and fatal errors
90 days on disk, then archived to \\saifarchive\batchlogs for 7 years
file1
Notice detail: one line per generated notice with policy number, renewal effective date, agency number, servicing agent, and delivery channel
90 days on disk, then archived for 7 years
file2
Exception detail: one line per skipped or failed term with policy number, agency number, and exception message
90 days on disk, then archived for 7 years
file3
Not used
—
file4
Not used
—
On BATCHPRD02 these resolve to
D:\BatchLogs\RenewalNotice\RenewalNotice_File0_yyyyMMdd.log and the matching
_File1_ and _File2_ paths.
Correct the SAIF-RenewalNotice-Nightly arguments field or the manual command line and re-run. A NoticeType with no active template row fails here too.
2
Database error
Confirm the Oracle instance for the current track is up and POLICY_APP can connect, then re-run with the same arguments.
3
Invalid data encountered
Read the file2 and file0 entries: either the notice template for the requested type is missing or a term lacks a required merge field. Raise the data correction with the Policy Systems Team, then re-run.
4
File read/write failure
Verify the print drop share in renewalnotice.printQueuePath is reachable and writable by svc_batch, and that the file0-file2 paths exist, then re-run.
5
Unhandled exception
Escalate to Policy Systems on-call with the formatted exception from standard error and the last file0 progress line.
6
No data found
No terms fall inside the window. Expected for NonRenewal and Conditional runs; for the nightly Standard run, confirm policy term replication completed before 02:30 and re-run once it has.
Validation messages on stderr, exit code 1, empty file0
Job fails before any processing
Check the task's Arguments field reads -NoticeDate <yyyy-MM-dd> -NoticeType Standard. Correct it and re-run for the same notice date.
Database unavailable
DatabaseErrorException, exit code 2, file0 stops after the header block
No notices generated; the statutory window shifts by a day if not recovered before 05:00
Confirm the instance named by policy.db.instance is up and check for blocking on POLICY.RENEWAL_NOTICE. Re-run with the same arguments once connectivity is restored.
Environment API unavailable
Failure during dependency registration, exit code 5, no header block
Application never starts
Verify Environment API availability for the configured track and that ApplicationHost in App.config resolves from BATCHPRD02, then re-run.
Notice template missing
DataErrorException, exit code 3, file0 records the notice type
Nothing generated for that notice type
Confirm an active POLICY.NOTICE_TEMPLATE row exists for the requested type and effective date. Template changes are released by the Policy Systems Team; re-run after the row is in place.
Print drop share unreachable
FileInputOutputException, exit code 4, file0 names the UNC path
No notices queued; nothing partially delivered
Confirm the share is mounted and writable by svc_batch. No cleanup is needed — notices are recorded only when their transaction commits — so re-run with the same arguments.
Agency API outage mid-run
Exit code 0 with a high skipped count; repeated timeout entries in file2
Notices for the skipped terms were not generated and remain eligible
Confirm SAIF.Agency.Api is healthy for the track, then re-run with the same arguments; only the skipped terms are picked up. If the outage persists past 04:30, notify the Agency Systems Team and hold the print pickup.
Empty notice window on the nightly run
Exit code 6, file0 shows zero terms read
No notices for the night; a day of statutory lead time is lost if not recovered
Check that policy term replication finished. Re-run once it has; if replication is genuinely late past 04:00, escalate to Policy Systems on-call so the notice date can be reconciled.
Partial batch after a fatal exit
Exit code 2, 3, or 4 with file1 lines present but no totals block in file0
Some notices queued, the rest still eligible
Re-run with the same arguments. Do not delete queue rows or print files from the failed run: queued terms have a POLICY.RENEWAL_NOTICE row and are excluded from the rerun. Confirm the rerun's totals plus the failed run's queued count match the eligible count in file0.