```python
def cheapest_pass_plan(trip_days: list, passes: list) -> dict:
    if not trip_days or not passes:
        return {'total': 0, 'purchases': []}

    for day in trip_days:
        if not isinstance(day, int) or day <= 0:
            raise ValueError("Trip days must be positive integers")
        if day != trip_days[trip_days.index(day) - 1] + 1 and trip_days.index(day) > 0:
            raise ValueError("Trip days must be strictly increasing")

    for pass_kind in passes:
        if not isinstance(pass_kind['span'], int) or pass_kind['span'] <= 0:
            raise ValueError("Pass span must be a positive integer")
        if not isinstance(pass_kind['cost'], int) and not isinstance(pass_kind['cost'], float) or pass_kind['cost'] < 0:
            raise ValueError("Pass cost must be a non-negative number")

    dp = [float('inf')] * (trip_days[-1] + 1)
    dp[0] = 0

    for day in trip_days:
        for pass_kind in passes:
            if day >= pass_kind['span']:
                dp[day] = min(dp[day], dp[day - pass_kind['span']] + pass_kind['cost'])

    total_cost = dp[-1]

    purchases = []
    i = len(trip_days) - 1
    while i >= 0:
        j = i
        while j >= 0 and dp[j] == dp[i]:
            j -= 1

        for pass_kind in passes:
            if i - j + 1 == pass_kind['span'] and dp[j] + pass_kind['cost'] == dp[i]:
                purchases.append([trip_days[j], pass_kind['span']])
                i = j - 1
                break

    return {'total': total_cost, 'purchases': sorted(purchases)}
```