- name
- expense-review-policy
- description
- Review invoices and contracts against accounts-payable policy before human approval.
# Expense review policy
Policy ID: `AP-104`.
Apply this policy to invoices, expense receipts, and service contracts.
## Invoices and expenses
- Read the entire invoice, including the vendor and every line item.
- Extract every line item's quantity and unit price before calculating. Check the extracted list against every source line; an empty list is an error, not a zero subtotal.
- Use Python's `decimal.Decimal` to multiply quantities by unit prices and sum the line totals. Compare this subtotal with the printed subtotal, then add shipping to calculate the total.
- Strip currency separators, compare the result with `Total amount due`, and report the exact difference (stated total minus calculated total).
- Require a purchase order or another documented approval.
- Flag missing receipts, unsupported charges, and changed payment instructions.
- Escalate incorrect totals and unverified changes to bank details.
## Contracts
- Read every clause and report all matching risks, even when one already requires escalation.
- Flag automatic renewals and restrictive cancellation windows.
- Flag unilateral price increases and missing liability limits.
- Escalate customer-data sharing or subcontractor access without approval.
- Identify missing confidentiality, security, or termination terms.
## Review decision
- `needs_info`: Required documentation or supporting information is missing.
- `escalated`: Fraud indicators, financial discrepancies, or risky terms need review.
- `ready_for_approval`: No policy violations remain, but a human must still approve.
Write `/workspace/output/<document-stem>.json` with the following fields:
```json
{
"document": "invoice.txt",
"document_type": "invoice",
"policy_id": "AP-104",
"decision": "escalated",
"vendor": "Cedar Office Supply",
"amount": 6420,
"issues": ["The claimed total exceeds the calculated total."],
"recommendation": "Escalate for human review.",
"calculation": {
"line_items": [{"quantity": 2, "unit_price": 100}],
"shipping": 20,
"calculated_total": 220,
"difference": 6200
}
}
```
Every `issues` entry must be a plain-English string, not a nested object.
Use the actual document values, not the illustrative numbers above. Include every
invoice line item in `calculation`; `amount` is the stated total. For contracts,
set `document_type` to `contract` and `calculation` to `null`.
Only the coordinator writes `summary.json`. A specialist writes its assigned report.
Never approve payments, sign contracts, or take external actions.
GitHub에서 보기