Критика 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 с применением этих исправлений.