> ## Documentation Index
> Fetch the complete documentation index at: https://docs.silnahealth.com/llms.txt
> Use this file to discover all available pages before exploring further.

# QA Testing Guide

Use this guide to test your integration with the Silna Benefits Check API in our QA environment.
By setting specific **member numbers** on a patient plan, you can control exactly what the benefits check returns (for example, different insurance types, authorization requirements, referral requirements, visit limits, and rejection scenarios) without hitting real payors.
In order to see authorization requirements, referral requirements, and visit limits, you also need to be using a benefits check template with these features enabled. Please reach out to your Silna contact for assistance if you need your template updated.

<Note>
  Note that this currently only works with our Aetna (018f7dfa-3e85-7f38-a0fe-71a9bf6a64c2) Payor in QA and code 11 (Commercial). Other codes and payors are a work in progress!
</Note>

## How It Works

In our QA environment, every benefits check request is intercepted and returns a **synthetic response** based on the patient's **member number**. No real payor calls are made. This lets you:

* Test your integration against realistic benefit data for a Commercial plan
* Simulate authorization requirements, referral requirements, and visit limits

The workflow is the same as production:

1. Create a patient plan with a specially formatted member number
2. [Create a benefits check](/api-reference/v1benefitscheckresource/create-benefits-check) to trigger the check
3. [Get the benefits check](/api-reference/v2benefitscheckresource/get-benefits-check-v2) to retrieve results
4. Poll until `status` is `COMPLETE`

## Member Number Format

The member number has three parts:

```
A[FLAGS][INSURANCE_CODE]
```

