> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yume.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Расчёт стоимости и регистрация оплаты

> Единое ядро расчёта цены подписки: два режима тарификации (по периодам и продление до даты), правила для интеграций, модулей и лимитов, пропорциональная доплата, автоподбор тарифного периода и защита от подорожания, округление, детализация расчёта, а также регистрация офлайн-оплаты администратором.

Полный перечень терминов и полей расчёта — в [глоссарии](/ru/logic/company-billing/pricing-glossary).

Эта страница описывает, как в Yume считается стоимость подписки: по каким правилам оценивается каждая позиция, чем отличаются два режима тарификации, как ведёт себя расчёт при увеличении и уменьшении лимитов, и как администратор регистрирует оплату, пришедшую не через платёжный шлюз (перевод на счёт, наличные).

## Единое ядро расчёта

Раньше цена считалась в нескольких местах по слегка разным правилам. Теперь весь расчёт выполняет **одно ядро**, и все три сценария оплаты обращаются именно к нему:

| Сценарий                   | Кто инициирует               | Чем заканчивается                              |
| -------------------------- | ---------------------------- | ---------------------------------------------- |
| Оплата из личного кабинета | Компания-клиент              | Счёт и ссылка на оплату во FreedomPay          |
| Автопродление              | Фоновая задача по расписанию | Счёт и прямое списание по сохранённой карте    |
| Регистрация оплаты         | Сотрудник Yume в админке     | Сразу подтверждённый счёт с отметкой «вручную» |

<Info>
  Практическое следствие: предварительная оценка в кабинете, итог в счёте, сумма автопродления и сумма, которую видит оператор в админке, считаются одним и тем же кодом. Расхождений между «показали» и «списали» из-за разной логики больше нет.
</Info>

Ядро принимает **корзину** — список того, что компания хочет получить. Позиция корзины бывает двух видов:

* **Интеграция или модуль** — указывается выбранный тарифный период (тариф).
* **Лимитная позиция** — указывается желаемое итоговое количество (не прирост, а именно то значение, к которому нужно прийти).

На выходе каждая позиция получает цену, границы своего периода и итоговое количество, а корзина — общую сумму.

## Два режима тарификации

Ядро работает в одном из двух режимов. Режим выбирается наличием **целевой даты**.

### Режим «по периодам» (целевая дата не указана)

Обычный режим оплаты из кабинета и автопродления. Каждая позиция тарифицируется по своему периоду:

* интеграция или модуль — за длительность выбранного тарифа;
* лимит — по циклу компании (длительность тарифа её подписки «аренда»), с пропорциональной доплатой при увеличении в середине срока.

### Режим «продление до даты» (целевая дата указана)

Оператор или клиент указывает одну дату, и **все** позиции корзины продлеваются до неё, а цена считается **пропорционально по дням**: цена за период делится на длительность периода и умножается на число оплачиваемых дней.

Дополнительно включаются автоподбор тарифного периода и защита от подорожания (см. ниже). Это основной режим страницы регистрации оплаты.

## Интеграции и модули

Тарифы интеграций бывают двух видов, и ведут себя они принципиально по-разному:

| Вид тарифа     | Что покупается                          | Срок                        | Пропорция                      |
| -------------- | --------------------------------------- | --------------------------- | ------------------------------ |
| Периодный      | Доступ на срок (1 / 3 / 6 / 12 месяцев) | Ограничен датой окончания   | Да, в режиме продления до даты |
| Количественный | Пакет единиц (например, пакет SMS)      | **Без срока** — не истекает | Нет, цена всегда фиксированная |

**Периодный тариф** пристыковывается к концу уже оплаченного срока: начало нового периода — это текущая дата окончания подключения, но не раньше «сейчас». Досрочное продление не сжигает остаток оплаченного времени.

<Note>
  Количественный тариф намеренно не имеет даты окончания: оплаченный пакет единиц расходуется по факту, а не по времени. Целевая дата на такие позиции не влияет — они всегда стоят ровно свою цену.
