# Plantum Weekly — runbook

Дашборд `https://yahela-monetization.pages.dev/tools/plantum-weekly/` показывает KPI Plantum за прошлую ISO-неделю с WoW δ и 4-week трендом. Источник — Qonversion-Plantum-iOS MCP, проект `Plant`.

## Структура папки

```
tools/plantum-weekly/
├── index.html                    # self-contained dashboard (inlined JSON)
├── RUNBOOK.md                    # этот файл
├── data/
│   ├── raw/
│   │   ├── qonversion_YYYY-MM-DD.json   # сырой дамп Qonversion MCP
│   │   ├── tableau_plantum_monthly.csv  # Tableau Monthly Reports
│   │   ├── tableau_plantum_quarterly.csv# Tableau Quarterly Reports
│   │   └── tableau_ltv_daily.csv        # Tableau LTV (daily model)
│   ├── weekly/
│   │   └── YYYY-Www.json                 # weekly snapshot (Qonversion)
│   ├── monthly/
│   │   └── YYYY-MM.json                  # monthly snapshot (Tableau, по странам)
│   ├── quarterly/
│   │   └── YYYY-Q<n>.json                # quarterly snapshot (Tableau, ALL)
│   └── cohorts/
│       └── YYYY-Www.json                 # weekly cohort LTV-curves (D7→D420)
└── scripts/
    ├── aggregate.py              # qonversion raw → weekly snapshots
    ├── parse_tableau.py          # monthly CSV → monthly snapshots
    ├── parse_quarterly.py        # quarterly CSV → quarterly snapshots
    ├── parse_ltv_cohorts.py      # daily LTV CSV → weekly cohort curves
    └── build.py                  # все snapshots → index.html
```

## Что попадает в снапшот

Десять метрик из Qonversion (`get_analytics_chart`, environment=production, currency=USD):

| Code | Aggregation | Что значит |
|---|---|---|
| `proceeds` | sum за неделю | Revenue after refunds |
| `refunds` | sum | Возвраты (отрицательные) |
| `users-overview` | sum | Новые users |
| `free-trials` | sum | Новые триалы |
| `new-subscriptions` | sum | Новые paid subs |
| `active-subscriptions` | last day of week | Активных подписок на конец недели |
| `user-to-trial` | weighted avg (weight = users) | % новых users, начавших trial |
| `user-to-paid` | weighted avg | % users, ставших paid любым способом |
| `trial-to-paid` | weighted avg (weight = trials) | % триалов, ставших paid |
| `arpu` | weighted avg (weight = users) | $ per new user |
| `refund-rate` | weighted avg | % refunds от proceeds |

Trial-to-paid за последние 3–5 дней неполный (триал ещё идёт), поэтому WoW δ по этой метрике искажён в худшую сторону.

## Weekly-обновление (каждый понедельник)

```bash
cd /Users/a.yahela/AIBY/yahela-monetization/tools/plantum-weekly
```

1. **Снять свежий дамп из Qonversion.** Через Claude в этой папке:
   > Скачай свежий Qonversion-дамп Plantum за последние 28 дней (4 ISO-недели) и сохрани в `data/raw/qonversion_$(date +%F).json`. Чарты те же, что в текущем raw-файле.

   Клод вызовет 10 `get_analytics_chart` + `get_analytics_realtime` и заполнит JSON в формате существующего raw-файла.

2. **Снять свежие Tableau-выгрузки** (раз в месяц для monthly/quarterly, раз в неделю для LTV daily). Через Claude:
   > Скачай 3 view через `mcp__Tableau_MCP_Server__get-view-data` и перезапиши соответствующие raw-файлы:
   > - `9696d2fe-87f4-4604-9f7f-b4ce5fe2a557` → `data/raw/tableau_plantum_monthly.csv` (Monthly Reports / Plantum)
   > - `eaee3b7f-8caa-4ed3-b829-477ee37e8226` → `data/raw/tableau_plantum_quarterly.csv` (Quarterly Reports / Plantum)
   > - `3a37c0fc-8d71-4256-8d96-07736808ad3f` → `data/raw/tableau_ltv_daily.csv` (LTV daily model). Этот CSV >120k символов, режется на 80k-чанки через `python3 -c "print(open(path).read()[A:B])"`.

