Ручные счета и бухгалтерская выгрузка Cloud
Mockarty Cloud поддерживает B2B-оплату банковским переводом, не выдавая её за операцию платёжного провайдера. Owner, Admin или Billing Manager может выбрать Запросить счёт для платного тарифа. Cloud фиксирует точных продавца, тариф, версию цены, пакет политик, валюту, количество, налог и итоговую сумму в неизменяемом заказе и создаёт открытый счёт. На этом этапе подписка и права доступа не меняются.
Cloud API должен использовать PostgreSQL и запускаться с CLOUD_API_BILLING_MODE=manual_invoice или CLOUD_API_BILLING_MODE=provider. Первый режим предлагает только оплату счёта банковским переводом; второй может одновременно предлагать hosted checkout провайдера и ручной счёт. В режиме free платные пути отключены. Для ручного счёта credentials платёжного провайдера не нужны.
Пользовательский сценарий
Откройте Подписка, выберите тариф и нажмите Запросить счёт. Запрос требует недавнего step-up подтверждения и заголовка Idempotency-Key, обозначающего именно эту операцию. Повтор с тем же ключом после потери ответа возвращает тот же замороженный заказ; попытка изменить тариф, Space или количество с этим ключом будет отклонена.
Панель ручных счетов показывает одно из устойчивых состояний:
- Ожидает перевода: счёт открыт, банковские доказательства ещё не зафиксированы.
- Ожидает финансового подтверждения: биллинг-поддержка записала односторонние дайджесты; доступ ещё не изменён.
- Подтверждён: независимый финансовый оператор подтвердил перевод, замороженная подписка активирована.
- Отклонён или Отменён: заказ и счёт закрыты без выдачи доступа.
Неоплаченный запрос можно отменить на той же панели. Если перевод уже передан на финансовую проверку, клиент не может отменить его самостоятельно: обратитесь в поддержку для сверки платежа вместо создания второго счёта.
Подтверждение двумя операторами
Откройте Консоль оператора → Очередь счетов на ручную оплату. Биллинг-поддержка указывает референс банковской операции и SHA-256-дайджест проверенной выписки. Не вставляйте в очередь саму выписку или платёжные реквизиты.
Затем другой финансовый оператор проверяет счёт и подтверждает или отклоняет его. Тот, кто зафиксировал перевод, не может подтвердить его сам. После подтверждения счёт считается оплаченным, а подписка активируется. Исходная цена не меняется, и подтверждение не выдаётся за успешный онлайн-платёж.
Для отклонения используется ограниченный неперсональный код причины. Не помещайте имена, номера счетов, платёжные реквизиты или свободный текст в поля причин.
Погашение бонусом
Счёт можно погасить не деньгами, а предоставлением: бетта-доступом, промо-кампанией или условием партнёрского соглашения. Для этого в очереди счетов есть Погасить бонусом рядом с записью перевода.
Укажите основание предоставления (например, промокод или соглашение), выберите причину в форме и добавьте запрошенный дайджест подтверждающего документа. Не вводите здесь платёжные данные клиента.
Как и при банковском переводе, решение должен подтвердить второй финансовый оператор. После подтверждения подписка активируется. В бухгалтерской записи предоставление отличается от поступившей оплаты.
Право погасить бонусом лежит на уровне подтверждающего финансового оператора, а не поддержки: раздать продукт — коммерческое решение.
MCP оператора
Операторский токен с правом чтения видит те же очереди по MCP: cloud_manual_invoices_list (фильтр по status; evidence_pending — состояние, которое ждёт второго финансового оператора) и cloud_billing_credits_list (proposed ждёт решения финансиста). Обе очереди входят в первый взгляд cloud_operator_attention как manual_invoices_evidence_pending и billing_credits_proposed. Сами решения остаются в консоли: MCP-поверхность только читает.
Бухгалтерская выгрузка
Оператор с бухгалтерскими правами может открыть Консоль оператора → Бухгалтерская выгрузка и выбрать период не более одного года. Неизменяемая проекция содержит стабильные ID сущностей, код продавца, валюту, версии цены и политики, net, налог, gross, а при наличии — происхождение провайдера и возврата, а также дайджест выгрузки. В ней намеренно нет рабочих данных клиента, адресов электронной почты, банковских референсов, исходных выписок, секретов коннекторов и тел ответов провайдеров.
Выгрузка является входом для бухгалтерского учёта, но не доказательством завершения расчёта провайдером или доставки фискального чека. Перед закрытием расхождения сопоставьте её со Сверкой коммерческих операций и записью банка или провайдера.
Биллинговые кредиты и восстановление подписки
В консоли оператора есть раздел Кредиты и восстановление подписки для ограниченных корректировок:
- Биллинг-поддержка может предложить кредит только для уже оплаченного заказа. Предлагаемая сумма вместе с успешными возвратами и другими предложенными или выпущенными кредитами не может превысить оплаченную сумму заказа.
- Точное поколение кейса подтверждает или отклоняет другой финансовый оператор. Подтверждённый кредит становится неизменяемым компенсационным бухгалтерским фактом и отображается клиенту в разделе Подписка. Клиент получает об этом письмо и уведомление в кабинете с суммой и причиной. Оператор, предложивший кредит, не может его решить: консоль откажет с кодом
money_adjustment_self_decision. - Выпущенный кредит не является деньгами, операцией платёжного провайдера или автоматически расходуемым кошельком. Налоговый эффект не угадывается при выпуске: применение к будущему счёту будет отдельной операцией ценообразования и учёта.
- Финансовый оператор может восстановить проекцию подписки только из точных оплаченных заказа и счёта. Cloud сам выводит тариф, расчётный период, seats и зафиксированные коммерческие ссылки; подставить произвольные значения в запрос нельзя.
Перед восстановлением укажите ID подписки и нажмите Загрузить текущее поколение. Полученное поколение нужно отправить без изменений. Команда отклоняется, если оплаченный период уже закончился, источник возвращён или оспорен, количество seats больше лимита, проекция уже корректна или другой repair успел изменить поколение. Каждый отказ называет причину (repair_period_ended, repair_source_not_settled, repair_seats_exceed, repair_not_needed, money_adjustment_conflict). Отменённую или истёкшую подписку восстановить нельзя: её коммерческая выборка закрыта, а учёт никогда не открывает закрытое (repair_selection_closed); клиент оформляет подписку заново, поддержка может выдать кредит за неиспользованный период. Успешная операция в той же аудируемой транзакции помечает entitlement-проекции устаревшими и сверяет экономику участников.
Правила восстановления
- После потери ответа повторяйте запрос с тем же
Idempotency-Key, не создавайте вторую бизнес-операцию. - После
409перечитайте кейс: другой оператор мог изменить его поколение. - Не подтверждайте перевод только по скриншоту или сообщению клиента. Сверяйте банковскую запись и сохранённый дайджест документа.
- Если итог подтверждения неясен, прочитайте кейс и бухгалтерскую выгрузку до повтора. Успешная атомарная транзакция возвращается точным replay, противоречащий повтор отклоняется.
- Не используйте repair подписки для продления истёкшего периода, подмены цены или замены сверки с провайдером и фискализацией. Сначала исправьте авторитетный исходный факт; repair предназначен только для доказуемо устаревшей проекции.