</Note>

<Warning>
  Только **периодная** позиция считается «покупкой доступа». Это различие важно для бесплатных связанных интеграций (см. ниже): комплект раздаёт сам доступ к модулю, но никогда — расходуемые единицы. Пакет SMS оплачивается всегда, независимо от того, был доступ к модулю куплен или получен бесплатно в комплекте.
</Warning>

## Лимитные позиции

Лимиты (пользовательские места, точки аренды, автомобили, самокаты, мотоциклы) тарифицируются по **циклу самой компании** — это длительность тарифа её основной подписки «аренда» (1, 3, 6 или 12 месяцев). Компания, оплачивающая аренду на год, покупает и места, и технику по годовой цене, на год и с годовым делителем при пропорциональном расчёте. Если тарифа аренды прочитать негде (подписки нет либо у подключения не сохранён тариф), цикл считается месячным.

<Note>
  Цикл берётся из той же подписки, чья дата окончания переносится на все лимиты компании. За счёт этого срок лимита и цена, по которой он тарифицируется, всегда приходят из одного места: остаток срока измеряется в том же цикле, в котором взята цена.
</Note>

Правила:

1. **Платят только за превышение бесплатного объёма.** Единицы внутри бесплатного лимита плана не стоят ничего.
2. **Платят только за прирост.** Если у компании уже оплачено 3 места и она хочет 5 — тарифицируются 2 места, а не 5.
3. **Увеличение в середине действующего срока** — доплата **пропорциональна остатку** срока, а окно лимита не сдвигается: новые единицы «доживают» до той же даты окончания, что и старые.
4. **Увеличение, когда действующего срока нет** (первая покупка или после истечения) — прирост оплачивается за полный цикл компании, и открывается новое окно такой же длительности (месяц, полгода или год).
5. **Уменьшение применяется сразу и бесплатно**, возврата за неиспользованный остаток нет, окно сохраняется.

<Info>
  Если запрошенное количество остаётся внутри бесплатного объёма, расчёт **вообще не обращается к прайсу**. Поэтому ненастроенная цена на какой-то ресурс не ломает весь счёт — она мешает только при попытке купить платные единицы этого ресурса.
</Info>

## Автоподбор тарифного периода

В режиме продления до даты система смотрит, **сколько целых месяцев** реально оплачивается, и сама берёт подходящий по длительности прайс. Поддерживаемые сроки — 1, 3, 6 и 12 месяцев; неподдерживаемая длительность округляется **вниз** до ближайшего поддерживаемого:

| Оплачиваемый срок  | Какой прайс применяется |
| ------------------ | ----------------------- |
| от 1 до 2 месяцев  | месячный                |
| от 3 до 5 месяцев  | трёхмесячный            |
| от 6 до 11 месяцев | полугодовой             |
| от 12 месяцев      | годовой                 |

Так клиент, продлевающий подписку на год одной операцией, получает годовую цену, а не двенадцать месячных. А доплата за единицы, добавленные на три оставшихся месяца, считается по трёхмесячной ставке, а не месячной, растянутой на тот же срок.

<Note>
  Ступени берутся из общего перечня поддерживаемых сроков, поэтому добавление нового тарифного срока не требует правок в логике подбора — так в ладдер и добавился трёхмесячный тариф.
</Note>

Для лимитов подобранный по сроку период **не может оказаться короче цикла компании**: если аренда оплачена на год, то и короткое продление мест считается по годовой ставке за день. Обратное правило работает: длинный срок повышает период даже на месячном плане.

<Warning>
  Если для ресурса не настроена цена нужного периода, расчёт спускается на цикл компании, а затем на месячный — и делитель с длиной нового окна берутся из того же периода, чья цена была найдена. Иначе строка получилась бы вида «месячная цена за годовой период».
</Warning>

