---
title: Prison code retrieval
summary: Exposes prison-code lookup values for claim-related prison association, including a synthetic blank selection option.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-07-30
library: SAIF.Business.View.Claim
reference_type: package
operation_id: OP-VC-08
trigger: Caller retrieves `clsPrisonCode` or `clsPrisonCodeCollection`
---

# Prison code retrieval

This operation exposes prison-code lookup values used for claim-related prison association fields, either as a single row by code or as the full selection list (with a synthetic blank option prepended).

| Field | Value |
| --- | --- |
| **Operation ID** | OP-VC-08 |
| **Trigger** | Caller retrieves `clsPrisonCode` (single row) or `clsPrisonCodeCollection` (selection list) |
| **Inputs** | Optional prison code |
| **Outputs** | One prison row, or the full prison-code list with a synthetic blank option |
| **Primary components** | `clsPrisonCodeCollection.Criteria.RetrieveSQL`, `clsPrisonCode.Criteria.RetrieveSQL` |
| **Entry point** | `Business\SAIF.Business.View.Claim\clsPrisonCodeCollection.vb`, `Business\SAIF.Business.View.Claim\clsPrisonCode.vb` |

## Steps

1. **Collection retrieval — union a synthetic blank row.** `clsPrisonCodeCollection.Criteria.RetrieveSQL` performs a `UNION` between a hard-coded blank row and persisted `CL_PRISON_CODE` rows ([BR-003](../business-rules.md#br-003-prison-lookup-prepends-a-synthetic-blank-choice), [SQL-010](../sql/SQL-010.md), [CL_PRISON_CODE](../database-tables.md#cl-prison-code)).
2. **Single-record retrieval — filter by code.** `clsPrisonCode` retrieval filters `CL_PRISON_CODE` by `CODE` ([SQL-011](../sql/SQL-011.md), [CL_PRISON_CODE](../database-tables.md#cl-prison-code)).
3. **Populate lookup objects.** The returned rows populate prison-code lookup objects for the caller.

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start([Caller requests prison codes]) --> Which{Single code or full list?}
	Which -->|Single code| Filter[Filter CL_PRISON_CODE by CODE]
	Which -->|Full list| Union[Union synthetic blank row<br>with CL_PRISON_CODE rows]
	Filter --> Done([Return prison-code lookup object(s)])
	Union --> Done
```

## Failure and edge-case behavior

- The prison-code collection injects a synthetic blank row (code `00`, display `<blank>`) that does not correspond to a persisted database record, so consumers that treat all rows as real prisons must account for it.

## Related documentation

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

## Sources

- `Business\SAIF.Business.View.Claim\clsPrisonCode.vb`
- `Business\SAIF.Business.View.Claim\clsPrisonCodeCollection.vb`
