PaymentAmount.java

package com.chronus.domain.valueobject;

import com.chronus.domain.exception.InvalidPaymentException;

// Objeto de valor inmutable y autovalidado para el monto de un pago.
public record PaymentAmount(double value) {

    public PaymentAmount {
        if (!Double.isFinite(value) || value <= 0 || value != Math.floor(value)) {
            throw new InvalidPaymentException(
                    "The payment amount must be a positive whole number.");
        }
        // el value se asigna directamente al constructor, no se necesita sanitizar
        // value = value;
    }
}