contracts = {row['id']: row for row in output['contracts']}
as_of = datetime.fromisoformat(data['as_of'])
due = [key for key, row in contracts.items() if row['end'] and 0 <= (datetime.fromisoformat(row['end']) - as_of).days <= 30]
check('程序到期清单只列C1', due == ['C1'])
check('未按月租推算合同总额', contracts['C2']['total'] is None and contracts['C3']['end'] is None)
normalized = copy.deepcopy(output['contracts'])
for row in normalized:
    for key in ['total', 'monthly']:
        if row[key] is not None:
            row[key] = str(Decimal(str(row[key]).removesuffix('元')))
save_csv(folder / 'contract-ledger.csv', normalized)
result = {'contracts': normalized, 'raw_api_contracts': output['contracts'], 'due_in_30_days': due, 'external_reminders_sent': 0}
