# APAC PQL v1 — model spec

Direct-to-v1 Fit × Signal model for **India + APAC-Others** (excludes **CN and JP** this round).
Inherits the `universal/` framework; re-weighted for APAC behavior. Runnable scoring:
[`apac-pql-v1.sql`](apac-pql-v1.sql).

## What's different about APAC (data-driven, not assumed)

Measured on the live global view (`vw_pql_candidate_facts`, 38,429 in-scope tenants — see
[`reference/apac-journey-reference.md`](reference/apac-journey-reference.md)):

1. **Cluster creation is noise (~92% do it)** → weight `+2` (floor only). EMEA awards it real points.
2. **`first_query` is the real activation gate** (42% India / 55% Others) → it's the activation floor.
3. **Scarce = valuable:** import (~1.4k), card (743), `logs≥1000` (~14). A usage-only P0 gate would
   match ~14 accounts; **P0 must be import/card/fit-driven, not log-volume-driven.**
4. **Free-email is everywhere among real APAC users.** A strict "free-email → suppress" rule
   (as in EMEA) discards **~1,046 import-driven accounts**. APAC override: free-email + real behavior
   → **P2 `verify_identity_low_fit`** (lightweight check), not hard-suppress. Only free-email +
   no-behavior is suppressed.
5. **Fit enrichment is 0% populated today** → no account can reach Fit High → **P0 = 0 until
   enrichment lands.** This is the #1 blocker, not a modeling choice.

## Axis A — Account Fit

| Level | How (today) | Score |
|-------|-------------|-------|
| **High** | `company_ai_category` = `ai_core` (+30) / `ai_related` (+20) | ≥15 → High |
| **Unknown** | corporate domain heuristic (+5), institution/edu (+8), ambiguous (+3) | 1–14 → Unknown |
| **Low** | free-email / individual / null domain | 0 → Low |

> Today `company_ai_category` is NULL for 100% of APAC, so the bulk lands **Unknown** and P0 is
> empty. The free-email list and edu detection are in the SQL `params` CTE.

## Axis B — Signal sub-score (Commercial + Workload + Activation)

| Group | Signal | Weight | Live today? |
|-------|--------|--------|-------------|
| Commercial (cap 50) | import completed | +30 | ✅ live |
| | import attempted | +12 | ✅ live |
| | spending-limit raised ≤30d / older | +25 / +10 | 🟡 v1-planned (EMEA not started) |
| | card on file | +20 | ✅ live |
| Workload (cap 40, ×1.2 velocity) | QPS ≥1 / >0 | +25 / +12 | ❌ blocked-external (Clinic API) |
| | first DDL ≤30d | +15 | ❌ blocked-external (O11Y) |
| | logs_28d ≥1000 / ≥100 | +20 / +10 | ✅ live |
| | active_days_28d ≥10 | +10 | ✅ live |
| | cluster_count ≥3 | +8 | ✅ live |
| Activation (cap 10) | first query | +8 | ✅ live |
| | cluster created only | +2 | ✅ live |

**Velocity** ×1.2 on workload when `logs_7d / (logs_28d/4) > 1.5`.
**Signal level:** Strong ≥40 · Moderate 18–39 · Early <18 (tune after first run).

## Tiering matrix (APAC)

```
              Signal Strong            Signal Moderate          Signal Early
Fit High      P0 apac_handoff          P1 apac_sales_nurture    P2 usage_activation
Fit Unknown   P1 apac_enrich_review    P1 apac_enrich_review    P2 fit_enrichment
Fit Low       P2 verify_identity       P2 verify_identity       SUPPRESS excluded_low_fit
```

**Priority floors** (NULL-safe, raise-only, **not** applied to unverified free-email): recent import
≤7d, card on file, or spending-limit ≤30d + not-connected → guaranteed ≥ P1.
Connected guard: `COALESCE(track_step,0) <> 2`. **Import always outranks premium.**

## Current output (live, today)

| Tier | n | Detail |
|------|---|--------|
| **P0** | **0** | blocked on fit enrichment |
| **P1** | **459** | 180 Strong (175 import) + 279 Moderate (146 card) — the actionable queue now |
| **P2** | 6,004 | 3,437 Unknown-Early nurture + 2,567 verify-identity (incl. 1,046 import-driven saved from suppression) |
| SUPPRESS | 31,966 | free-email, no behavior |

**Latent P0 pool** = 180 (Strong-signal, non-free-email) — these convert to P0/P1 the moment fit
enrichment is wired. That single upstream ask unlocks the whole top of the funnel.

## Per-market routing (ASK to confirm)
Same matrix, but SLA/thresholds tuned: **India** (high volume, ~1% card, 42% query) vs
**APAC-Others** (~3% card, 55% query). Japan staged for a later round.
