---
title: "How to Test a Single Record in a Policy"
description: "Run a policy on one application to see which rules passed, which offers were created, and how the final decision was reached."
---

<div style="padding: 14px 16px; border: 0.5px solid #AFA9EC; border-radius: 12px; background: #EEEDFE; margin-bottom: 1.5rem;">
  <div style="display: flex; align-items: center; gap: 7px; margin-bottom: 8px;">
    <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
      <path d="M9 2L4 9h4l-1 5 5-7H8l1-5z" stroke="#7f77dd" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
    </svg>
    <span style="font-size: 11px; font-weight: 500; letter-spacing: 0.05em; text-transform: uppercase; color: #534AB7;">TL;DR</span>
  </div>
  <div style="font-size: 13px; color: #3C3489; line-height: 1.65;">
    When you need to know why one application got the decision it did, open the policy's <strong>Single Record Review</strong> tab. It runs the policy on that one application and shows the full path: which rules passed, which offers it qualified for, and the final call. Feed it the application whichever way is quickest: look it up by ID (<strong>Application Lookup</strong>), fill a structured form (<strong>Manual Inputs</strong>), or type a few values by hand (<strong>Quick Input</strong>). Submit, then read the result.
  </div>
</div>

## What is it?

Single Record Review (SRR) runs a policy on one application and shows you the outcome rule by rule: which segments and rules the application hit, which offers it qualified for, and the final decision. A [simulation](/user-guide/how-tos/run-a-simulation/) gives you population-level numbers; SRR shows you one application in full.

Reach for it when a simulation number looks off and you need to know why, or when someone asks you to explain a single decision. A risk reviewer, for example, can spot one approved application with a suspiciously high collections balance, paste its ID here, and watch the policy walk through it.

## How to Run a Single Record Review

<details open class="step">
<summary>

#### Open the tab and see where you land

</summary>

Open the policy you want to review and click its **Single Record Review** tab. What you see next depends on whether a default input mode has been set up.

**A default mode is set.** You land straight in that mode's input form, ready to fill in. It is one of three:

- **Application Lookup** - a single field asking for an ID (an application ID or account ID).
- **Manual Inputs (JSON)** - A set of grouped cards asking for the details needed to run the review.
- **Quick Input** - A list of every policy input, each with its own value field.

Usually the mode you land in is the one to use, since it is the one the policy owner set. To switch, open the <svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="vertical-align: -0.15em; display: inline;"><path d="M12 15a3 3 0 100-6 3 3 0 000 6z" stroke="currentColor" stroke-width="1.6"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 11-2.83 2.83l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 11-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 110-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 112.83-2.83l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 114 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 112.83 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 110 4h-.09a1.65 1.65 0 00-1.51 1z" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg> **Configure SRR Options** button, top right.

