{"files": {"main.py": "from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n", "core.py": "from datetime import datetime, time, timedelta, timezone\nfrom zoneinfo import ZoneInfo\nfrom helpers import parse_aware_datetime, is_integer, overlaps\n\ndef run(payload, policy):\n    selected = []\n    blocked = []\n    rejected = []\n    if not isinstance(payload, dict):\n        return {\"selected\": [], \"blocked\": [], \"rejected\": []}\n    policy = policy if isinstance(policy, dict) else {}\n    tz_name = policy.get(\"timezone\", \"America/New_York\")\n    cutoff_hour = policy.get(\"cutoff_hour\", 17)\n    cutoff_inclusive = policy.get(\"cutoff_inclusive\", True)\n    lead_minutes = policy.get(\"lead_minutes\", 30)\n    adjacency_allowed = policy.get(\"adjacency_allowed\", True)\n    duration_max = policy.get(\"duration_max\", 120)\n    capacity = policy.get(\"capacity\", 1)\n    report_order = policy.get(\"report_order\", \"id\")\n    blackout_day = policy.get(\"blackout_day\", \"2026-11-01\")\n    cancelled_blocks = policy.get(\"cancelled_blocks\", True)\n    duplicate_policy = policy.get(\"duplicate_policy\", \"first\")\n    priority_high_first = policy.get(\"priority_high_first\", True)\n    try:\n        tz = ZoneInfo(str(tz_name))\n    except Exception:\n        tz = None\n    appointments = payload.get(\"appointments\")\n    if not isinstance(appointments, list):\n        return {\"selected\": [], \"blocked\": [], \"rejected\": []}\n    retained = {}\n    for original_index, appointment in enumerate(appointments):\n        if not isinstance(appointment, dict):\n            continue\n        if \"id\" not in appointment:\n            continue\n        appointment_id = appointment[\"id\"]\n        if isinstance(appointment_id, bool) or not isinstance(appointment_id, (str, int)):\n            continue\n        if isinstance(appointment_id, str) and appointment_id == \"\":\n            continue\n        copied = dict(appointment)\n        if appointment_id not in retained:\n            retained[appointment_id] = (original_index, copied)\n        elif duplicate_policy == \"last\":\n            retained[appointment_id] = (original_index, copied)\n    retained_items = list(retained.values())\n    now_dt = parse_aware_datetime(payload.get(\"now\"))\n    if now_dt is None or tz is None:\n        for original_index, appointment in retained_items:\n            rejected.append((appointment[\"id\"], original_index))\n        return _format_output(selected, blocked, rejected, report_order)\n    now_utc = now_dt.astimezone(timezone.utc)\n    try:\n        lead_delta = timedelta(minutes=lead_minutes)\n        cutoff_hour_int = int(cutoff_hour)\n        capacity_int = int(capacity)\n        duration_max_value = duration_max\n    except Exception:\n        for original_index, appointment in retained_items:\n            rejected.append((appointment[\"id\"], original_index))\n        return _format_output(selected, blocked, rejected, report_order)\n    earliest_start = now_utc + lead_delta\n    def processing_key(item):\n        original_index, appointment = item\n        priority = appointment.get(\"priority\")\n        if is_integer(priority):\n            priority_value = priority\n        elif isinstance(priority, float) and priority.is_integer():\n            priority_value = int(priority)\n        else:\n            priority_value = 0\n        if priority_high_first:\n            return (-priority_value, original_index)\n        return (priority_value, original_index)\n    ordered = sorted(retained_items, key=processing_key)\n    accepted_intervals = []\n    blackout_text = str(blackout_day)\n    for original_index, appointment in ordered:\n        appointment_id = appointment[\"id\"]\n        valid = True\n        if \"start\" not in appointment or \"duration\" not in appointment or \"priority\" not in appointment or \"cancelled\" not in appointment:\n            valid = False\n        duration_value = None\n        if valid:\n            raw_duration = appointment.get(\"duration\")\n            if is_integer(raw_duration):\n                duration_value = raw_duration\n            elif isinstance(raw_duration, float) and raw_duration.is_integer():\n                duration_value = int(raw_duration)\n            else:\n                valid = False\n        if valid and not is_integer(appointment.get(\"priority\")) and not (isinstance(appointment.get(\"priority\"), float) and appointment.get(\"priority\").is_integer()):\n            valid = False\n        if valid and not isinstance(appointment.get(\"cancelled\"), bool):\n            valid = False\n        start_dt = parse_aware_datetime(appointment.get(\"start\")) if valid else None\n        if valid and start_dt is None:\n            valid = False\n        if valid and (duration_value <= 0 or duration_value > duration_max_value):\n            valid = False\n        start_utc = None\n        end_utc = None\n        if valid:\n            start_utc = start_dt.astimezone(timezone.utc)\n            end_utc = start_utc + timedelta(minutes=duration_value)\n            if start_utc < earliest_start:\n                valid = False\n        if valid:\n            local_start = start_utc.astimezone(tz)\n            if local_start.date().isoformat() == blackout_text:\n                valid = False\n            else:\n                cutoff_dt = datetime(local_start.year, local_start.month, local_start.day, cutoff_hour_int, 0, tzinfo=tz)\n                if cutoff_inclusive:\n                    if end_utc > cutoff_dt:\n                        valid = False\n                else:\n                    if end_utc >= cutoff_dt:\n                        valid = False\n        if valid and appointment.get(\"cancelled\") and not cancelled_blocks:\n            valid = False\n        if not valid:\n            rejected.append((appointment_id, original_index))\n            continue\n        overlap_count = 0\n        for accepted_start, accepted_end in accepted_intervals:\n            if overlaps(start_utc, end_utc, accepted_start, accepted_end, adjacency_allowed):\n                overlap_count += 1\n        if overlap_count >= capacity_int:\n            rejected.append((appointment_id, original_index))\n            continue\n        accepted_intervals.append((start_utc, end_utc))\n        if appointment.get(\"cancelled\"):\n            blocked.append((appointment_id, original_index))\n        else:\n            selected.append((appointment_id, original_index))\n    return _format_output(selected, blocked, rejected, report_order)\n\ndef _format_output(selected, blocked, rejected, report_order):\n    return {\"selected\": _sort_ids(selected, report_order), \"blocked\": _sort_ids(blocked, report_order), \"rejected\": _sort_ids(rejected, report_order)}\n\ndef _sort_ids(items, report_order):\n    if report_order == \"id\":\n        def id_key(item):\n            value = item[0]\n            if isinstance(value, (int, float)) and not isinstance(value, bool):\n                return (0, value, \"\")\n            return (1, 0, str(value))\n        ordered = sorted(items, key=id_key)\n    else:\n        ordered = sorted(items, key=lambda item: item[1])\n    return [item[0] for item in ordered]\n", "policy.py": "POLICY = {\n    \"timezone\": \"America/New_York\",\n    \"cutoff_hour\": 17,\n    \"cutoff_inclusive\": True,\n    \"lead_minutes\": 30,\n    \"adjacency_allowed\": True,\n    \"duration_max\": 120,\n    \"capacity\": 1,\n    \"report_order\": \"id\",\n    \"blackout_day\": \"2026-11-01\",\n    \"cancelled_blocks\": True,\n    \"duplicate_policy\": \"first\",\n    \"priority_high_first\": True,\n}\n", "helpers.py": "from datetime import datetime\n\ndef parse_aware_datetime(value):\n    if isinstance(value, datetime):\n        dt = value\n    elif isinstance(value, str):\n        text = value.strip()\n        if not text:\n            return None\n        if text.endswith(\"Z\") or text.endswith(\"z\"):\n            text = text[:-1] + \"+00:00\"\n        try:\n            dt = datetime.fromisoformat(text)\n        except ValueError:\n            return None\n    else:\n        return None\n    if dt.tzinfo is None or dt.utcoffset() is None:\n        return None\n    return dt\n\ndef is_integer(value):\n    return isinstance(value, int) and not isinstance(value, bool)\n\ndef overlaps(start, end, other_start, other_end, adjacency_allowed):\n    if adjacency_allowed:\n        return start < other_end and other_start < end\n    return start <= other_end and other_start <= end\n"}}