{
  "description": "Нижние границы строк: не меньше 1 ₽ за единицу (для весового товара — пропорционально весу) и не ниже минимальной розничной цены; 341 балл распределяется по доступному к списанию.",
  "calculation": [
    "Нижние границы: хлеб 2 шт. × 100 = 200; сыр ⌈100 × 0,567⌉ = 57; водка max(100, МРЦ 34 900) = 34 900.",
    "Ёмкость: 1000 − 200 = 800; 28 350 − 57 = 28 293; 40 000 − 34 900 = 5100; всего 34 193 (доля 100 % от 69 350 не ограничивает).",
    "Предел: ⌊34 193 / 100⌋ = 341 балл (баланс 100 000) → 34 100 коп.",
    "34 100 по ёмкостям: 797,82 / 28 216,05 / 5086,13 → 797, 28 216, 5086 (сумма 34 099); остаток 1 — хлебу (0,82) → 798, 28 216, 5086.",
    "341 балл по деньгам 798 : 28 216 : 5086: 7,98 / 282,16 / 50,86 → 7, 282, 50; остаток 2 — хлебу (0,98) и водке (0,86) → 8, 282, 51.",
    "База начисления 202 + 134 + 34 914 = 35 250 → ⌊17,625⌋ = 17; по весам 0,10 / 0,06 / 16,84 → 0, 0, 16; остаток 1 — водке → 0, 0, 17."
  ],
  "rules": {
    "schema": 1,
    "program_id": "01900000-0000-7000-8000-000000000001",
    "timezone": "Europe/Moscow",
    "points": {
      "point_type_id": "01900000-0000-7000-8000-000000000002",
      "precision": 0,
      "value_minor": 100
    },
    "accrual": {
      "percent_bp": 500
    },
    "redemption": {
      "max_share_bp": 10000,
      "min_unit_remainder_minor": 100,
      "min_receipt_minor": 0,
      "confirmation": "weak_identifiers"
    },
    "lifecycle": {
      "activation_delay_days": null,
      "expiration_policy": "after_days",
      "expiration_days": null,
      "expiration_date": null,
      "expiration_years": null
    },
    "returns": {
      "spent_points_policy": "ignore",
      "restore_into_new_lot": false
    },
    "campaigns": [],
    "tiers": null,
    "bonuses": {
      "welcome": null,
      "birthday": null,
      "referral": null
    },
    "stamp_cards": []
  },
  "basket": {
    "purchased_at": "2026-10-03T12:00:00+03:00",
    "redeem_points": 0,
    "redeem_maximum": true,
    "lines": [
      {
        "id": "1",
        "sku": "BREAD",
        "quantity": 2000,
        "amount": 1000
      },
      {
        "id": "2",
        "sku": "CHEESE",
        "quantity": 567,
        "amount": 28350
      },
      {
        "id": "3",
        "sku": "VODKA",
        "quantity": 1000,
        "amount": 40000,
        "min_unit_price_minor": 34900
      }
    ]
  },
  "member": {
    "member_id": "m-1",
    "spendable_points": 100000,
    "can_redeem": true,
    "can_accrue": true
  },
  "expected": {
    "total": 69350,
    "discount": 0,
    "redeemed_money": 34100,
    "redeemed_points": 341,
    "points_earned": 17,
    "payable": 35250,
    "max_redeemable_points": 341,
    "lines": [
      {
        "id": "1",
        "amount": 1000,
        "discount": 0,
        "redeemed_money": 798,
        "redeemed_points": 8,
        "points_earned": 0,
        "payable": 202
      },
      {
        "id": "2",
        "amount": 28350,
        "discount": 0,
        "redeemed_money": 28216,
        "redeemed_points": 282,
        "points_earned": 0,
        "payable": 134
      },
      {
        "id": "3",
        "amount": 40000,
        "discount": 0,
        "redeemed_money": 5086,
        "redeemed_points": 51,
        "points_earned": 17,
        "payable": 34914
      }
    ],
    "campaigns": [],
    "stamps": [],
    "trace": [
      {
        "code": "redemption.limit",
        "data": {
          "eligible_total": 69350,
          "capacity": 34193,
          "max_share_bp": 10000,
          "balance": 100000,
          "max_points": 341
        }
      },
      {
        "code": "redemption.applied",
        "data": {
          "points": 341,
          "money": 34100
        }
      },
      {
        "code": "accrual.base",
        "data": {
          "base": 35250,
          "percent_bp": 500,
          "points": 17
        }
      }
    ]
  }
}
