← всі звіти · canonical-mp-schema.md

type: schema parent: media-planner name: Canonical Media Plan Schema (v1.0.0) slug: canonical-mp-schema status: ready created: 2026-05-05 last_updated: 2026-05-05 sources:


Canonical Media Plan Schema v1.0.0

Single-source-of-truth опис структури медіапланів Deltamedical після deep-parse двох еталонних XLSX (Menopace + Affida MP 2026). Призначений для AI-генератора у mp-creation.

TL;DR

1. Загальна архітектура головного листа

┌─────────────────────────────────────────────────────────────────┐
│ HEADER ZONE (rows 1-13)                                         │
│   - Client/Project/Period/Geo (col B+D)                         │
│   - Tax multipliers (col D): Курс USD, НДС, ЦПХ, ФОП            │
│   - Channel rollup table (TOTAL BUDGET + 7 channel rows)        │
│   - Month header F-Q ( JAN plan ... DEC plan), R = annual total │
├─────────────────────────────────────────────────────────────────┤
│ KPI SUMMARY BLOCKS (rows 15-57)                                 │
│   ▸ Reach / Views   (header row + ~10 rollup rows)              │
│   ▸ Clicks          (header row + ~13 rollup rows)              │
│   ▸ Impressions     (header row + ~13 rollup rows)              │
├─────────────────────────────────────────────────────────────────┤
│ CHANNEL DETAIL SECTIONS (rows 60-235)                           │
│   ▸ PAID SEARCH  (4 sub-blocks × 7 rows = 28 rows)              │
│   ▸ META         (6 sub-blocks × 10 rows = 60 rows)             │
│   ▸ Google YT    (4 sub-blocks: 2×10 + 2×7 = 34 rows)           │
│   ▸ GDN          (2 sub-blocks × ~10 rows = 20 rows)            │
│   ▸ BLOGGERS     (2 sub-blocks × 4 rows = 8 rows)               │
│   ▸ SERVICES     (1 sub-block × 8 rows)                         │
├─────────────────────────────────────────────────────────────────┤
│ FOOTER NOTES (optional, free-text rows after 230)               │
└─────────────────────────────────────────────────────────────────┘

Загальні розміри: 235 рядків × 37 колонок (Menopace), 226 × 37 (Affida).

2. HEADER zone — метадані + tax block

Поле Menopace cell Affida cell Обов'язковість Приклад значення
Client B3 B1 required "Client: Delta Medical"
Period D3 D1 required "Period: 2026"
Project (brand) B5 B2 required "Project: Menopace" / "Project: Affida"
Geo D5 D2 required "UA"
Курс USD D7 D4 required 0 (за замовчуванням, бо все вже у UAH)
НДС D8 D5 required 1.2
Налог ЦПХ D9 D6 required 1.55
Налог ФОП D10 D7 required 1.06

Critical: НДС ($D$8 у Menopace, $D$5 у Affida) використовується в кожній формулі бюджету через absolute reference. AI-генератор має зберігати цю $-anchor.

Місячна шапка

3. SUMMARY top table — channel rollup

8 фіксованих рядків (одразу після month-header):

slug Label Формула pattern
total_budget TOTAL BUDGET =SUM(F<rollup_rows>,)
google_search Google Search (пошукова) =SUM(F<budget_rows_PAID_SEARCH>)
meta_fb_inst Meta FB/INST =SUM(F<budget_rows_META>)
google_youtube Google Youtube =SUM(F<budget_rows_Google_YT>)
services SERVICES (Viber, Tabletki...) =F<services_total>
bloggers BLOGGERS =SUM(F<bloggers_budgets>)
gdn_kms GDN/КМС =F<gdn_total>
total_google Total Google =SUM(google_search, google_youtube, gdn_kms)

Реальний приклад (Menopace, row 6, F стовпчик = JAN):

F6 = =SUM(F7,F8,F9,F10,F11,F12,)  → 698 289.6 UAH

4. KPI summary blocks (3 шт.)

Усі 3 блоки мають однакову структуру: label row (col F) → header row (місяці) → data rows (rollup).

