fix(generator): исправлен расчёт скидки после складской дельты

- Зачем:
  - слепок D7 содержал отрицательный итог заказа и попадал в брак ODS.
- Что:
  - скидка пересчитана от корзины после удаления отсутствующей позиции.
  - сериализатор отклоняет отрицательные деньги через ValueError.
  - добавлены проверки восьми стартовых дней и обновлена опись мира.
- Проверка:
  - make lint, make typecheck и make test в generator/.
  - живой world_next_day: 1694 строки приняты, таблица ошибок пуста.
This commit is contained in:
2026-08-20 13:13:14 +03:00
parent 7b89ccb529
commit 64bcd3d596
8 changed files with 123 additions and 72 deletions
+11
View File
@@ -26,6 +26,7 @@ import re
import subprocess
import sys
from contextlib import closing
from dataclasses import replace
from datetime import UTC, date, datetime, time, timedelta
from decimal import Decimal
@@ -130,6 +131,16 @@ def test_the_record_matches_the_wire_contract(days: list[day_module.Day]):
assert record["created_at"][:19] + "Z" == bought[record["order_id"]]
def test_negative_money_does_not_leave_the_source(days: list[day_module.Day]):
"""Сериализатор отвергает деньги, которых контракт провода не допускает."""
honest = days[0].orders
total = honest.total.copy()
total[0] = -1
with pytest.raises(ValueError):
serialize.orders([replace(honest, total=total)], honest.day)
def test_the_moments_carry_real_milliseconds(days: list[day_module.Day]):
"""Миллисекунды — часы базы источника, а не три дописанных нуля.