Текст и идеи / ПРАКТИЧЕСКИЙ РАЗБОР
ChatGPT: как проверить правило скидки на пограничных суммах
Порог включает ровно 1000.00, доставка не входит в базу, а половина копейки в скидке проверяет округление. Разбираем семь коротких случаев.

Красивой таблице нужен проверяемый расчет
Покупатель добавил в корзину товары на 1200 рублей, а скидки нет. Ошибка? Не обязательно: в акции могут участвовать только позиции на 900 рублей. Еще одна ловушка появляется ровно на пороге: «от 1000» легко превратить в «больше 1000». В таких задачах ChatGPT полезен для подготовки набора проверок, если сами условия не приходится угадывать.
Разберем учебное правило магазина и семь входных случаев. Получится небольшая таблица решений для менеджера продукта или тестировщика. Суммы и условия ниже придуманы для разбора; это не условия действующей акции. Ответ модели нужно будет сверить с отдельным расчетом.
Зафиксируйте базу, порог и момент округления
Сначала отделите участвующие в акции товары от остальных позиций и доставки. Одного поля «сумма корзины» здесь недостаточно. Обозначим через A сумму подходящих товаров до скидки, через B - сумму остальных товаров, через D - доставку. Все входные суммы неотрицательные, с двумя знаками после десятичной точки.
Для этого примера скидка составляет 10% от A, если A не меньше 1000.00. B и D не приближают заказ к порогу и сами не получают скидку. Сумму скидки округляем один раз до двух знаков: ровно половину копейки округляем вверх. Затем считаем итог: A - скидка + B + D. Это выбранное для примера правило округления; у своей системы возьмите утвержденный порядок.
В исходном описании есть еще фраза: «Скидка не суммируется с купоном». Она запрещает совместное применение, но не выбирает, что оставить. В примере не заданы и параметры самого купона. Пока неясны приоритет, размер и условия применения купона, у этого случая нет однозначного итога. Не поручайте модели самостоятельно придумать эту часть политики.
ПРИМЕР ПРОМПТА
УЧЕБНЫЕ УСЛОВИЯ A - подходящие товары до скидки; B - остальные товары; D - доставка. Суммы неотрицательные, не более двух десятичных знаков. Если A >= 1000.00, скидка = A * 0.10, иначе 0. B и D в порог не входят. Скидку округлить один раз до двух знаков; ровно половину копейки - вверх. Итог = A - скидка + B + D. С купоном скидка не суммируется; приоритет, размер и условия купона не указаны.
Попросите случаи вокруг границы, а не случайные суммы
Официальная документация OpenAI рекомендует передавать нужный контекст, задавать формат результата и явно отмечать недостающую информацию. Здесь это означает: приложить правило целиком, разделить входные поля и запросить проверяемые формулу, подстановку и итог. Общая просьба «проверь скидку» не определяет ни базу, ни смысл слова «от».
Передайте условия из предыдущего блока вместе с запросом ниже. K1, K2 и K3 отличаются одной копейкой возле порога. K4 проверяет, не попали ли чужие суммы в базу. K5 сохраняет те же дополнительные платежи уже при достигнутом пороге. K6 нужен для половины копейки, K7 - для неразрешенного приоритета. Это заранее выбранные случаи, а не выдуманные ответы ChatGPT.
ПРИМЕР ПРОМПТА
По учебным условиям выше составь таблицу: случай | основание скидки | скидка до округления | округленная скидка | формула с подстановкой | итог | вопрос. Не добавляй правил. Для случая с активным купоном при неясном приоритете не выбирай вариант и не указывай единственный итог; запроси приоритет, размер и условия купона. Десятичная точка отделяет копейки. K1: A=999.99, B=0, D=0, купона нет. K2: A=1000.00, B=0, D=0, купона нет. K3: A=1000.01, B=0, D=0, купона нет. K4: A=900.00, B=300.00, D=200.00, купона нет. K5: A=1000.00, B=300.00, D=200.00, купона нет. K6: A=1000.05, B=0, D=0, купона нет. K7: A=1000.00, B=0, D=0, купон активен.
Контрольные значения посчитайте отдельно
Не просите ту же модель заверить собственную таблицу и не считайте это независимой проверкой. Ниже приведены значения, рассчитанные по сформулированному правилу. Сверьте их вручную, в калькуляторе с десятичной арифметикой или в таблице с явно заданным округлением. Важны и формула, и причина применения скидки.
K1: A ниже 1000.00, поэтому скидка 0, итог 999.99. K2: порог включен в условие, скидка 100.00, итог 900.00. K3: скидка до округления 100.001, после округления 100.00, итог 900.01.
K4: скидка 0, итог 900.00 + 300.00 + 200.00 = 1400.00. Общая сумма выше порога, но A остается равной 900.00. K5: скидка 100.00, итог 1000.00 - 100.00 + 300.00 + 200.00 = 1400.00. Одинаковый итог у K4 и K5 не делает эти случаи одинаковыми: основания и состав платежа различаются.
K6: 1000.05 * 0.10 = 100.005. По нашему правилу скидка округляется до 100.01, итог 900.04. Значение 900.05 указывает на другой расчет, например на округление скидки вниз до 100.00. Проверьте именно промежуточную сумму, прежде чем менять весь промпт.
K7: вопрос остается открытым. Нужно узнать, кто выбирает купон или скидку, по какому правилу и каковы размер и условия применения самого купона. Запись «итог 900.00» без этого решения была бы скрытым дополнением к условиям.

