Содержание ТЗ
Техническое заданиеВерсия 1.0 · 18.10.2026
07. Биллинг, юридические требования и безопасность
Модель 200 ₽ за связку, ЮKassa, 152-ФЗ, оферта, безопасность, SLA и поддержка.
1. Биллинг
1.1. Модель
- 200 ₽/мес за одну активную связку.
- Нет списаний за транзакции, пользователей или шаги.
- Trial: 7 дней и 100 тестовых запусков на каждую связку.
- Пауза: списания прекращаются со следующего периода.
- Удаление: списания прекращаются, доступ к истории — 90 дней.
- Один платёж может покрывать несколько связок (сводный счёт).
1.2. Жизненный цикл подписки
активация
[trial] ─────────────────▶ [active] ──────▶ [past_due] ──▶ [paused]
│ │ ▲ │ │
│ отмена/удаление │ │ оплата │ 3 дня │ оплата
▼ ▼ │ ▼ ▼
[canceled] ◀──────────────── [canceled] [paused] ────▶ [active]
| Статус | Поведение |
|---|---|
trial | Работает, не списывается; напоминание за 24 ч |
active | Работает, списание в дату активации |
past_due | Работает в grace 3 дня, ретраи оплаты |
paused | Не работает, события не принимаются (или принимаются с ошибкой) |
canceled | Не работает, доступ к настройкам/истории ограничен |
1.3. Расчёт периода
- Первый период: с момента активации до той же даты следующего месяца.
- Если дата отсутствует в следующем месяце (31-е), используется последний день.
- Продление: в
next_charge_at03:00 МСК. - При активации в середине месяца — полный месяц (упрощение MVP).
- При паузе и возобновлении — новый период с даты возобновления.
- Часовой пояс биллинга: Europe/Moscow.
1.4. Платёжный провайдер
ЮKassa (обязательно):
- Способы: банковская карта, СБП.
- Автоплатежи: сохранённый способ (
save_payment_method). - Чеки 54-ФЗ: email/телефон, номенклатура «Подписка easy-connect».
- Вебхуки:
payment.succeeded,payment.canceled,refund.succeeded. - Проверка подлинности вебхука: IP allowlist + подпись/перепроверка через API.
- Идемпотентность:
Idempotency-Key=payment:{subscription_id}:{period_start}.
1.5. Сценарий оплаты
- Пользователь нажимает «Оплатить 200 ₽».
- API создаёт
payment(pending) и платёж в ЮKassa. - Редирект на
confirmation_url. - Пользователь оплачивает.
- ЮKassa шлёт вебхук; API проверяет и переводит в
succeeded. - Создаётся/продлевается подписка, активации включаются.
- Отправляется письмо с чеком.
- При ошибке —
failed, уведомление, ретрай.
1.6. Неуспешная оплата
- Ретраи: через 1 час, 24 часа, 48 часов (всего 4 попытки).
- Уведомления после каждой неудачи.
- После 3 дней —
past_due→paused, активации останавливаются. - После 30 дней — данные архивируются, связки отключаются.
- Восстановление: оплата → активации включаются, история сохраняется.
1.7. Возвраты
- Возврат пропорционально неиспользованным дням при:
- длительном сбое (> 24 ч подряд) по вине сервиса;
- двойном списании;
- ошибочном списании.
- Не возвращаются: использованный trial, месяцы с успешной работой.
- Решение — в админке, с аудитом, срок 10 рабочих дней.
- Чек коррекции — через ЮKassa.
1.8. Счета и документы для юрлиц
- Счёт на оплату от 3 месяцев (P1).
- Акты/чеки в личном кабинете.
- Реквизиты и налоговая схема — после регистрации юрлица.
- Ориентир: УСН, без НДС; если НДС — цена включает НДС, указывается в чеке.
1.9. Промокоды (P1)
- Типы: скидка на первый период, фиксированная сумма, бесплатные дни.
- Ограничения: срок, количество использований, один на пользователя.
- Не суммируются, если не задано иное.
- Учёт в отдельной таблице
promo_codesиpromo_redemptions.
1.10. Метрики биллинга
- MRR, ARR, ARPU, LTV.
- Trial → paid conversion.
- Churn по связкам и пользователям.
- Failed payment rate, recovery rate.
- Refund rate, средний срок оплаты.
- Gross margin по связке.
2. Юридические требования
2.1. Документы
| Документ | Назначение | Обновление |
|---|---|---|
| Публичная оферта | Договор с пользователем | При изменении тарифа/услуг |
| Пользовательское соглашение | Правила использования | При изменении продукта |
| Политика обработки ПДн | 152-ФЗ | При изменении процессов |
| Согласие на обработку ПДн | Отдельный чекбокс | Версионируется |
| Согласие на рекламные рассылки | Маркетинг | Отдельно от оферты |
| Политика cookie | Аналитика | При изменении cookie |
| Договор для юрлиц | B2B | По запросу |
| SLA (P1) | Гарантии доступности | Для B2B |
2.2. 152-ФЗ
Обязательные меры:
- Уведомление Роскомнадзора об обработке ПДн.
- Согласия на обработку, отдельно для маркетинга.
- Минимизация: собираем только email, имя (опционально), платёжные данные через провайдера (мы не храним номера карт).
- Локализация: серверы и бэкапы в РФ.
- Права субъекта: доступ, исправление, удаление, экспорт, отзыв согласия.
- Сроки ответа: 10 рабочих дней (или по закону).
- Журнал согласий и версий документов.
- Назначение ответственного за организацию обработки ПДн.
- Политика конфиденциальности на русском, доступна без регистрации.
- Меры защиты: шифрование, доступ по ролям, аудит, резервное копирование.
2.3. Данные, которые обрабатываются
| Категория | Пример | Основание | Срок |
|---|---|---|---|
| Аккаунт | email, имя | Договор | До удаления + 30 дней |
| Платёжные | ID платежа, сумма, чек | Закон/договор | 5 лет |
| Подключения | токены (шифр), ID аккаунта | Договор | До удаления |
| События/запуски | payload сервисов | Договор | 90 дней |
| Логи | IP, user-agent, ошибки | Законный интерес | 30–90 дней |
| Маркетинг | email, согласие | Согласие | До отзыва |
Важно: payload может содержать ПДн клиентов пользователя. Мы обрабатываем его как обработчик по поручению пользователя (ст. 6 152-ФЗ), без собственных целей. Это фиксируется в оферте и DPA (для B2B).
2.4. Cookies и аналитика
- Обязательные cookie (сессия) — без согласия.
- Аналитические (Яндекс Метрика) — после согласия, с возможностью отказа.
- Баннер с настройками, а не только «ОК».
- Не передавать ПДн в аналитику; маскировать email/user_id.
2.5. Возрастные ограничения
- Сервис для лиц 18+ или с согласия законных представителей.
- В оферте — запрет использования для незаконных рассылок.
2.6. Интеллектуальная собственность
- Права на ПО принадлежат владельцу сервиса.
- Пользователь не вправе перепродавать доступ, кроме партнёрской программы.
- Названия и логотипы сервисов — собственность правообладателей; использование в каталоге — номинативное, с указанием принадлежности.
2.7. Ограничение ответственности
- Сервис не гарантирует работу сторонних API.
- Ответственность ограничена суммой оплаты за последние 3 месяца (для B2B).
- Пользователь отвечает за законность передаваемых данных и наличие согласий своих клиентов.
2.8. Санкционные и экспортные ограничения
- Сервис доступен пользователям из РФ.
- Ограничения по работе с отдельными зарубежными провайдерами могут меняться; это отражается в статусе коннекторов.
- Не гарантируется работа сервисов, заблокированных на территории РФ.
3. Безопасность
3.1. Модель угроз (кратко)
| Угроза | Вектор | Меры |
|---|---|---|
| Кража токенов | Утечка БД/логов | AES-256-GCM, маскирование, доступ по ролям |
| Подделка вебхука | Публичный ingest URL | Токен энтропией 32+ байта, подпись, replay-защита |
| SSRF | Произвольные URL | Allowlist доменов, запрет приватных IP |
| CSRF | Cookie-сессии | SameSite, double-submit, проверка Origin |
| XSS | Пользовательские тексты | Экранирование, CSP, sanitize |
| Brute force | Логин | Rate limit, блокировка, Argon2id |
| Абьюз рассылок | Связки с SMS/Telegram | Верификация, лимиты, модерация, жалобы |
| Утечка PII в логи | Логирование payload | Маскирование на уровне логгера |
| Захват аккаунта | Слабый пароль/сессии | 2FA, инвалидация сессий, уведомления |
| DDoS | Публичные эндпоинты | nginx rate limit, Cloudflare-совместимый прокси (P1) |
| Зависимости | Уязвимости пакетов | SCA, обновления, lockfile |
3.2. Аутентификация и сессии
- Пароли: Argon2id (memory 64 МБ, iterations 3, parallelism 1) или bcrypt cost 12.
- Пароль ≥ 8 символов, проверка по списку утечек (P1).
- Сессии: httpOnly, Secure, SameSite=Lax; TTL 7 дней (30 при «запомнить»).
- Ротация session id при входе и повышении привилегий.
- Выход из всех сессий при смене пароля.
- 2FA для админов обязательна, для пользователей — опционально.
- Ограничение попыток входа: 5/15 мин, затем backoff.
- Уведомление о новом входе (P1).
3.3. Авторизация
- RBAC:
user,support,admin,superadmin. - Проверка владельца на каждом запросе (tenant isolation).
- Нельзя получить доступ к чужому
activation_id/run_id. - Admin actions — только через отдельный контур + 2FA.
- Impersonation — только superadmin, с согласия и аудитом.
3.4. Шифрование
- TLS 1.2+ (TLS 1.3 приоритет), HSTS 1 год.
- Секреты подключений: AES-256-GCM, уникальный nonce, key version.
- Ключ: переменная окружения/secret manager, ротация раз в 12 месяцев.
- Бэкапы: шифрование на диске/в объектном хранилище.
- Пароли: необратимый хеш.
- Платёжные данные: не храним, только токены провайдера.
3.5. Защита API
- Валидация всех входов (Zod), ограничение размера тела.
- Rate limit по IP, пользователю, токену, активации.
- CORS строго по доменам.
- CSP:
default-src 'self', безunsafe-inlineдля скриптов (nonce). - Security headers:
X-Content-Type-Options,X-Frame-Options,Referrer-Policy,Permissions-Policy. - Ошибки не раскрывают стек и внутренние детали.
- Идемпотентность критичных POST.
- Аудит мутаций.
3.6. Безопасность коннекторов
- Минимальные OAuth scopes.
- Allowlist доменов, запрет редиректов на приватные адреса.
- Таймауты, ограничение размера ответа.
- Проверка TLS-сертификатов.
- Запрет выполнения пользовательского кода.
- Изоляция секретов: коннектор получает только токен своего подключения.
- Ревью кода и тесты на SSRF/инъекции.
3.7. Мониторинг безопасности
- Алерты на аномалии: всплеск 401/403/429, массовые регистрации, спам-паттерны.
- Журнал входов и админ-действий.
- Еженедельный обзор зависимостей.
- Ежегодный пентест (P1), после крупных релизов — выборочный.
- Bug bounty (P1).
3.8. Реагирование на инциденты
- Обнаружение (алерт/жалоба).
- Классификация (P1–P4), назначение ответственного.
- Локализация: отключение коннектора/функции, блокировка токенов.
- Устранение, проверка.
- Уведомление пользователей (при утечке ПДн — в сроки 152-ФЗ).
- Постмортем без поиска виновных, с планом действий.
- Обновление документации и тестов.
Целевые сроки:
| Уровень | Реакция | Устранение |
|---|---|---|
| P1 (утечка/недоступность) | 15 мин | 4 часа |
| P2 (крупный сбой) | 1 час | 24 часа |
| P3 (частичный сбой) | 4 часа | 72 часа |
| P4 (косметика) | 1 день | Планово |
4. SLA и доступность
4.1. Целевые показатели
| Показатель | MVP | v1.0 |
|---|---|---|
| Доступность API | 99,5 % | 99,9 % |
| Доступность сайта | 99,5 % | 99,9 % |
| Успешность запусков | 99 % | 99,5 % |
| p95 ingest | 300 мс | 200 мс |
| p95 запуска (webhook) | 10 с | 5 с |
| RPO | 24 ч | 1 ч |
| RTO | 4 ч | 2 ч |
4.2. Компенсации (B2B, P1)
- 99,0–99,5 % — 10 % месячной платы.
- 95–99 % — 25 %.
- < 95 % — 50 %.
- Компенсация по заявлению, не автоматически.
- Не применяется к сбоям сторонних провайдеров, если мы уведомили и предложили обход.
4.3. Исключения
- Плановые работы (уведомление за 48 ч, окно 02:00–05:00 МСК).
- Форс-мажор.
- Действия пользователя (неверные токены, удаление данных).
- Блокировки сторонних сервисов.
5. Поддержка
5.1. Каналы
- Email: support@easy-connect.ru.
- Telegram-бот/чат.
- Форма в кабинете с привязкой run_id.
- База знаний и статус.
5.2. SLA первой линии
| Приоритет | Первый ответ | Решение |
|---|---|---|
| Критичный (сервис не работает) | 1 час | 4 часа |
| Высокий (связка не работает) | 4 часа | 24 часа |
| Обычный (вопрос) | 24 часа | 3 дня |
Рабочее время: пн–пт, 09:00–19:00 МСК. Инциденты — 24/7 (P1).
5.3. База знаний
- Статьи по каждому сервису: «где взять токен», «как подключить».
- Разбор топ-20 ошибок.
- Видео/гифки для топ-10 связок.
- Поиск, обратная связь «помогло/не помогло».
6. Комплаенс-чеклист запуска
- Юрлицо/ИП зарегистрировано, реквизиты добавлены на сайт.
- Уведомление РКН подано.
- Оферта, политика, согласия опубликованы и версионируются.
- Договор с ЮKassa подписан, магазин настроен, чеки проверены.
- Данные и бэкапы размещены в РФ.
- Назначен ответственный за ПДн.
- Процедура ответа на запросы субъектов ПДн.
- Политика cookie и баннер согласия.
- SLA/оферта для B2B (P1).
- Пентест/сканер уязвимостей проведён.
- Резервное копирование и восстановление проверены.
- Инцидентный план и контакты.
- Обучение поддержки по 152-ФЗ и безопасности.