code: public void addHardConstraintMatch(RuleContext kcontext, BigDecimal hardWeight) {
          hardScore = hardScore.add(hardWeight);
          registerConstraintMatch(kcontext,
                  () -> hardScore = hardScore.subtract(hardWeight),
                  () -> HardMediumSoftBigDecimalScore.of(hardWeight, BigDecimal.ZERO, BigDecimal.ZERO));
      }
docs: Add a hard constraint of specified weighting.
  
  This is typically used in Drools scoring to add a hard constraint match (negative value to indicate an infeasible
  solution).
  
  @param kcontext never null, the magic variable in DRL
  @param hardWeight never null, higher is better, negative for a penalty, positive for a reward