Процесс участия в инвестициях
Полный путь пользователя от обнаружения стратегии до активного управления инвестициями.
Обзор
Инвестиционный процесс включает:
- Обнаружение и изучение стратегий
- Инициация участия
- Многоэтапный процесс участия
- Оплата и подтверждение
- Управление портфелем
- Отслеживание доходности и обработка погашения
Основная диаграмма процесса
Детали этапов
1. Обнаружение стратегий
Эндпоинт: GET /strategies
Параметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
| category | string | Slug категории |
| riskLevel | string | LOW, MEDIUM, HIGH, VERY_HIGH |
| minAmount | number | Фильтр минимальной инвестиции |
| maxReturn | number | Фильтр максимальной ожидаемой доходности |
| duration | string | SHORT (< 6 мес), MEDIUM (6-12 мес), LONG (> 12 мес) |
| sort | string | popular, newest, return_desc, min_amount_asc |
| page | number | Номер страницы |
| limit | number | Элементов на страницу |
Элемент списка стратегий:
{
"id": "uuid",
"name": "Commercial Real Estate Fund",
"slug": "commercial-real-estate-fund",
"shortDescription": "Diversified portfolio of commercial properties",
"riskLevel": "MEDIUM",
"minAmount": 50000.00,
"expectedReturnMin": 12.0,
"expectedReturnMax": 18.0,
"durationMonths": 24,
"imageUrl": "https://cdn.../strategy.jpg",
"participantsCount": 245,
"totalInvested": 15000000.00,
"status": "ACTIVE"
}2. Детали стратегии
Эндпоинт: GET /strategies/{slug}
Ответ:
{
"id": "uuid",
"name": "Commercial Real Estate Fund",
"slug": "commercial-real-estate-fund",
"shortDescription": "Diversified portfolio of commercial properties",
"description": "Full HTML description with investment thesis...",
"terms": "Full terms and conditions...",
"riskLevel": "MEDIUM",
"riskDisclosure": "Investment risks description...",
"minAmount": 50000.00,
"maxAmount": 5000000.00,
"durationMonths": 24,
"expectedReturnMin": 12.0,
"expectedReturnMax": 18.0,
"payoutSchedule": "QUARTERLY",
"earlyWithdrawalAllowed": true,
"earlyWithdrawalPenalty": 5.0,
"documents": [
{
"name": "Investment Memorandum",
"type": "PDF",
"url": "https://cdn.../memorandum.pdf"
},
{
"name": "Risk Disclosure Statement",
"type": "PDF",
"url": "https://cdn.../risk-disclosure.pdf"
}
],
"participationSteps": [
{
"stepNumber": 1,
"title": "Select Investment Amount",
"stepType": "FORM",
"isRequired": true
},
{
"stepNumber": 2,
"title": "Review Terms & Risk Disclosure",
"stepType": "CONFIRMATION",
"isRequired": true
},
{
"stepNumber": 3,
"title": "Payment",
"stepType": "PAYMENT",
"isRequired": true
}
],
"category": {
"id": "uuid",
"name": "Real Estate",
"slug": "real-estate"
},
"stats": {
"participantsCount": 245,
"totalInvested": 15000000.00,
"averageInvestment": 61224.49
},
"status": "ACTIVE",
"publishedAt": "2024-01-01T00:00:00Z"
}3. Начало участия
Эндпоинт: POST /strategies/{id}/participate
Требования к участию:
| Требование | Проверка |
|---|---|
| Пользователь авторизован | Валидный JWT-токен |
| Email подтвержден | user.email_verified_at IS NOT NULL |
| KYC подтвержден | kyc_verification.status = 'APPROVED' |
| Достаточный уровень KYC | На основе суммы инвестиции |
| Нет ожидающего участия | Для той же стратегии |
Требования к уровню KYC:
| Уровень KYC | Максимальная инвестиция |
|---|---|
| BASIC | Не разрешено |
| STANDARD | 1,000,000 RUB |
| ENHANCED | Без ограничений |
Ответ:
{
"participationId": "uuid",
"strategyId": "uuid",
"currentStep": 1,
"totalSteps": 3,
"status": "IN_PROGRESS",
"nextStep": {
"stepNumber": 1,
"title": "Select Investment Amount",
"stepType": "FORM",
"config": {
"minAmount": 50000,
"maxAmount": 5000000,
"currency": "RUB",
"suggestedAmounts": [50000, 100000, 250000, 500000]
}
}
}4. Шаг 1: Выбор суммы
Эндпоинт: POST /participations/{id}/steps/1
Запрос:
{
"amount": 100000.00,
"currency": "RUB"
}Правила валидации:
| Правило | Ограничение |
|---|---|
| Сумма | >= strategy.min_amount |
| Сумма | <= strategy.max_amount (если задан) |
| Сумма | <= лимит уровня KYC пользователя |
| Валюта | Должна совпадать с валютой стратегии |
Сценарии ошибок:
| Сценарий | Код ошибки | Сообщение |
|---|---|---|
| Ниже минимума | BELOW_MINIMUM | "Минимальная инвестиция X RUB" |
| Выше максимума | ABOVE_MAXIMUM | "Максимальная инвестиция X RUB" |
| Превышен лимит KYC | KYC_LIMIT_EXCEEDED | "Повысьте уровень KYC для больших инвестиций" |
5. Шаг 2: Ознакомление с условиями
Эндпоинт: POST /participations/{id}/steps/2
Запрос:
{
"acceptTerms": true,
"acceptRiskDisclosure": true,
"acknowledgeNoGuarantee": true,
"confirmOwnFunds": true
}Обязательные подтверждения:
| Поле | Описание |
|---|---|
| acceptTerms | Принять условия инвестирования |
| acceptRiskDisclosure | Подтвердить ознакомление с рисками |
| acknowledgeNoGuarantee | Понимать, что доходность не гарантирована |
| confirmOwnFunds | Подтвердить использование собственных средств |
Записываемые данные:
{
"termsAcceptedAt": "2024-01-15T10:30:00Z",
"riskDisclosureAcceptedAt": "2024-01-15T10:30:00Z",
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0..."
}6. Шаг 3: Оплата
Создание платежного намерения: POST /participations/{id}/payment/intent
Ответ:
{
"paymentIntentId": "pi_xxx",
"clientSecret": "pi_xxx_secret_xxx",
"amount": 100000.00,
"currency": "RUB",
"paymentMethods": ["card", "bank_transfer"]
}Обработка оплаты:
- Frontend создает форму Stripe Elements
- Пользователь вводит платежные данные
- Frontend вызывает
stripe.confirmPayment() - Stripe отправляет webhook на backend
- Backend обновляет статус участия
Подтверждение оплаты:
- Статус меняется на
PENDING_APPROVAL - Устанавливается
submitted_atучастия - Пользователь получает email подтверждения
7. Подтверждение и активация
Методы одобрения:
| Метод | Критерии |
|---|---|
| Автоматическое одобрение | Сумма < 100,000 RUB, пользователь имеет предыдущие инвестиции |
| Ручное одобрение | Сумма >= 100,000 RUB или первый инвестор |
Создаваемая запись портфеля:
{
"id": "uuid",
"userId": "user-uuid",
"participationId": "participation-uuid",
"strategyId": "strategy-uuid",
"investedAmount": 100000.00,
"currentValue": 100000.00,
"totalReturns": 0.00,
"currency": "RUB",
"status": "ACTIVE",
"startDate": "2024-01-15",
"maturityDate": "2026-01-15"
}Запуск комиссии:
- Задание комиссии ставится в очередь для MLM-обработки
- Реферальный партнер получает комиссию
- Смотрите Жизненный цикл комиссии
8. Дашборд портфеля
Эндпоинт: GET /users/me/portfolio
Ответ:
{
"summary": {
"totalInvested": 350000.00,
"currentValue": 378500.00,
"totalReturns": 28500.00,
"overallReturnPercent": 8.14,
"currency": "RUB"
},
"investments": [
{
"id": "portfolio-uuid",
"strategyName": "Commercial Real Estate Fund",
"strategySlug": "commercial-real-estate-fund",
"investedAmount": 100000.00,
"currentValue": 108500.00,
"totalReturns": 8500.00,
"returnPercent": 8.5,
"status": "ACTIVE",
"startDate": "2024-01-15",
"maturityDate": "2026-01-15",
"daysToMaturity": 365,
"nextPayoutDate": "2024-04-15",
"nextPayoutEstimate": 3000.00
}
],
"recentActivity": [
{
"type": "RETURN_CREDITED",
"amount": 3000.00,
"date": "2024-01-01",
"portfolioId": "portfolio-uuid"
}
]
}9. Отслеживание доходности
Расписание расчета доходности:
- Ежедневно: Обновление current_value на основе NAV стратегии
- Ежеквартально: Начисление дохода на баланс пользователя (если график выплат QUARTERLY)
Эндпоинт истории доходности: GET /portfolio/{id}/returns
Ответ:
{
"portfolioId": "uuid",
"investedAmount": 100000.00,
"currentValue": 108500.00,
"totalReturns": 8500.00,
"history": [
{
"period": "2024-Q1",
"startValue": 100000.00,
"endValue": 103000.00,
"returnAmount": 3000.00,
"returnPercent": 3.0,
"paidOut": true,
"paidDate": "2024-04-01"
}
],
"projectedAnnualReturn": 12.0
}10. Обработка погашения
Проверка погашения: Запланированное задание выполняется ежедневно в 00:00 UTC
Опции при погашении:
Опция A: Вывод
POST /portfolio/{id}/withdraw
{
"withdrawalMethod": "BANK_TRANSFER",
"bankDetails": {
"accountNumber": "40817810xxx",
"bankName": "Sberbank",
"bik": "044525225"
}
}Опция B: Реинвестирование
POST /portfolio/{id}/reinvest
{
"strategyId": "same-or-different-uuid",
"amount": "FULL",
"additionalAmount": 0
}Опции реинвестирования:
| Опция | Описание |
|---|---|
| Та же стратегия | Продолжить в текущей стратегии |
| Другая стратегия | Перейти в другую стратегию |
| Частичное реинвестирование | Вывести часть, остальное реинвестировать |
11. Досрочный вывод
Эндпоинт: POST /portfolio/{id}/early-withdraw
Правила досрочного вывода:
| Условие | Штраф |
|---|---|
| Стратегия разрешает досрочный вывод | strategy.early_withdrawal_penalty (напр., 5%) |
| До 6 месяцев | Дополнительно 2% штрафа |
| До 3 месяцев | Дополнительно 5% штрафа |
Запрос:
{
"amount": "FULL",
"withdrawalMethod": "BANK_TRANSFER",
"acknowledgedPenalty": true
}Ответ с расчетом штрафа:
{
"currentValue": 108500.00,
"penaltyPercent": 5.0,
"penaltyAmount": 5425.00,
"netWithdrawal": 103075.00,
"confirmationRequired": true,
"confirmationUrl": "/portfolio/{id}/early-withdraw/confirm"
}Сценарии ошибок
Ошибки участия
| Сценарий | HTTP-код | Код ошибки | Сообщение |
|---|---|---|---|
| KYC не подтвержден | 403 | KYC_REQUIRED | "Сначала пройдите верификацию личности" |
| Недостаточный уровень KYC | 403 | KYC_UPGRADE_REQUIRED | "Повысьте уровень KYC для этой суммы инвестиции" |
| Стратегия закрыта | 422 | STRATEGY_CLOSED | "Эта стратегия больше не принимает инвестиции" |
| Уже участвует | 409 | ALREADY_PARTICIPATING | "У вас есть ожидающее участие" |
Ошибки оплаты
| Сценарий | HTTP-код | Код ошибки | Сообщение |
|---|---|---|---|
| Оплата отклонена | 422 | PAYMENT_DECLINED | "Оплата была отклонена" |
| Таймаут оплаты | 408 | PAYMENT_TIMEOUT | "Сессия оплаты истекла" |
| Несоответствие суммы | 400 | AMOUNT_MISMATCH | "Сумма оплаты не совпадает" |
Ошибки вывода
| Сценарий | HTTP-код | Код ошибки | Сообщение |
|---|---|---|---|
| Досрочный вывод не разрешен | 403 | EARLY_WITHDRAWAL_DISABLED | "Эта стратегия не разрешает досрочный вывод" |
| Уже обрабатывается | 409 | WITHDRAWAL_PENDING | "Вывод уже в процессе" |
| Недостаточный баланс | 422 | INSUFFICIENT_BALANCE | "Стоимость инвестиции недостаточна" |