Class ServicingOffsetBuilder

java.lang.Object
org.kigalisim.engine.support.ValidatedBuilder<ServicingOffset>
org.kigalisim.engine.recalc.util.ServicingOffsetBuilder

public class ServicingOffsetBuilder extends ValidatedBuilder<ServicingOffset>
Builder that calculates servicing (precharge/recharge) offsets for population changes.
  • Constructor Details

    • ServicingOffsetBuilder

      public ServicingOffsetBuilder()
      Create a new ServicingOffsetBuilder.
  • Method Details

    • setSalesKg

      public ServicingOffsetBuilder setSalesKg(BigDecimal salesKg)
      Set the total substance sales volume in kilograms.
      Parameters:
      salesKg - The total substance sales volume in kilograms
      Returns:
      This builder for chaining
    • setRechargeKg

      public ServicingOffsetBuilder setRechargeKg(BigDecimal rechargeKg)
      Set the recharge volume in kilograms.
      Parameters:
      rechargeKg - The recharge volume in kilograms
      Returns:
      This builder for chaining
    • setInitialChargeKgUnit

      public ServicingOffsetBuilder setInitialChargeKgUnit(BigDecimal initialChargeKgUnit)
      Set the initial charge per unit in kg/unit.
      Parameters:
      initialChargeKgUnit - The initial charge per unit in kg/unit
      Returns:
      This builder for chaining
    • setPrechargePopRaw

      public ServicingOffsetBuilder setPrechargePopRaw(EngineNumber prechargePopRaw)
      Set the raw precharge population value.
      Parameters:
      prechargePopRaw - The raw precharge population value, or null if unspecified
      Returns:
      This builder for chaining
    • setPrechargeIntensityRaw

      public ServicingOffsetBuilder setPrechargeIntensityRaw(EngineNumber prechargeIntensityRaw)
      Set the raw precharge intensity value.
      Parameters:
      prechargeIntensityRaw - The raw precharge intensity value
      Returns:
      This builder for chaining
    • setUseExplicitRechargeEffective

      public ServicingOffsetBuilder setUseExplicitRechargeEffective(boolean useExplicitRechargeEffective)
      Set whether explicit (volume-based) recharge is in use.
      Parameters:
      useExplicitRechargeEffective - Whether explicit (volume-based) recharge is in use
      Returns:
      This builder for chaining
    • setImplicitPrechargeKg

      public ServicingOffsetBuilder setImplicitPrechargeKg(BigDecimal implicitPrechargeKg)
      Set the implicit precharge volume in kilograms.
      Parameters:
      implicitPrechargeKg - The implicit precharge volume in kilograms
      Returns:
      This builder for chaining
    • setStateGetter

      public ServicingOffsetBuilder setStateGetter(StateGetter stateGetter)
      Set the base state getter for unit conversions.
      Parameters:
      stateGetter - The base state getter for unit conversions
      Returns:
      This builder for chaining
    • buildInternal

      protected ServicingOffset buildInternal()
      Build the servicing offset for a population change.

      This method determines the precharge and recharge offsets and the resulting unit delta based on the tracking mode and precharge configuration. It dispatches to the appropriate branch: percentage precharge with volume-based sales (circular), explicit precharge with volume-based sales, or units-based tracking.

      Specified by:
      buildInternal in class ValidatedBuilder<ServicingOffset>
      Returns:
      A ServicingOffset with deltaUnits, prechargeKg, and rechargeKg
    • validate

      protected void validate()
      Validate the fields required by every branch of servicing offset calculation.

      Fields only needed by a specific branch (such as stateGetter for explicit precharge or implicitPrechargeKg for unit-based sales) are validated lazily by that branch instead, since which branch runs depends on the other fields set here.

      Specified by:
      validate in class ValidatedBuilder<ServicingOffset>
      Throws:
      IllegalStateException - if a required field is missing or precharge population and intensity were not set together