Документация: решения Q-02, Q-08, Q-09, Q-16; реферальный бонус днями

- Q-02: цены mass в USD $6.99 и $69.90, пресеты пополнения в RUB и USD.
- D-025: реферальный бонус — 30 дней к ключу обоим вместо денег;
  продления без оплаты (key-extensions); крайние случаи — Q-19.
- Q-08, Q-09: help@veilix.app и help@veilixvpn.com, часы по Москве.
- Q-16: ящики на почтовом хостинге (R-18), на этапе 2 — Chatwoot по IMAP.
- R-01 сделано; R-17: путь HMR в Next 16.4 — /_next/hmr.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
andreypr207andClaude Opus 5.5 committed 2026-10-21 16:00:32 +02:00
1 parent 1a5fe33ead
commit ae9531d5fc
16 files changed
+124 -47

No files matched your search

+27 -8
View File
@@ -38,6 +38,8 @@ erDiagram
ORDERS ||--o{ LEDGER_ENTRIES : "списание, возврат"
CUSTOMERS ||--o{ PAYMENT_METHODS : "карты"
CUSTOMERS ||--o{ REFERRALS : "пригласил"
KEYS ||--o{ KEY_EXTENSIONS : "продления без оплаты"
REFERRALS ||--o{ KEY_EXTENSIONS : "бонус"
CUSTOMERS ||--o{ CUSTOMER_SESSIONS : "сессии"
```
@@ -51,12 +53,12 @@ erDiagram
| name | text (L) | «Вейликс» / «Veilix» |
| orderPrefix | text | префикс номеров: `VX`, `VV` |
| locales | multi-select из языков конфига | языки контента сайта; en обязателен; домены показывают часть этих языков ([D-023](decisions/D-023-site-locales.md)) |
| supportEmail | email | почта поддержки (Q-08) |
| supportEmail | email | почта поддержки: `help@veilix.app`, `help@veilixvpn.com` |
| emailFrom | group: name, address | отправитель писем, напр. «Вейликс» <no-reply@veilix.app> |
| supportBot, mainBot | text | имена ботов (этап 3) |
| referralEnabled | checkbox | |
| referralBonus | array: currency, amount | бонус «месяц в подарок» в каждой валюте |
| topupPresets | array: currency, amounts[] | суммы пополнения в кабинете |
| referralBonusDays | number, по умолчанию 30 | бонус «месяц в подарок»: дни срока ключа обоим ([D-025](decisions/D-025-referral-days.md)) |
| topupPresets | array: currency, amounts[] | суммы пополнения в кабинете ([04-billing.md](04-billing.md), раздел 4) |
| graceDays | number, по умолчанию 3 | льготный период |
| reminderDays | number, по умолчанию 3 | за сколько дней напоминать |
| renewalLeadHours | number, по умолчанию 24 | за сколько часов до окончания пробовать продлить |
@@ -249,6 +251,23 @@ QR-коды строятся на лету из `payload`, не хранятся
Переходы — в [04-billing.md](04-billing.md).
### 5.4 `key-extensions` — Продления без оплаты (сайт)
Реферальный бонус и «Продлить вручную» ([04-billing.md](04-billing.md), раздел 6.4). Только создание, как у движений по счёту.
| Поле | Тип | Описание |
|---|---|---|
| key | relationship | |
| days | number | сколько дней добавлено |
| reason | select `referral` \| `compensation` | реферальный бонус или компенсация из админки |
| referral | relationship → referrals | для `referral` |
| appliedAt | date, null | когда сдвинут срок; пусто — ключ готовится, дни добавятся при выдаче |
| expiresAtBefore, expiresAtAfter | date | срок до и после |
| comment | text | обязателен для `compensation` |
| createdBy | relationship → admins, null | null — система |
Уникальность: (`referral`, `key`) — бонус не начисляется дважды.
## 6. Деньги
### 6.1 `orders` — Заказы (сайт)
@@ -300,13 +319,13 @@ QR-коды строятся на лету из `payload`, не хранятся
| customer | relationship | |
| currency | | валюта аккаунта |
| amount | number со знаком | `+` зачисление, `−` списание |
| type | select `topup` \| `order_charge` \| `refund` \| `referral_bonus` \| `adjustment` \| `payout` | `payout` — возврат денег с баланса на карту (этап 4) |
| payment, order, key, referral | relationship | источник записи |
| type | select `topup` \| `order_charge` \| `refund` \| `adjustment` \| `payout` | `payout` — возврат денег с баланса на карту (этап 4). Реферальный бонус — не деньги, а дни (5.4) |
| payment, order, key | relationship | источник записи |
| balanceAfter | number | баланс после записи |
| comment | text | обязателен для `adjustment` |
| createdBy | relationship → admins, null | null — система |
Уникальность: (`payment`, `topup`), (`order`, `order_charge`), (`referral`, `customer`, `referral_bonus`). Это защищает от двойного проведения.
Уникальность: (`payment`, `topup`), (`order`, `order_charge`). Это защищает от двойного проведения.
### 6.4 `payment-methods` — Сохранённые способы оплаты (сайт)
@@ -314,7 +333,7 @@ QR-коды строятся на лету из `payload`, не хранятся
### 6.5 `referrals` — Приглашения (сайт)
`referrer`, `referee` (уникальное), `status` (`pending` \| `review` \| `rewarded` \| `rejected`), `qualifyingOrder`, `rewardedAt`, `rejectReason`.
`referrer`, `referee` (уникальное), `status` (`pending` \| `review` \| `rewarded` \| `rejected`), `qualifyingOrder`, `days` (копия `sites.referralBonusDays` при начислении), `refereeKey`, `referrerKey` (пусто, пока у пригласившего нет подходящего ключа: дни ждут его следующего ключа), `rewardedAt`, `rejectReason`.
## 7. Контент и коммуникации
@@ -376,7 +395,7 @@ QR-коды строятся на лету из `payload`, не хранятся
| customers | всё | чтение, правка заметок, блокировка | — | только свой профиль |
| keys, connections | всё | всё | — | только свои, чтение |
| orders, payments | всё | чтение, ручной платёж | — | только свои, чтение |
| ledger-entries | создание корректировок, чтение | чтение | — | только свои, чтение |
| ledger-entries, key-extensions | создание корректировок и компенсаций, чтение | чтение | — | только свои, чтение |
| leads | всё | всё | — | — |
| email-log, audit-log | чтение | чтение без `debugCode` | — | — |