{"files": {"main.py": "from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n", "policy.py": "POLICY = {\n    'cutoff_hour': 18,\n    'cutoff_inclusive': False,\n    'lead_minutes': 60,\n    'timezone': 'UTC',\n    'adjacency_allowed': False,\n    'cancelled_blocks': False,\n    'duplicate_policy': 'last',\n    'duration_max': 90,\n    'capacity': 2,\n    'report_order': 'input',\n    'blackout_day': '2026-11-02',\n    'priority_high_first': False,\n}\n", "helpers.py": "from datetime import datetime, timedelta, timezone\n\n\ndef parse_dt(s):\n    if isinstance(s, datetime):\n        return s\n    if isinstance(s, str) and s.endswith('Z'):\n        s = s[:-1] + '+00:00'\n    return datetime.fromisoformat(s)\n\n\ndef overlaps(a, b, adjacency_allowed):\n    if adjacency_allowed:\n        return a[0] < b[1] and b[0] < a[1]\n    return a[0] <= b[1] and b[0] <= a[1]\n", "core.py": "from datetime import datetime, timedelta, timezone\nfrom zoneinfo import ZoneInfo\nfrom helpers import parse_dt, overlaps\n\n\ndef run(payload, policy):\n    tz = ZoneInfo(policy['timezone'])\n    now = parse_dt(payload['now']).astimezone(timezone.utc)\n    rows = payload.get('appointments', [])\n    kept = {}\n    order = []\n    for i, r in enumerate(rows):\n        rid = r['id']\n        if rid not in kept:\n            order.append(rid)\n            kept[rid] = (i, r)\n        elif policy['duplicate_policy'] == 'last':\n            kept[rid] = (i, r)\n    items = [kept[rid] for rid in order]\n    hi = policy['priority_high_first']\n    items.sort(key=lambda t: (-t[1]['priority'] if hi else t[1]['priority'], t[0]))\n    selected, blocked, rejected = [], [], []\n    accepted = []\n    lead = timedelta(minutes=policy['lead_minutes'])\n    for idx, r in items:\n        rid = r['id']\n        dur = r['duration']\n        ok = True\n        if not (dur > 0 and dur <= policy['duration_max']):\n            ok = False\n        start_local = parse_dt(r['start'])\n        start = start_local.astimezone(timezone.utc)\n        if ok and start < now + lead:\n            ok = False\n        if ok:\n            end = start + timedelta(minutes=dur)\n            loc = start.astimezone(tz)\n            if loc.date().isoformat() == policy['blackout_day']:\n                ok = False\n            else:\n                cut = datetime(loc.year, loc.month, loc.day, policy['cutoff_hour'], 0, tzinfo=tz).astimezone(timezone.utc)\n                if policy['cutoff_inclusive']:\n                    ok = end <= cut\n                else:\n                    ok = end < cut\n        if not ok:\n            rejected.append((idx, rid))\n            continue\n        cancelled = bool(r.get('cancelled'))\n        if cancelled and not policy['cancelled_blocks']:\n            rejected.append((idx, rid))\n            continue\n        iv = (start, end)\n        n = sum(1 for a in accepted if overlaps(a, iv, policy['adjacency_allowed']))\n        if n >= policy['capacity']:\n            rejected.append((idx, rid))\n            continue\n        accepted.append(iv)\n        (blocked if cancelled else selected).append((idx, rid))\n\n    def fmt(lst):\n        if policy['report_order'] == 'id':\n            return sorted(x[1] for x in lst)\n        return [x[1] for x in sorted(lst, key=lambda x: x[0])]\n\n    return {'selected': fmt(selected), 'blocked': fmt(blocked), 'rejected': fmt(rejected)}\n"}}