You are given a list of bank transactions. Each transaction is represented as a tuple (date, company, amount). Your task is to detect groups of recurring transactions — sequences of payments to the same company that occur at roughly regular time intervals and with amounts that differ by no more than a configurable percentage tolerance. Specifically: 1) Group all transactions by company. 2) Inside every company bucket, find every maximal subset of transactions that form a recurring series. A subset qualifies if (a) all amounts in it satisfy max_amount ≤ min_amount * (1 + tolerance) (20 % tolerance means multiplier 1.2), and (b) the successive gaps between transaction dates are almost constant (you must support weekly, bi-weekly, semi-monthly, and monthly patterns; monthly gaps may vary 28–31 days). 3) Return one representative record for every detected recurring series: the earliest date in the series, the company name, and the minimum amount among all transactions in the series. 4) If the same company has several disjoint recurring series, emit one record per series. 5) Order the final output ascending by (company, earliest_date).