---
title: DCBS 1502 transfer management
summary: Records, lists, updates, and deletes the 1502 filings queued for transfer to the Department of Consumer and Business Services, validating the claim and filing reason before the row is written.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.Claim
reference_type: package
operation_id: OP-BC-09
trigger: A caller creates a new 1502 transfer record for a claim, or requests the outstanding transfer queue for processing
---

# DCBS 1502 transfer management

Form 1502 is the claim status report SAIF must file with the Department of Consumer and Business Services. This operation manages the queue of 1502 documents awaiting transfer: it creates a transfer record with a database-assigned sequence number, validates that the record identifies a claim and a filing reason, writes the file name, file identifier, image sequence, and document type that the transfer process needs, and lets the transfer process list and then mark off the outstanding work.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-BC-09 |
| **Trigger** | `cls1502Transfer.NewClaim1502(dataPortalInfo)` followed by `Save()`; `cls1502Transfer.GetTransferList(dataPortalInfo, claimID)`; `cls1502Transfer.GetUnprocessedTransferList(dataPortalInfo)` |
| **Inputs** | `ClaimID`; filing reason code; document type code; file name; file identifier; image sequence number; TOW identifier; processed date; request date; create date and create user |
| **Outputs** | A persisted `CL_1502_DCBS_TRANSFER` row with its assigned sequence number; a transfer list collection; error messages `InsertError`, `UpdateError`, `DeleteError` |
| **Primary components** | `cls1502Transfer.Create`, `cls1502Transfer.AddInsertUpdateParms`, `cls1502Transfer.ValidClaimID`, `cls1502Transfer.ValidFilingReason`, `cls1502Transfer.GetTransferList`, `cls1502Transfer.GetUnprocessedTransferList`, `cls1502TransferList` |
| **Entry point** | `Business\SAIF.Business.Claim\cls1502Transfer.vb` |

## Steps

