public Inss clone() {
   Inss imposto = new Inss();
   imposto.setValorDescontoMaximo(this.getValorDescontoMaximo());
   imposto.setValorDescontoMinimo(this.getValorDescontoMinimo());
   imposto.setAliquota(this.getAliquota());
   return imposto;
 }
 public boolean equals(Object object) {
   if (!(object instanceof Inss)) {
     return false;
   }
   Inss otherObject = (Inss) object;
   return new EqualsBuilder()
       .append(this.getAliquota(), otherObject.getAliquota())
       .append(this.getValorDescontoMaximo(), otherObject.getValorDescontoMaximo())
       .append(this.getValorDescontoMinimo(), otherObject.getValorDescontoMinimo())
       .isEquals();
 }
  public Boolean validate() throws ValidateException {
    if ((this.getIdInss() != null)) {
      Inss imposto = ImplDAO.getFromBase(this);
      if (!(Utils.compararCompetencia(imposto.getCompetencia(), this.getCompetencia()) == 0))
        throw new ValidateException("Não é possível alterar a competência de um imposto.");

      if (Utils.compararCompetencia(this.getCompetencia(), new Date()) <= 0)
        throw new ValidateException("Não é possível alterar os valores deste imposto.");

    } else {
      SearchAgent sa = new SearchAgent();
      sa.addParameter(new Equals("competencia", this.getCompetencia()));
      List<Inss> impostos = sa.list(Inss.class);
      if (!impostos.isEmpty())
        throw new ValidateException("Já existe um imposto cadastrado para esta competência.");
    }
    return super.validate();
  }