Рублёвый B2B-биллинг окупается раньше, чем кажется
Разбираем, когда рублёвый B2B-биллинг перекрывает комиссии, валютный риск, НДС и трудозатраты финансовой команды при закупке LLM API.

У рублёвого счёта нет универсального порога в миллионах токенов. Он может снизить полную стоимость закупки уже на небольшом пилоте, а может не окупиться и на миллиарде токенов. Результат определяют четыре вещи: разница в цене самого потребления, банковские и платёжные потери, налоговый режим покупателя и часы людей, которые проводят платёж и закрывают месяц.
Поэтому ответ вида «после 100 миллионов токенов» почти всегда выдуман. Сначала надо получить порог в рублях за месяц, затем перевести его в токены с учётом моделей, долей входа и выхода, кэшированных токенов и служебных запросов. Я покажу расчёт, который можно отдать финансовому директору вместе с исходными допущениями, а не прятать в презентации отдела ML.
Порог начинается с расходов, а не с токенов
Количество токенов само по себе не задаёт стоимость закупки. Миллион входных токенов дешёвой open-weight модели и миллион выходных токенов frontier-модели могут отличаться по цене на порядок, поэтому общий счётчик запросов плохо подходит для решения о договоре.
Нужна базовая сумма потребления S без НДС и сопутствующих расходов. Для каждой модели отдельно умножьте входные, выходные и кэшированные токены на соответствующие ставки, затем сложите строки. Если провайдер тарифицирует reasoning tokens, изображения, поиск или хранение контекста отдельно, добавьте их отдельными строками. Не прячьте такие позиции в «прочее»: именно они часто объясняют расхождение между логами шлюза и счётом.
Сравнивать надо один и тот же набор запросов за один период. Если рублёвый маршрут использует другую модель, иной уровень кэширования или запасной маршрут при ошибке, это уже архитектурное сравнение, а не сравнение способов оплаты. Сначала зафиксируйте модельный микс и политику повторов, иначе выгодный биллинг окажется просто более дешёвым набором моделей.
Из журнала надо убрать бесплатные тестовые кредиты, разовые компенсации и лимиты, которые не повторятся в рабочем договоре. Они полезны для пилота, но занижают регулярную стоимость иностранного маршрута. Точно так же нельзя переносить в прогноз скидку за обязательный объём, пока закупка не готова взять этот объём и оплатить неиспользованный остаток. В базовой строке должна остаться цена нагрузки, которую команда действительно ожидает отправить.
Повторы после тайм-аута заслуживают отдельной проверки. Клиент может повторить запрос, хотя провайдер уже обработал первый, и тогда финансовый счёт увидит два выполнения, а продуктовая аналитика одно. Если шлюзы по-разному обрабатывают такие повторы, зафиксируйте их как отдельный операционный эффект и не приписывайте биллингу. Решение о валюте счёта не должно маскировать решение о надёжности клиента.
Есть ещё одна неприятная деталь: порог может оказаться не нижней, а верхней границей. Если рублёвый поставщик дороже на единицу потребления, но экономит фиксированные часы бухгалтерии, он выигрывает на малом объёме и проигрывает после определённой суммы. Если его переменные затраты ниже, экономия растёт вместе с потреблением. Фраза «чем больше токенов, тем выгоднее рубли» верна только во втором случае.
Три суммы не дают НДС исказить решение
Для закупки LLM API надо считать три показателя: расход в управленческом P&L, денежный отток и TCO процесса. Они отвечают на разные вопросы, и сводить их в одну колонку опасно.
Расход в P&L показывает стоимость услуги после вычитаемого НДС. Денежный отток показывает, сколько рублей уйдёт со счёта в день оплаты, включая налог и временно связанный оборотный капитал. TCO добавляет комиссии, курсовые потери, налоговые издержки, труд сотрудников и стоимость задержек. Финансовый директор планирует ликвидность по второй цифре, руководитель продукта смотрит на первую, а решение о способе закупки надо проверять по третьей.
С 1 января 2026 года основная ставка НДС в России составляет 22%. ФНС отдельно указывает: входной НДС можно принять к вычету после принятия услуги к учёту при наличии счёта-фактуры и первичных документов. Значит, 22% нельзя автоматически записывать ни в расход, ни в экономию.
Если компания применяет общую ставку и принимает весь входной НДС к вычету, в TCO остаются стоимость финансирования этого временного оттока и труд на документы. Если компания освобождена от НДС, применяет режим без права на вычет или использует API в смешанной деятельности, невозмещаемая часть становится настоящей стоимостью. Для частичного вычета введите коэффициент v: при полном вычете он равен 0, при полном отсутствии вычета 1, при вычете 70% он равен 0,3.
Временной эффект тоже можно посчитать без сложной финансовой модели. Умножьте сумму НДС, среднее число дней до вычета и годовую внутреннюю стоимость капитала, затем разделите на 365. При счёте на 1 220 000 рублей, где НДС равен 220 000 рублей, задержке 60 дней и стоимости капитала 18% временная цена составляет около 6 510 рублей. Это намного меньше 220 000 рублей, но это реальный компонент TCO, если компания финансирует оборот из кредитной линии.
Документ с НДС имеет ценность только при корректном закрытии. Если счёт-фактура пришёл поздно, услугу приняли в другом периоде или реквизиты не совпали, экономическая логика вычета не меняется, но денежный эффект сдвигается. Поэтому рядом с коэффициентом вычета храните среднюю задержку документов и долю счетов, которые требуют исправления. Такой показатель связывает налоговую теорию с работой кредиторской задолженности.
Иностранный платёж тоже нельзя считать «без НДС» только потому, что в выписке нет российской строки налога. Налоговые обязанности зависят от договора, статуса сторон, места реализации и схемы расчётов. Эту строку должен заполнить налоговый специалист по фактическому договору. В модели ниже для неё есть отдельное поле, чтобы выгодный на экране платёж не получил незаслуженный ноль.
Формула показывает направление экономии
Полная стоимость иностранного маршрута за месяц складывается из базового потребления, переменных потерь, валютного резерва, невозмещаемых налогов и трудозатрат. Для рублёвого маршрута нужны те же категории. Тогда разница читается без догадок:
TCO_fx = S × (1 + b + p + r) + Tax_fx + H_fx × R
TCO_rub = S × (1 + d) + Tax_rub + H_rub × R + F
Saving = TCO_fx - TCO_rub
Здесь b обозначает банковские комиссии относительно суммы потребления, p обозначает платёжный спред и потери посредников, r обозначает стоимость валютного риска, d обозначает отклонение рублёвой цены от сравнимой базовой цены, H означает часы сотрудников, R означает полную стоимость часа, а F означает фиксированную стоимость внедрения рублёвого маршрута в расчёте на месяц. Положительный Saving говорит, что рублёвый вариант дешевле.
Для быстрой проверки удобно свернуть переменные проценты в g = b + p + r - d, а фиксированную экономию труда записать как A = (H_fx - H_rub) × R - F + Tax_fx_fixed - Tax_rub_fixed. Тогда Saving = S × g + A.
Если g положителен и A неотрицателен, рублёвый маршрут дешевле при любом положительном потреблении. Искать магический объём не надо. Если g положителен, но переход требует фиксированных затрат, нижний порог равен -A / g. Если g отрицателен, единица потребления в рублях дороже, и фиксированная экономия процессов действует только до верхней границы A / -g.
Эта алгебра ловит распространённую ошибку закупки: команда делит стоимость интеграции на текущий маленький счёт и решает, что новый маршрут дорогой навсегда. Фиксированная работа уменьшается на единицу потребления с ростом объёма. Комиссия и ценовое отклонение, напротив, растут вместе со счётом.
Банковская комиссия редко живёт в одной строке
Комиссию банка надо восстанавливать по фактическому движению денег, а не брать из рекламного тарифа. В международной или карточной оплате потери могут появиться при покупке валюты, проведении платежа, участии посредника, возврате, повторной оплате после отказа и конвертации небольшой тестовой транзакции.
Возьмите три последних закрытых месяца и для каждого восстановите эффективный коэффициент. Разделите все рубли, списанные ради оплаты сервиса, на стоимость потребления в валюте, пересчитанную по выбранному опорному курсу. Затем вычтите единицу. Полученная разница включает видимый спред и комиссии, которые потерялись между выписками.
Опорный курс нужен для анализа, но он не обязан совпадать с курсом сделки. Банк России публикует официальный курс, однако компания покупает валюту по банковскому курсу и в конкретный момент. Разница между официальным курсом, курсом бюджета и курсом исполнения не исчезает от того, что бухгалтерия использует один из них для проводки.
Не смешивайте стоимость обычной оплаты и стоимость сбоя. Если платёж отклонили, а API остановился, простой продукта относится к операционному риску поставки, а не к банковской комиссии. Его стоит показать отдельной строкой с вероятностью и ущербом. Иначе одна редкая авария раздует среднюю комиссию так, что модель перестанет объяснять обычный месяц.
Для прогноза берите медиану эффективной комиссии как базу, а высокий наблюдавшийся уровень как стресс. Среднее плохо работает на трёх месяцах, если один возврат или двойная конвертация создали выброс. Комитету по закупкам полезнее увидеть диапазон, чем десятичную дробь с ложной точностью.
Валютный риск измеряется ошибкой бюджета
Валютный риск в TCO равен не движению курса вообще, а цене неопределённости между утверждением бюджета и фактической оплатой. Если компания получает валютную выручку и платит из неё, риск может быть частично закрыт естественным образом. Если казначейство заранее покупает валюту по лимиту, вместо условного резерва надо поставить фактическую стоимость такой операции.
Самый прозрачный способ для регулярной закупки: сравнить бюджетный курс на начало периода с курсом исполнения каждой оплаты. Положительные и отрицательные отклонения не следует механически взаимозачитывать, если задача состоит в оценке требуемого лимита. Для P&L можно считать фактический итог, а для бюджета нужен односторонний запас, который защищает от нехватки рублей.
Не называйте весь валютный резерв расходом. Если финансовая команда заложила 7%, а курс вырос только на 2%, оставшиеся 5% не были потрачены. Но резерв имеет цену: он занимает лимит, усложняет план и может отложить другой запуск. В денежном сценарии показывайте фактическое отклонение, в плановом сценарии показывайте резерв, а в TCO добавляйте только согласованную стоимость связанного капитала и управления риском.
Практичный расчёт использует три сценария. В базовом стоит медианное отклонение курса исполнения от бюджета. В стрессовом стоит плохой, но уже наблюдавшийся внутри компании месяц. В нулевом риск равен нулю. Если рублёвый вариант выигрывает только в стрессовом сценарии, это страхование от волатильности, а не гарантированная экономия.
Рублёвый счёт тоже не доказывает, что валютной составляющей нет в цене. Поставщик может пересчитывать провайдерские ставки по своему правилу. Запросите правило фиксации курса, момент фиксации и порядок корректировки. Поле d должно отражать именно фактическое отклонение рублёвого счёта от сопоставимого потребления, а не предположение о том, как поставщик управляет валютой.
Время финансовой команды стоит считать по событиям
Трудозатраты надо измерять по операциям каждого месяца, а не оценивать фразой «бухгалтер тратит пару часов». У иностранного платежа обычно есть инициатор, согласующий, казначей, бухгалтер и иногда специалист по налогам или валютному контролю. Один человек может выполнять несколько ролей, но стоимость времени от этого не исчезает.
Составьте журнал событий за три закрытия: запрос счёта или пополнения, согласование лимита, покупка валюты, платёж, разбор отказа, сбор подтверждений, отражение налога, сверка потребления, поиск расхождений и закрытие первичных документов. Для каждого события запишите минуты исполнителя и число повторов. Стоимость часа берите полную, с начислениями и накладными расходами, а не оклад, поделённый на 160.
Особенно дорого обходятся исключения. Обычная оплата может занять 20 минут, но неподписанный акт, несовпавшее юридическое лицо или возврат заставляет инженера, закупщика и бухгалтера пересобирать цепочку. Поэтому полезно разделить постоянные часы и ожидаемую стоимость исключений: вероятность события умножить на суммарное время его разбора.
Порог согласования закупки тоже создаёт ступеньку в стоимости. Пока месячная сумма помещается в лимит корпоративной карты или упрощённой процедуры, процесс может выглядеть дешёвым. После превышения лимита появляются договор, проверка контрагента, новый маршрут платежа и дополнительные согласующие. Не размазывайте эту работу равномерно по старым месяцам: добавьте фиксированный скачок в том сценарии, где объём действительно пересекает внутренний порог.
Отдельно запишите ожидание со стороны инженеров. Если финансовая команда три дня выясняет, прошёл ли платёж, ML-команда может держать запасной ключ, снижать лимит нагрузки или переносить эксперимент. Само ожидание сотрудника не равно трём рабочим дням труда, но вызванные им ручные переключения и повторные проверки имеют измеримое время. Считать надо действия, а не календарную длительность переписки.
Не превращайте каждую минуту в обещание денежного сокращения. Сэкономленные четыре часа бухгалтера не уменьшают фонд оплаты труда в этом месяце. Они снимают нагрузку с закрытия, уменьшают очередь и откладывают найм при росте числа поставщиков. В TCO это нормальная альтернативная стоимость, но в расчёте cash saving её надо показывать отдельно.
Сверка LLM API требует участия инженера, когда финансовый документ агрегирует модели иначе, чем внутренний шлюз. Проверяйте не только итог: период в часовом поясе поставщика, входные и выходные токены, кэш, повторы, незавершённые запросы и округление по каждой модели. Хороший рублёвый документ экономит время только тогда, когда его строки сопоставимы с журналом использования.
Два сценария дают честный диапазон
Рассмотрим команду, у которой сопоставимое месячное потребление по ставкам моделей равно 920 000 рублей без налогов. Все числа ниже являются допущениями для метода, а не тарифами конкретного банка или сервиса.
В первом сценарии банк и платёжная цепочка добавляют 3,7%, бюджетная стоимость валютного риска равна 5%, иностранный маршрут занимает 14 часов в месяц, рублёвый занимает 4 часа, а полный час стоит 2 500 рублей. Рублёвая цена потребления совпадает с базой, фиксированной платы за переход нет, налоговые последствия вариантов равны и потому не меняют разницу.
Иностранный TCO равен 920 000 × 1,087 + 14 × 2 500 = 1 035 040 рублей. Рублёвый TCO равен 920 000 + 4 × 2 500 = 930 000 рублей. Экономия составляет 105 040 рублей, или около 10,1% иностранного TCO. Из неё 80 040 рублей связаны с переменными потерями, ещё 25 000 рублей приходятся на разницу трудозатрат.
Теперь уберём валютный резерв и оставим только фактически подтверждённые 3,7% банковских потерь. Иностранный TCO снизится до 989 040 рублей, экономия составит 59 040 рублей. Решение всё ещё держится, но уже не на прогнозе курса. Такой пересчёт полезен: он показывает, какая доля выгоды доказана выписками, а какая зависит от политики бюджетирования.
Проверим чувствительность первого сценария к ошибке оценки времени. Даже если иностранное закрытие занимает не 14, а 8 часов, экономия труда уменьшается на 15 000 рублей, а общая экономия остаётся 90 040 рублей при полном валютном резерве и 44 040 рублей без него. Если знак меняется от шести часов, финансовой команде надо провести хронометраж до решения. Если не меняется, спор о точности минут не должен задерживать закупку.
Так же проверяется отклонение цены. При базовом потреблении 920 000 рублей каждый процент разницы равен 9 200 рублям в месяц. Это удобная контрольная величина: 2% отклонения рублёвой цены уменьшают экономию на 18 400 рублей, 5% уменьшают её на 46 000 рублей. Комитет сразу видит, какое отклонение переворачивает ответ, и может превратить его в условие пересмотра договора.
Во втором сценарии рублёвый счёт после сопоставления оказывается на 6% выше базы, а переменные потери иностранной оплаты равны 3,7%. Разница труда остаётся 25 000 рублей в пользу рублёвого маршрута. Здесь g = 0,037 - 0,06 = -0,023, поэтому рублёвый вариант дешевле только при месячном потреблении ниже 25 000 / 0,023, то есть примерно 1 087 000 рублей. Выше этой суммы дополнительная цена потребления съедает экономию процессов.
Если компания не принимает НДС к вычету, добавьте невозмещаемую сумму к соответствующему сценарию до сравнения. При ставке 22% рублёвые 920 000 рублей превращаются в 1 122 400 рублей денежной и экономической стоимости, если весь налог остаётся расходом. Но сравнивать эту сумму с иностранными 920 000 можно только после расчёта налогов иностранного договора. Сравнение «с НДС» против «без НДС» не показывает выгоду, оно показывает пропущенную строку.
Калькулятор сохраняет допущения рядом с ответом
Ниже короткий скрипт без внешних библиотек. Он принимает базовое потребление в рублях, проценты в виде десятичных дробей, часы и налоговые суммы. Сохраните рядом версии для базового, нулевого и стрессового сценариев, чтобы через квартал было видно, почему закупка приняла решение.
const x = {
usageRub: 920000,
bankRate: 0.022,
paymentSpread: 0.015,
fxRiskRate: 0.05,
rubPriceDelta: 0,
fxTaxCost: 0,
rubTaxCost: 0,
fxHours: 14,
rubHours: 4,
loadedHourRub: 2500,
rubFixedMonthly: 0
};
const fx = x.usageRub * (1 + x.bankRate + x.paymentSpread + x.fxRiskRate)
+ x.fxTaxCost + x.fxHours * x.loadedHourRub;
const rub = x.usageRub * (1 + x.rubPriceDelta)
+ x.rubTaxCost + x.rubHours * x.loadedHourRub + x.rubFixedMonthly;
const saving = fx - rub;
console.table({
fxTcoRub: Math.round(fx),
rubTcoRub: Math.round(rub),
savingRub: Math.round(saving),
savingPctOfFx: +(saving / fx * 100).toFixed(1)
});
Для введённых данных вывод имеет такую форму:
fxTcoRub 1035040
rubTcoRub 930000
savingRub 105040
savingPctOfFx 10.1
Поле rubPriceDelta нельзя заполнять разницей двух счетов за разные месяцы. Возьмите один журнал запросов и пересчитайте его по обеим ценовым схемам. Если это невозможно, используйте одинаковую корзину моделей и одинаковое количество входных, выходных и кэшированных токенов. Иначе поле поглотит изменение нагрузки и даст ложный порог.
Налоговые поля лучше передавать готовыми суммами после проверки бухгалтером. Процент НДС сам по себе недостаточен: значение зависит от права на вычет, доли облагаемой деятельности, документов и момента признания. Для денежного сценария можно добавить отдельную строку временного НДС, но не смешивать её с невозмещаемым налогом.
Рублёвый порог переводится в модельный микс
После расчёта порога в рублях его можно перевести в токены, но только для определённого микса. Допустим, команда использует одну модель, 80% токенов приходятся на вход по условной цене 300 рублей за миллион, а 20% на выход по условной цене 1 500 рублей за миллион. Средняя цена миллиона токенов равна 0,8 × 300 + 0,2 × 1 500 = 540 рублей.
Если нижний порог расходов равен 750 000 рублей в месяц, соответствующий объём равен 750 000 / 540 × 1 000 000, то есть примерно 1,39 млрд токенов. Это не прогноз и не рыночная цена, а перевод заданных допущений. При доле выхода 10% средняя цена упадёт до 420 рублей, и тот же денежный порог сдвинется примерно к 1,79 млрд токенов без единого изменения в договоре.
Для нескольких моделей не усредняйте токены до расчёта. Посчитайте рублёвую стоимость каждой строки, найдите долю строки в общей стоимости и примените ожидаемый рост нагрузки к каждой модели. Дорогая модель может давать 5% токенов и половину счёта. Простое деление общего бюджета на все токены сделает будущий микс дешевле на бумаге.
Кэшированные токены требуют отдельного прогноза. Улучшение prompt caching снижает денежный счёт при том же логическом объёме контекста, поэтому команда может пересечь токенный порог, но не денежный. Для решения о биллинге это нормальный результат: экономику определяет оплачиваемое потребление, а не объём текста, прошедшего через приложение.
Зафиксируйте также единицу периода. Годовой контракт может выглядеть выгодно из-за распределения внедрения на двенадцать месяцев, хотя лимит и риск оплаты возникают поквартально. Месячная модель лучше ловит пики, годовая показывает бюджетный эффект. Решение должно выдерживать обе.
Для прогноза роста сделайте помесячную таблицу, а не умножайте текущий счёт на двенадцать. Доля моделей меняется после запуска новых функций, сезонный пик увеличивает output, а оптимизация кэша уменьшает оплачиваемый input. В каждой строке должны быть объёмы, цены, доли кэша и итоговый TCO обоих маршрутов. Тогда годовая сумма сохранит причину изменения, и пересмотр не придётся начинать с пустого листа.
Не суммируйте пороги разных подразделений, если они оплачивают API по разным юридическим лицам. У каждого будут своё право на вычет, банк, стоимость часа и процедура договора. Общий технический шлюз может объединять usage, но закупочная экономика остаётся на уровне плательщика. Консолидированный порог годится только после расчёта каждой компании и сложения готовых TCO.
Решение должно пережить проверку договора
Перед выбором маршрута финансовая и ML-команды должны согласовать один лист допущений: одинаковую корзину запросов, фактическую переменную цену, налоговый статус, труд по событиям, правило курса и стоимость исключений. Если хотя бы одна сторона не может объяснить свою строку первичным документом или журналом, пометьте её как диапазон, а не как точное число.
RU LLM подходит для такой проверки как OpenAI-совместимый рублёвый шлюз: он выставляет B2B-счета в рублях, маршрутизирует запросы к моделям через единый endpoint и заявляет ставки провайдеров без наценки на API. Для сравнения всё равно надо взять фактический счёт, проверить применимый НДС, правило пересчёта и собственный модельный микс, потому что описание продукта не заменяет закупочную модель.
Пилот должен пройти полный цикл закрытия, а не закончиться успешным ответом API. Проведите обычный месяц или репрезентативный расчётный период, сверьте usage, получите первичные документы, измерьте минуты всех участников и прогоните базовый и стрессовый сценарии. Разницу между прогнозом и фактом занесите обратно в коэффициенты.
Одобрять переход стоит, когда знак экономии не меняется от разумного движения курса, доли выходных токенов и часов закрытия. Если знак меняется, договор не стал плохим, но решение зависит от риска. Тогда закупка должна записать условие пересмотра: например, отклонение рублёвой цены, рост доли дорогой модели или изменение права на вычет.
Объём токенов появится в последней строке расчёта. До неё нужны рубли, документы и время людей. Любой порог, названный раньше этих данных, удобен для продажи и бесполезен для бюджета.
Часто задаваемые вопросы
Можно ли назвать единый порог токенов для перехода на рублёвые счета?
Нет, один порог не работает для разных моделей и долей входных и выходных токенов. Сначала рассчитайте денежный порог по своему TCO, затем переведите его в токены по зафиксированному модельному миксу.
Нужно ли включать НДС в стоимость рублёвого LLM API?
Да, но его роль зависит от права компании на вычет. Возмещаемый НДС влияет на денежный отток и стоимость оборотного капитала, а невозмещаемый НДС полностью входит в TCO.
Как сравнить рублёвый счёт и оплату иностранному провайдеру?
Пересчитайте один и тот же журнал запросов по обеим схемам. Затем добавьте к каждой стороне её комиссии, налоговые последствия, валютный риск, трудозатраты и ожидаемую стоимость сбоев.
Считать ли валютный резерв прямым расходом?
Нет, неиспользованный резерв не равен понесённому расходу. В фактическом TCO учитывайте реальное курсовое отклонение, а в плановом сценарии показывайте резерв и стоимость связанного лимита отдельно.
Как оценить время бухгалтерии и казначейства?
Запишите события трёх закрытых месяцев и минуты каждого участника, включая разбор исключений. Умножьте часы на полную стоимость труда, но не выдавайте эту сумму за немедленное сокращение денежного фонда оплаты.
Почему большой объём токенов не всегда делает рублёвый вариант выгоднее?
Если рублёвая цена единицы потребления выше, переменная переплата растёт вместе с объёмом. Фиксированная экономия на процессах тогда помогает только до определённой верхней границы расходов.
Как учитывать разные цены входных и выходных токенов?
Считайте стоимость входа, выхода и кэша отдельными строками для каждой модели. Усредняйте только после денежного расчёта, иначе небольшая доля дорогого выхода исказит порог.
Сколько месяцев данных нужно для сравнения?
Три закрытых месяца обычно дают рабочую базу для комиссий, часов и исключений, если нагрузка была типичной. Для сезонного продукта добавьте пиковый месяц и не заменяйте его средним значением.
Что проверить в рублёвом договоре кроме цены?
Проверьте правило фиксации курса, состав первичных документов, порядок сверки usage, налоговые условия и обработку корректировок. Эти пункты определяют фактический TCO не меньше, чем ставка за токены.
Когда пилот рублёвого биллинга можно считать завершённым?
После полного финансового закрытия периода, а не после первого успешного API-запроса. Нужны фактический счёт, сверка потребления, первичные документы, измеренные трудозатраты и повторный расчёт сценариев.