Skip to content

Модуль Investment (Стратегии, Участия)

Обзор

Модуль Investment управляет инвестиционным маркетплейсом платформы IWM, позволяя пользователям участвовать в различных инвестиционных стратегиях. Он обеспечивает конфигурацию стратегий, многошаговые мастера участия, управление жизненным циклом инвестиций, отслеживание портфеля и распределение доходности. Модуль интегрируется с модулем MLM для реферальной атрибуции и расчета комиссий.

Зоны ответственности

  • Управление инвестиционными стратегиями
  • Категоризация и поиск стратегий
  • Многошаговый мастер участия
  • Отслеживание жизненного цикла инвестиций
  • Агрегация и отчетность по портфелю
  • Расчет и распределение доходности
  • Обработка досрочного вывода
  • Реферальная атрибуция для инвестиций

Доменные сущности

Strategy

Определение инвестиционной стратегии.

ПолеТипОписание
idUUIDИдентификатор стратегии
category_idUUIDСсылка на категорию
nameVARCHAR(200)Название стратегии
codeVARCHAR(50)Уникальный код стратегии
slugVARCHAR(200)URL-дружественный идентификатор
short_descriptionVARCHAR(500)Краткое описание
descriptionTEXTПолное описание
termsTEXTЮридические условия
risk_levelENUMLOW, MEDIUM, HIGH, VERY_HIGH
min_amountDECIMALМинимальная инвестиция
max_amountDECIMALМаксимальная инвестиция (опционально)
duration_monthsINTСрок инвестиции
expected_return_minDECIMALМинимальная ожидаемая доходность %
expected_return_maxDECIMALМаксимальная ожидаемая доходность %
image_urlVARCHAR(500)Изображение стратегии
documents_urlsJSONBСвязанные документы
statusENUMСтатус стратегии
participants_countINTАктивных участников
total_investedDECIMALОбщая сумма инвестиций
published_atTIMESTAMPДата публикации

StrategyCategory

Категория для организации стратегий.

ПолеТипОписание
idUUIDИдентификатор категории
nameVARCHAR(100)Название категории
slugVARCHAR(100)URL-дружественный идентификатор
descriptionTEXTОписание категории
parent_idUUIDРодительская категория
sort_orderINTПорядок отображения
is_activeBOOLEANСтатус активности

ParticipationStep

Конфигурация шага мастера для стратегии.

ПолеТипОписание
idUUIDИдентификатор шага
strategy_idUUIDСсылка на стратегию
step_numberINTПорядок шага
titleVARCHAR(200)Заголовок шага
descriptionTEXTИнструкции по шагу
step_typeENUMТип шага
configJSONBКонфигурация шага
is_requiredBOOLEANФлаг обязательности

Participation

Участие пользователя в инвестиции.

ПолеТипОписание
idUUIDИдентификатор участия
user_idUUIDСсылка на инвестора
strategy_idUUIDСсылка на стратегию
current_stepINTТекущий шаг мастера
step_dataJSONBСобранные данные мастера
amountDECIMALСумма инвестиции
currencyVARCHAR(3)Код валюты
statusENUMСтатус участия
referring_partner_idUUIDMLM атрибуция
started_atTIMESTAMPВремя начала мастера
submitted_atTIMESTAMPВремя подачи
approved_atTIMESTAMPВремя одобрения
completed_atTIMESTAMPВремя завершения

Portfolio

Запись активного инвестиционного портфеля пользователя.

ПолеТипОписание
idUUIDИдентификатор записи портфеля
user_idUUIDСсылка на инвестора
participation_idUUIDИсходное участие
strategy_idUUIDСсылка на стратегию
invested_amountDECIMALПервоначальная инвестиция
current_valueDECIMALТекущая стоимость
total_returnsDECIMALНакопленная доходность
currencyVARCHAR(3)Код валюты
statusENUMСтатус портфеля
start_dateDATEДата начала инвестиции
maturity_dateDATEОжидаемый срок погашения
last_updated_atTIMESTAMPПоследнее обновление стоимости

Типы стратегий и конфигурация

Уровни риска

Уровень рискаОжидаемая доходностьВолатильностьПодходит для
LOW5-8% годовыхНизкаяКонсервативных инвесторов
MEDIUM8-15% годовыхУмереннаяСбалансированных портфелей
HIGH15-25% годовыхВысокаяИщущих рост
VERY_HIGH25%+ годовыхОчень высокаяТолерантных к риску инвесторов

