```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 not (parts[0].isdigit() and parts[1] == '00'):
        raise ValueError("Invalid amount format. Must be digits followed by exactly two zero digits.")
    
    return int(parts[0]) * 100 + int(parts[1])

def format_amount(cents: int) -> str:
    """Converts integer cents back to a dotted form with exactly two fraction digits."""
    if not isinstance(cents, (int, float)) or cents < 0:
        raise ValueError("Input must be a non-negative integer.")
    
    return f"{cents // 100}.{str(cents % 100).zfill(2)}"

def allocate_cents(total_cents: int, weights: list) -> list:
    """Allocates total_cents across the given list of weights proportionally."""
    if not isinstance(total_cents, (int, float)) or total_cents < 0:
        raise ValueError("Total cents must be a non-negative integer.")
    
    if not isinstance(weights, list):
        raise ValueError("Weights must be a list.")
    
    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("Each weight must be a non-negative integer.")
    
    total_weights = sum(weights)
    if total_weights == 0:
        raise ValueError("Total weights cannot be zero.")
    
    shares = [int(total_cents * (weight / total_weights)) for weight in weights]
    
    remainder = total_cents - sum(shares)
    remaining_indices = [i for i, share in enumerate(shares) if share < int(total_cents * (weights[i] / total_weights))]
    
    while remainder > 0 and remaining_indices:
        shares[remaining_indices.pop(0)] += 1
        remainder -= 1
    
    return shares
```