---
title: "SQL-041: Create PolicyOutputDocument via AddPolicyOutputDocument"
summary: Create operation against PolicyOutputDocument via NHibernate ORM.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Services
reference_type: package
---

# SQL-041: Create PolicyOutputDocument via AddPolicyOutputDocument

This ORM statement performs a create operation on `PolicyOutputDocument` via `AddPolicyOutputDocument`, executed from `Services/SAIF.Services/OutputDocuments/PolicyDocumentsService.cs` (L561).

## Classification

| Field | Value |
| --- | --- |
| **SQL ID** | SQL-041 |
| **Operation type** | Create |
| **Execution method** | ORM (IRepository.Add) |
| **Database** | Oracle |
| **Schema** | [unqualified]** |
| **Command type** | N/A (ORM-generated) |
| **Business object** | `PolicyOutputDocument` |
| **Criteria property** | N/A — ORM |
| **Lifecycle method** | `AddPolicyOutputDocument` |

## Parameters

| Parameter | Direction | Type | Max length | Description |
| --- | --- | --- | --- | --- |
| `:Id` | Input | `long` | N/A | Identifier copied from the associated `OutputDocument` |
| `:UpdateNumber` | Input | `int` | N/A | Version column (`Version()`); NHibernate writes its initial value |
| `:PolicyPeriodEffectiveDate` | Input | `DateTime?` | N/A |  |
| `:AgencyId` | Input | `long?` | N/A |  |
| `:AgentId` | Input | `long?` | N/A |  |
| `:AgencyViewed` | Input | `bool` | N/A | Bound as `'Y'`/`'N'` (`YesNoType`) |
| `:AgencyDelivery` | Input | `bool` | N/A | Bound as `'Y'`/`'N'` (`YesNoType`) |
| `:AgencyDeleteDate` | Input | `DateTime?` | N/A |  |
| `:CreateUser` | Input | `string (inherited from external base class; type inferred)` | N/A |  |
| `:CreateDate` | Input | `DateTime (inherited from external base class; type inferred)` | N/A |  |
| `:UpdateUser` | Input | `string (inherited from external base class; type inferred)` | N/A |  |
| `:UpdateDate` | Input | `DateTime (inherited from external base class; type inferred)` | N/A |  |
| `:ReleaseDate` | Input | `DateTime?` | N/A |  |
| `:HoldTaskId` | Input | `long?` | N/A |  |
| `:TaskUser` | Input | `string` | N/A |  |
| `:SourceKeyText` | Input | `string` | N/A |  |
| `:AccountNumber` | Input | `string` | N/A |  |
| `:Policy` | Input | `Policy` | N/A | Identifier of the referenced `Policy` entity (`References(x => x.Policy)`) |
| `:DocumentStatus` | Input | `DocumentStatusCode` | N/A | Identifier of the referenced `DocumentStatusCode` entity (`References(x => x.DocumentStatus)`) |

## Tables

| Table | Access | Columns used |
| --- | --- | --- |
| [policy_output_document](../database-tables.md#policy_output_document) | INSERT | output_document_seq_num, update_num, policy_period_eff_date, agency_seq_num, agent_num, agency_viewed_flag, agency_delivery_flag, agency_delete_date, create_user, create_date, update_user, update_date, release_date, hold_task_seq_num, task_user, source_key_text, ACCOUNT_NUM, policy_num, document_status_code |

## LINQ statement

Source: `Services/SAIF.Services/OutputDocuments/PolicyDocumentsService.cs:561`.

```csharp
// Services/SAIF.Services/OutputDocuments/PolicyDocumentsService.cs:561
unitOfWork.GetRepository<PolicyOutputDocument>().Add(policyDoc);
```

## Sample SQL

> **Inferred SQL:** This SQL was inferred from the LINQ statement above and the NHibernate mappings. It is not concrete SQL from source code; NHibernate generates the executed statement at runtime, so aliases, column order, join syntax, and bind-parameter names may differ.

```sql
-- Inferred from LINQ (NHibernate mapping translation); not concrete SQL
INSERT INTO policy_output_document (
  output_document_seq_num,
  update_num,
  policy_period_eff_date,
  agency_seq_num,
  agent_num,
  agency_viewed_flag,
  agency_delivery_flag,
  agency_delete_date,
  create_user,
  create_date,
  update_user,
  update_date,
  release_date,
  hold_task_seq_num,
  task_user,
  source_key_text,
  ACCOUNT_NUM,
  policy_num,
  document_status_code)
VALUES (
  :Id,
  :UpdateNumber,
  :PolicyPeriodEffectiveDate,
  :AgencyId,
  :AgentId,
  :AgencyViewed,
  :AgencyDelivery,
  :AgencyDeleteDate,
  :CreateUser,
  :CreateDate,
  :UpdateUser,
  :UpdateDate,
  :ReleaseDate,
  :HoldTaskId,
  :TaskUser,
  :SourceKeyText,
  :AccountNumber,
  :Policy,
  :DocumentStatus)
```

Translation notes:
- `GeneratedBy.Foreign("OutputDocument")`: `:Id` is copied from the identifier of the associated `OutputDocument` entity (one-to-one shared primary key); no sequence call is made for this table.
- `update_num` is the optimistic-concurrency version column (`Version(x => x.UpdateNumber)`); NHibernate sets its initial value on INSERT.
- `:AgencyViewed`, `:AgencyDelivery` are bound as `'Y'` / `'N'` (`YesNoType`).
- Reference FK values are bound from the associated entity's identifier; the referenced tables are **not** read or joined by this statement: `Policy` → `policy_num` (entity table `POLICY` not accessed); `DocumentStatus` → `document_status_code` (entity table `document_status_code` not accessed).
- `policyDoc.OutputDocument` is a transient `OutputDocument` (call site lines 550-560). `HasOne(r => r.OutputDocument).Constrained()` declares no cascade, but the `foreign` identifier generator saves the associated transient `OutputDocument` first in order to obtain its identifier; that INSERT into the `OutputDocument` table is a separate statement and is not fabricated here.

## Operations and processes
- PolicyDocumentsService.AddPolicyOutputDocument — see [Operations and processes](../operations-processes.md)

> **Note:** Statements marked with `**` could not be confirmed; treat as unknown until verified.

## Sources
- `Services/SAIF.Services/OutputDocuments/PolicyDocumentsService.cs (L561)`
