from dataclasses import dataclass
from datetime import date


@dataclass(frozen=True)
class Rule:
    version: str
    effective: date
    points_per_yuan: int


rules = [Rule("v1", date(2026, 1, 1), 1),
         Rule("v2", date(2026, 11, 1), 2)]


def award(event):
    applicable = [r for r in rules
                  if r.effective <= event["occurred_on"]]
    if not applicable:
        raise ValueError("没有适用规则")
    rule = max(applicable, key=lambda r: r.effective)
    points = event["amount_cents"] // 100 * rule.points_per_yuan
    return {"points": points, "rule_version": rule.version}


late_event = {"occurred_on": date(2026, 10, 31), "amount_cents": 3000}
new_event = {"occurred_on": date(2026, 11, 1), "amount_cents": 3000}
assert award(late_event) == {"points": 30, "rule_version": "v1"}
assert award(new_event) == {"points": 60, "rule_version": "v2"}
print("晚到事件按发生时适用的规则计算")
