Views
No views yet
Args:
invoices (list of dict): A list of dictionaries containing invoice data.
Each dictionary should have keys: 'invoice_id', 'vendor', 'amount', 'date'.
Returns:
list: A list of flagged invoices with reasons for suspicion.
"""
flagged_invoices = []
# Helper function to check for duplicate invoice IDs
def has_duplicate_ids(invoices):
ids = [invoice['invoice_id'] for invoice in invoices]
return len(ids) != len(set(ids))
# Check for duplicate invoice IDs
if has_duplicate_ids(invoices):
flagged_invoices.append("Duplicate invoice IDs found.")
# Check each invoice for anomalies
for invoice in invoices:
reasons = []
# Check for unusually high or low amounts
if invoice['amount'] <= 0:
reasons.append("Amount is zero or negative.")
elif invoice['amount'] > 1_000_000: # Example threshold for large amounts
reasons.append("Unusually high amount.")
# Check for invalid dates (e.g., future dates)
from datetime import datetime
invoice_date = datetime.strptime(invoice['date'], '%Y-%m-%d')
if invoice_date > datetime.now():
reasons.append("Future date detected.")
# Check for repeated vendors with large amounts in a short period
vendor_invoices = [inv for inv in invoices if inv['vendor'] == invoice['vendor']]
if len(vendor_invoices) > 5:
reasons.append("High frequency of invoices from the same vendor.")
if reasons:
flagged_invoices.append({
'invoice_id': invoice['invoice_id'],
'vendor': invoice['vendor'],
'amount': invoice['amount'],
'date': invoice['date'],
'reasons': reasons
})
return flagged_invoices