def process_csv(f):
    """
    Take a file-like object and yield OrderedDicts to be inserted into raw
    spending database.
    """
    reader = unicodecsv.DictReader(f, encoding=_ENCODING)
    for row in reader:
        month, year = parse_month_year(row['Return Month'])

        yield OrderedDict([
            ('customer_name', row['CustomerName']),
            ('supplier_name', row['SupplierName']),
            ('month', month),
            ('year', year),
            ('date', datetime.date(year, month, 1)),
            ('total_ex_vat', parse_price(row['EvidencedSpend'])),
            ('lot', parse_lot_name(row['LotDescription'])),
            ('customer_sector', parse_customer_sector(row['Sector'])),
            ('supplier_type', parse_sme_or_large(row['SME or Large'])),
        ])