| Part               | Description                                                                                                                                                    | Required |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| **Prefix**         | Always `A`                                                                                                                                                     | Yes      |
| **Flags**          | Optional keywords that toggle specific behaviors (see [Requirement Flags](#requirement-flags)). Can include filler characters like `_` or `0` for readability. | No       |
| **Insurance Code** | Last two characters — a two-digit code that determines the insurance type and plan data (see [Insurance Type Codes](#insurance-type-codes))                    | Yes      |

**Examples:**

| Member Number                 | Meaning                                     |
| ----------------------------- | ------------------------------------------- |
| `ATEST00000011`               | Commercial plan, no special requirements    |
| `A_AUTH_REQ_011`              | Commercial plan with authorization required |
| `A_REF_REQ_011`               | Commercial plan with referral required      |
| `A_VISIT_REQ_011`             | Commercial plan with visit limits           |
| `AAUTH_REQREF_REQVISIT_REQ11` | Commercial plan with all three requirements |

## Quick Start

### Step 1 — Create a patient plan with a test member number

Set the member number on the patient plan to control what the benefits check returns. For a basic Commercial plan test:

```
Member Number: ATEST00000011
```

### Step 2: Trigger a benefits check

Use the [Create Benefits Check API](/api-reference/v1benefitscheckresource/create-benefits-check):

```json theme={null}
{
  "patient_plan_id": "<your-patient-plan-uuid>",
  "specialties": ["PHYSICAL_THERAPY"]
}
```

**Response (201):**

```json theme={null}
{
  "benefits_check_ids": ["<benefits-check-uuid>"]
}
```

### Step 3: Retrieve the results

Use the [Get Benefits Check V2 API](/api-reference/v2benefitscheckresource/get-benefits-check-v2) with the returned ID.

Poll until `status` is `COMPLETE`. The benefits check typically processes within a few seconds.

## Insurance Type Codes

The **last two characters** of the member number select the insurance type and plan data returned. Currently only code `11` (Commercial) is supported.

| Code | Insurance Type | Plan Details                                                                                                                                                                                                                                                                                        |
| ---- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `11` | **Commercial** | Aetna-style Open Access MC plan. Individual deductible \$3,500 / \$7,000 OON. Family deductible \$10,000 / \$14,000 OON. Individual OOP \$5,500 / \$13,000 OON. Family OOP \$16,000 / \$26,000 OON. 10% coinsurance in-network, 40% out-of-network. \$0 copay. Plan dates 2025-01-01 to 2025-12-31. |

### Fields returned

Code 11 populates these **top-level** response fields:

* `eligibility_status` → `ELIGIBLE`
* `plan_start_date` → `2025-01-01`
* `plan_end_date` → `2025-12-31`
* `plan_type` → `Open Access MC`
* `insurance_type` → `COMMERCIAL`

And these **specialty-level** fields (inside `specialty_fields`):

| Field                                 | Value                      |
| ------------------------------------- | -------------------------- |
| `copay_fields`                        | \$0                        |
| `coinsurance_fields`                  | 10% IN / 40% OON           |
| `deductible.individual.amount`        | \$3,500 IN / \$7,000 OON   |
| `deductible.individual.amount_met`    | \$83.12 IN / \$0.00 OON    |
| `deductible.family.amount`            | \$10,000 IN / \$14,000 OON |
| `deductible.family.amount_met`        | \$8,500 IN / \$14,000 OON  |
| `out_of_pocket.individual.amount`     | \$5,500 IN / \$13,000 OON  |
| `out_of_pocket.individual.amount_met` | \$83.12 IN / \$0.00 OON    |
| `out_of_pocket.family.amount`         | \$16,000 IN / \$26,000 OON |
| `out_of_pocket.family.amount_met`     | \$12,000 IN / \$26,000 OON |

*IN = in-network, OON = out-of-network*

## Requirement Flags

Include these keywords anywhere in the **middle** of the member number (between the `A` prefix and the two-digit insurance code) to toggle specific requirements. You can combine multiple flags in a single member number.

| Flag        | Effect When Present                                                       | Effect When Absent              |
| ----------- | ------------------------------------------------------------------------- | ------------------------------- |
| `AUTH_REQ`  | Authorization required = **yes**                                          | Authorization required = **no** |
| `REF_REQ`   | Referral required = **yes**                                               | Referral required = **no**      |
| `VISIT_REQ` | Visit limit = **yes**, visit limit quantity = **60**, visits used = **5** | Visit limit = **no**            |

### How flags appear in the V2 response

**`AUTH_REQ`** populates `authorization_requirements`:

```json theme={null}
"authorization_requirements": [
  {
    "value": true,
    "modifier": { ... }
  }
]
```

**`REF_REQ`** populates `referral_requirements`:

```json theme={null}
"referral_requirements": [
  {
    "value": true,
    "modifier": { ... }
  }
]
```

**`VISIT_REQ`** populates `visit_limits`:

```json theme={null}
"visit_limits": [
  {
    "value": 60,
    "modifier": { ... }
  }
]
```

With `visits_used` available as a separate field on the response.

### Combining flags

Flags can be combined freely. For example, `AAUTH_REQREF_REQVISIT_REQ11` enables all three on a Commercial plan.

## Complete Example Responses

All examples below show V2 responses from [Get Benefits Check V2](/api-reference/v2benefitscheckresource/get-benefits-check-v2).

### Commercial plan with all requirement flags

**Member Number:** `AAUTH_REQREF_REQVISIT_REQ11`

```json theme={null}
{
  "id": "...",
  "status": "COMPLETE",
  "eligibility_status": "ELIGIBLE",
  "insurance_type": "COMMERCIAL",
  "network_status": "IN_NETWORK",
  "plan_type": "Open Access MC",
  "plan_start_date": "2025-01-01",
  "plan_end_date": "2025-12-31",
  "patient_plan_id": "...",
  "patient_id": "...",
  "provider_id": "...",
  "date_verified": "...",
  "created_at": "...",
  "specialty_fields": [
    {
      "specialty": "PHYSICAL_THERAPY",
      "authorization_requirements": [
        {
          "value": true,
          "modifier": {
            "payor_name": null,
            "timing": null,
            "treatment_codes": [],
            "places_of_service": [],
            "diagnosis_codes": []
          }
        }
      ],
      "referral_requirements": [
        {
          "value": true,
          "modifier": {
            "treatment_codes": [],
            "places_of_service": []
          }
        }
      ],
      "visit_limits": [
        {
          "value": 60,
          "modifier": {
            "treatment_codes": [],
            "places_of_service": [],
            "specialties": [],
            "timing": null
          }
        }
      ],
      "copay_fields": [
        {
          "value": 0,
          "modifier": null
        }
      ],
      "coinsurance_fields": [
        {
          "value": 10,
          "modifier": null
        }
      ],
      "deductible": {
        "individual": {
          "amount": { "value": 3500 },
          "amount_met": { "value": 3416.88 }
        },
        "family": {
          "amount": { "value": 10000 },
          "amount_met": { "value": 8500 }
        }
      },
      "out_of_pocket": {
        "individual": {
          "amount": { "value": 5500 },
          "amount_met": { "value": 5416.88 }
        },
        "family": {
          "amount": { "value": 16000 },
          "amount_met": { "value": 12000 }
        }
      },
      "dollar_limits": [],
      "exclusions": [],
      "reimbursement_rate": null,
      "medicare_dollars_used": null,
      "exclusions_and_limitations": null,
      "patient_cost_estimates": []
    }
  ]
}
```

### Commercial plan with no flags

**Member Number:** `ATEST00000011`

```json theme={null}
{
  "id": "...",
  "status": "COMPLETE",
  "eligibility_status": "ELIGIBLE",
  "insurance_type": "COMMERCIAL",
  "plan_type": "Open Access MC",
  "plan_start_date": "2025-01-01",
  "plan_end_date": "2025-12-31",
  "specialty_fields": [
    {
      "specialty": "PHYSICAL_THERAPY",
      "authorization_requirements": [
        { "value": false, "modifier": null }
      ],
      "referral_requirements": [
        { "value": false, "modifier": null }
      ],
      "visit_limits": [],
      "copay_fields": [
        { "value": 0, "modifier": null }
      ],
      "coinsurance_fields": [
        { "value": 10, "modifier": null }
      ],
      "deductible": {
        "individual": {
          "amount": { "value": 3500 },
          "amount_met": { "value": 3416.88 }
        },
        "family": {
          "amount": { "value": 10000 },
          "amount_met": { "value": 8500 }
        }
      },
      "out_of_pocket": {
        "individual": {
          "amount": { "value": 5500 },
          "amount_met": { "value": 5416.88 }
        },
        "family": {
          "amount": { "value": 16000 },
          "amount_met": { "value": 12000 }
        }
      }
    }
  ]
}
```

## Member Number Cheat Sheet

Copy-paste these member numbers for common test scenarios:

### Eligible — Commercial (code `11`)

| Scenario            | Member Number                 |
| ------------------- | ----------------------------- |
| No requirements     | `ATEST00000011`               |
| Auth required       | `A_AUTH_REQ_011`              |
| Referral required   | `A_REF_REQ_011`               |
| Visit limits        | `A_VISIT_REQ_011`             |
| Auth + referral     | `AAUTH_REQREF_REQ11`          |
| Auth + visit limits | `AAUTH_REQVISIT_REQ11`        |
| All requirements    | `AAUTH_REQREF_REQVISIT_REQ11` |
