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

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

Multi-provider stack для українських ФОП-3 SaaS. WayForPay для підписок, NovaPay для повернень з нативною Нова Пошта інтеграцією, LiqPay + Monobank як fallback. Stripe залишається в репо для Y2 EU expansion.

Архітектура provider-agnostic — переключення між провайдерами через один env var. 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 losses при кожній conversion в USD. Для $49/міс плану це ~$0.70-1.00 втрати на місяць на клієнта — гроші які краще лишити у клієнта або в продукті.

WayForPay приймає українського ФОП-3 за 1-3 робочі дні KYC, нативно charges в UAH без FX, і має автоматичну ПРРО integration. NovaPay додає нативний refund-flow тісно інтегрований з Нова Пошта shipping. Ці два мають все що треба для UA-first launch.

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

Multi-provider stack

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

Кожен провайдер закриває специфічний use case. Маршрутизація відбувається на orchestrator layer через SubscriptionProvider interface + multi-provider refund-providers.ts 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 обовʼязковий
  • ПРРО intgration на KYC — фіскальні чеки автоматично
  • PCI DSS Level 1
  • EU expansion path через Flitt rebrand

NovaPay

live (post-KYC)
Refund executor + one-off

Refund API з нативним Нова Пошта tie-in: 'посилка повернена в магазин → авто-refund клієнту'. One-off add-on покупки.

  • Refund + void API
  • Hosted checkout for one-off покупок
  • Webhooks для recurring reconciliation
  • Apple Pay + Google Pay
  • PCI DSS compliant
  • Нова Пошта shipping integration — moat

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 обмежений — використаємо для одноразових платежів коли 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% від обороту) при продажу послуг резидентам України зобов'язані використовувати програмну РРО — реєстратор розрахункових операцій. Це фіскальний чек, який автоматично йде у податкову при кожній транзакції.

Що робить WayForPay
  • ✓ Автоматичне формування ПРРО чека на кожну успішну транзакцію
  • ✓ Емейл клієнту з фіскальним чеком (юридично закриваючий документ)
  • ✓ Передача чека в податкову через API кабінету платника
  • ✓ Розрахунок єдиного податку (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, але враховуй у роадмепі.

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

Що під капотом

SubscriptionProvider interface

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

Кожен провайдер реалізує цей інтерфейс. Реєстр у billing/provider.ts, вибір через BILLING_PROVIDER env var. Unsupported portal (WayForPay/NovaPay не мають hosted billing portal) — UI fallback на /dashboard/settings.

Refund execution (multi-provider)

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

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

Маршрутизація на провайдера яким було сплачено замовлення. Idempotency через refund-log id — replay-safe. Failures повертають structured result (succeeded/failed/manual_required), ніколи не кидають.

Webhook signature verification

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

Кожен webhook route окремий — /webhooks/<provider>. Signatures верифікуються до того як зворушити 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

Метрики emitt-ються з agent runtime → aggregate в billing-meters → щотижневі invoice items в WayForPay. Failures у retry sweep cron. Operator бачить usage в real-time у dashboard.

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

Roadmap

Що далі

V1 · Q3 2026
WayForPay subscription live + NovaPay refund + 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, NovaPay refund flow, ПРРО receipt sample. Якщо ти оцінюєш Unitelia з технічної сторони — це найшвидший спосіб переконатись що ми не handwave.