ADR-039 · 2026-06-03 · UA-first payment stack

Платежная инфраструктура без vendor lock-in

Multi-provider stack для украинских ФОП-3 SaaS. WayForPay для подписок и разовых покупок, LiqPay + Monobank для возвратов. Stripe остается в репо для Y2 EU expansion.

Provider-agnostic архитектура — переключение между провайдерами через одну env переменную. PCI DSS Level 1, 3-D Secure 2.0, ПРРО integration из коробки.

Первый вопрос технических оценщиков

Почему не Stripe как primary?

Stripe — это industry standard для SaaS на Западе, но для украинского ФОП-3 это не практичный выбор в V1. Stripe не принимает прямо UA ФОП регистрацию — нужно либо открыть EU LLC (Estonia OÜ ~€600 + годовые расходы, Польша sp. z o.o. ~₴80k setup), либо использовать Stripe Atlas (US Delaware LLC, $500 setup + годовая отчетность в IRS).

Кроме того, UAH-recurring через Stripe имеет 1.5-2% FX потери при каждой конверсии в USD. Для плана $49/месяц это ~$0.70-1.00 потерь в месяц на клиента — деньги, которые лучше оставить клиенту или в продукте.

WayForPay принимает украинского ФОП-3 за 1-3 рабочих дня KYC, нативно начисляет в UAH без FX, и имеет автоматическую ПРРО интеграцию. LiqPay, Monobank как fallback refund-providers для надежности. Этого достаточно для UA-first launch.

Stripe не "отклонен" — он активен в кодовой базе как третий провайдер. Когда будет EU LLC или Stripe Atlas (Y2 — после PMF в UA), активируем одним env флагом. Смотрите ADR-039 для полной декомпозиции.

Multi-provider stack

Пять провайдеров — одна абстракция

Каждый провайдер закрывает специфический use case. Маршрутизация происходит на orchestrator layer через <code class="font-mono text-primary-500">SubscriptionProvider</code> interface + multi-provider <code class="font-mono text-primary-500">refund-providers.ts</code> switch.

WayForPay

live (post-KYC)
Subscription billing primary

Recurring tokenized charges, ПРРО integration, monthly/annual plans, dunning + payment retries.

  • Subscription Cloud (recurring без manual tokenization)
  • Card + Apple Pay + Google Pay
  • 3-D Secure 2.0 обязательный
  • ПРРО integration на KYC — fiscal receipts автоматически
  • PCI DSS Level 1
  • EU expansion path через Flitt rebrand

LiqPay

live (multi-provider switch)
Refund fallback

Самый надежный UA gateway (PrivatBank). Используем для refund execution для заказов оплаченных через LiqPay.

  • Refund API (sha1 signature)
  • Multi-currency: UAH, USD, EUR
  • Apple Pay + Google Pay
  • Reverse-payment flow для refunds

Monobank Acquiring

deferred (P2)
Cheap option (deferred P2)

Самый дешевый UA acquirer (1.4-2.5%). Recurring ограничен — используем для one-off платежей когда buyer-funnel стабилизируется.

  • Invoice cancel/refund API
  • X-Token авторизация
  • Самая дешевая комиссия на UA market
  • Recurring требует отдельный договор с банкером

Stripe

deferred (Y2 EU)
Deferred to Y2 EU

Третий провайдер в репо. Активируется когда будет EU LLC или Stripe Atlas + EU/US customer volume оправдывает стоимость.

  • Subscription + Tax + Billing Portal
  • Best-in-class dev DX
  • Multi-currency native
  • Activate via BILLING_PROVIDER=stripe
Compliance автоматически

ФОП-3 + ПРРО — без ручной отчетности

Украинские SaaS на ФОП-3 (упрощенная система 5% от оборота) при продаже услуг резидентам Украины обязаны использовать программную РРО — регистратор расчетных операций. Это fiscal receipt, который автоматически отправляется в налоговую при каждой транзакции.