Поток статусов стратегии

Пример конфигурации стратегии

json
{
  "name": "Growth Portfolio 2024",
  "code": "GROWTH_2024",
  "risk_level": "HIGH",
  "min_amount": 50000,
  "max_amount": 5000000,
  "duration_months": 12,
  "expected_return_min": 15.0,
  "expected_return_max": 25.0,
  "terms": "Investment terms and conditions...",
  "documents_urls": [
    {"type": "prospectus", "url": "/docs/growth-2024-prospectus.pdf"},
    {"type": "risk_disclosure", "url": "/docs/risk-disclosure.pdf"}
  ]
}

Мастер участия

Многошаговый процесс

Мастер участия проводит пользователей через процесс инвестирования:

Типы шагов

ТипОписаниеКонфигурация
INFOОтображение информации только для чтенияcontent, acknowledgement
FORMФорма сбора данныхfields, validation rules
DOCUMENT_UPLOADТребование загрузки файлаdocument_types, max_size
KYC_CHECKПроверка KYC верификацииrequired_level
PAYMENTОбработка платежаpayment_methods
CONFIRMATIONФинальная проверка и подтверждениеsummary_fields

Примеры конфигурации шагов

Шаг INFO:

json
{
  "step_type": "INFO",
  "config": {
    "content": "Strategy overview and risk disclosure...",
    "acknowledgement_required": true,
    "acknowledgement_text": "I have read and understood the risks"
  }
}

Шаг FORM:

json
{
  "step_type": "FORM",
  "config": {
    "fields": [
      {
        "name": "investment_amount",
        "type": "number",
        "label": "Investment Amount",
        "min": 50000,
        "max": 5000000,
        "required": true
      },
      {
        "name": "investment_goal",
        "type": "select",
        "label": "Investment Goal",
        "options": ["retirement", "education", "wealth_growth"],
        "required": true
      }
    ]
  }
}

Шаг KYC_CHECK:

json
{
  "step_type": "KYC_CHECK",
  "config": {
    "required_level": "STANDARD",
    "allow_skip": false,
    "redirect_to_kyc": true
  }
}

Валидация на каждом шаге


Жизненный цикл инвестиции

Поток статусов участия

Определения статусов

СтатусОписание
IN_PROGRESSПользователь проходит шаги мастера
PENDING_APPROVALПодано, ожидает одобрения
ACTIVEИнвестиция активна
COMPLETEDИнвестиция успешно погашена
WITHDRAWNОбработан досрочный вывод
CANCELLEDПользователь отменил до активации
REJECTEDАдминистратор отклонил заявку

Поток статусов портфеля


Агрегация портфеля

Расчеты портфеля

Метрики портфеля

МетрикаРасчет
Всего инвестированоСумма всех invested_amount
Текущая стоимостьСумма всех current_value
Общая доходностьСумма всех total_returns
ROI(Текущая стоимость - Всего инвестировано) / Всего инвестировано * 100
Активные инвестицииКоличество где status = ACTIVE

Портфель по стратегиям

sql
SELECT
    s.name as strategy_name,
    COUNT(*) as investments,
    SUM(p.invested_amount) as total_invested,
    SUM(p.current_value) as current_value,
    SUM(p.total_returns) as returns
FROM portfolios p
JOIN strategies s ON p.strategy_id = s.id
WHERE p.user_id = :userId
GROUP BY s.id, s.name;

Распределение доходности

Процесс распределения

Методы расчета доходности

МетодОписаниеПрименение
FixedФиксированный процент за периодКонсервативные стратегии
VariableНа основе рыночной доходностиСтратегии роста
TieredРазные ставки в зависимости от суммыСтимулы для крупных инвесторов
CompoundРеинвестирование доходностиДолгосрочные стратегии

Расписание распределения доходности

ЧастотаОписание
MonthlyДоходность рассчитывается и распределяется ежемесячно
QuarterlyКаждые 3 месяца
At MaturityЕдиновременное распределение в конце срока
ContinuousЕжедневное начисление, ежемесячное распределение

Зачисление доходности

Доходность может быть зачислена на:

  1. Баланс пользователя - Доступно для вывода или реинвестирования
  2. Реинвестирование - Автоматически добавляется в портфель
  3. MLM баланс - Если пользователь также является партнером

Досрочный вывод

Правила вывода

