code: public GuaranteeTermEvaluationResult evaluate(
              IAgreement agreement, IGuaranteeTerm term, List<IMonitoringMetric> metrics, Date now) {
  
          /*
           * throws NullPointerException if not property initialized 
           */
          checkInitialized();
                      
          logger.debug("evaluate(agreement={}, term={}, now={})", 
                  agreement.getAgreementId(), term.getKpiName(), now);
  
          final List<IViolation> violations = serviceLevelEval.evaluate(agreement, term, metrics, now);
          logger.debug("Found " + violations.size() + " violations");
          final List<? extends ICompensation> compensations = businessEval.evaluate(agreement, term, violations, now);
          logger.debug("Found " + compensations.size() + " compensations");
          
          GuaranteeTermEvaluationResult result = new GuaranteeTermEvaluationResult(violations, compensations); 
          
          return result;
      }
docs: Evaluate violations and penalties for a given guarantee term and a list of metrics.
  
  @param agreement that contains the term to evaluate
  @param term guarantee term to evaluate
  @param metrics list of metrics to evaluated if fulfill the service level of the term.
  @param now the evaluation period ends at <code>now</code>.