SQL · Internal Documentation · 2026

Sale Price &
Net Price

Две метрики для каждой строки заказа. Sale Price отвечает на вопрос «за сколько мы продали этот товар». Net Price отвечает на вопрос «сколько денег от этой продажи осталось у компании».

§ 01Общая картина

Расчёт идёт в две стадии. Сначала из исходной цены товара вычитаются все скидки — получается Sale Price. Затем применяются корректировки связанные с методом оплаты и партнёрскими отчислениями — получается Net Price.

Шаг 0
Line Total
price × quantity
исходная цена в заказе
Шаг 1
Минус скидки
Bundle, General,
Product Coupon,
Manual Sales
Результат A
Sale Price
за сколько продали
Шаг 2
± Платёж
± Партнёр
xfeepro, processing fee,
affiliate payout
Результат B
Net Price
что осталось
у компании
Что НЕ учитывается ни в одной из метрик: доставка (shipping), налог (tax), Store Credit, E-Wallet (это методы оплаты, а не скидки). Бесплатные товары (line_total = 0) исключаются из базы распределения общих скидок.

§ 02Sale Price · формула

sale_price = line_total
bundle_discount // доля скидки бандла, только если товар в бандле
general_discount // доля общих скидок, на все платные товары
product_coupon_discount // купоны привязанные к продуктам/категориям
manual_sales_discount // мануальные купоны допродаж с #sales

Четыре типа скидок и куда они идут

01
Bundle Scope

Bundle Discount

Скидка бандла применяется только к товарам, входящим в бандл, и распределяется между ними пропорционально line_total. Пример: бандл со скидкой 20% от 57 € → −11.40 € размазываются по бандл-товарам.

02
Order Scope

General Discount

Reward Points, Happy Hours (xoffer), общие купоны и купоны без привязок. Распределяются пропорционально line_total по всем платным товарам заказа, включая товары бандла.

03
Product Scope

Product Coupon

Купоны с привязкой к конкретным продуктам (oc_coupon_product) или категориям (oc_coupon_category). Скидка идёт только на привязанные товары, пропорционально их line_total.

04
Sales Scope

Manual Sales

Купоны допродаж (ALLAES10, SAVE и т.д.) применяются только к продуктам упомянутым в #sales комментариях, с учётом количества (x1, x2). База = unit_price × min(sales_qty, order_qty).

§ 03Sale Price · пример

Возьмём заказ с тремя товарами и тремя типами скидок одновременно: бандл, общая скидка (Reward Points) и товарный купон.

Заказ #780465 (упрощённо)
3 товара · бандл · общая скидка · товарный купон

Состав

ТоварQtyPriceLine TotalВ бандле?
Test product 1110 €10.00
Test product 2240 €80.00
Test product 33100 €300.00
Sub-total390.00

Скидки в заказе

ИсточникТипСуммаПрименяется к
Coupon TESTPROD (20%)Product−60.00только TP3
Happy hours (−7%)General−23.10все 3 товара

Распределение по строкам

Шаг 1 · General
23.10 € распределяется пропорционально line_total
TP1: 23.10 × (10 / 390)= 0.59 €
TP2: 23.10 × (80 / 390)= 4.74 €
TP3: 23.10 × (300 / 390)= 17.77 €
Шаг 2 · Product Coupon
60 € идёт целиком на TP3
TP1= 0 €
TP2= 0 €
TP3= 60.00 €

Итог

ТоварLine TotalGeneralProduct CouponSale PricePer Unit
TP110.00−0.5909.419.41
TP280.00−4.74075.2637.63
TP3300.00−17.77−60.00222.2374.08
Сумма306.90

Сходится: 390 (sub-total) − 60 (coupon) − 23.10 (general) = 306.90 €

§ 04Net Price · формула

Net Price отражает реальные деньги в кассе. От Sale Price вычитаются три дополнительных корректировки на уровне всего заказа, и каждая распределяется по строкам пропорционально sale_price строки (а не line_total).