<Note>
  Дни считаются **по календарным датам**, а не по разнице моментов времени. Иначе продление «ровно на 180 дней», выбранное днём, давало бы 179 дней и теряло полугодовой тариф.
</Note>

### Защита от подорожания

Пропорциональная цена короткого срока не должна превышать фиксированную цену более длинного пакета, который этот срок и так покрывает. Поэтому после подбора тарифа система сравнивает пропорциональную цену с ценой ближайших длинных пакетов (полугодового и годового) и, если пакет **дешевле**, берёт цену пакета.

Практический смысл: продление на 179 дней не может стоить дороже полугодового тарифа. В детализации такая позиция показывается как купленный пакет, а не как пропорция.

## Округление

Итоговая цена каждой позиции округляется **до десятков тенге** (обычное арифметическое округление). Круглые тарифы остаются как есть; дробные результаты пропорционального расчёта приводятся к десяткам.

## Детализация расчёта

И кабинет, и админка получают из ядра одинаковые **строки детализации**. По каждой строке видно:

* название позиции (для интеграции — с указанием тарифа: дни или количество единиц);
* количество оплачиваемых единиц (для лимитов);
* цену за период и длительность этого периода;
* сколько дней фактически тарифицируется;
* сумму по строке;
* до какой даты действует результат.

### Бесплатные связанные интеграции

Некоторые интеграции идут «в комплекте» к другим: при оплате основной интеграции связанная подключается автоматически и бесплатно на тот же срок. Такие позиции добавляются в детализацию отдельными строками с пометкой «бесплатно» — чтобы клиент и оператор видели полный состав того, что даёт оплата.

<Note>
  Связанные интеграции подключаются сигналом при сохранении основного подключения. В детализации они показаны справочно и в сумму счёта не входят.
</Note>

<Warning>
  Бесплатно раздаётся **только доступ** — то есть периодная позиция. Количественный пакет (SMS, документы) в комплект не попадает никогда: он не имеет срока, ничего не «продлевает» и всегда оплачивается по своей цене, даже если сам модуль достался компании бесплатно вместе с другой оплаченной интеграцией.
</Warning>

## Регистрация оплаты администратором

Для оплат, пришедших мимо платёжного шлюза (банковский перевод, наличные), в админке есть отдельная страница **«Регистрация оплаты»**. Она доступна с дашборда и из карточки компании, и открыта только сотрудникам Yume.

Сценарий работы оператора:

<Steps>
  <Step title="Выбор компании">
    Компания выбирается поиском по названию, телефону или email. После выбора страница подтягивает её текущее состояние: действующие лимиты (текущее значение, бесплатный объём, дата окончания) и все интеграции со статусом «активна» / «до такой-то даты» / «истекла» / «не подключено».
  </Step>

  <Step title="Сборка корзины">
    Действующие периодные подписки компании **сразу попадают в корзину** — обычная задача оператора это продление. Лимиты правятся счётчиками, подписки добавляются диалогом «интеграция → вариация → тариф». На одну интеграцию берётся один тариф.
  </Step>

  <Step title="Продление до даты (необязательно)">
    Если указана целевая дата, вся корзина продлевается до неё по пропорциональному режиму. В этом режиме в расчёт попадают и те лимиты, количество которых не менялось, — иначе их срок не продлился бы.
  </Step>

  <Step title="Проверка суммы">
    Каждое изменение пересчитывается на сервере тем же ядром: оператор видит детализацию построчно и итог в закреплённой строке внизу. Расчёт только считает и ничего не сохраняет.
  </Step>

  <Step title="Регистрация">
    По кнопке создаётся счёт, сразу переводится в статус «подтверждён» со списанной суммой, равной итогу, и помечается как **оплата, зарегистрированная вручную** (с автором и комментарием). Дальше срабатывает штатный провижининг — тот же, что после оплаты картой.
  </Step>
</Steps>

