{"files": {"main.py": "from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n", "policy.py": "POLICY = {\"adjacency_allowed\": True, \"blackout_day\": \"2026-11-01\", \"cancelled_blocks\": True, \"capacity\": 1, \"cutoff_hour\": 17, \"cutoff_inclusive\": True, \"duplicate_policy\": \"first\", \"duration_max\": 120, \"lead_minutes\": 30, \"priority_high_first\": True, \"report_order\": \"id\", \"timezone\": \"America/New_York\"}\n", "helpers.py": "from datetime import datetime, timezone\n\n\ndef parse_dt(s):\n    if not isinstance(s, str):\n        return None\n    try:\n        t = s.strip()\n        if t.endswith('Z') or t.endswith('z'):\n            t = t[:-1] + '+00:00'\n        d = datetime.fromisoformat(t)\n    except Exception:\n        return None\n    if d.tzinfo is None or d.utcoffset() is None:\n        return None\n    return d.astimezone(timezone.utc)\n", "core.py": "from datetime import datetime, timedelta, timezone\nfrom zoneinfo import ZoneInfo\nfrom helpers import parse_dt\n\n\ndef run(payload, policy):\n    zone = ZoneInfo(policy[\"timezone\"])\n    now = parse_dt(payload.get(\"now\"))\n    rows = payload.get(\"appointments\") or []\n    kept = {}\n    order = []\n    for i, a in enumerate(rows):\n        aid = a.get(\"id\")\n        if aid not in kept:\n            order.append(aid)\n            kept[aid] = (i, a)\n        elif policy[\"duplicate_policy\"] == \"last\":\n            kept[aid] = (i, a)\n    items = [(kept[k][0], kept[k][1]) for k in order]\n\n    def pkey(t):\n        p = t[1].get(\"priority\")\n        if not isinstance(p, int) or isinstance(p, bool):\n            p = 0\n        return (-p if policy[\"priority_high_first\"] else p, t[0])\n    items.sort(key=pkey)\n\n    selected, blocked, rejected = [], [], []\n    accepted = []  # (start,end)\n    idx = {}\n    cap = policy[\"capacity\"]\n    adj = policy[\"adjacency_allowed\"]\n    for i, a in items:\n        aid = a.get(\"id\")\n        idx[aid] = i\n        ok = False\n        try:\n            ok = _valid(a, now, policy, zone)\n        except Exception:\n            ok = False\n        if not ok:\n            rejected.append(aid)\n            continue\n        cancelled = a.get(\"cancelled\")\n        if cancelled and not policy[\"cancelled_blocks\"]:\n            rejected.append(aid)\n            continue\n        s = parse_dt(a[\"start\"])\n        e = s + timedelta(minutes=a[\"duration\"])\n        cnt = 0\n        for (s2, e2) in accepted:\n            if adj:\n                o = s < e2 and s2 < e\n            else:\n                o = s <= e2 and s2 <= e\n            if o:\n                cnt += 1\n        if cnt >= cap:\n            rejected.append(aid)\n            continue\n        accepted.append((s, e))\n        (blocked if cancelled else selected).append(aid)\n\n    def srt(lst):\n        if policy[\"report_order\"] == \"id\":\n            return sorted(lst)\n        return sorted(lst, key=lambda x: idx[x])\n    return {\"selected\": srt(selected), \"blocked\": srt(blocked), \"rejected\": srt(rejected)}\n\n\ndef _valid(a, now, policy, zone):\n    if now is None:\n        return False\n    d = a.get(\"duration\")\n    if not isinstance(d, int) or isinstance(d, bool):\n        return False\n    if d <= 0 or d > policy[\"duration_max\"]:\n        return False\n    if not isinstance(a.get(\"cancelled\"), bool):\n        return False\n    s = parse_dt(a.get(\"start\"))\n    if s is None:\n        return False\n    if s < now + timedelta(minutes=policy[\"lead_minutes\"]):\n        return False\n    local = s.astimezone(zone)\n    if local.date().isoformat() == policy[\"blackout_day\"]:\n        return False\n    cut = datetime(local.year, local.month, local.day, policy[\"cutoff_hour\"], 0, tzinfo=zone)\n    cut = cut.astimezone(timezone.utc)\n    e = s + timedelta(minutes=d)\n    if policy[\"cutoff_inclusive\"]:\n        return e <= cut\n    return e < cut\n"}}