# PQL Framework (region-agnostic)

The shared model contract. Regions tune thresholds and data sources; they do **not** change the
shape (two axes, three tiers, priority floors, guardrails).

> Supersedes the earlier skeleton in [`legacy-ops-framework-skeleton.md`](legacy-ops-framework-skeleton.md).

## Two axes

### Axis A — Account Fit: "should a human spend time on this account?"
| Level | Meaning |
|-------|---------|
| **High** | Corporate / AI-matched domain (enrichment), or strong account segmentation. |
| **Unknown** | Fit not yet determined (enrichment not run / ambiguous domain). Never auto-handoff. |
| **Low** | Free-email / student / individual. Default → **suppress**. *Region-tunable* (see below): where free-email is common among real builders, suppress only when behavior is thin; route free-email + real behavior to a **verify-identity** queue instead of discarding. |

### Axis B — Product & Commercial Signal: "is the behavior meaningful?"
Additive sub-score from three groups (each capped), then bucketed into **Strong / Moderate / Early**.
Region files give the exact weights; the *ranking* is fixed:

**Commercial intent** (import > spending-limit > card) · **Workload intent** (QPS, DDL, sustained
logs, active days) · **Activation floor** (first query; cluster-created is near-noise).

## Tiering matrix

```
              Signal Strong         Signal Moderate        Signal Early
Fit High      P0 handoff            P1 sales_nurture       P2 usage_activation
Fit Unknown   P1 enrich_review      P1 enrich_review       P2 fit_enrichment
Fit Low       SUPPRESS*             SUPPRESS*              SUPPRESS
```

- **P0** = hand to regional follow-up now.
- **P1** = high intent; nurture and/or enrich fit before/with handoff.
- **P2** = monitor / automated nurture.
- **\*** Region-tunable: a region may route Fit-Low + meaningful behavior to **P2 verify-identity**
  instead of SUPPRESS, so real builders on personal email aren't discarded. APAC does this (it
  rescues ~1,046 import-driven accounts); EMEA hard-suppresses. The *shape* is unchanged — only the
  Fit-Low policy differs per region.

## Priority floors (NULL-safe, raise-only — never demote)

Applied *after* scoring. A floor can only raise a tier:
- **Recent import (≤7d)** AND not-connected → guaranteed **≥ P1**.
- **Card on file** AND not-connected → guaranteed **≥ P1**.
- **Spending-limit raised (≤30d)** AND not-connected → guaranteed **≥ P1** *(🟡 v1-planned signal — see [`aha-moments.md`](aha-moments.md); floor activates once the signal is wired)*.
- Floors do **not** apply to unverified Fit-Low (free-email) accounts — those stay in verify-identity.
- Connected guard everywhere: `COALESCE(track_step, 0) <> 2` (don't re-surface human-connected accounts).

## Guardrails (do not violate)

- Payment method **alone** is not P0. Premium **alone** is not P0/P1.
- Missing data is **not** a negative signal (route to enrich, don't demote).
- High-usage **non-ICP** (Fit Low) is **suppressed**, not promoted.
- **Import always outranks premium.**

## Operating loop

Daily queue (P0/P1) → regional follow-up → CRM outcome + `track_step` write-back → weekly trend +
definition audit → feed acquisition/product-ops. The write-back is what makes suppression and
PQL→SQL measurement work; without it the queue degrades. See
[`delivery-architecture.md`](delivery-architecture.md).
