# AWS Activate Credit Program — EMEA Operating Brief (L2)

**Version:** 1.0  
**Region:** EMEA (pilot)  
**Program:** TiDB Cloud credits via AWS Activate Partner channel  
**Maturity target:** L2 — unified queue, RACI, SLA, template emails (TiDB + light internal ops UI)

---

## 1. Purpose

Replace ad-hoc handoffs (e.g. Partner Lead forwarding applications in chat) with a **single queue** on TiDB Cloud: every application has a status, owner, SLA, and audit trail.

Volume is low (single-digit applicants); optimize for **clarity and feasibility**, not throughput.

---

## 2. Roles and RACI

| Role | Person (example) | R | A | C | I |
|------|------------------|---|---|---|---|
| **Partner Lead** | Zeno | — | AWS policy / disputes | Program Ops | — |
| **Program Ops** | Hazel | Queue, review, approve/reject, close | Day-to-day program | Partner Lead, BizOps | SDR, Tech |
| **EMEA BizOps** | Regional BizOps | Apply credits in billing console | — | Program Ops | Tech |
| **EMEA SDR** | Regional SDR | `stalled` / signup follow-up | — | Program Ops | — |
| **EMEA Tech** | Regional Tech | — | — | — | Notified on `credited` |

**Hard rules**

- Partner Lead **does not** route individual applications to Program Ops (no “please forward to Hazel” in Slack).
- All applications enter via **AWS daily batch ingest** → `program_application` table.
- BizOps **must** click **Mark credited** in the ops UI after manual credit in billing console.

---

## 3. Status machine

Valid transitions (ops UI enforces these):

```
received → pending_signup | pending_review | rejected
pending_signup → pending_review | stalled | rejected
pending_review → approved | rejected
approved → credited
stalled → pending_signup | pending_review | rejected
(any terminal) rejected, credited — no further transitions
```

| Status | Meaning | Default owner (`assigned_to`) |
|--------|---------|--------------------------------|
| `received` | Ingested from AWS batch | `program-ops` |
| `pending_signup` | No `tenant_id` match yet | `program-ops` |
| `pending_review` | Tenant matched; org / AI review | `program-ops` |
| `approved` | Ready for credit grant | `emea-bizops` |
| `credited` | Credit applied and recorded | `program-ops` (close) |
| `rejected` | Policy decline | `program-ops` |
| `stalled` | SLA breached; needs escalation | `emea-sdr` |

---

## 4. SLA (internal)

| Stage | Target | Escalation |
|-------|--------|------------|
| `received` → first action | 1 business day | Auto `sla_due_at`; list shows overdue in red |
| `pending_signup` emails | Day 0, 1, 3 templates | Day 4+ → move to `stalled`, `assigned_to` = `emea-sdr` |
| `approved` → `credited` | 2 business days | Ping BizOps in `#emea-program-ops` |

Customer-facing copy: “We typically process Activate credits within a few business days after you register with the same email you used on AWS.”

---

## 5. Intake SOP (AWS daily batch)

1. **Source:** AWS submits applications to Partner Team daily (confirm exact delivery: shared mailbox / S3 / portal export).
2. **Drop zone:** `s3://…` or shared folder `AWS-Activate-EMEA/incoming/` — **one path only**.
3. **File format:** CSV with columns (minimum):  
   `external_ref`, `applicant_email`, `company_name`, `aws_submission_date`  
   Optional: `website`, `country`, `aws_account_id`
4. **Ingest:** Run daily (cron or manual):
   ```bash
   python EMEA/scripts/ingest_aws_activate_batch.py --csv path/to/batch.csv --actor ingest-cron
   ```
5. **Dedup:** `external_ref` unique; duplicates skipped and logged.
6. **Partner Lead:** CC’d on ingest failures only; **not** in the happy path.

---

## 6. Day-to-day runbook (Program Ops)

### New row in `received`

1. Open [Program Ops UI](../program-ops/README.md).
2. If applicant email matches existing tenant → **Match tenant** → `pending_review`.
3. Else → **Move to pending signup** → send **received_ack** email (button).
4. Set `entity_ai_category` if known; else leave null until review.

### `pending_signup`

- Send **signup_reminder_d1** / **d3** per schedule (buttons; logged in `program_application_event`).
- On signup (tenant appears in TiDB Cloud): match `tenant_id` → `pending_review`.

### `pending_review`

- Confirm company (not individual abuse, EMEA-eligible startup).
- Tag AI if applicable: `company_ai_core` | `company_ai_related` | `company_non_ai` | etc.
- **Approve** (set `credit_amount_usd`) or **Reject** (note reason).

### `approved`

- Handoff to BizOps (`assigned_to` = `emea-bizops`).
- BizOps applies credit in billing console, then **Mark credited** in UI (triggers Slack to Tech).

### `stalled`

- SDR personal outreach to complete signup; return to `pending_signup` or `pending_review` when resolved.

---

## 7. Email templates

See [email-templates/](email-templates/) — send via ops UI (logs `email_sent` event).  
Signup link must include: `utm_source=aws_activate&utm_medium=partner&utm_campaign=emea-activate`

---

## 8. Notifications

| Event | Channel | Audience |
|-------|---------|----------|
| `credited` | Slack webhook | `#emea-program-ops` (and Tech as configured) |
| SLA overdue | Ops UI highlight | Program Ops |
| Weekly metrics | SQL report | Program Ops + Partner Lead |

---

## 9. L2 acceptance checklist

See [AWS-Activate-L2-UAT-Checklist.md](AWS-Activate-L2-UAT-Checklist.md).

---

## 10. Out of scope (L2)

- HubSpot pipeline / dual write
- Customer self-service status portal
- Billing API auto-credit (L3)
- Global regions beyond EMEA

L3 backlog: [AWS-Activate-L3-Backlog.md](AWS-Activate-L3-Backlog.md).

---

## 11. Artifacts index

| Artifact | Path |
|----------|------|
| DDL + weekly SQL | [aws-activate-program.sql](aws-activate-program.sql) |
| Ingest script | [scripts/ingest_aws_activate_batch.py](scripts/ingest_aws_activate_batch.py) |
| Ops UI | [program-ops/](program-ops/) |
| Email templates | [email-templates/](email-templates/) |
| Sample CSV | [scripts/sample_aws_activate_batch.csv](scripts/sample_aws_activate_batch.csv) |