**No default mode is set.** You see three choice cards: **Application Lookup**, **Manual Inputs (JSON)**, and **Quick Input**. Click one to continue. A card marked **Need Setup** has to be configured before you can use it (see [Configuring SRR Options](#configuring-srr-options)); Quick Input is ready to use right away.

</details>

<details open class="step">
<summary>

#### Fill in the inputs

</summary>

Expand your mode for what to enter:

<div class="collapse-section" data-summary="Application Lookup: Enter an ID, the platform pulls the rest">

You get a single field, labeled with the configured ID column (for example, `applicant_table:application_id`). Type the application ID and submit.

If no application matches, the run returns an error naming the ID column and the value it looked for. Check the ID and try again.

</div>

<div class="collapse-section" data-summary="Manual Inputs (JSON): Fill a form the policy owner laid out">

You get a form the policy owner configured, so its cards and fields vary by policy. Fields are grouped into named cards, such as *Loan Details* and *Applicant*.

A card backed by a data table also lets you pick a row from the Data Lake to auto-fill that card's values.

</div>

<div class="collapse-section" data-summary="Quick Input: Type in the values">

You get one field per policy input. Each field's placeholder shows the format it expects:

| Input type | Placeholder |
|---|---|
| Single value | *Enter an integer value e.g. 10000*, *Enter a string value e.g. "Arizona"* |
| List of values | *Enter integer values as list e.g. [10000, 150000]* |

For a list input, enter the values in brackets, exactly as the placeholder shows.

</div>

</details>

<details open class="step">
<summary>

#### Submit

</summary>

Click the run button at the bottom. Its label depends on the mode:

| Mode | Button label |
|---|---|
| Quick Input | **Submit & Review** |
| Application Lookup | **Review Application** |
| Manual Inputs (JSON) | **Run Manual Review** |

The button shows **Reviewing** while the policy runs. To try a variation, change an input and submit again.

</details>

## Reading the output

Once the run finishes, the result appears below the input form in two tabs.

### Decision Flow Evaluation

At the top is a short summary of the run: which offer matched, which decision was reached, and how long it took.

Below the summary, what you see depends on the policy:

- Offer-based policies show a table of eligible offers, one row each. Columns cover the product-config values you defined (loan amount, rate, term, and so on), the **Decision Path**, the **Decision**, and, if offer display is configured, whether the offer was **Displayed**. Click a row to expand the block-by-block graph for that offer.
- Policies that do not produce offers show a single **Execution Flow** card with the same graph.

In either graph, each block, segment, and rule shows its result. To find out why a rule failed/passed, click its node to see the inputs, outputs, and definition behind it.

### Result Data

The full row-level output: every input column, derived variable, strategy output, and the final decision. From the grid toolbar you can filter and sort columns, drag headers to reorder them, download as **CSV** or **Excel**, reset the view with the undo icon, or open the **Column Chooser** to show or hide columns.

## Configuring SRR Options

Click the <svg width="14" height="14" viewBox="0 0 24 24" fill="none" style="vertical-align: -0.15em; display: inline;"><path d="M12 15a3 3 0 100-6 3 3 0 000 6z" stroke="currentColor" stroke-width="1.6"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 11-2.83 2.83l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 11-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 110-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 112.83-2.83l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 114 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 112.83 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 110 4h-.09a1.65 1.65 0 00-1.51 1z" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg> **Configure SRR Options** icon at the top of the input card to open the dialog.

Each mode card shows a status badge: Selected for the current default, Ready once it is configured, and Need Setup until then. Quick Input is always Ready.

Set up whichever modes you want:

| Mode | What to configure |
|---|---|
| Application Lookup | The input table and column that hold the application ID. Only columns that map one-to-one to the application are offered. |
| Manual Inputs (JSON) | The form layout, as a JSON array of sections (see below). |
| Quick Input | Nothing. It works as-is. |

Then pick the card users should land on first and click **Save Default Mode**.

### Manual Inputs JSON structure

The config is an array of top-level sections. Each section groups related fields into one or more sub-groups under `sections`, and each sub-group lists its fields in `display_columns`, keyed by `table.column`.

A field takes a `name` (the label the underwriter sees) and a `format` (a Python format string, for example `"${:,.0f}"` for currency or `"{}"` for the raw value):

```json
{
  "title": "Loan Details",
  "sections": [
    {
      "title": "None",
      "display_columns": {
        "application.requested_amount": { "name": "Requested Amount", "format": "${:,.0f}" },
        "application.term":             { "name": "Term (months)",    "format": "{:.0f}" }
      }
    }
  ]
}
```

That renders one card, *Loan Details*, with two fields the underwriter types in.

There are two kinds of top-level section:

<table class="attr-table">
  <thead>
    <tr>
      <th style="width: 26%;">Section type</th>
      <th>What it does</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="field-cell">Manual-entry (for example, "Loan Details")</td>
      <td>Fields the underwriter fills by hand. Defined with <code>title</code> and <code>display_columns</code> only.</td>
    </tr>
    <tr>
      <td class="field-cell">Data-table (any title)</td>
      <td>Lets the underwriter pick a row from the Data Lake to fill the section. Adds a <code>primary_table</code> (the source table) and a <code>type</code> object describing the selectable values.</td>
    </tr>
  </tbody>
</table>

Each entry in the `type` object takes:

<table class="attr-table">
  <thead>
    <tr>
      <th style="width: 26%;">Key</th>
      <th>Meaning</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="field-cell">definition</td>
      <td>A filter of the form <code>table.column = value</code> (for example, <code>applicant.borrower_description = 'Primary'</code>). This value is fed into the policy along with the selected row.</td>
    </tr>
    <tr>
      <td class="field-cell">is_optional</td>
      <td><code>false</code> requires the selection; <code>true</code> makes it optional (for example, a co-borrower).</td>
    </tr>
  </tbody>
</table>

Here a data-table section lets the underwriter pick an applicant row, once as the required primary borrower and again as an optional co-borrower:

```json
{
  "title": "Applicant",
  "primary_table": "applicant",
  "type": {
    "Primary":     { "definition": "applicant.borrower_description = 'Primary'",     "is_optional": false },
    "Co-Borrower": { "definition": "applicant.borrower_description = 'Co-borrower'", "is_optional": true }
  },
  "sections": [
    {
      "title": "None",
      "display_columns": {
        "applicant.income": { "name": "Monthly Income", "format": "${:,.0f}" }
      }
    }
  ]
}
```

:::note
Every column the policy requires must appear in the config, grouped under the table it belongs to. In the config dialog, click **More info** to open a side panel listing the required columns for the current policy, sorted by table, so you can see what still needs to be covered.
:::

## When to use Single Record Review vs a simulation

| Use SRR when | Use a simulation when |
|---|---|
| You want to debug one application end to end | You want population metrics (approval rate, KS, score distribution) |
| You need to explain why one application got the decision it did | You are checking the policy against a threshold across many records |
| You are iterating on a single edge case | You are preparing evidence for an Approval Request |

You can run both on the same policy.

## What's next

- [Run a Simulation](/user-guide/how-tos/run-a-simulation/) to test the policy across a whole population.
- [Approve an Object](/user-guide/how-tos/approve-an-object/) once SRR confirms the policy behaves as designed.
