Отрицательный total после складской дельты #102
Notifications
Due Date
No due date set.
Blocks
#96 Стартовый мир: слепки дней 0…6 при make up
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#102
Reference in New Issue
Block a user
Part of #5.
Цель
Заказ не уезжает на провод с отрицательным
total: арифметика скидки и складской дельты согласована по явному правилу, а стартовый мир снова проходит строгий приём без брака. Учебный результат — менти видит, что ошибку источника чинят в источнике, а не ослаблением ODS.Подтверждённые факты
Замерено 18 августа 2026 года при исполнении #94, зерно
CANONICAL_SEED = 20260601.20260608-0007:items_total = 549000,discount = 666900,delivery = 29900,total = -88000копеек. Восемь версий заказа из сырья попадают вods.order_snapshot_errorsклассомfield_invalid._deltaвычёркивает позицию и уменьшаетitems_total, а_discountоставляет скидку от исходной клиентской выручки. Поэтому скидка может стать больше оставшейся корзины._moneyневерно пишет отрицательные копейки:-101превращается в-2.99,-1— в-1.99. Нынешние-88000выглядят верно только потому, что это целое число рублей.money >= 0идёт на дне 2, а набор дней в соседних тестах заканчивается днём 6. Дефект живёт на непокрытом дне 7.Критерии приёмки
totalнеотрицателен по построению, а не обрезкой результата; правило записано вdocs/architecture/orders/._moneyна отрицательном входе определено явно: корректная запись либо явный отказ; есть красный до исправления тест.make lint,make typecheck,make testвgenerator/зелёные.ods.order_snapshot_errorsпустой; оговорка вdocs/architecture/orders/ingestion.mdснята.Границы
max(0, total)или безусловное обрезание скидки.Сначала прочитать
generator/src/clickstream_generator/orders.py:_delta,_discount, сборкаOrders.generator/src/clickstream_generator/serialize.py:orders,_money.generator/tests/test_orders.pyиgenerator/tests/test_snapshot.py.docs/architecture/orders/snapshot.md,docs/architecture/orders/fate.md,docs/architecture/orders/ingestion.md.docs/specs/2026-08-01-generator.md, раздел «Чем меряется генератор».Проверка
После пересборки стартового мира — честный прогон
orders_ingestи сверка числа годных строк и брака с числом отправленных сообщений.