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

# Compliance

> Make sure every call follows the script.

<Note>
  **Compliance** is the page that tracks whether your team is saying the things they are required to say on every call. Define the phrases your team must say, then see who is on script, who is drifting, and where to coach next. Matching combines keywords and semantic intents, with breakdown per script, per agent, and per call.
</Note>

## Page anatomy

| Region                  | What you see                                                                         |
| ----------------------- | ------------------------------------------------------------------------------------ |
| Filter bar              | Date and hour controls, see [Overview](/en/Systems/Contact-Center-QA/Overview-Page). |
| KPI strip               | Four summary cards specific to script adherence.                                     |
| Per-script table        | The project's script library with how each script is performing.                     |
| Per-agent table         | Average adherence per agent, lowest first.                                           |
| Calls tabs card         | Two-tab card: **Needs attention** and **Top performers**.                            |
| Edit library dialog     | Opens from the per-script card header; admins use it to manage scripts.              |
| Per-call drill-in sheet | Slides in when you click a row in the calls tabs.                                    |

## KPI strip

Four cards reactive to the active filter window.

| KPI                   | Meaning                                                                |
| --------------------- | ---------------------------------------------------------------------- |
| **Overall pass rate** | Share of applicable script checks that passed across all scored calls. |
| **Average adherence** | Mean per-call score across applicable scripts.                         |
| **Calls scored**      | Count of calls scored in the window.                                   |
| **Lowest pass**       | The script with the worst pass rate in the active range.               |

## Per-script table

The project's script library. Each row shows:

| Column        | Notes                                                       |
| ------------- | ----------------------------------------------------------- |
| **Script**    | Script name (e.g. *Greeting*, *Agent identity disclosure*). |
| **Severity**  | **Low**, **Medium**, or **High**.                           |
| **In scope**  | Number of calls where the script's trigger applies.         |
| **Pass rate** | Share of in-scope calls that passed the script.             |
| **Avg score** | Mean phrase-level score across in-scope calls.              |

The card header carries an **Edit library** button that opens the script library dialog.

## Per-agent table

Shows average adherence per agent across the active filter window, sorted lowest first so coaching candidates are at the top. Same table mechanics as the per-script table (sortable columns, pagination at 10 rows by default).

## The Calls tabs card

A two-tab card titled with **Needs attention** as the default tab.

| Tab                 | What it shows                                                                                                                                                      |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Needs attention** | Calls where at least one required phrase was missed. Worst score first, up to 50 rows. The subtitle reads *Calls flagged for missed required phrases ({n} total)*. |
| **Top performers**  | Calls that passed every required phrase. Best score first, up to 50 rows. The subtitle reads *Calls that passed every required phrase ({n} total)*.                |

Both tabs reuse the same table.

| Column       | Sortable |
| ------------ | -------- |
| **Date**     | Yes      |
| **Agent**    | Yes      |
| **Duration** | Yes      |
| **Score**    | Yes      |

The pagination defaults to 10 rows per page, with options for 10, 25, 50.

When the tab has no rows, the empty state reads:

| Tab             | Empty message                                     |
| --------------- | ------------------------------------------------- |
| Needs attention | *All scored calls passed every required phrase.*  |
| Top performers  | *No calls passed every script in this range yet.* |

## The Edit library dialog

Opens from the **Edit library** button in the per-script card header. Admins can:

| Action                         | Behaviour                                                                                                                                                           |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Add script ▸ From template** | Drops in one of the four starter scripts: **Greeting**, **Agent identity disclosure**, **Data privacy prompt**, **Identity verification**.                          |
| **Add script ▸ Blank script**  | Creates a new empty script you can fill in.                                                                                                                         |
| Set **Severity**               | Per script: **Low**, **Medium**, **High**. Drives sort priority and the **Lowest pass** KPI.                                                                        |
| Set **Trigger**                | Per script. Either **Every call** or **Only when intent is in {list}**. The intent picker is multi-select and reuses the project's detected intents.                |
| Edit phrases                   | Each script has one or more phrases. Each phrase carries a label (EN and AR), keyword chips (EN and AR), an intent multi-select, and a **Required to pass** toggle. |
| Save changes                   | Saves the library to the project. The next score run picks up the new library.                                                                                      |
| Cancel                         | Closes the dialog without saving.                                                                                                                                   |

### Phrase matching rules

Each phrase matches via two independent signals. A phrase must carry at least one signal or the dialog rejects the save.

