Design Spec · brainstorm-stage

Reparte

Realtime split-payments SaaS для барбершопов и салонов красоты в Перу. Клиент платит через Yape, мастер получает свою долю мгновенно, владелец видит реальный оборот в realtime.

2026-05-26 Не утверждённая стратегия Owner-only review

⚠ Точность терминологии — в спеке используются названия «Yape Negocios» / «Yape Empresarial Transfer API» как рабочие термины для merchant-приёма и B2B-API соответственно. Точные продуктовые названия BCP могут отличаться — должны быть валидированы при первом tech-deep-dive с Yape-командой.

Содержание

  1. Контекст и обоснование
  2. Out of scope
  3. Архитектура
  4. Data Model
  5. MVP Scope
  6. Unit Economics
  7. Главные риски
  8. Go-to-Market
  9. Open Questions
  10. Что НЕ делать сейчас
  11. Следующие шаги

1.Контекст и обоснование

Проблема

В барбершопах/салонах Перу типично две модели отношений владелец-мастер:

Оба сценария = одна и та же боль: непрозрачное и/или медленное разделение выручки между владельцем и работниками.

Почему сейчас и почему Перу

Почему barbershops first

2.Out of scope / решения по фокусу

РешениеЗафиксировано
Только Перу для MVPНе Колумбия (два-rail Nequi+Daviplata), не Чили (мал. рынок), не Мексика/Аргентина (Stripe там есть)
Только барбершопы/салоныНе спортзалы (subscription-модель), не репетиторы, не gasfiteros
Hybrid contract model (renter + employee)Один data model, разные конфигурации
Owner = customer SaaSНе master-as-customer, не marketplace
Realtime split (Подход A) — primaryReconciliation T+0 — fallback при отказе/задержке Yape-партнёрства, не multi-channel gateway
Отдельный startup, не PresuСнимает блокер MP-gate и не размывает MLP-фокус gasfiteros
Single rail YapePlin/MercadoPago — после validation
Spanish-onlyQuechua/English после growth
PWA, не nativeiOS/Android — после product-market fit

3.Архитектура (Подход A — realtime)

┌────────────────────────────────────────────────────────────┐
│  CLIENT — сканит QR салона/мастера через Yape app          │
└──────────────────────────┬─────────────────────────────────┘
                           ▼
┌────────────────────────────────────────────────────────────┐
│  YAPE NEGOCIOS (мастер аккаунт)                            │
│  Платёж зачислен → webhook → наш callback                  │
└──────────────────────────┬─────────────────────────────────┘
                           ▼ webhook
┌────────────────────────────────────────────────────────────┐
│  REPARTE BACKEND (Split Engine)                            │
│  1. Idempotency check (yape_webhook_id dedup)              │
│  2. Resolve rule: tenant.split_rules[master_id]            │
│  3. Compute amounts: owner = total × owner_pct             │
│  4. Yape Empresarial Transfer API → owner account          │
│  5. Audit log + push notifications                         │
│  6. SUNAT boleta electrónica generation                    │
└──────────────────────────┬─────────────────────────────────┘
                           ▼
              ┌────────────┴────────────┐
              ▼                         ▼
      ┌──────────────┐          ┌──────────────┐
      │ Master PWA   │          │ Owner PWA    │
      │ + Telegram   │          │ + Realtime   │
      │   bot        │          │   dashboard  │
      └──────────────┘          └──────────────┘

Компоненты

  1. Salon Onboarding Service — регистрация владельца + мастеров, KYC через SUNAT (RUC verification), привязка к Yape Negocios аккаунтам через OAuth, configuration split rules
  2. Yape Connector — wrapper над Yape Negocios webhook listener + Yape Empresarial Transfer API. Изолированный модуль (чтобы можно было заменить на Plin/MP позже).
  3. Split Engine — ядро: rule resolution, amount computation, transfer initiation, retry & idempotency
  4. Master Notification Service — Telegram/WhatsApp бот, отправляет realtime events: «получил $25, ушло $7.50 владельцу, твой баланс на сегодня $X»
  5. Owner Dashboard — Next.js или Astro PWA: realtime feed (SSE/WebSocket), per-master stats, daily/weekly/monthly summary, экспорт для бухгалтерии
  6. Compliance Service — SUNAT boleta electrónica generation (через third-party provider типа Nubox или Defontana API), архив для audit

Tech stack (гипотеза)

4.Data Model (минимальный)