Что делает WayForPay
  • ✓ Автоматическое формирование ПРРО чека на каждую успешную транзакцию
  • ✓ Email клиенту с fiscal receipt (юридически закрывающий документ)
  • ✓ Передача чека в налоговую через API cabinet
  • ✓ Расчет единого налога (5%) автоматически из входящего оборота
Что делает merchant (ты)
  • ✓ Активировать ПРРО integration во время WayForPay KYC (~10 мин разговора)
  • ✓ Подать квартальную ФОП-3 декларацию — наш Tax Auto-Pilot агент генерирует
  • ✓ Держать ФОП-3 лимит в пределах ~₴8.3M/год оборот (~$200k)
  • ✓ При приближении к лимиту — переходить на ТОВ (планируй заранее)

Если планируешь scale > $200k ARR — начни регистрацию ТОВ параллельно с launch. Y1 mantra $30k MRR = $360k ARR превышает ФОП-3 лимит через ~6 месяцев. Это не блокер для launch, но учитывай в roadmap.

Архитектура (для devs)

Что под капотом

SubscriptionProvider interface

interface SubscriptionProvider {
  id: 'demo' | 'wayforpay' | 'stripe';
  isConfigured(): boolean;
  createCheckout(args): Promise<{ url }>;
  createPortal(args): Promise<
    | { kind: 'hosted'; url }
    | { kind: 'unsupported'; reason }
  >;
}

Каждый провайдер реализует этот interface. Registry в <code class="font-mono">billing/provider.ts</code>, выбор через <code class="font-mono">BILLING_PROVIDER</code> env var. Unsupported portal (WayForPay не имеет hosted billing portal) — UI fallback на /dashboard/settings.

Refund execution (multi-provider)

type RefundProviderId =
  | 'liqpay' | 'monobank'
  | 'stripe' | 'manual';

executePaymentRefund(provider, {
  paymentIntentId,
  amountUah,
  reason,
  idempotencyKey,
}) => Promise<RefundResult>

Маршрутизация к провайдеру которым была оплачена подписка. Idempotency через <code class="font-mono">refund-log id</code> — replay-safe. Failures возвращают structured result (succeeded/failed/manual_required), никогда не throws.

Webhook signature verification

  • WayForPay: HMAC-MD5 на merchantSecretKey
  • LiqPay: sha1(secret + data + secret) base64
  • Monobank: X-Token header + body match
  • Stripe: Stripe-Signature header + secret

Каждый webhook route отдельный — <code class="font-mono">/webhooks/&lt;provider&gt;</code>. Signatures верифицируются до touching DB.

Outcome billing meters

  • $0.50 / closed_deal
  • $0.10 / ttn_generated
  • 1-2% / ad_budget_managed
  • $1.00 / return_resolved
  • $2.00 / recovered_oos_sale

Метрики emitted из agent runtime → aggregate в <code class="font-mono">billing-meters</code> → еженедельные invoice items в WayForPay. Failures в retry sweep cron. Operator видит usage в real-time в dashboard.

Кодовая база открыта на GitHub — apps/orchestrator/src/billing/.

Roadmap

Что дальше

V1 · Q3 2026
WayForPay subscription live + LiqPay/Monobank refunds + one-off purchases. Tax Auto-Pilot генерирует ФОП-3 декларацию ежеквартально.
P2 · Q4 2026
Monobank Acquiring как cheaper option для high-volume customers (1.4-2.5% vs WayForPay 2.7%). Apple Pay + Google Pay в inbox checkout.
Y2 EU · 2027
Stripe live mode после формирования EU LLC (Estonia OÜ или Польша). EUR/USD pricing, Stripe Tax для PL/CZ/DE customers. UA-side stays WayForPay.
Y3 US · 2028
Stripe primary для NA market. SOC 2 Type II certification (ADR-025). Multi-currency consolidation по регионам.

FAQ — Платежи

Вопросы о платежной архитектуре?

30-минутное демо — покажу WayForPay sandbox checkout, LiqPay refund flow, ПРРО receipt sample. Если ты оцениваешь Unitelia с технической стороны — это самый быстрый способ убедиться что мы не handwave.