feat(generator): потеря и дубль purchase (B, D) и счетчики описи
- Зачем:
- трекер стенда был полным, и правило «деньги — по бэкенду» держалось
на слове; классы B и D делают недосчет и пересчет трекера
наблюдаемыми (этап 6, #184).
- Что:
- подпоток BEACONS: точечная потеря purchase (~3%) и сюжетный дубль
(~2%) швом после _purchases, с гарантией моста идентичностей и
условием допуска дубля по паузе до следующего визита;
- опись считает пять классов по приоритету спеки; фильтр
classes_vs_inventory расширен, нулевой класс читается нулем;
- fate.md, seeds.md, dm.md и orders/README.md приведены к имени
BEACONS и строгому правилу допуска.
- Проверка:
- make lint, make typecheck, make test (433 passed) и make inventory
из generator/ — хеши слепков не изменились;
- на стенде: make smoke, make check-clickhouse, make check-services
зеленые; в dq_summary classes_vs_inventory и sessions_vs_reference
pass, витрина сверки показывает lost_event и duplicate_event.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c49f39f01f
commit
c28f724706
19 files changed
+433
-114
No files matched your search
@@ -128,7 +128,9 @@ def test_the_record_matches_the_wire_contract(days: list[day_module.Day]):
|
||||
)
|
||||
|
||||
if _born(record) == _date(SHORT_WINDOW_DAY):
|
||||
assert record["created_at"][:19] + "Z" == bought[record["order_id"]]
|
||||
# Потерянного purchase в трекере нет, но заказ остается.
|
||||
if record["order_id"] in bought:
|
||||
assert record["created_at"][:19] + "Z" == bought[record["order_id"]]
|
||||
|
||||
|
||||
def test_negative_money_does_not_leave_the_source(days: list[day_module.Day]):
|
||||
@@ -325,7 +327,10 @@ def _purchase_times(today: day_module.Day) -> dict[str, str]:
|
||||
times = np.datetime_as_string(
|
||||
today.columns["UTCEventTime"][here], unit="s", timezone="UTC"
|
||||
)
|
||||
return dict(zip(numbers, times.tolist(), strict=True))
|
||||
result: dict[str, str] = {}
|
||||
for number, moment in zip(numbers, times.tolist(), strict=True):
|
||||
result.setdefault(number, moment)
|
||||
return result
|
||||
|
||||
|
||||
def _born(record: dict) -> date:
|
||||
|
||||
Reference in new issue
Block a user