-- Salon
CREATE TABLE tenants (
  id UUID PRIMARY KEY,
  name TEXT NOT NULL,
  country CHAR(2) DEFAULT 'PE',
  currency CHAR(3) DEFAULT 'PEN',
  owner_user_id UUID NOT NULL,
  yape_business_account_id TEXT,        -- KYC'd с BCP
  default_split JSONB,                  -- {"owner_pct":30,"master_pct":70}
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Юзеры (owner | master | client)
CREATE TABLE users (
  id UUID PRIMARY KEY,
  phone TEXT UNIQUE,
  role TEXT CHECK (role IN ('owner','master','client')),
  yape_account_id TEXT,
  sunat_ruc TEXT,
  kyc_status TEXT DEFAULT 'pending',
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Связь мастеров с салонами + правила
CREATE TABLE workers (
  tenant_id UUID REFERENCES tenants(id),
  user_id UUID REFERENCES users(id),
  contract_type TEXT CHECK (contract_type IN ('renter','employee')),
  split_rule JSONB NOT NULL,
  active BOOLEAN DEFAULT TRUE,
  PRIMARY KEY (tenant_id, user_id)
);

-- Входящие платежи
CREATE TABLE payments (
  id UUID PRIMARY KEY,
  tenant_id UUID,
  master_id UUID,
  client_phone TEXT,
  amount_pen NUMERIC(12,2) NOT NULL,
  fee_yape NUMERIC(12,2),
  net_amount NUMERIC(12,2),
  yape_payment_id TEXT,
  yape_webhook_id TEXT UNIQUE,          -- idempotency key
  status TEXT CHECK (status IN ('pending','received','splitting','settled','failed')),
  service_type TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  settled_at TIMESTAMPTZ
);

-- Исходящие трансферы
CREATE TABLE transfers (
  id UUID PRIMARY KEY,
  payment_id UUID REFERENCES payments(id),
  from_user_id UUID,
  to_user_id UUID,
  amount_pen NUMERIC(12,2),
  yape_transfer_id TEXT,
  status TEXT CHECK (status IN ('queued','sent','confirmed','failed','retrying')),
  retry_count INT DEFAULT 0,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  confirmed_at TIMESTAMPTZ
);

-- Audit log
CREATE TABLE audit_log (
  id UUID PRIMARY KEY,
  event_type TEXT,
  entity_type TEXT,
  entity_id UUID,
  payload JSONB,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

5.MVP Scope

IN (v0.1, 6-8 недель если есть Yape API access)

OUT (откладывается)

6.Unit Economics (предварительно)

Допущения для среднего салона

Revenue per salon/месСумма
Base subscription$29
Per-transaction fee ($0.30 × 1000)$300
Итого~$330
Cost per salon/месСумма
Yape API fees ($0.05-0.15 × 1000)$50-150
Server+infra share$2
Customer support$30
Итого~$180

Net per salon: ~$150/мес, margin ~30% (на v0.1)

Проекции

Рынок Перу: ~30K зарегистрированных салонов + 50-100K informal. 1000 paying = ~1% formal segment penetration. Реально 18-24 мес при условии что Yape-партнёрство откроется.

7.Главные риски

R1 — Yape partnership CRITICAL

Без gated B2B API доступа к Yape Empresarial Transfer Подход A невозможен. Cold outreach в BCP без связей = 3-6 мес до встречи + 3-6 мес до контракта.

Mitigation: дизайн системы такой, что Reconciliation-fallback (T+0 batch вместо realtime) implementable за 2 недели на тех же data structures. Если партнёрка зависает >6 мес — переключаемся на B и идём дальше.

R2 — Yape может взять долю или эксклюзивность

BCP — крупная корпорация, риск что они скажут «10% от вашего revenue» или «эксклюзивный partner — только Yape, не Plin».

Mitigation: переговариваться о non-exclusive с верхним порогом. Если жёсткие условия — переключаемся на Plin (Interbank+BBVA+Scotiabank).

R3 — Yape API technical limits

Может не поддерживать realtime webhook на receive (только polling), может иметь rate limits на Transfer API, может не поддерживать reversal/refund.

Mitigation: первая встреча с Yape должна включать tech deep-dive перед коммитом на Подход A.

R4 — KYC массовый

Каждый мастер должен иметь свой Yape Empresarial аккаунт. Регистрация требует RUC. Многие мастера-новички не имеют RUC.

Mitigation: онбординг-флоу включает помощь в получении RUC online (SUNAT RUC-online), пошаговый wizard. Этот «вход в формализацию» сам по себе — фича.

R5 — Informal segment не подключается

50-70% барбершопов в Перу работают в informal-сегменте (без RUC, наличка). Они не подойдут под наш SaaS.

Mitigation: фокус на formal premium-сегмент Лимы (Miraflores/Barranco/San Isidro) где владельцы УЖЕ хотят формализоваться. ICP: салон с 3+ мастерами, средний чек 40+ PEN, locación в столице.

R6 — Reversal/refund flow

Если клиент отозвал платёж после split-transfer'а, owner уже получил долю, мастер уже получил остаток. Yape может не поддерживать reversal.

Mitigation: в первой версии — manual workflow («запрос на возврат» → ручной zwarrant с обоих балансов). Авто-reversal только когда Yape API подтвердит поддержку.

R7 — Bre-B-like мандат от BCRP

Banco Central de Reserva del Perú может в 2026-27 запустить interop-rail типа Bre-B Колумбии или Pix Бразилии — это сразу обесценит multi-rail strategy и может включить native split в гос-rail.

Mitigation: следить за BCRP анонсами, быть готовым перейти на госrail.

8.Go-to-Market (черновик)

Pilot (мес 1-2)

Validation (мес 3-6)

Expansion (мес 6-12)

LatAm-2 (мес 12-24)

9.Open Questions

  1. Точная экономика комиссий Yape Empresarial API — нужна встреча с BCP
  2. Кто получает на realtime owner's долю — личный Yape владельца или Yape Negocios салона? (KYC implications)
  3. Tax engine: SUNAT IGV (18%) — кто декларирует, salon as entity или каждый мастер?
  4. Identity model: один master может работать в 2 салонах одновременно?
  5. Owner-as-master case: владелец сам тоже стрижёт — двойная роль. Поддерживать или forbid в v0.1?
  6. Pricing: фиксированная цена в USD ($29) или PEN (110 soles)?

10.Что НЕ делать сейчас

11.Следующие шаги

  1. Customer discovery в Лиме (можно remote): 15 интервью с владельцами барбершопов
    • Валидация: модель отношений, размер боли, готовность платить $29/мес, доверие к auto-split
  2. Yape outreach: cold через LinkedIn + intro-фишер через chilean fintech network → BCP/Yape partnerships team
  3. Tech spike: реверс-инжиниринг публичной Yape Negocios документации, проверка SDK
  4. Параллельный план B: дизайн reconciliation MVP, чтобы при Yape-зависании не блокироваться
  5. Junior co-founder с местом-в-Лиме — критично для GTM (cold-pitching салонам из Чили неэффективно)