net_price = sale_price
+ xfeepro_share // со знаком: + клиент доплатил, − компания скинула
processing_fee_share // % от Total заказа за метод оплаты
affiliate_payout_share // 10–20% от sale_price если есть AFFILIATE купон

Где X_share = X_order × (sale_price_line / sale_price_sum)

±

xfeepro

Скидка/комиссия за метод оплаты на стороне клиента. Crypto −10% (нам в минус), карта +5% (нам в плюс). Сохраняем знак — положительные значения увеличивают net_price, отрицательные уменьшают.

Processing Fee

Что компания платит платёжному процессору за вывод средств. Считается как order.total × ставка_группы. Группы и ставки задаются через фильтры Metabase. Если payment_code не входит ни в одну группу — комиссия 0.

Affiliate Payout

Выплата партнёру за заказ с его купоном (oc_coupon.name содержит «affiliate»). Базовая ставка 10% от sum(sale_price), для перечисленных кодов 20%.

Группы платёжных методов

В фильтрах Metabase указываются 6 групп. Для каждой задаётся два значения: список payment_code и ставка (доля, например 0.10 = 10%).

ГруппаFilter — методыFilter — ставка
AK Manual Bankpayment_codes_ak_manualrate_ak_manual
ST Manual Bankpayment_codes_st_manualrate_st_manual
SEPA Bankpayment_codes_separate_sepa
Openbankpayment_codes_openbankrate_openbank
Card ASpayment_codes_cardrate_card
Crypto ASpayment_codes_cryptorate_crypto

§ 05Net Price · пример

Тот же заказ #780465. Дополнительные данные:

Net Price для #780465
payment_code: paymecrypto · оплата криптой

Дополнительные данные заказа

Sale Price (sum)306.90 €
Order Total (что заплатил клиент)303.21 €
xfeepro (Crypto −10%)−30.69 €
Processing fee (Crypto AS, ставка 3%)303.21 × 0.03 = 9.10 €
Affiliate payout0 € (нет AFFILIATE)

Распределение по строкам

Каждая корректировка размазывается по строкам пропорционально 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
Net revenue компании от заказа 267.11 €

Контроль: Sale 306.90 − xfeepro 30.69 − ProcFee 9.10 = 267.11 €. Это и есть деньги, что остаются у компании после процессинга. Доставка (27 €) и Total (303.21 €) в этой формуле участвуют только косвенно — как база для расчёта processing fee.

§ 06Affiliate · как это работает

Партнёрский купон — у которого oc_coupon.name содержит слово affiliate (регистронезависимо). Он работает как обычная общая скидка для клиента, но дополнительно создаёт выплату партнёру.

// Идентификация
is_affiliate = LOWER(coupon.name) LIKE '%affiliate%'

// Ставка партнёру
affiliate_rate = CASE
WHEN code IN ('MUSCUMEME','JUICE10','TV10','LIZA10',
'ALEX','ALPHA','Help10','STRONG','PROGRESS10') THEN 0.20
ELSE 0.10
END

// Сумма выплаты
affiliate_payout = affiliate_rate × SUM(sale_price платных товаров)

Скидка клиенту по AFFILIATE купону применяется как обычная general скидка в Sale Price. Партнёрская выплата вычитается отдельно при расчёте Net Price. То есть купон «работает дважды»: один раз для клиента (как скидка), второй раз для партнёра (как выплата).

Важно. База для партнёрской выплаты — Sale Price платных товаров, то есть сумма после применения всех скидок (включая саму AFFILIATE скидку клиенту). Доставка не входит. Бесплатные товары не входят.

§ 07Зачем две метрики

Sale Price отвечает на

  • — За сколько мы реально продаём этот товар?
  • — Какая средняя цена продажи?
  • — Эффективность ценовой политики и скидок
  • — Сравнение продаваемости с разными скидками

Net Price отвечает на

  • — Сколько денег у компании от продажи?
  • — Какие методы оплаты выгоднее?
  • — Эффективность партнёрской программы
  • — Расчёт реальной маржи (Net − COGS)