Write a function to parse and clean unstructured transaction description strings from legacy bank feeds for Propel.
Implement parse_transaction_description(text), returning a dictionary with merchant, date, amount, and type. Extract dates in MM/DD/YYYY or YYYY-MM-DD format, monetary values with optional currency symbols and signs, and CR or DR indicators. Normalize dates to YYYY-MM-DD, convert amounts to positive floats, infer type from signs or indicators, and remove transaction labels, identifiers, and extracted fields from the merchant name. Return None for fields that cannot be extracted.
def parse_transaction_description(text):