Две метрики для каждой строки заказа. Sale Price отвечает на вопрос «за сколько мы продали этот товар». Net Price отвечает на вопрос «сколько денег от этой продажи осталось у компании».
Расчёт идёт в две стадии. Сначала из исходной цены товара вычитаются все скидки — получается Sale Price. Затем применяются корректировки связанные с методом оплаты и партнёрскими отчислениями — получается Net Price.
Скидка бандла применяется только к товарам, входящим в бандл, и распределяется между ними пропорционально line_total. Пример: бандл со скидкой 20% от 57 € → −11.40 € размазываются по бандл-товарам.
Reward Points, Happy Hours (xoffer), общие купоны и купоны без привязок. Распределяются пропорционально line_total по всем платным товарам заказа, включая товары бандла.
Купоны с привязкой к конкретным продуктам (oc_coupon_product) или категориям (oc_coupon_category). Скидка идёт только на привязанные товары, пропорционально их line_total.
Купоны допродаж (ALLAES10, SAVE и т.д.) применяются только к продуктам упомянутым в #sales комментариях, с учётом количества (x1, x2). База = unit_price × min(sales_qty, order_qty).
Возьмём заказ с тремя товарами и тремя типами скидок одновременно: бандл, общая скидка (Reward Points) и товарный купон.
| Товар | Qty | Price | Line Total | В бандле? |
|---|---|---|---|---|
| Test product 1 | 1 | 10 € | 10.00 | — |
| Test product 2 | 2 | 40 € | 80.00 | — |
| Test product 3 | 3 | 100 € | 300.00 | — |
| Sub-total | 390.00 | |||
| Источник | Тип | Сумма | Применяется к |
|---|---|---|---|
| Coupon TESTPROD (20%) | Product | −60.00 | только TP3 |
| Happy hours (−7%) | General | −23.10 | все 3 товара |
| Товар | Line Total | General | Product Coupon | Sale Price | Per Unit |
|---|---|---|---|---|---|
| TP1 | 10.00 | −0.59 | 0 | 9.41 | 9.41 |
| TP2 | 80.00 | −4.74 | 0 | 75.26 | 37.63 |
| TP3 | 300.00 | −17.77 | −60.00 | 222.23 | 74.08 |
| Сумма | 306.90 | ||||
Сходится: 390 (sub-total) − 60 (coupon) − 23.10 (general) = 306.90 €
Net Price отражает реальные деньги в кассе. От Sale Price вычитаются три дополнительных корректировки на уровне всего заказа, и каждая распределяется по строкам пропорционально sale_price строки (а не line_total).
Где X_share = X_order × (sale_price_line / sale_price_sum)
Скидка/комиссия за метод оплаты на стороне клиента. Crypto −10% (нам в минус), карта +5% (нам в плюс). Сохраняем знак — положительные значения увеличивают net_price, отрицательные уменьшают.
Что компания платит платёжному процессору за вывод средств. Считается как order.total × ставка_группы. Группы и ставки задаются через фильтры Metabase. Если payment_code не входит ни в одну группу — комиссия 0.
Выплата партнёру за заказ с его купоном (oc_coupon.name содержит «affiliate»). Базовая ставка 10% от sum(sale_price), для перечисленных кодов 20%.
В фильтрах Metabase указываются 6 групп. Для каждой задаётся два значения: список payment_code и ставка (доля, например 0.10 = 10%).
| Группа | Filter — методы | Filter — ставка |
|---|---|---|
| AK Manual Bank | payment_codes_ak_manual | rate_ak_manual |
| ST Manual Bank | payment_codes_st_manual | rate_st_manual |
| SEPA Bank | payment_codes_sepa | rate_sepa |
| Openbank | payment_codes_openbank | rate_openbank |
| Card AS | payment_codes_card | rate_card |
| Crypto AS | payment_codes_crypto | rate_crypto |
Тот же заказ #780465. Дополнительные данные:
Каждая корректировка размазывается по строкам пропорционально sale_price строки. Доли: TP1 = 9.41 / 306.90 = 0.0307 · TP2 = 0.2453 · TP3 = 0.7240
| Товар | Sale Price | + xfeepro (−) |
− Proc.Fee | − Affiliate | Net Price |
|---|---|---|---|---|---|
| TP1 | 9.41 | −0.94 | −0.28 | 0 | 8.19 |
| TP2 | 75.26 | −7.53 | −2.23 | 0 | 65.50 |
| TP3 | 222.23 | −22.22 | −6.59 | 0 | 193.42 |
| Сумма | 306.90 | −30.69 | −9.10 | 0 | 267.11 |
Контроль: Sale 306.90 − xfeepro 30.69 − ProcFee 9.10 = 267.11 €. Это и есть деньги, что остаются у компании после процессинга. Доставка (27 €) и Total (303.21 €) в этой формуле участвуют только косвенно — как база для расчёта processing fee.
Партнёрский купон — у которого oc_coupon.name содержит слово affiliate
(регистронезависимо). Он работает как обычная общая скидка для клиента, но дополнительно
создаёт выплату партнёру.
Скидка клиенту по AFFILIATE купону применяется как обычная general скидка в Sale Price. Партнёрская выплата вычитается отдельно при расчёте Net Price. То есть купон «работает дважды»: один раз для клиента (как скидка), второй раз для партнёра (как выплата).