Калькулятор обещал одну цену, счёт выставлен на другую: как хранить версию сметы

Ситуация: опции не менялись, сумма изменилась
Клиент выбрал пакет и три дополнения, получил расчёт и вернулся к нему через неделю. На сайте обновился прайс. В кабинете он видит прежний состав и новую сумму без объяснения. Формально калькулятор посчитал правильно по сегодняшним правилам, но история предложения исчезла. Проблема не в арифметике, а в отсутствии версии расчёта.
Сначала определите статус результата. Предварительная оценка, сохранённая смета, согласованное предложение и оплаченный заказ — разные сущности. У каждой должны быть собственные правила изменения. Нельзя одновременно называть сумму окончательной и пересчитывать её при каждом открытии страницы без нового подтверждения.
Что сохранять кроме итоговой цифры
| Данные | Почему без них возникнет спор |
|---|---|
| ID и версия пакета | Название пакета может остаться прежним при новом составе |
| Опции, количества и единицы | Часы, страницы и интеграции нельзя считать одинаково |
| Цена каждой строки | Один итог не объясняет изменение стоимости |
| Правила скидки и округления | Одинаковые проценты могут применяться к разным основаниям |
| Версия алгоритма | Изменения логики влияют даже при прежнем прайсе |
| Срок действия и статус | Нужно отличить архивную оценку от действующего предложения |
Пользовательские значения проверяют и считают на сервере. Переданный из браузера итог — не достоверный источник цены: его можно изменить. Сервер возвращает рассчитанный состав, а интерфейс показывает именно этот результат. Если предложение ещё не зафиксировано, это обозначают явно и объясняют условия уточнения.
Изменение цены должно стать событием
При открытии старой сметы показывайте сохранённую редакцию. Если нужен пересчёт по текущему прайсу, создавайте новую и сравнивайте их. Отдельно обозначайте добавленную опцию, изменение количества, изменение цены и замену состава пакета. Фраза «итог вырос на 12%» не объяснит, почему именно это произошло.
Для подтверждения полезна явная кнопка «Принять новую редакцию». История сохраняет, кто и когда её подтвердил. Оплаченный заказ не должен молча менять цену от редактирования общего справочника. Дополнительные работы оформляют отдельным согласованием в рамках договора и процесса компании.
Один источник правил для трёх экранов
Калькулятор на лендинге, заказ в кабинете и счёт должны использовать совместимую логику. Если формулы скопированы в три компонента, со временем они расходятся. Вынесите проверяемый расчёт в общий модуль или серверный сервис и передавайте версию. Но общая функция не отменяет снимок старой сметы: после обновления она всё равно может дать новый результат.
Проверьте пограничные случаи: нулевое количество, дробный ввод, взаимоисключающие опции, уже включённая в пакет функция, разовые и ежемесячные платежи. Не складывайте подписку за месяц и разовую разработку в один безымянный итог. Клиент должен видеть, что платится сейчас и что будет повторяться.
Учебный разбор двух редакций
В первой редакции пакет стоит 20 000, дополнение — 5 000. Во второй пакет стоит 22 000, а дополнение удалено. Итог уменьшился на 3 000, хотя базовый пакет подорожал. Если показать только процент изменения общей суммы, существенная замена состава останется незаметной.
Инструмент ниже сравнивает строки по устойчивому коду. Введите «код;количество;цена за единицу». Он покажет добавленные и удалённые позиции, изменение количества и стоимости. Модель не учитывает налоги, скидки, валютные пересчёты и повторяющиеся платежи. Для их сравнения нужны отдельные поля, а не догадки по названию строки.
Проверка готовности к запуску
Сохраните смету, измените прайс на стенде и откройте прежнюю ссылку. Проверьте, что старая редакция осталась читаемой. Затем создайте новую и подтвердите её от тестового пользователя. Счёт должен ссылаться на принятую редакцию. Именно эта цепочка показывает, что оформление заказа реально, а не просто красиво считает цифры на первом экране.
Сравнение двух редакций учебной сметы
Все строки одной валюты, без скидок и налогов. Порядок строк не влияет на сопоставление; коды не должны повторяться. Расчёт выполняется на вашем устройстве, введённые данные никуда не отправляются.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
