"""Transfer of Earnings Configuration model.""" from typing import Callable, Any class Calculation: """A named calculation formula for determining transfer amounts.""" def __init__( self, calculation_id: str, formula: Callable[[Any], float], description: str = "" ): self.calculation_id = calculation_id self.formula = formula self.description = description def calculate(self, *args, **kwargs) -> float: return self.formula(*args, **kwargs) def __repr__(self) -> str: return f"Calculation(id='{self.calculation_id}', description='{self.description}')" class TransferOfEarningsConfiguration: """Pairs a source/destination contract with a Calculation formula.""" def __init__( self, config_id: str, to_contract_id: str, from_contract_id: str, calculation: Calculation ): self.config_id = config_id self.to_contract_id = to_contract_id self.from_contract_id = from_contract_id self.calculation = calculation def apply_transfer(self, *args, **kwargs) -> float: return self.calculation.calculate(*args, **kwargs) def __repr__(self) -> str: return (f"TransferOfEarningsConfiguration(config_id='{self.config_id}', " f"to_contract='{self.to_contract_id}', " f"from_contract='{self.from_contract_id}', " f"calculation_id='{self.calculation.calculation_id}')")