Время выводаШтрафУсловия
0-3 месяца10% от доходностиВозвращается полная сумма вложения
3-6 месяцев5% от доходностиВозвращается полная сумма вложения
6-12 месяцев2% от доходностиВозвращается полная сумма вложения
После погашенияБез штрафаДоступна полная стоимость

Процесс досрочного вывода

Расчет штрафа

typescript
function calculateWithdrawalAmount(
  portfolio: Portfolio,
  currentDate: Date
): WithdrawalResult {
  const monthsInvested = differenceInMonths(currentDate, portfolio.start_date);

  let penaltyRate = 0;
  if (monthsInvested < 3) penaltyRate = 0.10;
  else if (monthsInvested < 6) penaltyRate = 0.05;
  else if (monthsInvested < 12) penaltyRate = 0.02;

  const returns = portfolio.current_value - portfolio.invested_amount;
  const penalty = returns * penaltyRate;
  const finalAmount = portfolio.current_value - penalty;

  return {
    invested_amount: portfolio.invested_amount,
    returns: returns,
    penalty: penalty,
    final_amount: finalAmount
  };
}

Публикуемые события

СобытиеТриггерPayload
StrategyCreatedСоздана новая стратегияstrategyId, code, name
StrategyPublishedСтратегия опубликованаstrategyId, publishedAt
StrategyStatusChangedПереход статусаstrategyId, fromStatus, toStatus
ParticipationStartedПользователь начал мастерparticipationId, userId, strategyId
ParticipationStepCompletedШаг мастера завершенparticipationId, stepNumber, stepData
ParticipationSubmittedМастер завершенparticipationId, userId, amount
ParticipationApprovedАдминистратор одобрилparticipationId, approvedBy
ParticipationRejectedАдминистратор отклонилparticipationId, reason
ParticipationActivatedИнвестиция активнаparticipationId, portfolioId
ParticipationCancelledПользователь отменилparticipationId, reason
InvestmentMaturedСрок завершенportfolioId, finalValue
ReturnsDistributedДоходность зачисленаportfolioId, amount, period
WithdrawalRequestedПользователь запросил выводportfolioId, amount
WithdrawalCompletedВывод обработанportfolioId, amount, penalty
PortfolioValueUpdatedСтоимость пересчитанаportfolioId, previousValue, newValue

Потребляемые события

СобытиеИсточникОбработчик
ReferralAttributedMLMСохранить реферала в участии
PaymentReceivedCommerceАктивировать участие
PaymentFailedCommerceОтменить участие
KycApprovedCoreРазблокировать участия, ожидающие KYC

Бизнес-правила и инварианты

Правила стратегий

  1. Минимальная сумма должна быть положительной
  2. Максимальная сумма должна быть больше минимальной (если задана)
  3. Максимальная ожидаемая доходность должна быть >= минимальной
  4. Срок должен быть положительным (если задан)
  5. Только стратегии со статусом ACTIVE принимают новые участия

Правила участия

  1. Пользователь не может иметь несколько участий IN_PROGRESS для одной стратегии
  2. Сумма должна быть в пределах min/max стратегии
  3. Все обязательные шаги должны быть завершены перед подачей
  4. Уровень KYC должен соответствовать требованиям стратегии
  5. Платеж должен быть получен для активации

Правила портфеля

  1. Текущая стоимость не может быть отрицательной
  2. Сумма инвестиции неизменна после создания
  3. Доходность зачисляется в total_returns
  4. Статус должен следовать определенной машине состояний
  5. Дата погашения рассчитывается как start_date + duration

Правила доходности

  1. Доходность рассчитывается на основе конфигурации стратегии
  2. Штрафы за досрочный вывод применяются согласно правилам
  3. Доходность зачисляется на баланс пользователя или реинвестируется
  4. MLM комиссии начисляются при активации (не с доходности)

Точки интеграции

Предоставляет другим модулям

ИнтерфейсПотребителиНазначение
IInvestmentServiceMLMПолучить детали инвестиции для комиссии
IPortfolioServiceCoreСводка портфеля пользователя

Потребляет от других модулей

ИнтерфейсПровайдерНазначение
IUserLookupServiceCoreПолучить данные инвестора
IKycStatusServiceCoreПроверить уровень KYC для участия
IAttributionServiceMLMПолучить реферального партнера для инвестиции
IPaymentServiceCommerceОбработать платежи по инвестиции

Связанные документы