# PRD v2: Affiliate-программа Obmenka **Версия:** 2.0 (финальная для согласования) **Дата:** 2026-05-16 **Автор:** AI assistant **Основано на:** - 3 deep-research отчётах: `docs/affiliate-research/01-crypto-exchanges.md`, `02-adjacent-industries.md`, `03-architecture-plan.md` - PRD v1: `docs/affiliate-prd-v1.md` - Критика v1: `docs/affiliate-prd-v1-critique.md` (19 правок применены) --- ## 1. Executive Summary (1 страница для руководителя) ### Что делаем Модуль партнёрской программы внутри CRM Obmenka. Партнёры (блогеры, TG-каналы) приводят клиентов и получают комиссию USDT с каждой их сделки. ### Базовая экономика - **Default ставка**: **0.3% от объёма сделки** в USDT-эквиваленте (≈30% от типичной нашей маржи 1%) - **Привязка**: 24 месяца после первой сделки клиента - **Min выплата**: 50 USDT, hold 7 дней, payout USDT-TRC20 - **Network fee удерживаем с партнёра** (~1.5 USDT/выплата) ### Critical compliance (TR) - **MVP запускаем ТОЛЬКО для не-турецких партнёров и не-турецкой аудитории** (русско/англо/немецкоязычные TG) - До получения CMB-лицензии или ясности с регулятором — без публичной TR-страницы - При TR-резиденте партнёре удерживаем 1% withholding tax (закон с 2025) ### Финансовая модель (6 мес) | Сценарий | Активн. партн. | Сделок | Profit | Партнёрам | Нам | |---|---|---|---|---|---| | Консерв. | 5 | 75 | $2 250 | $675 | **+$1 575** | | Целевой | 15 | 480 | $19 200 | $5 760 | **+$13 440** | | Стресс | 5 | 50 (часть и так наши) | $1 500 | $450 | **≈0** | ### Сроки - **E7.1 MVP**: 3–4 недели (single-level, manual everything) - **E7.2 расширение**: 2–3 недели (multi-level + 2FA + auto-payouts) ### KPI (реалистичные) - 3 мес: 5 партнёров, 5–8% сделок через них - 6 мес: 15 партнёров, 10–15% сделок через них - 12 мес: 20–25% сделок через них --- ## 2. Бизнес-цель и контекст ### Проблема Прямая реклама в Анталье в туристический сезон даёт CAC $30–100/клиент. Партнёрка платит **только за результат** — % от уже принесённого профита. ### Текущий стейт После E1–E6 у нас рабочая CRM с реальными сделками (151 в seed, 624 on-chain транзакции, 3 отделения в Анталье + онлайн). Партнёрка — естественное расширение. ### Конкурентный контекст - BestChange (агрегатор обменников): 30% Level 1 + 10% Level 2, lifetime, min $1 - Bybit: 30–50% от fee + 10% sub-override, daily payouts - Coinsfera (прямой конкурент в Стамбуле): partner есть, условия закрыты - Binance: закрыл TR retail referral в окт 2024 из-за MASAK ⚠ **Уроки:** TR-фактор важен. Платить от объёма прозрачнее чем от profit. --- ## 3. Модель вознаграждения ### 3.1. Default-модель (E7.1) ``` commission = deal.volume_usdt × 0.003 commission_capped = min(commission, deal.profit_usdt × 0.5) ``` где `volume_usdt = FX_to_USDT[give_asset] × give_amount`. **Объяснение для партнёра:** «Вы получаете 0.3% с каждого USDT-эквивалента приведённого клиента». **Почему 0.3% от volume, не 30% от profit:** - Прозрачно: партнёр заранее знает свою комиссию - Стандарт индустрии (BestChange, ChangeNOW, SimpleSwap — все от volume/fee) - При типичной марже 1% даёт нам ~70% профита, партнёру ~30% - Защита: cap `≤ 50% profit` — если markup случайно 0.2%, не платим больше 50% от того что заработали ### 3.2. Опциональные программы | Программа | Кому | Формула | |---|---|---| | `default` | Все | 0.3% volume, cap 50% profit | | `vip-profit-share` | По договорённости (крупные TG-каналы) | 30% от profit_usdt, cap 1% volume | | `fixed-per-deal` | Кампании ситуативные | Фикс N USDT за каждую сделку клиента | Программа задаётся при создании партнёра, может меняться admin'ом. Изменение применяется только к **будущим** сделкам. ### 3.3. Multi-level (только E7.2) | Уровень | Default | VIP | |---|---|---| | Tier 1 (прямой партнёр) | 0.3% volume | По договору | | Tier 2 (партнёр Tier 1) | 0.05% volume | 0.10% | **НЕТ Tier 3** — даже в фазе 2. Это пирамида. ### 3.4. Tier-бонусы по объёму (E7.2) | Tier | Условие | Default ставка | |---|---|---| | Bronze | < $500 заработано/мес | 0.3% / 0.05% | | Silver | $500–$2000/мес | 0.35% / 0.05% | | Gold | $2000+/мес | 0.40% / 0.07% | - Upgrade — мгновенно с следующей сделки - Downgrade — с **protection period 2 месяца** (Binance-стиль) - Cron 1-го числа каждого месяца переоценивает ### 3.5. Исключения - Сделки в `excluded_assets` программы (например, RUB/UAH могут быть исключены если admin решит) → 0 - Cancelled сделки → 0 - Internal transfers → 0 - Self-referral (по passport-match KYC) → `voided` + alert - **Минимум на сделку отсутствует** (приветствуем мелкого туриста) --- ## 4. Tracking и привязка клиента ### 4.1. Три канала привязки 1. **Через ссылку `/r/{code}`** (онлайн) - Cookie `obm_ref` (signed, 30 дней) — действует **до первой сделки клиента** - После первой сделки — привязка lifetime в рамках attribution-окна (см. 4.2) - Endpoint без auth, инкрементит `ref_codes.clicks_count` 2. **Manual ввод кассиром/менеджером** (офлайн в Лиман/Лара) - В форме новой сделки и в карточке клиента — поле «Реф-код» (autocomplete) - Кассир вводит код с визитки/QR клиента → привязка `source='manual'` - Если клиент перепривязан — требует `reason` (логируется) 3. **Self-claim в TG-боте** (фаза 3, не в E7.1) ### 4.2. Окно attribution **Default (E7.1):** **24 месяца** с момента первой сделки клиента (после — клиент «отвязывается», комиссий нет, но привязка остаётся в audit для отчётов). **Опция «lifetime»:** в индивидуальной программе для VIP-партнёров (по контракту). ### 4.3. Перепривязка - Менеджер может переключить клиента на другого партнёра (требует reason) - Старая запись `client_affiliations.detached_at = now()` - **Старые комиссии не трогаются** (snapshot в `commission_entries`) - Новые сделки идут новому партнёру - Если конфликт «cookie ставит A, manager хочет B» → требуется admin-approval ### 4.4. Opt-out клиента В карточке клиента — кнопка «Отвязать от партнёра» (admin/manager) с reason. Старые комиссии остаются, новые сделки — без партнёра. Партнёру причину не разглашаем. --- ## 5. Lifecycle комиссии и выплат ### 5.1. Состояния ``` [Deal → done] ↓ (post-commit hook, eventual consistency) pending ↓ (hold_days=7, cron-daily 04:00 UTC) available ↓ (partner запросил payout → admin approve) paid ``` Альтернативы: - `voided` — self-referral, asset excluded, аффилиат blocked - `reversed` — отмена сделки **после** paid (баланс уходит в минус, см. 5.4) ### 5.2. Hold (7 дней default) - Cron-job **раз в сутки** (04:00 UTC, после backup и tron-sync) - Переводит pending → available при условиях: hold истёк И сделка не cancelled ### 5.3. Выплаты **Триггер MVP:** manual — партнёр сам в кабинете запрашивает. **Условия:** - `balance_available ≥ 50 USDT` (минимум default-программы) - `affiliate.status = active` - KYC партнёра пройден (для физлица: имя + tax-ID + payout-address screening) **TRC20 network fee:** - Удерживается с партнёра (default), ~1.5 USDT/выплата - В UI кабинета: «Запрос 50 USDT − 1.5 USDT (network fee) = 48.5 USDT к получению» - Прозрачно показывается до подтверждения **Withholding tax 1% (для TR-резидентов):** - Удерживаем дополнительно при выплате - В UI: «50 USDT − 1.5 fee − 0.5 TR withholding = 48.0 USDT» - Раз в месяц admin/accountant выгружает отчёт по удержаниям для бухгалтерии **Approval flow:** 1. Партнёр → `POST /aff/payouts/request` → `payout_request(status=pending)` 2. Admin видит в `/payouts`, проверяет аномалии (новый адрес, большая сумма) 3. Admin делает USDT-TRC20 перевод (из hot wallet, вручную или через signer) 4. Admin вводит **tx_hash** реальной транзакции в форму approve 5. Создаётся `Operation(op_type='payout', source='payout')` — **отдельный source**, не от Deal 6. `payout_request.status='paid'`, все связанные commission_entries → `paid` 7. `reconcile.py` через час найдёт on-chain tx и свяжет `payout_request.matched_raw_tx_id` ### 5.4. Refund / reverse сценарий При отмене сделки уже **после** выплаты: - Создаётся `reverse_entry(amount = -original)` - Если у партнёра есть `available > |amount|` → списываем оттуда - Если нет — балансу разрешено быть отрицательным - При следующем accrual — новые комиссии в первую очередь покрывают минус - Если партнёр стал inactive и баланс остался в минусе — списываем убыток (логируется как `commission_writeoff`) --- ## 6. Anti-fraud ### 6.1. Обязательный минимум (E7.1) | Проверка | Когда | Действие | |---|---|---| | Self-referral по passport-id KYC | accrue | `voided` + alert админу | | Partner blocked | accrue | Не начисляем | | Cap «комиссия ≤ 50% profit» | accrue | Усечение | | Cancelled deal | hold-cron | `voided` | | Excluded asset | accrue | 0 | | KYC партнёра обязателен до payout | approve_payout | Reject | | Payout-кошелёк screening (AMLBot/Chainalysis) | approve_payout | Reject если флаг | ### 6.2. Расширенный (E7.2) - Anti-wash trading (Paxful rule): если обе стороны сделки — рефералы одного партнёра → 50% от стандартной комиссии - Velocity limit: не больше 5 новых рефералов/день без admin-review - IP-кластеризация: 3+ регистраций с одного IP/час — флаг - Анализ «сделок без on-chain подтверждения» — уже работает через `reconcile.py`, добавим алерт «комиссии за сделки без on-chain» ### 6.3. Что НЕ делаем - Device fingerprinting (30–40% false match — research) - ML/rule-based fraud detection (нет данных на MVP) --- ## 7. Compliance (Турция) — критичный раздел ### 7.1. CMB / MASAK **Текущий статус:** у Obmenka нет CASP-лицензии. CMB требует капитал 150M TRY (~$4.1M) для лицензированного обменника. Подача — отдельный проект, не в скоупе. **Ограничения для affiliate-программы:** - ❌ Публичная страница «Стать партнёром» на турецком — НЕТ - ❌ Партнёры — резиденты Турции — НЕТ на MVP - ❌ Маркетинг партнёрки в турецких TG-каналах / Instagram TR — НЕТ - ✅ Партнёры — резиденты других стран (RU/EU/global) с не-турецкой аудиторией - ✅ Cashier в Лиман/Лара принимает реф-код от клиента (это не публичная реклама) **После получения CASP-лицензии или ясности с CMB** (отдельный этап) — открываем для TR. ### 7.2. KYC партнёра **MVP:** - Имя + контакты (TG/email/phone) - Tax-ID (по стране) - Payout-address TRC20 - Скан паспорта (для физлица) — до **первой выплаты** **Фаза 2:** - Селфи с паспортом - AMLBot screening payout-адреса - Обязательно для всех новых партнёров до accrual ### 7.3. Withholding tax 1% (TR) С 1 января 2025 — обязательное удержание для платежей intermediary/e-commerce providers. **Реализация:** - Поле `affiliates.is_tr_tax_resident BOOLEAN` (заполняется при KYC) - При выплате — удерживаем 1% если TR-резидент - В UI открыто показываем: «Удержано 1% по TR-закону» - Месячный отчёт для бухгалтерии (CSV: партнёр, сумма выплат, удержанный tax) ### 7.4. Список запрещённых юрисдикций - Партнёры — не из стран в OFAC SDN list, FATF black/grey list - Рефералы (клиенты) — KYC скан по той же логике (уже есть в нашей системе для крипто-операций > $425) - RU/BY партнёры — **не блокируем** (значительная часть нашей клиентской базы), но мониторим санкции относительно конкретных лиц ### 7.5. Партнёрский договор Документ PDF/Doc (вне CRM). Подписывается до первой выплаты. Обязательные пункты: 1. Commission structure (модель, %, attribution) 2. Cookie duration (30 дней до 1-й сделки, 24 мес после) 3. Payment terms (USDT-TRC20, min 50, hold 7 дней, network fee + TR withholding с партнёра) 4. Запрещённые активности (cookie stuffing, brand bidding, спам, self-referral) 5. KYC/AML compliance аффилиата 6. Tax responsibility (партнёр сам декларирует кроме того что мы удержали) 7. Termination conditions 8. **Confidentiality** — нельзя разглашать данные клиентов, использовать иначе чем для привлечения 9. FTC disclosure (для US-аудитории): `#ad`/`#sponsored` обязательно 10. Jurisdiction (Турция), dispute resolution --- ## 8. Модель данных Детали в `docs/affiliate-research/03-architecture-plan.md`. Здесь — сводка изменений относительно v1. ### Новые таблицы (6) 1. `affiliate_programs` — настройки (ставки, hold, min_payout, attribution_days, payout_fee_borne_by) 2. `affiliates` — партнёры с FK на users (+ `is_tr_tax_resident`, `kyc_status`) 3. `ref_codes` — реф-коды (несколько на партнёра) 4. `client_affiliations` — история привязок (partial UNIQUE) 5. `commission_entries` — начисления (UNIQUE deal_id+affiliate_id+tier) 6. `payout_requests` — запросы выплат + связь с Operation ### Изменения существующих - `clients` += `referrer_affiliate_id`, `referrer_ref_code_id`, `referrer_set_at` - `deals` += `affiliate_snapshot_id`, `commission_calculated_at` - `users` += `totp_secret`, `totp_enabled`, `affiliate_id` - `roles` += `affiliate` - `operations` += `source='payout'` как новое значение enum --- ## 9. UI / Экраны ### 9.1. Партнёрский кабинет (`/aff/*`, layout `aff_base.html`) Отдельный layout (визуально отличается от админки), но **под основным доменом** (не на subdomain — экономит инфру). | Путь | Что | |---|---| | `/aff` | 3 KPI карточки (available / pending / lifetime earned), кнопка «Запросить выплату», 10 последних начислений, ref-ссылка с QR | | `/aff/links` | Список ref-кодов, кнопка «+ Создать» | | `/aff/clients` | Псевдонимизированный список (только `C-XXXX`, дата привязки, кол-во сделок, объём, моя комиссия) | | `/aff/earnings` | Журнал commission_entries с фильтрами, экспорт CSV | | `/aff/payouts` | История с TXID на TronScan, статус | | `/aff/settings` | Профиль, payout-адрес (с валидацией TRC20), пароль, 2FA (фаза 2) | **Privacy:** партнёр НЕ видит ФИО/телефон/email/TG-username клиента. ### 9.2. Админская часть Новая группа в сайдбаре `base.html`: ``` Партнёры ├── /affiliates — Список ├── /affiliate-programs — Программы и ставки └── /payouts — Ожидающие выплаты ``` Изменения существующих экранов: - `/clients/{id}` — блок «Партнёр» (manager может менять, history) - `/clients` — колонка «Партнёр» + фильтр - `/deals/{id}` — read-only список комиссий - `/` (дашборд admin/manager) — виджет «Партнёрская программа» ### 9.3. Маркетинговые материалы — НЕ предоставляем на MVP Партнёр сам делает свои креативы. Кабинет даёт только: - Реф-ссылку - QR-код (auto-gen) - Текст «pitch» в README на 3 языках для самостоятельного использования --- ## 10. RBAC | Роль | Affiliate-доступ | |---|---| | `admin` | CRUD programs, CRUD affiliates, approve payouts, корректировка commission, opt-out клиента | | `manager` | Привязка клиента к партнёру, просмотр affiliate-карточек | | `accountant` | Read-only + tax-reports + payouts approve | | `cashier` | В форме сделки поле «реф-код», в карточке клиента — имя партнёра (read-only) | | `viewer` | Без affiliate-инфы | | **`affiliate`** | Свой кабинет (см. 9.1) | **2FA:** опционально на MVP. Обязательно в фазе 2 для: - Изменения payout-адреса (re-auth) - Запроса выплаты > 500 USDT --- ## 11. Фазы реализации ### E7.1 MVP (3–4 недели) — что в скоупе **Бэкенд:** - Миграции: 6 новых таблиц + ALTER 4 существующих - 1 программа `default` (0.3% volume, hold 7, min 50, attribution 24 мес) - accrual в `routes/deals.py` через **post-commit hook** (eventual consistency) - Hold-cron daily в 04:00 UTC (`commission_release.py`) - TRC20 fee + TR withholding в логике payout **UI:** - Партнёрский кабинет (без 2FA): dashboard, links, clients, earnings, payouts, settings - Админка: /affiliates (CRUD), /affiliate-programs (одна default), /payouts (approve) - Tracking endpoint `/r/{code}` - Manual attach в карточке клиента и форме сделки - Виджет на дашборде admin **Compliance:** - KYC партнёра (паспорт скан до первой выплаты) - `is_tr_tax_resident` поле + расчёт withholding - Партнёрский договор (PDF, вне CRM) - Запуск только с не-TR партнёрами **Готово когда:** 1. Партнёр зарегистрирован (admin), получил ref-код и QR 2. Привёл клиента (через ссылку ИЛИ менеджер ввёл код) 3. Клиент совершил сделку → партнёр видит «+15 USDT pending» в кабинете 4. Через 7 дней → available 5. Партнёр запросил → admin одобрил → партнёр получил USDT-TRC20 ### E7.2 Расширение (2–3 недели) - Multi-level: `parent_affiliate_id`, tier2_pct, denormalized parents (защита от циклов) - Tier-бонусы (Bronze/Silver/Gold) + monthly recalc cron - Override-ставки per affiliate - Anti-wash-trading правило Paxful - Velocity limits - 2FA TOTP для роли `affiliate` - Automatic payout при threshold (опт) - UI: дерево даунлайна - Tax-report экспорт для бухгалтерии ### E7.3 Отложено - Smart-contract automated payouts (своя hot wallet с приватником) - Self-signup партнёра (с модерацией) - TG-бот канал привязки (вместе с M5 ТЗ партнёра) - Webhooks/email-уведомления партнёрам - A/B-тесты программ - Отдельный subdomain `partners.obmenka...` - Multi-currency payouts (TRY/USD кэш в офисе) - ML fraud detection --- ## 12. Финансовая модель (3 сценария на 6 месяцев) ### Допущения - Средний profit на сделке: $30 USDT (в Анталье) - Default ставка: 0.3% volume ≈ 30% от profit - Hold cap 50% от profit ### Сценарий A — консервативный - 5 активных партнёров - Каждый приводит 5 клиентов - Клиент делает 3 сделки за 6 мес - **75 сделок × $30 profit = $2 250 валовая прибыль** - Комиссии партнёрам: ~$675 (30%) - **Чистый дополнительный профит нам: $1 575** ### Сценарий B — целевой - 15 активных партнёров (включая 3 «средних») - 8 клиентов на партнёра в среднем - 4 сделки/клиент за 6 мес - **480 сделок × $40 profit = $19 200** - Комиссии: ~$5 760 - **Чистая прибыль: +$13 440** ### Сценарий C — стресс (партнёры приводят тех же клиентов что и так бы пришли) - 5 партнёров, привели 50 «дублирующих» клиентов - Привлекли = $1 500 profit - Комиссии = $450 - **ROI ≈ 0** — но мы получили долгосрочный канал распространения **Решение:** запускать MVP с фокусом на сценарий A→B, мониторить cannibalization (опрашивать новых клиентов «откуда пришли» в первые 3 месяца). --- ## 13. Технические интеграции | Точка | Изменения | Риск | |---|---|---| | `models.py` | +6 классов + ALTER | низкий | | `routes/deals.py` | **post-commit hook** в done-перехода | **средний** — нужен тщательный тест | | `routes/clients.py` | Поля «Партнёр» в форме и карточке | низкий | | `auth.py` | Роль `affiliate` + 2FA-поля | низкий | | `main.py` | Подключить router'ы | низкий | | `templates/base.html` | Группа «Партнёры» в сайдбаре | низкий | | `templates/aff_base.html` | НОВЫЙ layout | средний — UX/брендинг | | Cron-таймеры | `commission-release.timer` (daily) | низкий | | `reconcile.py` | Расширить — связь payout_request ↔ raw_blockchain_tx | средний | | `audit_log` | Новые actions (~10 новых типов) | низкий | **Принцип:** минимально-инвазивно, не переписываем сделочный flow. --- ## 14. Финальные дефолтные ответы (вместо open questions v1) | Вопрос v1 | Дефолтный ответ v2 | |---|---| | Ставка 30% от profit? | ❌ Нет, **0.3% от volume** (≈30% от типичной маржи). Profit-share — опция для VIP | | Cap 200 USDT? | ❌ Убран. Заменён на относительный (≤50% profit / ≤1% volume) | | Lifetime привязка? | ❌ **24 месяца** default. Lifetime — опция для VIP | | Multi-level Tier 2? | В фазе 2. 0.05% volume (1/6 от Tier 1) | | Min payout 50 USDT? | ✅ Оставляем (баланс между fee и мотивацией) | | Withholding tax 1%? | ✅ **Удерживаем при выплате** для TR-резидентов, открыто показываем | | Список запрещённых стран? | OFAC SDN + FATF black/grey. RU/BY не блокируем | | base_model несколько программ? | ✅ Доступны 3 (volume default, profit-share VIP, fixed) | | 2FA партнёра? | Опционально на MVP, обязательно для крупных выплат в фазе 2 | | Subdomain для кабинета? | ❌ Под основным `/aff/*` (экономия инфры) | **Дополнительно зафиксировано:** - TRC20 fee — удерживаем с партнёра - Маркетинговые материалы — не предоставляем (партнёр сам) - Refund при paid → списываем с available, если нет → терпим убыток - KPI: 5–8% / 10–15% / 20–25% на 3/6/12 мес - CMB compliance — блокирует TR-партнёров до получения статуса --- ## 15. Что НЕ делаем явно и почему | Что | Почему | |---|---| | Multi-level в MVP | Нет ещё партнёров | | 3+ уровней tier | MLM-территория, фрод-магнит | | Self-signup в MVP | Barrier против fraud | | Device fingerprinting | 30–40% false match | | CPA-only модель | Гарантированный приток ботов | | Smart-contract auto-payouts | Хранение приватников — отдельный домен | | Webhooks | Нет outgoing инфры | | ML fraud detection | Нет данных | | Маркетинговые материалы | Нет дизайнера в скоупе, партнёр сам | | Турецкие партнёры до CMB | Уголовный риск | | Edit сделки задним числом | Audit append-only | | Custom landing pages per партнёр | UTM параметры достаточно | | Bonus за первый депозит | Не делаем CPA | --- ## 16. Чеклист готовности к запуску E7.1 - [ ] Партнёрский договор готов (PDF, юр.провер.) - [ ] Подобрано 3–5 пилотных партнёров (не-TR резиденты) - [ ] Их payout-адреса проверены через AMLBot - [ ] Мини-страница `landing.html` (опционально для пилота) - [ ] Тест-сценарии (E2E) написаны - [ ] Backup БД до миграции - [ ] Bbf-роллбек миграции протестирован - [ ] Hot wallet с USDT-TRC20 для тестовых payouts - [ ] Admin прошёл walkthrough кабинета - [ ] Партнёрам выдан "Getting Started" guide на 3 языках --- ## 17. Открытые вопросы к пользователю (минимум, требуют решения) Все технические/operational ответы зафиксированы выше. Остаются **3 бизнес-вопроса**: 1. **CMB-блок:** согласен ли ты с тем, что MVP запускаем БЕЗ турецких партнёров? Или нужна юридическая консультация по конкретному кейсу до этого? 2. **Пилотные партнёры:** есть ли у тебя уже на примете 3–5 кандидатов в партнёры? Или начинаем с поиска? 3. **Стартовая программа:** запускаем с одной `default` (0.3% volume), или сразу заводим `vip-profit-share` для каких-то знакомых каналов которые требуют больше? --- ## Приложение: Изменения относительно v1 | Раздел v1 | Что изменено в v2 | |---|---| | Базовая ставка 30% profit | → 0.3% volume | | Lifetime | → 24 месяца default | | Cap 200 USDT | → ≤50% profit / ≤1% volume (относительный) | | Min $5 на сделку | → убран | | Self-referral по TG+phone | → по passport-id из KYC | | CMB «на потом» | → блок для TR-партнёров до получения статуса | | Withholding tax «упомянуть» | → реальная реализация с удержанием | | Accrual в той же транзакции | → post-commit, eventual consistency | | Hold-cron hourly | → daily | | `payout_op_id` неопределён | → новый `source='payout'` | | TRC20 fee | → удерживаем с партнёра | | Маркетинг-материалы | → не предоставляем | | Refund сценарий | → списываем с available | | Tax-report | → добавлен export для бухгалтерии | | KPI 20%@6мес | → 5–8% / 10–15% / 20–25% (3/6/12 мес) | | Финансовая модель | → добавлены 3 сценария | | 10 open questions | → 3 бизнес-вопроса | | 16 разделов | → 17 (но более структурированных) | **Применено все 19 правок из критики.**