Превращение самописной веб-CRM в SaaS

Customer: AI | Published: 19.08.2025

ТЗ: Превращение самописной веб-CRM в SaaS (multi-tenant) с подписками0) Вводные Исходное состояние: есть работающая веб-CRM (LAMP/PHP/MySQL; фронт — HTML/JS/CSS). Цель: запустить облачный SaaS с тарифами/подписками, многокомпанентностью (multi-tenant), рекуррентными платежами, биллингом за места (seats) и/или за использование (usage). Рынок: Украина (в т.ч. ПДВ), мультиязычность (RU/UA), мультивалютность (UAH + опционально USD/EUR). Ограничение по срокам: MVP — 2–4 недели; Standard — 1.5–2.5 мес (оценить детально после аудита кода).1) Область работ (Scope)1.1. Мультиарендность (multi-tenant) Модель row-level: во всех таблицах пользовательских данных добавить tenant_id (INT/BIGINT, NOT NULL, индекс). Глобальный middleware/DAO-фильтр: любая выборка/запись автоматически ограничивается текущим tenant_id. Разделение: пользователи принадлежат одной организации (tenant). Пользователь может иметь роль в своем tenant (admin/manager/user). Политика доступа: can(user, action, entity, tenant_id); запрет “сквозного” доступа.1.2. Регистрация и онбординг tenant Страницы: /signup: регистрация компании (название, e-mail владельца, пароль, язык, валюта). /signin: вход. /onboarding: выбор тарифа, метод оплаты, старт триала. Генерация tenant + owner (роль: owner/admin), выпуск API-ключа (см. 1.8).1.3. Тарифы/фичи/лимиты Модель тарифов: Start / Pro / Enterprise (пример): Параметры: лимит пользователей (seats), лимит сущностей (сделки/мес), API-лимит, доступ к интеграциям. Матрица фич: флаги enabled + limit_value (число/NULL) на фичу. Feature-gating: единый сервис canUse(tenant_id, feature_code) для UI/API.1.4. Подписки и биллинг Провайдер (Украина, любой один на MVP): Fondy или LiqPay или WayForPay (с вебхуками). Рекуррентные списания (месяц/год), проба (trial), grace period, dunning (повторы списаний при неудаче). Proration: корректировка оплаты при апгрейде/даунгрейде середины периода. Seats billing: изменение цены при добавлении/удалении пользователей. Промокоды/купоны (MVP опционально). Мультивалютность: хранить базовую валюту тарифа + курс на момент инвойса. Инвойсы/квитанции (PDF/HTML): номер, дата, услуги, сумма, НДС/ПДВ (если нужно), статус оплаты.1.5. Usage-metering (опционально в MVP, обязательно в Standard) Счетчики по периодам: metric_code, period_start/end, value (например, сделки/мес, API-вызовы, хранилище). Блокировка действий при превышении лимита + “мягкие” предупреждения в UI.1.6. Админка тарифов и биллинга Раздел SuperAdmin (владелец платформы): CRUD тарифов, фич, стоимостей, купонов, просмотр инвойсов, статусов подписок, ручные операции.1.7. UX/Интерфейсы Страницы: /pricing: публичная страница тарифов. /billing (для tenant-admin): текущий план, лимиты, история платежей, смена плана, добавление карт. /users: управление местами (приглашения, роли). В системных местах — подсказки, если фича недоступна на текущем тарифе.1.8. API-доступ Пер-tenant API key (JWT/opaque), выдача/ротация. Rate-limit per tenant. Документация /docs (Swagger/OpenAPI).1.9. Логи/аудит/метрики Audit log: кто/когда/что сделал (actor_type, actor_id, entity, action, payload, tenant_id). Метрики доходов: MRR/ARR/Churn (Standard). Системный лог вебхуков провайдера.1.10. Безопасность и соответствие Хеширование паролей (bcrypt/argon2), CSRF, XSS, Content-Security-Policy. Маскирование персональных данных в логах; логическая изоляция данных per tenant. Бэкапы БД (ежедневно, хранение ≥14 дней), тест восстановления. Политики: Условия использования, Политика приватности, Договор оферты (подготовит заказчик/юрист).1.11. Инфраструктура/DevOps Окружения: dev, staging, prod. CI/CD (GitHub Actions/GitLab CI): тесты, деплой, миграции. Мониторинг (Uptime + логи + алерты). Объектное хранилище для инвойсов (S3-совместимое). Докеризация (по возможности).2) Что остаётся вне scope (Out of scope MVP) SSO/SAML, SCIM. Несколько платёжных провайдеров сразу. Сложная финансовая бухгалтерия и интеграции 1С/М.E.Doc. Маркетплейсы/Телеграм-бот — отдельный проект/этап (можно описать как Add-on).