3. **Перегенерировать снапшоты:**
   ```bash
   python3 scripts/aggregate.py          # qonversion raw → data/weekly/YYYY-Www.json
   python3 scripts/parse_tableau.py      # monthly CSV  → data/monthly/YYYY-MM.json
   python3 scripts/parse_quarterly.py    # quarterly CSV → data/quarterly/YYYY-Q<n>.json
   python3 scripts/parse_ltv_cohorts.py  # daily LTV CSV → data/cohorts/YYYY-Www.json
   ```
   - `aggregate.py` бьёт qonversion-daily по ISO-неделям; неполные недели (< 7 дней) пропускает.
   - `parse_tableau.py` — русская локаль Tableau (`21 052` → 21052, `1,67` → 1.67).
   - `parse_quarterly.py` — то же, для квартальных.
   - `parse_ltv_cohorts.py` — англ. локаль (`1,202` thousand, `10,775.92` decimal), pivot long→wide по day_num ∈ {7,14,30,60,90,180,365,420}, weighted-avg LTV по `Trial users` weights в каждой ISO-неделе.

4. **Пересобрать дашборд:**
   ```bash
   python3 scripts/build.py
   ```
   Инлайнит weekly + monthly + quarterly + cohorts в `index.html`. Дашборд показывает 4 недели в тулбаре, последние 3 месяца в LTV-блоке, последние 3 quarter-а в Quarterly-таблице, последние 4 weekly cohorts в графике LTV-кривых.

5. **Задеплоить:**
   ```bash
   cd /Users/a.yahela/AIBY/yahela-monetization
   wrangler pages deploy --project-name yahela-monetization .
   ```

## Что было в фазе 2 (готово)

- **Tableau Plantum Monthly Reports** — view `9696d2fe-87f4-4604-9f7f-b4ce5fe2a557`. Месячный LTV / ARPU / CPI / ROAS / Installs / Trial→Paid CR / Active subs по странам (`ALL`, `United States`).

## Что было в фазе 3 (готово)

- **Tableau Plantum Quarterly Reports** — view `eaee3b7f-8caa-4ed3-b829-477ee37e8226`. Revenue / Marketing spend / Profit / Forecast ROAS по 3 последним кварталам, только `ALL`.
- **Tableau LTV (daily model)** — view `3a37c0fc-8d71-4256-8d96-07736808ad3f`. Pivot daily-cohort × day_num ∈ {7,14,30,60,90,180,365,420} → weekly cohort LTV curves. На дашборде — кривые последних 4 weekly cohorts (W15–W18), сплошная часть = Actual, пунктир = Predict.
- **AppsFlyer и Sentry OAuth URLs выданы** — после авторизации пользователем добавим installs/CPI/channels и crash-free % в фазе 4.

## Что добавится в фазе 4

- **AppsFlyer** — installs, mix по UA-каналам (Apple Search Ads / Meta / TikTok / organic), CPI по каналам. Требует OAuth (URL уже выдан).
- **Sentry** — crash-free users % за неделю, top issues, regression detection. Требует OAuth (URL уже выдан).
- **A/B-тесты из Amplitude** — pull chart URLs активных тестов, добавит секцию «Active tests» с дельтами и significance (Amplitude MCP пока нет, идём через chart URL → ручной pull).
- **LTV cohort kоhortable** — отдельный view `694cf493-99c9-4d29-b43f-a6c30b18c191` («LTV by First transaction dates») — если нужны кривые по transaction-cohort вместо install-cohort.

## Что добавится в фазе 5

- Scheduled remote agent на каждый понедельник 09:00 UTC — собирает дамп и деплоит автоматически.
- Slack-уведомление в `#mrkt_plantum` со сводкой WoW δ при готовности нового снапшота.

## Если что-то сломалось

- **Пустые карточки** — снапшоты не подгрузились. Проверь, что `data/weekly/*.json` существует и валидный JSON.
- **WoW δ = «—»** — есть всего один снапшот. Нормально для первой недели.
- **T→P подозрительно низкая** — последние дни недели имеют незакрытые триалы. Подожди неделю и сними снова.
- **MCP вернул пусто** — проверь environment=1 (production, не sandbox) и валидный диапазон from/to.
