---
title: BillProcedure
summary: API reference for BillProcedure.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Domain
reference_type: package
---

# BillProcedure

`BillProcedure` wraps a single `CbpBillProcedure` entity from a `Bill.Procedures` collection and resolves its human-readable procedure description from the service-code reference data, feeding the `Core.Contracts.Claims.Bills.BillProcedure` contract that consumers outside the domain layer receive. `Bill.Procedures` is the only in-library constructor of this type.

## Purpose
- Resolves a bill procedure's short description from `IServiceCodeQueryProvider.ServiceCodeQueries`, so callers do not need a separate lookup against procedure-code reference data.
- Maps the underlying `CbpBillProcedure` entity to the `Core.Contracts.Claims.Bills.BillProcedure` contract, filling in the resolved description as part of that mapping.

## Context
- Namespace: `SAIF.Domain.Model.Claims.Bills`
- Assembly/package: `SAIF.Domain` (packaged in `SAIF.SAIFCode.Core`)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| BillProcedure (constructor) | `public BillProcedure(IBillQueryProvider provider, CbpBillProcedure data)` | Wraps `data` with the query provider needed to resolve the procedure's description. |
| BillProcedureContract | `public Core.Contracts.Claims.Bills.BillProcedure BillProcedureContract { get; }` | Maps this procedure to the `Core.Contracts.Claims.Bills.BillProcedure` contract, with `ProcedureDescription` set from `Description`; returns a blank contract when the procedure has no data. |
| Description | `public string Description { get; }` | The procedure's short description, looked up by `DataItem.ServiceCode` through `ServiceCodeQueries.GetProcedureCode`; empty when there is no service code or no matching procedure code. |

## Inherited public members

Members in this section are inherited from `DomainBase<TItem>` in `SAIF.Domain`. They are available on this type through inheritance (via the intermediate `DomainQueryBase<TItem,TQueryProvider>` base).

| Member | Signature | Purpose | Origin |
| --- | --- | --- | --- |
| HasData | `public virtual bool HasData { get; }` | Reports whether the wrapped `CbpBillProcedure` entity is present, evaluated as `!DataItem.IsNull()`. | `SAIF.Domain` — `DomainBase<TItem>` |

## Behavioral notes
- `Description` returns an empty string both when there is no service code on the procedure and when the code lookup finds no matching procedure code, so callers cannot distinguish "no code" from "unknown code" from this property alone*.

## Constraints and usage notes
- `BillProcedureContract` re-evaluates `Description` on every access rather than caching it, so repeated access re-queries `ServiceCodeQueries`*.

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

## Sources
- `Domain/SAIF.Domain/Model/Claims/Bills/BillProcedure.cs`
- `Domain/SAIF.Domain/DomainBase.cs`
- `Domain/SAIF.Domain/DomainQueryBase.cs`
