```python
def net_tally(sheets: list) -> str:
    if not isinstance(sheets, list):
        raise ValueError("sheets must be a list")
    
    item_counts = {}
    max_item_length = 0
    total_net = 0
    
    for sheet in sheets:
        if not isinstance(sheet, str):
            raise ValueError("each sheet must be a string")
        
        for row in sheet.splitlines():
            row = row.strip()
            if not row:
                continue
            
            parts = row.split('|')
            if len(parts) != 3:
                raise ValueError("each row must have exactly three fields")
            
            item, sold, returned = [part.strip() for part in parts]
            if not item:
                raise ValueError("item name cannot be empty")
            
            if not sold.isdigit() or not returned.isdigit():
                raise ValueError("sold and returned must be strings of decimal digits")
            
            sold_count = int(sold)
            returned_count = int(returned)
            if returned_count > sold_count:
                raise ValueError("returned count cannot exceed sold count")
            
            if item in item_counts:
                item_counts[item] += sold_count - returned_count
            else:
                item_counts[item] = sold_count - returned_count
            
            max_item_length = max(max_item_length, len(item))
            total_net += sold_count - returned_count
    
    if not item_counts:
        return ""
    
    report = []
    for item in sorted(item_counts):
        net_count = item_counts[item]
        report.append(f"{item:<{max_item_length}}  {net_count}")
    
    report.append(f"{'total':<{max_item_length}}  {total_net}")
    return '\n'.join(report)
```