code: protected function buildAdjustments($type, Model\AdjustableInterface $adjustable, array $data, $persistence = false)
      {
          Model\AdjustmentTypes::isValidType($type);
  
          $change = false;
  
          // Generate adjustments
          $newAdjustments = [];
          foreach ($data as $d) {
              $adjustment = $this->saleFactory->createAdjustmentFor($adjustable);
              $adjustment
                  ->setType($type)
                  ->setMode($d->getMode())
                  ->setDesignation($d->getDesignation())
                  ->setAmount($d->getAmount())
                  ->setImmutable($d->isImmutable());
  
              $newAdjustments[] = $adjustment;
          }
  
          // Current adjustments
          $oldAdjustments = $adjustable->getAdjustments($type);
  
          // Remove current adjustments that do not match any generated adjustments
          foreach ($oldAdjustments as $oldAdjustment) {
              // Skip non-immutable adjustment as they have been defined by the user.
              if (!$oldAdjustment->isImmutable()) {
                  continue;
              }
  
              // Look for a corresponding adjustment
              foreach ($newAdjustments as $index => $newAdjustment) {
                  if ($oldAdjustment->equals($newAdjustment)) {
                      // Remove the generated adjustment
                      unset($newAdjustments[$index]);
                      continue 2;
                  }
              }
  
              // No matching generated adjustment found : remove the current.
              $adjustable->removeAdjustment($oldAdjustment);
  
              if ($persistence) {
                  $this->persistenceHelper->remove($oldAdjustment, true);
              }
  
              $change = true;
          }
  
          // Adds the remaining generated adjustments
          foreach ($newAdjustments as $newAdjustment) {
              $adjustable->addAdjustment($newAdjustment);
  
              if ($persistence) {
                  $this->persistenceHelper->persistAndRecompute($newAdjustment, true);
              }
  
              $change = true;
          }
  
          return $change;
      }
docs: Builds the adjustable's adjustments based on the given data and type.
  
  @param string                          $type
  @param Model\AdjustableInterface       $adjustable
  @param Model\AdjustmentDataInterface[] $data
  @param bool                            $persistence
  
  @return bool Whether at least one adjustment has been changed (created, updated or deleted)