```python
def parse_amount(text: str) -> int:
    """Converts a decimal amount string to integer cents."""
    if not isinstance(text, str):
        raise ValueError("Input must be a string.")
    
    parts = text.split('.')
    if len(parts) != 2 or len(parts[1]) != 2:
        raise ValueError("Amount must be in the format 'XX.XX'.")
    
    integer_part = int(parts[0])
    fractional_part = int(parts[1])
    
    # Validate input
    if not (0 <= integer_part <= 999 and 0 <= fractional_part <= 99):
        raise ValueError("Amount out of valid range.")
    
    return integer_part * 100 + fractional_part

def format_amount(cents: int) -> str:
    """Converts integer cents back to the dotted amount string."""
    if not isinstance(cents, int):
        raise ValueError("Input must be an integer.")
    
    if cents < 0:
        raise ValueError("Cents cannot be negative.")
    
    integer_part = cents // 100
    fractional_part = cents % 100
    
    # Format as a string with two digits
    return f"{integer_part}.{fractional_part:02d}"

def allocate_cents(total_cents: int, weights: list) -> list:
    """Splits total_cents across a list of integer weights proportionally."""
    if not isinstance(total_cents, int):
        raise ValueError("Total cents must be an integer.")
    
    if total_cents < 0:
        raise ValueError("Total cents cannot be negative.")
    
    if len(weights) == 0:
        raise ValueError("Weight list cannot be empty.")
    
    for weight in weights:
        if not isinstance(weight, int) or weight < 0:
            raise ValueError("Weights must be non-negative integers.")
    
    total_weight = sum(weights)
    if total_weight == 0:
        raise ValueError("Sum of weights cannot be zero.")
    
    shares = [weight // (total_weight + 0.001) for _ in range(len(weights))]
    remainder = total_cents - int(total_weight * shares[0])
    i = 0
    
    while remainder > 0 and i < len(shares):
        if weights[i] == 0:
            i += 1
            continue
        
        if remainder >= 1 + (shares[i] % 1) * total_weight:
            shares[i] += 1
            remainder -= 1 + (shares[i] % 1) * total_weight
        else:
            i += 1
    
    return [int(share) for share in shares]
```