1. **Create the transfer record.** `Create` sets the request date to today, sets the create date to the current time, defaults the claim identifier to zero, and asks the framework for the next value of the 1502 transfer sequence, which becomes the record's primary key ([SQL-001](../sql/SQL-001-saif-business-claim.md), [CL_1502_DCBS_TRANSFER_SEQ](../database-tables.md#cl_1502_dcbs_transfer_seq)).
2. **Register the validation rules.** The object registers two rules that run before any write: the claim identifier must not be zero ([BR-001](../business-rules.md#br-001-claim-id-must-be-non-zero)), and the filing reason code must be present ([BR-002](../business-rules.md#br-002-filing-reason-code-is-required)).
3. **Bind the row's columns.** `AddInsertUpdateParms` binds the sequence number, claim identifier, request date, filing reason code as five characters, document type code as five characters, file name as forty characters, file identifier as thirty-six characters, image sequence number, TOW identifier, processed date, create date, and create user as thirty characters, so insert and update always write the same field set.
4. **Insert the row.** Saving a new record inserts all twelve columns into the transfer table ([SQL-004](../sql/SQL-004-saif-business-claim.md), [CL_1502_DCBS_TRANSFER](../database-tables.md#cl_1502_dcbs_transfer)).
   - If exactly one row is not affected: add `InsertError` with the message "Insert Failed" ([BR-008](../business-rules.md#br-008-updatedelete-row-count-must-equal-1)).
   - Otherwise the previous insert error is cleared from the message collection.
5. **Update the row.** Saving an existing record writes the same column set into the schema-qualified transfer table, keyed on the 1502 sequence number alone ([SQL-028](../sql/SQL-028-saif-business-claim.md), [CLM_DBA.CL_1502_DCBS_TRANSFER](../database-tables.md#clm_dbacl_1502_dcbs_transfer)).
   - If exactly one row is not affected: add `UpdateError` combining the framework database contention message with the label "1502 Transfer" ([BR-008](../business-rules.md#br-008-updatedelete-row-count-must-equal-1)).
6. **Delete the row.** Deleting removes the record by its 1502 sequence number ([SQL-039](../sql/SQL-039-saif-business-claim.md), [CL_1502_DCBS_TRANSFER](../database-tables.md#cl_1502_dcbs_transfer)).
   - If exactly one row is not affected: add `DeleteError` combining the framework database contention message with the label "1502 Transfer" ([BR-008](../business-rules.md#br-008-updatedelete-row-count-must-equal-1)).
7. **List a claim's outstanding transfers.** `GetTransferList` selects every column from the transfer table for the supplied claim identifier where the processed date is still null, so only work that has not yet been transferred is returned ([BR-014](../business-rules.md#br-014-only-1502-transfers-with-no-processed-date-are-eligible-for-transfer), [CL_1502_DCBS_TRANSFER](../database-tables.md#cl_1502_dcbs_transfer)). This ad-hoc statement is not represented in the SQL catalog.*
8. **List the whole outstanding queue.** `GetUnprocessedTransferList` applies the same null-processed-date filter across all claims and orders the result by file name so the transfer process handles documents in file order ([BR-014](../business-rules.md#br-014-only-1502-transfers-with-no-processed-date-are-eligible-for-transfer), [CL_1502_DCBS_TRANSFER](../database-tables.md#cl_1502_dcbs_transfer)). This ad-hoc statement is not represented in the SQL catalog.*
9. **Hydrate the list.** Both list entry points build a `cls1502TransferList` collection, supplying a factory that constructs an empty transfer object per row and populating each object through its row-load member.
10. **Mark a record as processed.** After the file has been transferred, the caller sets the processed date on the record and saves it, which removes the record from both list queries on the next pass ([BR-014](../business-rules.md#br-014-only-1502-transfers-with-no-processed-date-are-eligible-for-transfer)).
11. **Keyed retrieval is refused.** The Criteria raises an application exception from its retrieve SQL property, so a single transfer record can only be reached through one of the two list queries.

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start([Caller creates a 1502<br>transfer record]) --> Seq[Assign the next value from<br>the 1502 transfer sequence]
	Seq --> Fill[Set claim, filing reason,<br>document type and file details]
	Fill --> Rules{Claim id non-zero and<br>filing reason present?}
	Rules -->|No| Invalid([Rule errors surface;<br>save is refused])
	Rules -->|Yes| Ins[Insert the transfer row]
	Ins --> IRows{Rows affected = 1?}
	IRows -->|No| IErr([Add InsertError])
	IRows -->|Yes| Queue[Record joins the<br>unprocessed queue]
	Queue --> List[Transfer process lists rows<br>with a null processed date]
	List --> Send[File is transferred to DCBS]
	Send --> Mark[Set the processed date<br>and update the row]
	Mark --> URows{Rows affected = 1?}
	URows -->|No| UErr([Add UpdateError])
	URows -->|Yes| Done([Record leaves the queue])
```

## Failure and edge-case behavior

- The update statement is keyed on the sequence number only and does not carry the update number, so this object has no optimistic-concurrency protection on update and two callers marking the same record processed will both report success.
- The update targets the schema-qualified table name while the insert, delete, and list statements do not, so the object depends on both spellings resolving to the same table.*
- Both validation rules are registered under the same rule key, so registering the second rule can displace the first and only one of the two messages may reach the caller.
- Neither list query paginates or limits its result, so the unprocessed queue is materialized in full on every pass.*
- The sequence number is assigned during create rather than during insert, so a record that is created and then abandoned consumes a sequence value permanently.
- Insert failure clears and re-adds a single message key, so successive attempts overwrite rather than accumulate their diagnostics.

## Related documentation

- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)
- [SQL catalog](../sql/index.md)
- [Database tables](../database-tables.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts.

## Sources

- `Business\SAIF.Business.Claim\cls1502Transfer.vb`
