---
title: "Членство и кредиты"
description: "Уровни членства Ring и кредитный баланс — лестница из шести ролей, ценообразование апгрейда в RING с desk oracle, checkout-рейки PaymentConductor и реестр подписок"
locale: "ru"
---
# Членство и кредиты

> **Info**
> Используйте вкладки **Founder** / **Developer** в боковой панели, чтобы отфильтровать эту страницу. Пользовательские сценарии рендерятся на `/membership`; эта статья документирует уровни, цены и платёжные рейки.

Членство — как клон Ring различает уровни сообщества и монетизирует доступ. Лестница ролей — SSOT (`features/auth/user-role.ts`), ценообразование апгрейда управляется конфигом (`lib/membership/pricing.ts`), и каждый платёж — карта, кредитный баланс, PayPal или нативный токен — проходит через PaymentConductor.

## Лестница ролей (SSOT)

| Role | Meaning |
|------|---------|
| `visitor` | Не аутентифицирован, только просмотр |
| `subscriber` | Платный базовый подписчик — базовый доступ к сообществу |
| `member` | Повышенный статус с более широким доступом |
| `confidential` | Доступ к конфиденциальным ресурсам |
| `admin` | Админ платформы |
| `superadmin` | Админ платформы высшего уровня |

Апгрейды переводят пользователя из `subscriber` → `member`. Конфиг уровня `confidential` явно требует роль confidential.

### For founders

## Почему это важно для вашего клона

- **Монетизируйте доступ** платным уровнем member, тогда как visitors и subscribers сохраняют базовый доступ.
- **Один checkout, много реек.** PaymentConductor объединяет карту, кредитный баланс, PayPal и нативный токен — тот же checkout-движок, что и в магазине.
- **Предсказуемые цены в RING.** Месячный апгрейд по умолчанию — **1 RING** (`membership.ring.memberUpgradeAmount`), годовой даёт **20% скидки** от monthly × 12, а живые котировки идут через desk oracle, чтобы сумма счёта совпадала с котировкой.
- **Кредитный баланс — основная деноминация.** Свыше 10 кредитных единиц (`MEMBERSHIP_DESK_CREDIT_HINT_MIN`) UI подсказывает обмен на Token Desk вместо покупки кредита.

### Чеклист оператора

1. Подтвердите платёжные процессоры в PaymentConductor (WayForPay / Stripe / PayPal на клон).
2. Просмотрите суммы `membership.ring` и конфиг уровня `member` в `ring-config.json`.
3. Прогоните один реальный апгрейд на каждую рейку (карта, кредит, токен) в staging-клоне перед go-live.

### For developers

## Модули ценообразования (проверено)

| Module | Role |
|--------|------|
| `lib/membership/pricing.ts` | Sync-хелперы — суммы RING за период, годовая скидка 20%, подсказка credit desk |
| `lib/membership/pricing-live.ts` | Только серверные живые desk-котировки через `getNativeTokenToMainCurrencyRate` |
| `lib/payments/conductor/handlers/membership-upgrade.ts` | Обработка purpose апгрейда |
| `lib/payments/conductor/handlers/membership-upgrade-stripe.ts` / `-paypal.ts` | Рейки апгрейда под конкретного провайдера |
| `lib/payments/payment.config.ts` | Purpose `membership_upgrade` → `PAYMENT_MEMBERSHIP_PROCESSOR` |

## API-поверхность

| Route | Methods | Purpose |
|-------|---------|---------|
| `/api/membership/payment/card` | POST, GET | Карточный checkout для членства |
| `/api/membership/payment/credit` | POST, GET | Путь оплаты с кредитного баланса |
| `/api/membership/payment/paypal` | POST, GET | Checkout через PayPal |
| `/api/membership/payment/token` | POST, GET | Оплата нативным токеном |
| `/api/membership/subscription/create` | POST | Создать подписку |
| `/api/membership/subscription/status` | GET | Прочитать статус подписки |
| `/api/membership/subscription/cancel` | POST, GET | Отменить подписку |

## Истина реестра

**Куда попадают деньги**

Платные апгрейды пишутся в **реестр подписок** (`subscription_ledger`) — провайдер `credit_balance` помечает продления, оплаченные кредитом (`next_payment_due` индексируется в `data/schema.sql`). Сам кредит живёт в записи пользователя (`users.data.credit_balance`), а wallet-транзакции служат аудитом (`features/wallet/services/credit-balance-service.ts`).

**Биллинговые периоды**

`MembershipBillingPeriod = 'monthly' | 'yearly'`. Годовая стоимость = `annualUpgradeAmount`, если задано, иначе monthly × 12 × 0.8 (скидка 20%). Форма уровня: `MemberTierConfig { amount, currency, description, duration }`.

## Связанная документация

  
- [features/wallet-conductor](/docs/features/wallet-conductor.md) — Deep-dive: кредитный реестр и двухставочный SSOT, в который оседают платежи за членство.

  
- [features/payment-conductor](/docs/features/payment-conductor.md) — Depends-on: карта, PayPal и токен-рейки все идут через PaymentConductor.

  
- [features/subscriptions](/docs/features/subscriptions.md) — Same-workflow: жизненный цикл продления и обработка отмены.

  
- [architecture/data-model](/docs/architecture/data-model.md) — See-also: как credit_balance и реестр подписок живут в JSONB-схеме.
