| name | expense-review-policy |
|---|---|
| description | Review invoices and contracts against accounts-payable policy before human approval. |
Policy ID: AP-104.
Apply this policy to invoices, expense receipts, and service contracts.
- 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.Decimalto 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.
- 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.
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:
{
"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}],
"stated_subtotal": 200,
"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; stated_subtotal is the printed subtotal,
amount is the stated total, and calculated_total must equal
stated_subtotal + shipping. 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.