---
title: Recoverable overpayment balance
summary: Compute the total recoverable overpayment balance outstanding for a worker.
status: draft
owner: SAIF.Core documentation team
last_reviewed: 2026-09-24
library: SAIF.Data
reference_type: package
operation_id: OP-SD-09
trigger: Caller requests a worker's recoverable overpayment balance.
---

# Recoverable overpayment balance

Compute the total recoverable overpayment balance outstanding for a worker.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-SD-09 |
| **Trigger** | Caller requests a worker's recoverable overpayment balance. |
| **Inputs** | Worker id |
| **Outputs** | decimal |
| **Primary components** | `OverpaymentQueryProvider.GetRecoverableBalance` |
| **Entry point** | `Data/SAIF.Data/Queries/OverpaymentQueryProvider.cs` |

## Steps

1. Query `Overpayment` (`CL_OVERPAYMENT`) for rows where the worker matches, `AmendedOverpaymentId == 0`, and status is in {"1","3"} ([SD-BR-021](../business-rules.md#sd-br-021-recoverable-balance-sums-outstanding-amount-for-non-amended-overpayments), [SQL-190](../sql/SQL-190-overpayment-query-provider-get-recoverable-balance.md)).
2. Sum `OutstandingAmount`.

## Process flow

The following diagram visualizes this operation's control flow.

```mermaid
flowchart TD
	Start(["Caller requests a worker's recoverable overpayment balance."]) --> S1["`OverpaymentQueryProvider.GetRecoverableBalance`"]
	S1 --> S2{"Rules satisfied?"}
	S2 -->|Yes| EndOk([Result returned])
	S2 -->|No| EndErr([Exception / empty result])
```

## Failure and edge-case behavior
- No matching rows: sum defaults to 0.

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


## Sources
- `Data/SAIF.Data/Queries/OverpaymentQueryProvider.cs`
- `Data/SAIF.Data/Queries/Claims/OverpaymentQueryProvider.cs:22`
