Вообще, на самом деле, что касается промо, я сейчас пришел к тому, что модуль для выссчитывания промо акций - это всегда отдельная такая прибамбасина, она может даже находиться не внутри приложения.
По сути, так и есть. Всякие коды, акции, скидки и т.п. - вещь в себе, они могут зависеть от какого-то события, конкретного товара или конкретного пользователя. При этом, они могут суммироваться, поглощаться или переноситься. А ещё бывают подарочные сертификаты, которые при активации эквивалентны скидке на определенную сумму. Это должен быть вообще отдельный модуль, специально заточенный под расчет всех этих акций и работающий в связке с модулем оплаты.