{
  "input_rows": 240,
  "unique_event_keys": 216,
  "duplicate_deliveries": 24,
  "business_events": {
    "payments": 192,
    "refunds": 24
  },
  "business_timezone": "Europe/Moscow",
  "amount_convention": "amount_rub всегда положительна; refund вычитается из net_rub",
  "daily_after_deduplication": {
    "2026-09-29": {
      "payment_count": 2,
      "refund_count": 0,
      "gross_rub": 2010,
      "refund_rub": 0,
      "net_rub": 2010
    },
    "2026-09-30": {
      "payment_count": 57,
      "refund_count": 0,
      "gross_rub": 61350,
      "refund_rub": 0,
      "net_rub": 61350
    },
    "2026-10-01": {
      "payment_count": 58,
      "refund_count": 0,
      "gross_rub": 62850,
      "refund_rub": 0,
      "net_rub": 62850
    },
    "2026-10-02": {
      "payment_count": 57,
      "refund_count": 24,
      "gross_rub": 61450,
      "refund_rub": 12000,
      "net_rub": 49450
    },
    "2026-10-03": {
      "payment_count": 18,
      "refund_count": 0,
      "gross_rub": 19400,
      "refund_rub": 0,
      "net_rub": 19400
    }
  },
  "boundary_examples": [
    {
      "ids": [
        "delivery-001",
        "delivery-217"
      ],
      "expected": "Один платёж 1000 RUB, второй delivery — повтор с тем же event_key."
    },
    {
      "ids": [
        "delivery-193"
      ],
      "expected": "Возврат 500 RUB связан с transaction-001, но является отдельным бизнес-событием refund-001."
    },
    {
      "ids": [
        "delivery-001"
      ],
      "expected": "Бизнес-день 2026-09-29 по Москве; дата загрузки не переносит продажу."
    },
    {
      "ids": [
        "delivery-002",
        "delivery-003"
      ],
      "expected": "Бизнес-дни различаются на границе московской полуночи; оба события имеют UTC-дату 2026-09-29."
    },
    {
      "period": "2026-10-05",
      "expected": "В тестовом наборе нет событий. Отличать отсутствие измерений от подтверждённого нуля."
    }
  ]
}
