{"files": {"main.py": "from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n", "core.py": "from decimal import Decimal, ROUND_HALF_UP\n\n\ndef _cents(x):\n    return int((Decimal(str(x)) * 100).quantize(Decimal(1), rounding=ROUND_HALF_UP))\n\n\ndef _case(s, mode):\n    return s.upper() if mode == 'upper' else s.lower()\n\n\ndef run(payload, policy):\n    if payload is None:\n        invs = []\n    elif isinstance(payload, dict):\n        invs = payload.get('invoices') or []\n    else:\n        invs = payload\n    out = []\n    for inv in invs:\n        if inv.get('currency') != policy['currency']:\n            continue\n        lines = inv.get('lines') or []\n        if policy['rounding'] == 'per_line':\n            principal = sum(_cents(l) for l in lines)\n        else:\n            total = sum((Decimal(str(l)) for l in lines), Decimal(0))\n            principal = int((total * 100).quantize(Decimal(1), rounding=ROUND_HALF_UP))\n        fee = int(inv.get('fee_cents', 0) or 0)\n        charge = principal + fee\n        if charge < policy['min_invoice_cents']:\n            continue\n        created = inv['created']\n        d = {}\n        for ev in inv.get('events') or []:\n            k = ev['eid']\n            if k in d:\n                if policy['duplicate_event'] == 'last':\n                    d[k] = ev\n            else:\n                d[k] = ev\n        evs = list(d.values())\n        if policy['refunds_first']:\n            evs = [e for e in evs if e['kind'] == 'refund'] + [e for e in evs if e['kind'] != 'refund']\n        active = True\n        tomb = False\n        refunded = 0\n        ceiling = principal + (fee if policy['fee_refundable'] else 0)\n        for e in evs:\n            kind = e['kind']\n            if kind == 'void':\n                active = False\n                if policy['void_is_tombstone']:\n                    tomb = True\n            elif kind == 'restore':\n                if not active and not tomb:\n                    active = True\n            elif kind == 'refund':\n                if not active:\n                    continue\n                age = e['day'] - created\n                lim = policy['max_refund_age_days']\n                if age < 0:\n                    continue\n                if age > lim or (age == lim and not policy['inclusive_limit']):\n                    continue\n                amt = int(e['cents'])\n                remaining = ceiling - refunded\n                if amt > remaining:\n                    if policy['refund_overflow'] == 'cap':\n                        amt = remaining\n                    else:\n                        continue\n                refunded += amt\n        if not active:\n            status = 'void'\n        elif refunded == charge:\n            status = 'refunded'\n        else:\n            status = 'open'\n        out.append({'id': inv['id'], 'charge': charge, 'refunded': refunded,\n                    'balance': charge - refunded,\n                    'status': _case(status, policy['status_case']),\n                    '_c': created})\n    if policy['order'] == 'created':\n        out.sort(key=lambda r: (r['_c'], r['id']))\n    else:\n        out.sort(key=lambda r: r['id'])\n    for r in out:\n        del r['_c']\n    return {'invoices': out}\n", "policy.py": "POLICY = {\n    'duplicate_event': 'first',\n    'inclusive_limit': True,\n    'max_refund_age_days': 30,\n    'rounding': 'per_line',\n    'order': 'id',\n    'refund_overflow': 'cap',\n    'refunds_first': True,\n    'void_is_tombstone': True,\n    'min_invoice_cents': 10,\n    'status_case': 'lower',\n    'currency': 'USD',\n    'fee_refundable': True,\n}\n", "helpers.py": "# Optional pure helper functions.\n"}}