/**
* Calcula acréscimo previsto no art. 3º da Lei 11.718/2008.
*
* @param {array} periodos Matriz com os períodos de contribuição. As duas primeiras colunas devem corresponder às datas inicial e final.
* @param {boolean} aplicacaoRetroativa Determina se o cálculo deve abranger períodos anteriores a 01/01/2011.
* @return {array} A matriz com os acréscimos por período.
*
* @customfunction
*/functionjef_CALCULAR_ACRESCIMOS_LEI_11718(periodos,aplicacaoRetroativa){periodos=Utilidades.validarPeriodos(periodos);varmultiplicador=function(ano){if(ano<=2010){returnaplicacaoRetroativa?2:0;}elseif(ano<=2015){return2;}elseif(ano<=2020){return1;}else{return0;}};varcontribuicoes=Object.create(null);periodos.forEach(function(periodo){varanoInicial=Utilidades.ano(periodo[0]);varmesInicial=Utilidades.mes(periodo[0]);varanoFinal=Utilidades.ano(periodo[1]);varmesFinal=Utilidades.mes(periodo[1]);contribuicoes[anoInicial]=contribuicoes[anoInicial]||[];contribuicoes[anoFinal]=contribuicoes[anoFinal]||[];if(anoInicial===anoFinal){for(vari=mesInicial;i<=mesFinal;i++){contribuicoes[anoInicial].push(i);}}else{for(vari=mesInicial;i<=12;i++){contribuicoes[anoInicial].push(i);}for(vari=1;i<=mesFinal;i++){contribuicoes[anoFinal].push(i);}}});Object.keys(contribuicoes).forEach(function(key){vararr=[];for(vari=0,l=contribuicoes[key].length;i<l;i++){if(arr.indexOf(contribuicoes[key][i])<0){arr.push(contribuicoes[key][i])}}contribuicoes[key]=arr;});varacrescimos=periodos.map(function(periodo,idx){varanoInicial=Utilidades.ano(periodo[0]);varmesInicial=Utilidades.mes(periodo[0]);varanoFinal=Utilidades.ano(periodo[1]);varmesFinal=Utilidades.mes(periodo[1]);if(idx>0&&anoInicial===Utilidades.ano(periodos[idx-1][1])&&mesInicial===Utilidades.mes(periodos[idx-1][1])){varajuste=-1;}else{varajuste=0;}if(anoInicial===anoFinal){varacrescimoInicial=(mesFinal-mesInicial+1+ajuste)*multiplicador(anoInicial);varacrescimoFinal=0;vardisponivelInicial=12-contribuicoes[anoInicial].length;varacrescimoInicial=Math.min(acrescimoInicial,disponivelInicial);if(acrescimoInicial>0){for(vari=1;i<=acrescimoInicial;i++){contribuicoes[anoInicial].push(1);}}}else{varacrescimoInicial=(12-mesInicial+1+ajuste)*multiplicador(anoInicial);vardisponivelInicial=12-contribuicoes[anoInicial].length;varacrescimoInicial=Math.min(acrescimoInicial,disponivelInicial);if(acrescimoInicial>0){for(vari=1;i<=acrescimoInicial;i++){contribuicoes[anoInicial].push(1);}}varacrescimoFinal=mesFinal*multiplicador(anoFinal);vardisponivelFinal=12-contribuicoes[anoFinal].length;varacrescimoFinal=Math.min(acrescimoFinal,disponivelFinal);if(acrescimoFinal>0){for(vari=1;i<=acrescimoFinal;i++){contribuicoes[anoFinal].push(1);}}}returnMath.max(acrescimoInicial+acrescimoFinal,0);});returnacrescimos;}