4.1 Reach / Views (rows 15-25 Menopace, 12-22 Affida)

TOTAL REACH      Не поддается просчету × 12
PAID SEARCH      Не поддается просчету × 12
FB|INST 1..6     =SUM(<reach_row_of_META_subblock_N>)
BLOGGERS         =SUM(F<bloggers_reach_rows>)

"Не поддается просчету" — дослівний placeholder для випадків де reach не рахується (paid search). AI має підтримати.

4.2 Clicks (rows 27-41 / 24-38)

TOTAL CLICKS    =SUM(F<own_data_rows>)
PAID SEARCH     =SUM(<click_rows_of_PAID_SEARCH_subblocks>)
FB|INST 1..6    =F<click_row_of_META_subblock_N>
YT VIDEO a..d   =F<click_row_of_Google_YT_subblock_N>
GDN/КМС         =SUM(<click_rows_of_GDN_subblocks>)

4.3 Impressions (rows 43-57 / 40-54)

Те саме що Clicks але з Impressions row кожного під-блоку.

5. Channel detail sections (6 шт.)

5.1 PAID SEARCH — 4 sub-blocks × 7 rows

Sub-block назви (col C): Брендовые, Tематические, Конкуренты, Товарная (Медизин).

Структура одного sub-block:

Δrow B C D E (KPI) F (JAN) — приклад/формула
0 Adwords Search <name> Impressions =IFERROR(F<click>/F<ctr>,0)
1 Click input number (e.g. 7500)
2 CTR, % input percent (e.g. 0.22)
3 CPC CPC input UAH (e.g. 4)
4 CPM =IFERROR(F<budget>/(F<imp>/1000),0)
5 Креатив Коммент text
6 Бюджет UAH =F<cpc>*F<click>*$D$<nds>

5.2 META — 6 sub-blocks × 10 rows (one variant 9 rows)

Sub-block назви (col C): Взаємодія, Охватная (×2), Нативка, Специалисты+видео, Ремаркетинг.

Структура одного sub-block:

Δrow B E (KPI) F (приклад)
0 Facebook/Inst Impressions input OR =IFERROR(F<click>/F<ctr>,0) OR =F<reach>*F<frequency>
1 Click input OR =F<imp>*F<ctr>
2 CTR, % input percent
3 CPC input OR =IFERROR(F<budget>/F<click>,0)
4 CPM input OR =IFERROR(F<budget>/(F<imp>/1000)/1.2,0)
5 CPR =IFERROR(F<budget>/(F<reach>/1000),0)
6 Reach input OR =IFERROR(F<imp>/F<freq>,0)
7 Frequency input
8 Креатив Коммент text
9 Бюджет UAH =F<cpc>*F<click>*$D$<nds> OR =F<imp>/1000*F<cpm>*$D$<nds>

Variant: sub-block #5 (Специалисты+видео) має 9 рядків — у Menopace CPR row злитий. Треба підтримати обидва варіанти.

5.3 Google YT — 4 sub-blocks (2×10 In-Stream + 2×7 Bumper)

In-Stream (10 rows): View → Impressions → Click → CTR → CPV → View Rate → CPC → CPM → Креатив → Бюджет Bumper (7 rows): Impressions → Click → CTR → CPC → CPM → Креатив → Бюджет

Бюджет формули:

5.4 GDN — 2 sub-blocks × ~10 rows

Шаблон ідентичний META reach-сompatible підблоку.

5.5 BLOGGERS — 2 sub-blocks × 4 rows

Δrow B D E значення
0 Bloggers Гонорар Post input UAH (e.g. 53000 у Affida)
1 Reach (порожнє)
2 Коммент text (e.g. "patch")
3 Бюджет UAH =F<post>

5.6 SERVICES — 1 sub-block × 8 rows

Variable list of free-form services. У обох файлах:

ZAKUPKA Banner UAH 0
SSULOK         (commented)
Tabletki Video UAH 0
Production Article UAH 0
Article        (commented)
Production Video UAH 0
Viber CRM      (commented)
Бюджет UAH = SUM(F220,F222,F224,F226)*$D$<nds>

6. Tax / formatting conventions

