# Max Number os Statemens in Painless loop

**URL:** <https://discuss.elastic.co/t/max-number-os-statemens-in-painless-loop/190104>\
**Category:** Elasticsearch\
**Created:** [July 11, 2019, 8:03pm UTC](https://discuss.elastic.co/t/max-number-os-statemens-in-painless-loop/190104 "2019-07-11T20:03:10Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![BrunoSdeMenezes](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/brunosdemenezes/32/46413_2.png) [@BrunoSdeMenezes](https://discuss.elastic.co/u/BrunoSdeMenezes)\
**Post date:** [July 11, 2019, 8:03pm UTC](https://discuss.elastic.co/t/max-number-os-statemens-in-painless-loop/190104/1 "2019-07-11T20:03:10Z")

</div>

Hello, I'm trying to run this scripted field:

```
/* Calcula a multa assumida para tarefas cumpridas fora do prazo, considerando os dias se passaram desde o vencimento e a periodicidade da multa*/
if (doc['obrigacao_prazo_cumprimento'].size() <= 0){ // Se não houver prazo, retorna null
   return 0;
}
if (doc['status_tarefa.keyword'].size() > 0 && doc['status_tarefa.keyword'].value == 'CONFIRMADO'){ // Faz o cálculo se a tarefa estiver pendente
  def valor = 0;
  def teto = 0;
  def prazo = 0;
  def confirmacao = 0;

  if(doc['obrigacao_valor_da_multa'].size() > 0){
    valor = doc['obrigacao_valor_da_multa'].value;
  }
  if(doc['obrigacao_teto_multa'].size() > 0){
    teto = doc['obrigacao_teto_multa'].value;
  }

  if(doc['data_confirmado_tarefa'].size() > 0){
    confirmacao = doc['data_confirmado_tarefa'].value.getMillis();// Data de confirmação
  }
  prazo = doc['obrigacao_prazo_cumprimento'].value.getMillis(); // Prazo da tarefa

  ZoneId timeZone = ZoneId.of(ZoneId.SHORT_IDS.get('BET'));
  LocalDate dataConfirmacao = LocalDateTime.ofInstant(Instant.ofEpochMilli(confirmacao),timeZone).toLocalDate();
  LocalDate dataPrazo = LocalDateTime.ofInstant(Instant.ofEpochMilli(prazo),timeZone).toLocalDate();

  def diff = ChronoUnit.DAYS.between(dataPrazo, dataConfirmacao); // diferença em dias

   if (diff < 0) {return 0;} //Se não tiver passado do prazo, retorna 0
   if (doc['obrigacao_periodicidade_multa.keyword'].size() > 0 && doc['obrigacao_periodicidade_multa.keyword'].value == 'DIÁRIA'){ // Periodicidade diária
      LocalDate dia = LocalDateTime.ofInstant(Instant.ofEpochMilli(prazo),timeZone).toLocalDate();
      def diaSemana;
      def diasUteis = 0;
      for(int i = 1; i <= diff; i++){ // Loop for que calcula quantidade de dias úteis passados
         dia.plusDays(1); // Incrementa 1 dia
         diaSemana = dia.getDayOfWeek().ordinal(); // Retorna numero que representa dia da semana
         if(diaSemana != 1 && diaSemana != 7){ // 1 é domingo e 7 é sábado
            diasUteis++;
         }
      }

      valor = diasUteis * valor;
      if(valor > teto){
         valor = teto;
      }
      return valor;
    }
    if (doc['obrigacao_periodicidade_multa.keyword'].size() > 0 && doc['obrigacao_periodicidade_multa.keyword'].value == 'MENSAL'){ //Periodicidade mensal
       diff = ChronoUnit.MONTHS.between(dataPrazo, dataConfirmacao);
       return (valor * diff) + valor;
    }
    if (doc['obrigacao_periodicidade_multa.keyword'].size() > 0 && doc['obrigacao_periodicidade_multa.keyword'].value == 'SEMANAL'){ //Periodicidade semanal
       diff = ChronoUnit.WEEKS.between(dataPrazo, dataConfirmacao);
       return (valor * diff) + valor;
    }
  return valor;
}
return null

```

But it's giving this error when I choose to show 5 years or more.  
{"type":"painless\_error","reason":"The maximum number of statements that can be executed in a loop has been reached."}}}]},"status":400}

How can I fix?

Thanks

---

<div class="post-metadata">

**Author:** ![thomasneirynck](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/thomasneirynck/32/23313_2.png) [@thomasneirynck](https://discuss.elastic.co/u/thomasneirynck)\
**Post date:** [July 12, 2019, 6:13pm UTC](https://discuss.elastic.co/t/max-number-os-statemens-in-painless-loop/190104/2 "2019-07-12T18:13:11Z")

</div>

@BrunoSdeMenezes I'm not sure if the Kibana forum is the right venue for this question. I would ask this in the Elasticsearch forum, as there will be more Painless users there, thanks!

---

<div class="post-metadata">

**Author:** ![BrunoSdeMenezes](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/brunosdemenezes/32/46413_2.png) [@BrunoSdeMenezes](https://discuss.elastic.co/u/BrunoSdeMenezes)\
**Post date:** [July 18, 2019, 1:57pm UTC](https://discuss.elastic.co/t/max-number-os-statemens-in-painless-loop/190104/3 "2019-07-18T13:57:44Z")

</div>

I've solved here the problem. Thanks, anyway!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [August 15, 2019, 1:57pm UTC](https://discuss.elastic.co/t/max-number-os-statemens-in-painless-loop/190104/4 "2019-08-15T13:57:45Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
