Критика PRD v1 (с позиции бизнеса)

Дата: 2026-05-16 Автор: AI assistant (играет роль скептичного бизнес-партнёра) Что критикуется: docs/affiliate-prd-v1.md


A. Критика бизнес-модели (top priority)

A1. ⚠ Profit-based ставка как default — плохо для партнёра

Проблема: в PRD v1 базовая модель = 30% от profit_usdt. Партнёр не видит и не понимает заранее, сколько получит, потому что profit_usdt = (indicative_rate − applied_rate) × ... — это наша внутренняя кухня. На одной и той же сделке $1000 → партнёр может получить $9 (markup 3%) или $1 (markup 0.3%). У партнёра ощущение «крутят циферки» под него.

Из research: индустрия делает revenue share от торговой комиссии — а у нас комиссия = наш markup, и для P2P/OTC лучше платить от объёма (как BestChange, ChangeNOW, SimpleSwap), потому что объём прозрачен. Бирже не страшно отдать % от fee, потому что fee известна заранее.

Решение для v2: - Default-модель = % от volume в USDT эквиваленте, ставка ~0.3% от оборота (примерно эквивалент 30% от типичного 1% markup'а) - Опция «profit-based 30%» — для VIP-партнёров с подписанным контрактом, где partner понимает риски - В UI кабинета партнёр видит «ваша ставка: 0.3% с каждого USDT оборота приведённых клиентов» — кристально понятно

A2. ⚠ Lifetime-привязка — обязательство навечно

Проблема: в PRD v1 — lifetime после первой сделки клиента. Это значит, что если партнёр привёл клиента в 2026, а клиент сам по себе торгует у нас 5 лет — мы платим партнёру все 5 лет. Партнёр давно не сделал ничего для нас, но получает комиссию.

Forex IB-индустрия (зрелее криптовалютной) активно ограничивает: Coinbase = 3 месяца активности, многие брокеры = downgrade при отсутствии новых рефералов.

Решение для v2: - Default attribution = 24 месяца с момента первой сделки клиента (после — клиент «отвязывается», т.е. новые сделки уже не дают комиссию) - Опция «lifetime» — для VIP-партнёров (с обоснованием, например, эксклюзивный канал) - При установлении ставки в программе ясно показывать: «24 месяца с первой сделки»

A3. ⚠ Cap 200 USDT на одну сделку — мешает крупным сделкам

Проблема: туристический бизнес — это иногда большие транзакции. Сделка $100k с маржой 1% = $1000 profit, партнёру 30% = $300. Cap 200 USDT режет $100 — партнёр демотивирован приводить «жирных» клиентов.

Решение для v2: - Убрать абсолютный cap - Добавить относительный: комиссия не больше 50% от profit на этой сделке (защита от случая когда мы продали себе в минус, а партнёру всё равно платим) - Для volume-based — дополнительный sanity check: комиссия ≤ 1% от volume (даже если ставка случайно выставлена 5%, не платим больше 1%)

A4. ⚠ Минимум $5 profit на сделку — отрезает мелких туристов

Проблема: турист меняет $50, profit $1–2. PRD v1 говорит «не начислять, если меньше $5» — но это именно те сделки, которые приводят локальные блогеры в Анталье. Если отрезаем — теряем мотивацию у блогеров вести трафик «средних людей».

Решение для v2: - Убрать минимум на сделку - Минимум только на payout (50 USDT = ~100 сделок × $1 комиссия) - Это не пишет copies-комиссий «по копейкам» — мы и так храним per-deal, БД не страдает

A5. ⚠ Self-referral блокировка слабая

Проблема: v1 проверяет совпадение tg_username и phone. Любой крипто-партнёр держит 3+ TG-аккаунта и Spare-симку. Лже-нулевой барьер.

Решение для v2: - У нас уже есть KYC клиента (passport_id для крипты ≥ $425 по MASAK). Использовать совпадение passport-id как primary check - Дополнительно: при регистрации партнёра — обязательно паспорт + селфи (для MVP можно отложить до первой выплаты) - Self-referral по passport-match → автоматический voided + alert админу


B. Юридический / compliance

B1. ⚠ CMB лицензия — недо-оценил риск

Проблема: в PRD v1 я написал «не для MVP, через 6–12 месяцев». Но публичная партнёрская программа с маркетингом на турецком языке — это прямое продвижение крипто-услуг в Турции. Binance именно из-за этого закрыл retail referral в Турции в октябре 2024. Уголовка 3–5 лет за нелицензированный CASP.

Решение для v2: - MVP запуск только с не-турецкими партнёрами (русско/англо/немецкоязычные TG-каналы) - Партнёрам из Турции — пока не предлагаем программу - Турецким клиентам пока приходят через прямой маркетинг (без партнёрских ссылок) - До получения CMB-статуса (или ясности с регулятором) не делать публичную страницу «Стать партнёром» на турецком - В PRD это должно быть выделено как блокирующее ограничение, не «нюанс»

B2. ⚠ Withholding tax 1% — нет процедуры

Проблема: с 2025 Турция требует удерживать 1% с платежей intermediary-провайдерам. Это означает: при выплате 100 USDT партнёру резиденту TR мы должны удержать 1 USDT и передать в налоговую. PRD v1 говорит «обозначить в договоре» — но нет реализации.

Решение для v2: - Поле affiliates.is_tr_tax_resident BOOLEAN - При выплате если TR-resident: фактически переводим (amount − 1%) - В UI партнёра: «к выплате 100 USDT, к вашей получке 99 USDT (1% удержание по TR-закону)» - Раз в месяц — отчёт для бухгалтерии: сумма удержанных таксов

B3. ⚠ Запрещённые юрисдикции для рефералов

Проблема: в v1 я задал вопрос «пускаем партнёров из РФ/Беларуси/Ирана?» но не ответил.

Решение для v2: - Партнёры — только из не-санкционных стран (стандарт FATF/OFAC) - Рефералы (клиенты) тоже — проверка страны KYC - RU/BY — пока не блокируем (это значительная часть нашего клиентского рынка в Анталье), но мониторим санкции - При выплате партнёру: страна payout-кошелька не должна быть в списке OFAC


C. Технические

C1. ⚠ Accrual в той же транзакции — риск каскадного падения

Проблема: PRD v1: «accrue в той же транзакции что и Deal → done». Если код accrue падает → откатывается сделка. Мы рискуем потерять реальные сделки из-за бага в новом модуле.

Решение для v2: - Accrue после commit сделки (post-commit hook или event) - Если accrue упал — пишется в audit_log ошибка, сделка остаётся как есть - Cron-job каждые 15 минут пытается переначислить не-обработанные сделки (Deal.commission_calculated_at IS NULL AND deal.status='done') - Это eventual consistency, для аффилиатных комиссий — приемлемо

C2. ⚠ Hold-cron каждый час — overkill

Проблема: 150 сделок/мес = 5 в день. Hold-cron каждый час делает SELECT по нескольким строкам и обновляет 0–1 запись. Это бесполезный шум в логах и небольшой DB load.

Решение для v2: - Hold-cron раз в сутки в 04:00 UTC (после bgblock-sync и backup) - Если партнёр запрашивает payout раньше hold-окна (например, через 6 дней вместо 7) — UI говорит «доступно через 18 часов»

C3. ⚠ payout_op_id — admin выбирает Operation, но где её взять?

Проблема: в нашей системе Operation создаётся только из Deal. Payout — это не Deal, это вывод нашим партнёрам. PRD v1 не описал, как admin создаёт эту Operation.

Решение для v2: - Новый op_type='payout' (или вернее — добавить kind, чтобы не конфликтовать с crypto_out от Deal) - При approve payout admin вводит TX-hash реальной USDT-TRC20 транзакции, система создаёт Operation с source='payout', привязывает к payout_request - reconcile.py потом найдёт эту on-chain tx и свяжет

C4. ⚠ TRC20 network fee — кто платит?

Проблема: транзакция USDT-TRC20 стоит ~1.5 USDT (TRX-fee + bandwidth). При выплате 50 USDT — это 3% нашей комиссии. PRD v1 умолчал.

Решение для v2: - Опция в программе: payout_fee_borne_by = affiliate | house - Default = affiliate (партнёр получает amount − network fee) - В UI кабинета: «50.00 USDT − 1.50 USDT (network fee) = 48.50 USDT» - Прозрачно, защищает нашу экономику

C5. ⚠ Маркетинговые материалы — не реализовано в скоупе

Проблема: PRD v1 в одном из разделов упомянул «баннеры на 3 языках» как фичу партнёрского кабинета. Кто их рисует? Bybit и BestChange предоставляют — но они большие. У нас нет дизайнера в скоупе.

Решение для v2: - На MVP — никаких материалов не предоставляем - Партнёрский кабинет показывает только: ref-ссылку, QR-код (auto-gen), краткий «pitch» текст в README на 3 языках - Партнёр сам делает свои креативы (это норма для small partner-программ)


D. Что упущено в v1

D1. Refund / reverse scenarios

Проблема: в PRD сказано «cancel deal → reverse entry». Но что если комиссия уже paid? Баланс уйдёт в минус.

Решение для v2 (политика): - Минусовой баланс списывается с будущих available-комиссий партнёра (как chargeback) - Если партнёр больше не активен → списываем убыток (но логируем для последующего возврата при возобновлении) - Минимизируем риск: hold 7 дней покрывает большинство возвратов (cancel в первый день не редкость, но через 7 дней — крайне редко)

D2. Tax-report для бухгалтерии

Проблема: не сделал export commission по партнёру за период для бухгалтерии (потребуется для турецкой налоговой отчётности).

Решение для v2: - Страница /payouts/tax-report?from=Y-M-D&to=Y-M-D → CSV: партнёр, tax-id, сумма выплат, удержанный withholding tax - Раз в месяц для бухгалтерии

D3. Performance review партнёров (downgrade)

Проблема: tier-bonuses (Bronze/Silver/Gold) описал, но не сказал как ПЕРЕСМАТРИВАТЬ.

Решение для v2: - В фазе 2 — cron-job ежемесячно (1-го числа) переоценивает партнёров по объёму прошлого месяца - Upgrade — мгновенно - Downgrade — с 2-месячным protection period (как Binance) для предотвращения шоков - Партнёр в кабинете видит «вы стали Silver! Ваша ставка 35%»

D4. Что если клиент хочет отвязаться от партнёра?

Проблема: PRD не учитывает opt-out. Клиент узнал что менеджер платит блогеру и хочет это прекратить (например, лично с блогером отношения испортились).

Решение для v2: - В карточке клиента (видна admin/manager) — кнопка «отвязать от партнёра» с reason - Старые комиссии остаются (snapshot), новые сделки — без партнёра - Логируется в audit - Не разглашаем партнёру причину

D5. KPI слишком оптимистичные

Проблема: «20% новых клиентов через 6 месяцев» — у нас сейчас ~150 сделок/мес от прямых, +30 от партнёров за 6 месяцев — это малореально для начала. Реалистично 5–15% в первый год.

Решение для v2: - KPI 3 мес: 5–8% сделок от партнёров - KPI 6 мес: 10–15% - KPI 12 мес: 20%

D6. Нет финансовой модели

Проблема: PRD не показывает «сколько мы потратим / сколько заработаем».

Решение для v2: - Простой расчёт через 6 месяцев: - Сценарий A (консервативный): 5 партнёров × 5 клиентов × 3 сделки × $30 profit = $2250 → партнёрам $675 (30%) → нам +$1575 - Сценарий B (целевой): 15 партнёров × 8 клиентов × 4 сделки × $40 profit = $19200 → партнёрам $5760 → нам +$13440 - Сценарий C (стресс): партнёры приводят клиентов которые мы и так бы получили → ROI близкий к 0, но партнёрский рост = долгосрочный канал


E. Стилистические / структурные

E1. PRD слишком длинный (16 разделов)

Для бизнеса полезно сократить до 8–10 разделов с executive summary и техническими деталями в приложении.

E2. Слишком много открытых вопросов (10 штук)

В v2 нужно явно дать дефолтные ответы на каждый вопрос — пусть пользователь корректирует, а не выбирает с нуля.

E3. Нет ROADMAP-таблицы со сроками

Нужна сводная: что-кто-когда. Без неё трудно планировать.


F. Итог: что критично исправить в v2

Категория Изменение
Модель Default = % от volume (0.3%), profit-based как опция для VIP
Attribution 24 месяца default, lifetime — опция
Cap Убрать абсолютный, использовать относительный (≤50% profit / ≤1% volume)
Min на сделку Убрать вообще, только min на payout
Self-referral По passport-id из KYC
CMB compliance Только не-турецкие партнёры на MVP, явный блок
Withholding tax Реализовать удержание для TR-residents
Accrual Post-commit, eventual consistency
Hold-cron Daily, не hourly
Payout Operation Новый источник source='payout', не от Deal
TRC20 fee Удерживаем с партнёра
Marketing materials Не предоставляем на MVP
Refund Минус-баланс → списываем с available, если нет — терпим
Tax report Добавить export для бухгалтерии
Tier downgrade Protection period 2 мес
Opt-out клиента Кнопка в карточке для admin/manager
KPI Реалистичнее (5–8% на 3 мес, 10–15% на 6 мес)
Финмодель Добавить 3 сценария расчёта
Open questions Дать дефолтные ответы

Следующий шаг: PRD v2 с применением этих исправлений.