feat(generator): добавлена судьба заказов

- Зачем:
  - issue #91 требует решать исход и расхождение заказа в день его рождения.
- Что:
  - добавлены три исхода, моменты оплаты и отмены и дельта одной позиции.
  - обновлены проверки повторяемости и архитектурное описание заказов.
- Проверка:
  - cd generator && make lint && make typecheck && make test (418 passed).
This commit is contained in:
2026-08-18 16:02:12 +03:00
parent 62941d2ee5
commit 0d90bd566b
6 changed files with 264 additions and 36 deletions
+4 -1
View File
@@ -78,7 +78,10 @@
**Дельта суммы (C) — вычеркнутая позиция.** Товара не оказалось в наличии,
позицию сняли: у заказа на одну позицию меньше, чем в клиентских массивах, а
`items_total` меньше на её стоимость. Момента у неё нет — заказ приезжает
`items_total` меньше на её стоимость. Уменьшаются ровно на полную стоимость
вычеркнутой строки и `items_total`, и `total`; скидка остаётся рассчитанной от
исходной клиентской покупки и после складского вычёркивания не пересчитывается.
Момента у неё нет — заказ приезжает
урезанным во всех своих слепках: первый слепок снимается на границе суток,
когда склад заказ уже собрал. Заказ из одной позиции дельты не получает —
пустых заказов не бывает. Позиция выбирается равновероятно: корреляция со
+4 -1
View File
@@ -30,7 +30,10 @@
**Деньги заказа** складываются целыми копейками: `items_total` — сумма
позиций, посчитанная торговой половиной, то же число, что уехало клиентским
`purchaseRevenue`; `discount` — процент промокода от неё, округлённый вниз;
`purchaseRevenue`, но у заказа с вычеркнутой позицией он меньше на её полную
стоимость ([судьба заказа](fate.md)); `discount` — процент промокода от
исходной суммы клиентской покупки, округлённый вниз, и дельта его не
пересчитывает;
`delivery` — бросок заказной стороны по таблице целых весов, единственные
деньги заказа, которых нет ни в одном событии; `total` = `items_total`
`discount` + `delivery`. Отсюда и правило витрин «деньги считаем по