process_checkout слишком длинная (Long Method)
Нарушение принципа единственной ответственности (одна функция одновременно выполняет валидацию, бизнес-логику и формирование результата)
Магические числа ( в коде используются числовые значения без поясняющих имён)
Сложные условные конструкции (логика расчёта скидок реализована через цепочку if / elif / else с вложенными условиями, что усложняет понимание и расширение)
process_checkout стала короткой и читается сверху вниз как сценарий
Выделены функции: validate_order_items, calculate_subtotal, calculate_discount_amount,calculate_amount_after_discount, calculate_tax_amount, generate_order_id
Вынесение констант (все магические числа и строки были вынесены в именованные константы, что повысило читаемость и упростило изменение бизнес-логики)
Сохранение поведения: все тесты продолжили успешно проходит
Чтение кода: каждая функция выполняет одну понятную задачу
Тестировка: можно тестировать каждую часть логики отдельно
Изменение бизнес-правил: -для изменения ставки налога, нужно поменять одну константу -для добавления нового купона, нужно добавить одну запись в словарь
Нахождение ошибок: стек вызовов показывает, в какой именно части логики произошла ошибка Изменять бизнес-правила: · Чтобы изменить ставку налога, нужно поменять одну константу · Чтобы добавить новый купон, нужно добавить одну запись в словарь · Чтобы изменить правила валидации, это делается в одном месте Находить ошибки - стек вызовов показывает, в какой именно части логики произошла ошибка