```python
def plan_batches(units: int, capacity: int) -> dict:
    if not isinstance(units, int) or units <= 0:
        raise ValueError("units must be a positive integer")
    if not isinstance(capacity, int) or capacity <= 0:
        raise ValueError("capacity must be a positive integer")

    def split_consignment(units, capacity):
        if units <= capacity:
            return {units: 1}
        else:
            half = (units + capacity) // 2
            left = split_consignment(half, capacity)
            right = split_consignment(units - half, capacity)
            return {**left, **right}

    result = split_consignment(units, capacity)
    splits = len(result) - 1
    rounds = splits
    return {"loads": result, "splits": splits, "rounds": rounds}
```