Ключевой пункт — умение гасить сертификат частично прямо при оформлении покупки. Покупатель вводит код в корзине, движок вычитает из суммы заказа доступный остаток, закрывает заказ полностью или частично, оставшуюся часть предлагает оплатить штатными способами, а неистраченные деньги оставляет на сертификате до следующего раза. Плюсом будет поддержка нескольких сертификатов в одном заказе. Любое движение по остатку должно записываться отдельной неизменяемой строкой журнала, чтобы в любой момент можно было восстановить всю цепочку: начисленный номинал, каждое погашение, возвраты и ручные правки. Генерация кодов — стойкая к перебору, однократная, пригодная для рассылки письмом. Сроки действия задаются в настройках, а вся цепочка должна корректно переживать повторные нажатия и одновременные запросы, чтобы номинал не списался дважды.
В панели управления операторам нужны: ручной выпуск сертификата, поиск по коду или покупателю, просмотр всей истории остатка, заморозка и отзыв, повторная отправка письма, правка баланса с обязательным указанием причины и выгрузка отчётов. Прошу выдержать оформление и кодовые соглашения, уже принятые в магазине, отдать чистый прокомментированный код и снабдить логику остатка и погашения тестами до передачи.
— Оформление: сумма, дизайн и текст поздравления; оплата через подключённый шлюз
— Отправка адресату письмом с индивидуальным стойким кодом
— Индивидуальный остаток по каждому сертификату и неизменяемый журнал движений
— Частичное погашение в корзине, доплата штатными способами; остаток сохраняется
— Гибкие сроки действия и статусы (активен, заморожен, отозван, израсходован)
— Панель оператора: выпуск, поиск, правка, заморозка, повторная отправка, отчёты
— Устойчивость к одновременным запросам; тесты логики остатка и погашения