---
title: SAIF.Business.Policy.Correspondence operations and processes
summary: Operation catalog and process hub for policy correspondence.
status: draft
owner: Technical Writer
last_reviewed: 2026-07-31
library: SAIF.Business.Policy.Correspondence
reference_type: package
operation_id: OP-HUB
trigger: Catalog page
---

# SAIF.Business.Policy.Correspondence operations and processes

This page catalogs the business and technical operations implemented by `SAIF.Business.Policy.Correspondence`. The library creates and updates correspondence rows, loads endorsement collections and detail elements, resolves code metadata, queues output documents, and reconciles image references against Imaging. Each operation's detailed logic lives in its own page under `operations/`.

## Operation catalog
| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Create a new correspondence or endorsement](operations/create-a-new-correspondence-or-endorsement.md) | Create an unsaved correspondence or endorsement and seed audit fields and keys. | Caller invokes `NewCorrespondence(...)` or `NewEndoresment(...)`. | `IDataPortalInfo`, policy number, correspondence code, effective date, optional policy-period effective date. | A new `clsCorrespondence` or `clsEndorsement` instance marked new. | [BR-004](business-rules.md#br-004-endorsements-require-a-policy-period-effective-date), [BR-006](business-rules.md#br-006-new-correspondence-uses-the-endorsement_seq-sequence), [BR-007](business-rules.md#br-007-create-stamps-audit-fields-from-the-data-portal) | [ENDORSEMENT](database-tables.md#endorsement) | [SQL-001](sql/SQL-001-saif-business-policy-correspondence.md) |
| [Retrieve a correspondence item](operations/retrieve-a-correspondence-item.md) | Load a correspondence or endorsement by sequence number or by policy-period/code key. | Caller invokes `GetCorrespondence`, `GetInformationPage`, or `GetEndorsement`. | Sequence number, or policy number + policy-period effective date + correspondence code. | A populated `clsCorrespondence` or `clsEndorsement`. | [BR-001](business-rules.md#br-001-only-endorsement-coded-correspondence-is-returned), [BR-008](business-rules.md#br-008-correspondence-retrieval-switches-between-two-key-shapes), [BR-009](business-rules.md#br-009-information-page-retrieval-always-uses-code-p401) | [ENDORSEMENT](database-tables.md#endorsement), [OUTPUT_LOG](database-tables.md#output_log), [ENDORSE_CODE](database-tables.md#endorse_code) | [SQL-005](sql/SQL-005-saif-business-policy-correspondence.md), [SQL-006](sql/SQL-006-saif-business-policy-correspondence.md), [SQL-013](sql/SQL-013-saif-business-policy-correspondence.md) |
| [Retrieve endorsement collections for a policy or policy period](operations/retrieve-endorsement-collections-for-a-policy-or-policy-period.md) | Load all endorsements for a policy, optionally constrained to one policy period. | Caller invokes one of the `GetEndorsements(...)` overloads. | Policy number, with optional period effective and expiration dates. | A populated `clsEndorsementCollection`. | [BR-001](business-rules.md#br-001-only-endorsement-coded-correspondence-is-returned), [BR-002](business-rules.md#br-002-policy-period-filters-bind-only-for-period-scoped-retrieval), [BR-003](business-rules.md#br-003-policy-period-membership-depends-on-source-system-rules), [BR-010](business-rules.md#br-010-transaction-pending-endorsement-loads-reuse-a-pre-fetched-code-collection) | [ENDORSEMENT](database-tables.md#endorsement), [POLICY_PERIOD](database-tables.md#policy_period), [ENDORSE_CODE](database-tables.md#endorse_code), [OUTPUT_LOG](database-tables.md#output_log) | [SQL-009](sql/SQL-009-saif-business-policy-correspondence.md), [SQL-014](sql/SQL-014-saif-business-policy-correspondence.md), [SQL-015](sql/SQL-015-saif-business-policy-correspondence.md) |
| [Persist a correspondence or endorsement](operations/persist-a-correspondence-or-endorsement.md) | Insert or update a correspondence row through the BOF save lifecycle. | Caller saves a `clsCorrespondence`, `clsEndorsement`, or their collection wrappers. | A dirty correspondence object plus any edit-session state held by the framework. | An inserted or updated `ENDORSEMENT` row or a recorded error. | [BR-011](business-rules.md#br-011-collection-save-applies-edits-before-framework-persistence), [BR-012](business-rules.md#br-012-insert-and-update-must-affect-exactly-one-row), [BR-013](business-rules.md#br-013-updates-enforce-optimistic-concurrency-by-update-date), [BR-014](business-rules.md#br-014-correspondence-does-not-expose-create-sql-or-delete-sql-criteria) | [ENDORSEMENT](database-tables.md#endorsement) | [SQL-002](sql/SQL-002-saif-business-policy-correspondence.md), [SQL-016](sql/SQL-016-saif-business-policy-correspondence.md) |
| [Look up a correspondence image sequence number](operations/look-up-a-correspondence-image-sequence-number.md) | Read the current output-log image sequence for a correspondence item. | Caller invokes `clsCorrespondence.GetImageSequenceNumber`. | Correspondence sequence number. | The matching `OUTPUT_LOG.IMAGE_SEQ_NUM` value, if any. | None | [OUTPUT_LOG](database-tables.md#output_log) | [SQL-007](sql/SQL-007-saif-business-policy-correspondence.md) |
| [Insert an output-log entry](operations/insert-an-output-log-entry.md) | Call the legacy print-request stored procedure and return its output file name and copy count. | Caller invokes `clsCorrespondence.InsertOutputLog`. | A correspondence object and program name. | `otFileName` and `otCopies` returned by reference. | None | N/A | [SQL-003](sql/SQL-003-saif-business-policy-correspondence.md) |
| [Insert a policy output document](operations/insert-a-policy-output-document.md) | Persist a policy output-document record through the `pk73343_output_document` Oracle package. | Caller invokes `InsertOutputDocument` or `InsertAgencyDeliveredOutputDocument` on `clsOutputDocumentInserter`. | An `OutputDocumentInsert` DTO containing policy, image, delivery, release, and description fields. | A stored `OUTPUT_DOCUMENT` / `POLICY_OUTPUT_DOCUMENT` pair. | [BR-005](business-rules.md#br-005-agency-delivered-output-documents-add-an-agency-delivery-flag), [BR-024](business-rules.md#br-024-explicit-release-dates-override-the-computed-document-date), [BR-025](business-rules.md#br-025-non-agency-viewable-output-documents-release-immediately), [BR-026](business-rules.md#br-026-held-output-documents-require-both-agency-visibility-and-hold-flag), [BR-027](business-rules.md#br-027-agency-viewable-non-held-documents-start-pending), [BR-028](business-rules.md#br-028-zero-agency-and-agent-numbers-are-normalized-to-null), [BR-029](business-rules.md#br-029-release-dates-are-set-only-for-released-policy-output-rows), [BR-030](business-rules.md#br-030-the-standard-output-document-overload-defaults-to-non-agency-delivery), [BR-031](business-rules.md#br-031-the-agency-delivered-overload-passes-the-delivery-flag-through-unchanged), [BR-032](business-rules.md#br-032-the-output-document-procedure-raises-a-standard-saif-error-on-exception) | [OUTPUT_DOCUMENT](database-tables.md#output_document), [POLICY_OUTPUT_DOCUMENT](database-tables.md#policy_output_document), [OUTPUT_DOCUMENT_TYPE_CODE](database-tables.md#output_document_type_code) | [SQL-004](sql/SQL-004-saif-business-policy-correspondence.md) |
| [Reconcile endorsement image sequence numbers with the Imaging API](operations/reconcile-endorsement-image-sequence-numbers-with-the-imaging-api.md) | Check that stored image sequence numbers still exist in Imaging and clear any stale values. | Caller invokes `ClearImageSequenceNumbersForDeletedImages` after loading an endorsement collection. | The in-memory collection image sequence numbers and the `ImagingApiUrl` configuration setting. | Any endorsement whose image is missing has `ImageSequenceNumber` reset to `0`. | [BR-015](business-rules.md#br-015-imaging-reconciliation-skips-empty-image-lists), [BR-016](business-rules.md#br-016-missing-images-reset-local-image-sequence-numbers-to-zero) | N/A | None |
| [Load correspondence detail elements](operations/load-correspondence-detail-elements.md) | Retrieve the display-oriented name/value detail elements attached to a correspondence item. | Caller invokes `GetCorrespondenceDetail` or `GetCorrespondenceDetailCollection`. | Correspondence sequence number, with optional data-element name for the single-row variant. | One `clsCorrespondenceDetail` or a `clsCorrespondenceDetailCollection`. | [BR-017](business-rules.md#br-017-correspondence-details-are-read-only-through-this-library) | [POLICY_CORRESPOND_DATA](database-tables.md#policy_correspond_data), [ENDORSEMENT](database-tables.md#endorsement), [CORRESPOND_DATA_ELEMENT](database-tables.md#correspond_data_element) | [SQL-011](sql/SQL-011-saif-business-policy-correspondence.md), [SQL-012](sql/SQL-012-saif-business-policy-correspondence.md) | 

## Process flow diagram
The following diagram shows the main correspondence lifecycle.

```mermaid
flowchart TD
    Start([Caller]) --> Create[Create or retrieve correspondence]
    Create --> Details[Load details and code metadata]
    Details --> Imaging[Optional imaging reconciliation]
    Details --> Output[Optional output-document insert]
    Create --> Save[Persist correspondence]
    Output --> End([Caller continues])
    Imaging --> End
    Save --> End
```

## Inherited operations and processes

Operations in this section come from documented BOF base classes and are inherited rather than implemented directly in local source.

### From `clsBusinessBase` (`SAIF.Framework.Core`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Create or retrieve business object | Execute the inherited data-portal lifecycle for create and retrieve requests.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Create a new correspondence or endorsement](operations/create-a-new-correspondence-or-endorsement.md), [Retrieve a correspondence item](operations/retrieve-a-correspondence-item.md), [Load correspondence detail elements](operations/load-correspondence-detail-elements.md) |
| Save business object | Route insert or update requests through the inherited BOF save pipeline.† | `clsBusinessBase` | `SAIF.Framework.Core` | [Persist a correspondence or endorsement](operations/persist-a-correspondence-or-endorsement.md) |

### From `clsBusinessCollectionBase` (`SAIF.Framework.Core`)

| Operation | Intent | Provided by | Origin | Embedded in |
| --- | --- | --- | --- | --- |
| Manage edit session | Provide collection-level edit, apply, and rollback behavior used before save.† | `clsBusinessCollectionBase` | `SAIF.Framework.Core` | [Persist a correspondence or endorsement](operations/persist-a-correspondence-or-endorsement.md) |
| Save managed collection | Persist child items and stop on the first child failure.† | `clsBusinessCollectionBase` | `SAIF.Framework.Core` | [Persist a correspondence or endorsement](operations/persist-a-correspondence-or-endorsement.md) |

## Database interactions

The following table summarizes which operations touch the database. Detailed per-step citations live on each operation page.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [Create a new correspondence or endorsement](operations/create-a-new-correspondence-or-endorsement.md) | [SQL-001](sql/SQL-001-saif-business-policy-correspondence.md) | [ENDORSEMENT](database-tables.md#endorsement) | Write |
| [Retrieve a correspondence item](operations/retrieve-a-correspondence-item.md) | [SQL-005](sql/SQL-005-saif-business-policy-correspondence.md), [SQL-006](sql/SQL-006-saif-business-policy-correspondence.md), [SQL-013](sql/SQL-013-saif-business-policy-correspondence.md) | [ENDORSEMENT](database-tables.md#endorsement), [OUTPUT_LOG](database-tables.md#output_log), [ENDORSE_CODE](database-tables.md#endorse_code) | Read |
| [Retrieve endorsement collections for a policy or policy period](operations/retrieve-endorsement-collections-for-a-policy-or-policy-period.md) | [SQL-009](sql/SQL-009-saif-business-policy-correspondence.md), [SQL-014](sql/SQL-014-saif-business-policy-correspondence.md), [SQL-015](sql/SQL-015-saif-business-policy-correspondence.md) | [ENDORSEMENT](database-tables.md#endorsement), [POLICY_PERIOD](database-tables.md#policy_period), [ENDORSE_CODE](database-tables.md#endorse_code), [OUTPUT_LOG](database-tables.md#output_log) | Read |
| [Persist a correspondence or endorsement](operations/persist-a-correspondence-or-endorsement.md) | [SQL-002](sql/SQL-002-saif-business-policy-correspondence.md), [SQL-016](sql/SQL-016-saif-business-policy-correspondence.md) | [ENDORSEMENT](database-tables.md#endorsement) | Write |
| [Look up a correspondence image sequence number](operations/look-up-a-correspondence-image-sequence-number.md) | [SQL-007](sql/SQL-007-saif-business-policy-correspondence.md) | [OUTPUT_LOG](database-tables.md#output_log) | Read |
| [Insert an output-log entry](operations/insert-an-output-log-entry.md) | [SQL-003](sql/SQL-003-saif-business-policy-correspondence.md) | N/A — stored procedure body unavailable | Write |
| [Insert a policy output document](operations/insert-a-policy-output-document.md) | [SQL-004](sql/SQL-004-saif-business-policy-correspondence.md) | [OUTPUT_DOCUMENT](database-tables.md#output_document), [POLICY_OUTPUT_DOCUMENT](database-tables.md#policy_output_document), [OUTPUT_DOCUMENT_TYPE_CODE](database-tables.md#output_document_type_code) | Write |
| [Load correspondence detail elements](operations/load-correspondence-detail-elements.md) | [SQL-011](sql/SQL-011-saif-business-policy-correspondence.md), [SQL-012](sql/SQL-012-saif-business-policy-correspondence.md) | [POLICY_CORRESPOND_DATA](database-tables.md#policy_correspond_data), [ENDORSEMENT](database-tables.md#endorsement), [CORRESPOND_DATA_ELEMENT](database-tables.md#correspond_data_element) | Read |

## Failure and edge-case behavior
- The legacy output-log path depends on a procedure that should be confirmed before reuse.*
- Collection period retrieval changes behavior for Guidewire versus non-Guidewire policy periods.
- Imaging reconciliation clears stale IDs instead of throwing when an image is simply missing from the returned result set.
- Correspondence-detail APIs remain read-only because the live mutating SQL paths are disabled.

## Stored procedure operations

Operations implemented in Oracle stored procedures referenced by this library.

| Operation | Description | Source | Link |
| --- | --- | --- | --- |
| Insert a policy output document | Inserts output-document and policy-output-document rows and derives release status. | `WCIS_DBA.pk73343_output_document.insert_policy_output_document` | [Details](procedures/pk73343_output_document.md#operations) |
| Insert an output-log entry | Legacy output-log request path referenced by application code; treat as possibly dead until the Oracle object is confirmed.* | `pk77001_output_log.insert_output_log` | [Details](procedures/pk77001_output_log.md) |


## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Configuration](configuration.md)
- [API reference](api/index.md)


> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.
> Statements marked with † are derived from dependency library documentation via the Legends CLI.

## Sources
- `Business\SAIF.Business.Policy.Correspondence\clsCorrespondence.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsCorrespondenceCode.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsCorrespondenceCollection.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsCorrespondenceDetail.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsCorrespondenceDetailCollection.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsEndorsement.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsEndorsementCollection.vb`
- `Business\SAIF.Business.Policy.Correspondence\clsOutputDocumentInserter.vb`