Tax multipliers (house defaults, ідентичні в обох файлах)

Number formats (топ-5)

Fill colors

7. Допоміжні листи (Affida-only)

"Таблиця" (28 r × 17 c)

Простий plain-text grid: SKU × audience × month-budget. Без складних формул, лише =SUM(<col>2:<col>22) у нижньому row "Разом". Виглядає як робочий чорновик який Сергій + команда заповнюють перед мапингом у головний лист.

Recommendation: саме цей формат брати як input UI для AI-генератора — простіший за головну таблицю, achieves top-down логіку.

"Сводка ФБ" (25 r × 8 c)

Meta-only бюджети по аудиторіях × місяць з derived Reach. Working scratchpad для PPC-команди.

8. Differences Menopace vs Affida — топ-5

# Аспект Menopace Affida Чи структурний?
1 Header rows 3-13 (вищий блок з курсом і H1/H2 колонками) 1-10 (compressed) Структурний (генератор має toggle)
2 Annual columns R + S(H1) + T(H2) + U(year-cross) — 4 колонки Лише R Структурний (опціональний toggle)
3 Допоміжні листи 0 2 (Таблиця + Сводка ФБ) Brand-specific (Affida workflow)
4 Footer notes 2 текстові ноти 0 у головному листі Косметика
5 Sub-block назви/SKU "Менопейс Плюс", "Брюнетка" і т.д. "Афіда Плюс", "Афіда Макс з аргеніном", "Афіда пластир" Brand-specific (input variable)

Структурні invariants: 12 місяців F-Q, 6 секцій каналів у тому самому порядку, 19 під-блоків з тими самими row-count'ами, formula-skeletons byte-identical (з row-offset shift).

9. Channel taxonomy detected

Канал Sub-blocks у файлах Відповідник у playbook
Google Ads Search 4 (Brand/Тематичний/Конкурент/Shopping) ✅ Google Ads §1-4
Google Ads YouTube 4 (TrueView In-Stream ×2 + Bumper ×2) ✅ DV360 §1 (In-Stream) — але живе у Google Ads (не DV360) — quirk
Meta FB/Instagram 6 (Engagement/Reach×2/CPC/Specialists+Video/Remarketing) ✅ Meta §1-4
GDN/КМС 2 (Промо ×2) ✅ DV360 §3-4 (banner)
Bloggers 2 (Гонорар per Post) ✅ Bloggers §1
Services (offline-ish) 1 (Tabletki/Zakupka/Production/Viber CRM) ✅ Інше §1-3

Прогалини (не зустрілися ні в Menopace ні в Affida):

10. Рекомендації для mp-creation generator

Тримати rigid (не варіювати)

  1. Порядок 6 секцій каналів: PAID SEARCH → META → Google → GDN → BLOGGERS → SERVICES
  2. Послідовність KPI рядків в кожному типі sub-block (порушити = ламає всі формули CPM/CPC)
  3. Formula skeletons (особливо *$D$<nds> anchor)
  4. 12-місячний F-Q layout + R annual
  5. 4-tax-multiplier header

Варіювати (input-driven)

  1. К-сть під-блоків на секцію (зараз 4/6/4/2/2/1 фіксовано — додати/видалити sub-blocks)
  2. C-column targeting labels (audience names — brand-specific)
  3. Креатив/Коммент текст (AI пропонує, юзер edit)
  4. Toggle: H1/H2/Year-cross-check колонки (Menopace style ON / Affida style OFF)
  5. Toggle: aux sheets ("Таблиця" + "Сводка ФБ" як starting input UI vs тільки головний лист)

Min input для AI

Output pipeline

  1. Підняти template для кожної (channel, format) пари → визначити sub-block layout
  2. Заповнити input cells з юзерських значень
  3. Вставити формули з row-offset rewriting (якщо додано/видалено sub-blocks — всі references зсуваються)
  4. Перерахувати summary rollup formulas → нові адреси Бюджет-рядків
  5. Apply formatting (fills + number formats)
  6. Зберегти у SharePoint per project_path

Що ще треба ДО запуску генератора (gaps)

Cross-references