| Signal            | How it matches                                                                                                                                                              |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Keywords** (EN) | Word-bounded match: a chip *hello* matches "hello there" but not "othello".                                                                                                 |
| **Keywords** (AR) | Case-insensitive match across the chip list.                                                                                                                                |
| **Intents**       | The phrase matches if the call's detected intent is in the picked list. Reuses the [Intent Analysis](/en/Systems/Contact-Center-QA/Intent-Analysis) catalog. No extra cost. |

Limits: maximum 50 keywords per phrase, maximum 80 characters per keyword.

<Tip>
  Intent matching is great for phrases with many variants. Tie a Greeting script to the `greeting` intent and it catches every greeting variant the AI already labelled, in either language, with no keyword maintenance.
</Tip>

## The per-call drill-in sheet

Click any row in the Calls tabs card to open a side sheet.

| Section                           | What it shows                                                                                                                                                                                                   |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Session metadata card             | Date, agent, duration, sentiment, intents, words, file.                                                                                                                                                         |
| Inline audio player               | Built-in browser audio with play, pause, seek, and volume.                                                                                                                                                      |
| Transcription                     | The full transcript, RTL or LTR per language.                                                                                                                                                                   |
| Per-script breakdown              | One row per script: **Passed** / **Failed** / **Not in scope**.                                                                                                                                                 |
| Per-phrase rows under each script | Each row shows the phrase label, **Matched** or **Not found in transcript**, the matching signal (**Keyword EN**, **Keyword AR**, **Intent**), and a short transcript excerpt around the match when applicable. |

## CSV export

The page-level **Download CSV** button emits one row per (call × script × phrase) for the active filter window.

| Property | Notes                                                                                  |
| -------- | -------------------------------------------------------------------------------------- |
| Hard cap | 200,000 rows. Past the cap, you'll see a message asking you to narrow the date filter. |
| Encoding | UTF-8 with BOM (Arabic renders correctly in Excel).                                    |

## Common questions

<AccordionGroup>
  <Accordion title="The starter scripts use English phrases. Do they catch Arabic conversations?">
    Each starter has both EN and AR keyword chips, plus the `greeting` / `verification` etc. intents. They match Arabic out of the box.
  </Accordion>

  <Accordion title="Why do some calls show as Not in scope for a script?">
    Each script has a trigger. If the trigger does not apply to a call (for example, the script's intent list does not include the call's detected intent), the call is **Not in scope** for that script.
  </Accordion>

  <Accordion title="A call shows Failed for a phrase even though the agent said the right thing.">
    Two things to check. First, the call's intent may not be in the phrase's intent list. Second, the speech-to-text engine may have transcribed the phrase differently. Open the side sheet — the transcript shows you exactly what was recorded.
  </Accordion>

  <Accordion title="Can I make a phrase optional?">
    Yes. Toggle off **Required to pass** on the phrase. The phrase still appears in the side sheet's drill-in, but it does not affect the call's pass result.
  </Accordion>

  <Accordion title="The Edit library dialog will not save.">
    Most likely a phrase has no keyword and no intent. The dialog requires at least one matching signal per phrase. Add a keyword chip and try again.
  </Accordion>

  <Accordion title="What does Severity actually do?">
    It does not change the matching logic. It drives the sort order of the per-script table and the **Lowest pass** KPI, so a high-severity script with a 70% pass rate appears above a low-severity script with the same pass rate.
  </Accordion>

  <Accordion title="My Calls tabs cap at 50 rows but I have hundreds of failing calls.">
    The tab caps at 50 to keep the page snappy. Use the **Download CSV** export to get every (call × script × phrase) row for deeper analysis.
  </Accordion>

  <Accordion title="Will the LLM rubric score replace this whole flow?">
    No. The upcoming LLM rubric is an additional 0 to 100 score with a rationale, surfaced alongside the deterministic phrase scoring. Both signals will live in the same drill-in sheet.
  </Accordion>
</AccordionGroup>

## Where to go next

<CardGroup cols={2}>
  <Card title="Agent + Team Scorecards" icon="users" href="/en/Systems/Contact-Center-QA/Agent-Scorecards">Per-agent metrics across the contact center.</Card>
  <Card title="Intent Analysis" icon="lightbulb" href="/en/Systems/Contact-Center-QA/Intent-Analysis">Source the intent list used in script triggers.</Card>
  <Card title="Alerts" icon="bell" href="/en/Systems/Contact-Center-QA/Alerts">Threshold rules and rolling-baseline anomalies.</Card>
  <Card title="Goals" icon="target" href="/en/Systems/Contact-Center-QA/Goals">Project-wide KPI targets.</Card>
</CardGroup>
