code: public void addSoftConstraintMatch(RuleContext kcontext, BigDecimal softWeight) {
          softScore = softScore.add(softWeight);
          registerConstraintMatch(kcontext,
                  () -> softScore = softScore.subtract(softWeight),
                  () -> HardMediumSoftBigDecimalScore.of(BigDecimal.ZERO, BigDecimal.ZERO, softWeight));
      }
docs: Add a soft constraint match of specified weighting.
  
  This is typically used in Drools scoring to add a low priority constraint match.
  
  @param kcontext never null, the magic variable in DRL
  @param softWeight never null, higher is better, negative for a penalty, positive for a reward