Исправляйте конкретное расхождение
Если K2 оказался без скидки, проверьте знак сравнения. Если скидка появилась в K4, модель использовала общую сумму вместо A. Если расходится только K6, сначала проверьте округление. Такой разбор показывает, какую часть запроса уточнить; общая просьба «будь внимательнее» не называет ошибку.
Для числовой правки достаточно попросить формулу и подстановку. Не нужны длинные рассуждения о том, как модель пришла к ответу. После исправления проверьте все семь строк: просьба сохранить остальное не гарантирует, что остальные значения не изменятся.
ПРИМЕР ПРОМПТА
Исправь только K6 по исходному правилу. База A=1000.05, ставка 10%. Покажи произведение до округления, округленную скидку и итог. Ровно половину копейки округляем вверх; округление выполняется один раз для общей скидки. Не меняй условия и не выбирай за владельца правило купона в K7. Затем перечисли идентификаторы остальных строк, которые остались без изменений.
Дополните набор тем, что есть в вашей системе
У учебного правила нет возвратов, нескольких валют и скидок на отдельные строки. Если такие условия есть у вас, добавляйте их из утвержденного описания и заводите для каждого отдельные случаи. Не расширяйте задачу случайным списком всех возможных акций: сначала нужно понять, какое правило проверяется.
Особенно внимательно переносите расчет в код или электронную таблицу. Разные функции округления и двоичное представление дробей могут дать другое поведение на половинных значениях. Сопоставьте настройку конкретного инструмента с выбранным правилом и сохраните K6 как отдельную проверку. Переписанный текст формулы сам по себе не доказывает, что реализация считает так же.
Передавайте таблицу вместе с нерешенным вопросом
Для разработчика сохраните исходные условия, входные поля, контрольные значения и отдельный вопрос о купоне. Шесть определенных случаев можно использовать как заготовку проверок. Для седьмого нужны решение о приоритете и параметры купона, если выбран он; лишь затем можно записать ожидаемый результат.
Когда изменятся порог, база или округление, пересчитайте контрольные значения до повторного запроса. ChatGPT помогает организовать разбор и заметить противоречие, но эталон должен оставаться отдельно от его ответа. Так можно отличить изменившееся правило от новой арифметической ошибки.