<Info>
  Счёт создаётся сначала в статусе «в ожидании», затем позиции, и только потом статус меняется на «подтверждён». Порядок важен: провижининг читает позиции счёта, поэтому к моменту подтверждения они уже должны существовать.
</Info>

Ручные оплаты видны отдельно: на дашборде — счётчиком «вручную» в карточке выручки, в карточке счёта и в уведомлении администраторам — строкой «Оплата зарегистрирована вручную» с комментарием оператора.

## «Продления на неделе» — кто продлевается и на какую сумму

Блок на дашборде админки показывает компании, у которых платная подписка заканчивается **в течение 7 дней**, и ожидаемый доход, если все они продлятся по текущим тарифам. Блок смотрит вперёд и поэтому **не зависит** от выбранного на дашборде периода.

Три показателя сверху:

| Показатель             | Что означает                                                                      |
| ---------------------- | --------------------------------------------------------------------------------- |
| Компаний к продлению   | Сколько компаний упирается в срок, и сколько из них с автосписанием / вручную     |
| Ожидаемый доход        | Сумма, если продлятся все, по текущим тарифам                                     |
| Спишется автоматически | Часть суммы, которую снимет автопродление; остальное требует связаться с клиентом |

В таблице по каждой компании: дата окончания, сколько дней осталось, что именно нужно продлить, будет ли списание автоматическим (есть активная карта с автопродлением) и ожидаемая сумма. Название компании — ссылка на страницу регистрации оплаты с уже выбранной компанией.

<Note>
  Что считается «к продлению»: только подписки, продаваемые **по времени**. Не попадают в блок:

  * **активные демо** — конверсия пробного периода это другая воронка, и её сумма завысила бы прогноз;
  * **бесплатные связанные интеграции** — у них нет тарифа вовсе, они и так продлеваются вместе с оплаченной;
  * **количественные пакеты** (SMS, документы) — они расходуются по факту, а не по сроку.

  Если у подключения нет своего тарифа (так бывает у основного модуля аренды), для прогноза берётся месячный тариф этой интеграции в тенге. Подписки, продаваемые по времени, но без тарифа в тенге, показываются пометкой «без тарифа в ₸» и в сумму не входят.
</Note>

## Способ оплаты в карточке счёта

По оплаченному счёту система показывает, **чем именно** он оплачен — как по подтверждённому, так и по возвращённому (он тоже был оплачен, и история должна это показывать). Для оплаты через шлюз это платёжная система, маскированный номер карты, срок действия, держатель и способ оплаты (карта, Apple Pay, Google Pay, кошелёк, баланс). Для ручной регистрации — пометка о ручной оплате и комментарий оператора. По отклонённому счёту сведений нет: данные карты записываются только на успешном ответе шлюза.

Эти данные доступны и клиенту в истории счетов, и сотруднику в админке, и попадают в уведомление администраторам об оплате.

## Связанные страницы

<CardGroup cols={2}>
  <Card title="Глоссарий: расчёт стоимости" icon="book" href="/ru/logic/company-billing/pricing-glossary">
    Термины расчёта, режимы, поля строк детализации и данных ручной оплаты.
  </Card>

  <Card title="Инвойсы и платежи" icon="file-invoice-dollar" href="/ru/logic/company-billing/invoices">
    Жизненный цикл счёта, оплата через шлюз, вебхуки и провижининг по подтверждению.
  </Card>

  <Card title="Лимиты и тарификация" icon="gauge-high" href="/ru/logic/company-billing/limits">
    Модель лимита, прайс по периодам, срок действия лимита и пересчёт потребления.
  </Card>

  <Card title="Платёжные шлюзы" icon="money-bill-transfer" href="/ru/logic/company-billing/gateways">
    FreedomPay: подпись запросов, проверка входящих колбэков, списание и возврат.
  </Card>

  <Card title="Компании и биллинг" icon="building" href="/ru/logic/company-billing">
    Обзор всего модуля компаний, подписок и платежей.
  </Card>
</CardGroup>
