Overview
TheCalculatorType enum provides type identification and metadata for all calculator implementations. Each type defines:
- Type identifier string
- Description template
- Required creation fields
- Required calculation parameters
CalculatorType Enum
Type Definitions
SIMPLE_FIXED
Fixed amount calculator - returns constant price regardless of parameters.Type Name:
"simple-fixed"Description Template: "Fixed amount calculator - returns %s regardless"Required Creation Fields:amount- The fixed Money amount
SIMPLE_INTEREST
Annual interest calculator - calculates simple interest based on annual rate.Type Name:
"simple-interest"Description Template: "Annual interest calculator - calculates %s%% annual interest based on base and time unit"Required Creation Fields:annualRate- Annual interest rate as BigDecimal
base- Base amount (Money)unit- Time unit (ChronoUnit)
STEP_FUNCTION
Step function calculator - base price + increments every N units.Type Name:
"step-function"Description Template: "Step function calculator - base price %s PLN + increments every %s units"Required Creation Fields:basePrice- Base price (Money)stepSize- Step size (BigDecimal)stepIncrement- Increment amount (BigDecimal)
quantity- Quantity to calculate for (BigDecimal)
DISCRETE_POINTS
Discrete points calculator - price lookup from predefined quantity-price pairs.Type Name:
"discrete-points"Description Template: "Discrete points calculator - price lookup from predefined points"Required Creation Fields:points- Map of BigDecimal to Money
quantity- Quantity to look up (BigDecimal)
DAILY_INCREMENT
Daily increment calculator - discrete daily price changes.Type Name:
"daily-increment"Description Template: "Daily increment calculator - starts at %s, grows by %s per day (discrete)"Required Creation Fields:startDate- Starting date (LocalDate)startPrice- Starting price (Money)dailyIncrement- Daily change amount (Money)
date- Date to calculate for (LocalDate)
CONTINUOUS_LINEAR_TIME
Continuous linear time calculator - interpolates price between start and end times.Type Name:
"continuous-linear-time"Description Template: "Continuous linear time calculator - interpolates between %s and %s"Required Creation Fields:startTime- Start time (LocalDateTime)startPrice- Price at start (Money)endTime- End time (LocalDateTime)endPrice- Price at end (Money)
time- Time to calculate for (LocalDateTime)
COMPOSITE
Composite function calculator - piecewise function delegating to different calculators.Type Name:
"composite"Description Template: "Composite function calculator - delegates to different calculators based on parameter ranges"Required Creation Fields:ranges- Range definitions (Ranges)rangeSelector- Parameter name to use for range matching
PERCENTAGE
Percentage calculator - calculates percentage of base amount.Type Name:
"percentage"Description Template: "Percentage calculator - calculates %s%% of base amount"Required Creation Fields:percentageRate- Percentage rate (BigDecimal)
baseAmount- Base amount to calculate percentage of (Money)
Price Adapter Types
Price adapters convert between different interpretations. They wrap existing calculators.UNIT_TO_TOTAL_ADAPTER
Converts unit price to total price.Type Name:
"unit-to-total-adapter"Description: "Converts unit price to total: total = quantity × unitPrice"Required Calculation Fields:quantity- Quantity to multiply by (BigDecimal)
Total = UnitPrice × quantityUNIT_TO_MARGINAL_ADAPTER
Converts unit price to marginal price.Type Name:
"unit-to-marginal-adapter"Description: "Converts unit price to marginal: for constant unit price, marginal = unitPrice"Required Calculation Fields:quantity- Quantity position (BigDecimal)
Marginal(n) = (UnitPrice(n) × n) - (UnitPrice(n-1) × (n-1))TOTAL_TO_UNIT_ADAPTER
Converts total price to average unit price.Type Name:
"total-to-unit-adapter"Description: "Converts total price to unit price: unitPrice = total / quantity"Required Calculation Fields:quantity- Quantity to divide by (BigDecimal)
UnitPrice = Total / quantityTOTAL_TO_MARGINAL_ADAPTER
Converts total price to marginal price.Type Name:
"total-to-marginal-adapter"Description: "Converts total to marginal: marginal(n) = total(n) - total(n-1)"Required Calculation Fields:quantity- Quantity position (BigDecimal)
Marginal(n) = Total(n) - Total(n-1)MARGINAL_TO_TOTAL_ADAPTER
Converts marginal price to total price.Type Name:
"marginal-to-total-adapter"Description: "Converts marginal to total: total = Σ marginal(i) for i=1..quantity"Required Calculation Fields:quantity- Quantity to sum to (BigDecimal)
Total(q) = Σ[i=1→q] Marginal(i)MARGINAL_TO_UNIT_ADAPTER
Converts marginal price to average unit price.Type Name:
"marginal-to-unit-adapter"Description: "Converts marginal to unit price: unitPrice = Σ marginal(i) / quantity"Required Calculation Fields:quantity- Quantity to average over (BigDecimal)
UnitPrice(q) = (Σ[i=1→q] Marginal(i)) / qType Methods
getTypeName()
formatDescription()
value- Value to insert into the description template
- Formatted description string
requiredCreationFields()
- Set of field names required for constructor
requiredCalculationFields()
- Set of parameter names required for
calculate()
CalculatorId
Unique identifier for calculator instances.Example
CalculatorView
Data transfer object for calculator information.Example
StepBoundary
Defines how step boundaries are calculated in step function calculators.EXCLUSIVE (default)
Exclusive upper boundary.Step Calculation:
floor(quantity / stepSize)Example with stepSize=5:- quantities 0-4 → step 0
- quantities 5-9 → step 1
- quantities 10-14 → step 2
[0, 5), [5, 10), [10, 15), ...Usage:INCLUSIVE
Inclusive upper boundary.Step Calculation: Use Case:
“Up to 5 units” pricing where 5 is included in the first tier.
floor((quantity - 1) / stepSize) for quantity > 0Example with stepSize=5:- quantities 0-5 → step 0
- quantities 6-10 → step 1
- quantities 11-15 → step 2
[0, 5], [6, 10], [11, 15], ...Usage:Type Validation Example
Related Documentation
- Calculator Interface - Core calculator implementations
- Parameters - Parameter handling
- Interpretation - Price interpretation semantics
