Capítulo 7 Parcelamento de Débitos

Este capítulo trata da base de dados dos acordos de parcelamento de débito, na qual estão contidas informações sobre os termos de parcelamento de débitos celebrados pelos RPPS com os entes aos quais estão vinculados.

O objetivo do capítulo é explorar os dados e as possíbilidades de análise fornecidas por esse conjunto de dados, podendo-se destacar a identificação dos entes que estejam com parcelamentos de débito ativos junto ao seu RPPS, a quantidade de parcelamentos ativos, o valor consolidado dos parcelamentos o saldo a pagar.

A SPREV disponiliza uma página em seu site inteiramente dedicada ao parcelamento de débitos na qual são disponibilizados alguns materiais sobre o assunto.

7.1 Importação e limpeza dos dados

A importação da base de dados pode ser feita da seguinte forma:

parcel <- read_excel("dados/6-rg-ap-acor-parc_atualizacao_jan_de_1999-a-ago_2020_extracao_em_20201002.xlsx",
                     skip = 3,
                     col_names = FALSE)

names(parcel) <- c("ente", "uf", "tipo", "situacao", "num_acordo", "rubrica",
                   "lei", "dt_consol", "dt_assin", "dt_venc1a", "compet_ini",
                   "compet_fin", "vlr_consol", "qtd_parc", "vlr_parc_ini",
                   "sd_estim_satualiz", "sd_estim_catualiz", "comp_indice",
                   "comp_tp_juros", "comp_txjuros", "comp_multa", "parcvinc_indice",
                   "parcvinc_tpjuros", "parcvinc_txjuros", "parcvinc_multa",
                   "parcatraso_indice", "parcatraso_tpjuros",
                   "parcatraso_txjuros", "parcatraso_multa")

Importados os dados convém inspecioná-los para verificar se tudo correu bem no processo de importação:

head(parcel)
# A tibble: 6 x 29
  ente  uf    tipo  situacao num_acordo rubrica lei   dt_consol dt_assin
  <chr> <chr> <chr> <chr>    <chr>      <chr>   <chr> <chr>     <chr>   
1 Abad~ GO    P     Aceito   00198/2009 OUTR    LEI ~ 27/03/20~ 27/03/2~
2 Abad~ GO    P     Aceito   01121/2016 CP60    Lei ~ 21/12/20~ 21/12/2~
3 Abad~ GO    P     Aceito   00138/2017 CP60    Lei ~ 03/02/20~ 06/02/2~
4 Abad~ GO    P     Aceito   00645/2017 CP60    Lei ~ 24/07/20~ 24/07/2~
5 Abad~ GO    P     Aceito   01426/2018 CP60    Lei ~ 21/12/20~ 21/12/2~
6 Abad~ GO    P     Aceito   00143/2019 CP60    Lei ~ 08/02/20~ 11/02/2~
# ... with 20 more variables: dt_venc1a <chr>, compet_ini <chr>,
#   compet_fin <chr>, vlr_consol <chr>, qtd_parc <chr>, vlr_parc_ini <chr>,
#   sd_estim_satualiz <chr>, sd_estim_catualiz <chr>, comp_indice <chr>,
#   comp_tp_juros <chr>, comp_txjuros <chr>, comp_multa <chr>,
#   parcvinc_indice <chr>, parcvinc_tpjuros <chr>, parcvinc_txjuros <chr>,
#   parcvinc_multa <lgl>, parcatraso_indice <chr>, parcatraso_tpjuros <chr>,
#   parcatraso_txjuros <chr>, parcatraso_multa <chr>

Feita a importação, quase sempre será necessário realizar o pré-processamento da base de dados.

Da mesma forma que os dados do DIPR, os dados dos parcelamentos foram estruturados pela SPREV para serem visualizados e impressos e não para serem consumidos por aplicativos com vistas à sua análise informatizada.

Esse fato é reflexo da falta de cultura de análise de dados ainda existente na administração pública onde a regra em geral é a análise de varejo, RPPS a RPPS, tendo por base frequentemente relatórios impressos em papel.

Para que o trabalho posterior com esta base de dados seja facilitado, será necessário converter algumas variáveis para o formato numérico e outras para o formato de data:

# Converter dados para o formato numérico e para datas
convNum <- function(x){
  as.numeric(gsub(",", ".", gsub("\\.", "", x)))
}

convData <- function(x){
  as.Date(parse_date_time2(x, orders = "d/m/Y"))  
}

colunas_converter_num <- c("vlr_consol", "qtd_parc", "vlr_parc_ini", "sd_estim_satualiz", "sd_estim_catualiz", "comp_txjuros", "comp_multa", "parcvinc_txjuros", "parcvinc_multa", "parcatraso_txjuros", "parcatraso_multa")

colunas_converter_dt <- c("dt_consol", "dt_assin", "dt_venc1a")

parcel <- parcel %>% 
            mutate(compet_ini = as.Date(parse_date_time(compet_ini, orders = "m/Y")),
                   compet_fin = as.Date(parse_date_time(compet_fin, orders = "m/Y")),
                   ente = gsub("^Governo do ", "", ente))

# Conversão dos valores numéricos
parcel <- parcel %>% 
            mutate(across(.cols=all_of(colunas_converter_num), convNum))

# Conversão das datas
parcel <- parcel %>% 
            mutate(across(.cols=all_of(colunas_converter_dt), convData))

Como pode ser visto, a base de dados traz um conjunto amplo de informações (29 colunas) sobre os termos de parcelamento de débitos.

As colunas 1 a 17 contém informações sobre as caracteristicas do termo de parcelamentos. As 4 colunas seguinte traz informações sobre os parâmetros utilizados para a consolidação do débito, o mesmo ocorrendo com as 8 colunas finais que trazem os parâmetros para a atualização das parcelas a vencer e das parcelas vencidas.

7.2 Análise exploratória

Agora já é possível explorar algumas variáveis com o objetivo de conhecer as informações que as mesmas contém.

Começa-se com a variável tipo. Quais a distribuição de frequência dessa variável?

parcel %>% 
  tabyl(tipo) %>% 
  adorn_pct_formatting(digits = 0,
                       affix_sign = TRUE)
 tipo    n percent
    P 9705     82%
    R 2126     18%

São apenas dois valores indicando tratar-se de parcelamento ou reparcelamento.

parcel %>% 
  tabyl(situacao) %>% 
  adorn_pct_formatting(digits = 0,
                       affix_sign = TRUE)
                 situacao    n percent
                   Aceito 5754     49%
       Aguardando análise  299      3%
 Aguardando doc. assinado  754      6%
               Não aceito 1467     12%
                  Quitado 1483     13%
               Repactuado 2074     18%

Algumas possibilidades para a variável situação. Vê-se que alguns termos estão quitados, outros não foram aceitos pela SPREV, etc.

Essa variável parece ser importante quando da realização de algumas análises. Por exemplo, termos já quitados talvez não devam ser inseridos na análise caso o interesse seja determinar o volume de dívida dos entes com os RPPS. O mesmo se aplica aos termos não aceitos.

parcel %>% 
  tabyl(rubrica) %>% 
  adorn_pct_formatting(digits = 2,
                       affix_sign = TRUE)
 rubrica    n percent
    C240 1181   9.98%
    CP60 4669  39.46%
    CSEG  626   5.29%
    OUTR 3040  25.70%
    P200 1259  10.64%
    S200  511   4.32%
    U200  196   1.66%
    U240   27   0.23%
    UIRP  322   2.72%

Os valores da variável rubrica são uns códigos cripticos mas que informam a origem do débito e a quantidade de parcelas. Assim, CP60 refere-se a débito com origem no não repasse da contribuição patronal, parcelado em até 60 meses. UIRP refere-se a parcelamento de débitos originados da utilização irregular de recursos previdenciários e por aí vai.

Interessante observar que a rubrica com a segunda maior quantidade de acordos seja OUTR. Isso porque o esperado é que as situações mais frequentes já tenham sido mapeadas pela SPREV e disponibilizadas como opção de escolha no CADPREV.

Outro fato interessane é o código CSEG que indica débito oriundo do não recolhimento ao RPPS das contribuiçãoes dos segurados, o que em tese constitui crime de apropriação indébita. Mas é uma possibilidade oficialmente reconhecida.

As demais variáveis são mais ou menos autoexplicativas.

Para a obtenção de um sumário estatístico da variável qtd_parc pode-se fazer:

summary(parcel$qtd_parc) 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    1.0    60.0    60.0   113.4   200.0   540.0 

O resultado indica a existência de acordos de parcelamento passuindo apenas 1 parcela, até o máximo de 540 parcelas! Para identificar esses casos extremos pode-se utilizar os seguintes comandos:

# Valores mínimos
parcel %>% 
  slice_min(order_by=qtd_parc, n=1)
# A tibble: 31 x 29
   ente  uf    tipo  situacao num_acordo rubrica lei   dt_consol  dt_assin  
   <chr> <chr> <chr> <chr>    <chr>      <chr>   <chr> <date>     <date>    
 1 Abae~ PA    P     Quitado  01571/2017 U200    Lei ~ 2017-10-20 2017-11-01
 2 Açai~ MA    P     Não ace~ 00562/2019 CP60    <NA>  2019-07-15 2019-07-15
 3 Açai~ MA    P     Aguarda~ 00070/2020 OUTR    <NA>  2020-01-01 2020-01-24
 4 Água~ SP    P     Quitado  00853/2014 OUTR    LEI ~ 2014-12-18 2014-12-18
 5 Apar~ SP    P     Aceito   00051/2020 CP60    LEI ~ 2020-01-17 2020-01-17
 6 Arra~ RJ    P     Aceito   00916/2019 CP60    <NA>  2019-12-16 2019-12-20
 7 Arra~ RJ    P     Aguarda~ 00921/2019 OUTR    <NA>  2020-05-25 2020-07-22
 8 Arra~ RJ    P     Aguarda~ 00301/2020 CP60    <NA>  2020-05-26 2020-07-22
 9 Arra~ RJ    P     Aguarda~ 00302/2020 OUTR    <NA>  2020-05-26 2020-07-22
10 Arra~ RJ    P     Aguarda~ 00373/2020 OUTR    <NA>  2020-08-10 2020-08-11
# ... with 21 more rows, and 20 more variables: dt_venc1a <date>,
#   compet_ini <date>, compet_fin <date>, vlr_consol <dbl>, qtd_parc <dbl>,
#   vlr_parc_ini <dbl>, sd_estim_satualiz <dbl>, sd_estim_catualiz <dbl>,
#   comp_indice <chr>, comp_tp_juros <chr>, comp_txjuros <dbl>,
#   comp_multa <dbl>, parcvinc_indice <chr>, parcvinc_tpjuros <chr>,
#   parcvinc_txjuros <dbl>, parcvinc_multa <dbl>, parcatraso_indice <chr>,
#   parcatraso_tpjuros <chr>, parcatraso_txjuros <dbl>, parcatraso_multa <dbl>

Tem-se 31 acordos nesta situação.

# Valores máximos 
parcel %>% 
  slice_max(order_by=qtd_parc, n=1)
# A tibble: 1 x 29
  ente  uf    tipo  situacao num_acordo rubrica lei   dt_consol  dt_assin  
  <chr> <chr> <chr> <chr>    <chr>      <chr>   <chr> <date>     <date>    
1 Pass~ MG    P     Aceito   00053/2007 OUTR    AÇÃO~ 2007-04-18 2007-04-18
# ... with 20 more variables: dt_venc1a <date>, compet_ini <date>,
#   compet_fin <date>, vlr_consol <dbl>, qtd_parc <dbl>, vlr_parc_ini <dbl>,
#   sd_estim_satualiz <dbl>, sd_estim_catualiz <dbl>, comp_indice <chr>,
#   comp_tp_juros <chr>, comp_txjuros <dbl>, comp_multa <dbl>,
#   parcvinc_indice <chr>, parcvinc_tpjuros <chr>, parcvinc_txjuros <dbl>,
#   parcvinc_multa <dbl>, parcatraso_indice <chr>, parcatraso_tpjuros <chr>,
#   parcatraso_txjuros <dbl>, parcatraso_multa <dbl>

Apenas um acordo com o valor máximo e possui débito originário de ação de cobrança.

Pode-se fazer um gráfico mostrando a quantidade de acordos celebrados por ano.

parcel %>% 
  mutate(ano_assinatura = format(dt_assin, "%Y")) %>% 
  count(ano_assinatura, name = "qtd") %>%
  ggplot(aes(y=ano_assinatura, x=qtd, label = qtd)) +
  geom_point(color="blue", size=2.3) +
  geom_segment(aes(xend=0, yend=ano_assinatura), color="blue") +
  geom_text(hjust=-0.5, size=2) + 
  theme_bw() +
  labs(title="Quantidade de Acordos de Parcelamento \n Celebrados por Ano",
       x = "Quantidade de Acordos",
       y = "Ano de Assinatura do Termo") +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

Até 2008 não não eram celebrados muitos acordos. A partir de 2009 há um acréscimo e em 2013 houve uma explosão na quantidade de acordos celebrados, mantando-se elevados esse quantitativo a partir de então.

Uma outra verificação importante ainda na fase de análise exploratária é verificar qual o percentual de valores não preenchidos em cada variável.

parcel %>% 
  summarize(across(.fns = ~round(sum(is.na(.))/length(.) * 100, 1))) %>% 
  t() %>% 
  as.data.frame() %>% 
  filter(V1 > 0) %>% 
  arrange(desc(V1))
                      V1
parcvinc_multa     100.0
comp_multa          56.8
compet_fin          21.9
parcatraso_multa    12.0
lei                 11.0
comp_txjuros         3.3
parcvinc_txjuros     3.1
parcvinc_tpjuros     3.0
parcatraso_tpjuros   3.0
parcatraso_txjuros   3.0
comp_tp_juros        2.9
compet_ini           0.8

A variável compet_fin apresenta um valor de aproximadamente 22% de valores faltantes. Ao investigar a razão desse valor verificou-se que o processo de importação dos dados estava gerando os NA visto que a função de conversão de datas não reconhece situações como 13/2014 que indica a inclusão do 13o salário. Esse fato irá ensejar uma forma alternativa de lidar com essa situação durante o processo de importação dos dados.

As variáveis indicativas do percentual de multa também apresentam valores elevados de não preenchimento.

7.3 Parcelamentos ativos

A variável situacao indica, como visto, a situação do parcelamento na data da geração da base de dados. Os valores possíveis dessa variável foram vistos acima.

Para adotar uma postura conservadora em relação ao montante de dívida oriunda de parcelamentos que os entes possuem com seus RPPS serão excluídos da base de dados todos os acordos que não possuam a situação Aceito e Repactuado.

Será criada uma nova base de dados parcel_ativos, contendo apenas os acordos de interesse.

parcel_ativos <- parcel %>% 
                  filter(situacao %in% c("Aceito", "Repactuado"))

A base de dados reduz de 11.831 observações para 7.828.

Qual a quantidade de Aceitos e Repactuados?

parcel %>% 
  tabyl(situacao) %>% 
  adorn_pct_formatting(digits = 2,
                       affix_sign = TRUE)
                 situacao    n percent
                   Aceito 5754  48.63%
       Aguardando análise  299   2.53%
 Aguardando doc. assinado  754   6.37%
               Não aceito 1467  12.40%
                  Quitado 1483  12.53%
               Repactuado 2074  17.53%

Como pode ser visto, a base agora contém apenas os parcelamentos aceitos e os repactuados.

7.4 Agregação dos parcelamentos

Neste tópico será feita uma agregação dos dados com vistas a mostrar para cada ente o quantitativo de acordos e correspondente valor, considerando-se apenas os acordos aceitos e repactuados.

tab_qtd_acordos_ente <- parcel_ativos %>%
  group_by(ente) %>%
  summarise(qtd_acordos = n(),
            vlr_consolidado = sum(vlr_consol, na.rm=TRUE),
            sd_sem_atualiz = sum(sd_estim_satualiz, na.rm = TRUE),
            sd_com_atualiz = sum(sd_estim_catualiz, na.rm = TRUE),
            `%_sd_sem_atualiz`  = round(sd_sem_atualiz / vlr_consolidado * 100, 2),
            `%_sd_com_atualiz`  = round(sd_com_atualiz / vlr_consolidado * 100, 2)) %>%
  arrange(desc(vlr_consolidado))
head(tab_qtd_acordos_ente)
# A tibble: 6 x 7
  ente  qtd_acordos vlr_consolidado sd_sem_atualiz sd_com_atualiz
  <chr>       <int>           <dbl>          <dbl>          <dbl>
1 Curi~           5      766061169.     437908053.     595705732.
2 Betim          14      660917411.     392294258.     611880378.
3 Flor~          20      655221375.     364905999.     502711269.
4 Esta~           6      625112375.     170074534.     237037997.
5 Camp~          14      528714449.     287508688.     383896245.
6 Mana~          12      450433945.     312709216.     474798435.
# ... with 2 more variables: `%_sd_sem_atualiz` <dbl>, `%_sd_com_atualiz` <dbl>

Tem-se agora um novo conjunto de dados que mostra, para cada ente, a quantidade de acordos celebrados o valor consolidado correspondente, o valor do saldo a pagar sem atualização e com atualização e os percentuais que esses valores representam da consolidação.

Sumário da quantidade de acordos e valores consolidados:

tab_qtd_acordos_ente %>%
    select(-ente) %>% 
    summary()
  qtd_acordos     vlr_consolidado     sd_sem_atualiz      sd_com_atualiz     
 Min.   : 1.000   Min.   :    19939   Min.   :        0   Min.   :        0  
 1st Qu.: 2.000   1st Qu.:  1245751   1st Qu.:   332230   1st Qu.:   608469  
 Median : 4.000   Median :  3957559   Median :  1584543   Median :  2678750  
 Mean   : 5.672   Mean   : 21616000   Mean   : 11493585   Mean   : 16910681  
 3rd Qu.: 8.000   3rd Qu.: 13229078   3rd Qu.:  6959524   3rd Qu.: 10219905  
 Max.   :94.000   Max.   :766061169   Max.   :437908053   Max.   :611880378  
 %_sd_sem_atualiz %_sd_com_atualiz
 Min.   : 0.00    Min.   :  0.00  
 1st Qu.:26.48    1st Qu.: 44.14  
 Median :46.63    Median : 74.97  
 Mean   :43.26    Mean   : 69.06  
 3rd Qu.:61.28    3rd Qu.: 96.04  
 Max.   :99.50    Max.   :173.33  

Os entes com menos acordos possuem 1 acordo mas tem-se um campeão com 94 acordos de parcelamento!

A mediana é de 4 acordos, indicando que metade dos RPPS possuem de 1 a 4 acordos.

A seguir elabora-se um histograma para mostrar a distribuição da variável qtd_acordos:

ggplot(tab_qtd_acordos_ente, aes(x=qtd_acordos)) +
  geom_histogram(color='black', fill='lightgreen', binwidth = 2, boundary=0) +
  labs(title = "Distribuição da Quantidade de Acordos",
       x = "Quantidade de Acordos",
       y = "Freq. Absoluta") +
  theme_bw()

Com quase quinhentos registros, tem os entes com até 2 acordos, com a frequência decrescendo à medida que a quantidade de acordos por ente vai aumentando. Existem alguns valores bem elevados, acima de 50 acordos de parcelamento. Pode-se perguntar quem são os top 5 em quantidade de acordos?

tab_qtd_acordos_ente %>% 
  slice_max(qtd_acordos, n = 5)
# A tibble: 5 x 7
  ente  qtd_acordos vlr_consolidado sd_sem_atualiz sd_com_atualiz
  <chr>       <int>           <dbl>          <dbl>          <dbl>
1 São ~          94      350607427.     232622410.     335294406.
2 São ~          51       17902053.      12173178.      16537416.
3 Cald~          40       82449581.      43791345.      56376090.
4 Goia~          30       56247076.      45170631.      59801790.
5 Camp~          30       44400218.      27169628.      39744311.
# ... with 2 more variables: `%_sd_sem_atualiz` <dbl>, `%_sd_com_atualiz` <dbl>

A relação acima mostra os 5 entes com a maior quantidade de acordos, o que não significa serem os maiores devedores.

7.5 Cobrança de juros simples

É comum acordos de parcelamento nos quais são adotadas taxas de juros incompatíveis com a meta atuarial, seja nos valores dos juros, seja no regime de capitalização, ou seja, adoção de juros simples em fez dos juros compostos.

Para as parcelas vincendas, a base de dados contém as seguintes variáveis: parcvinc_indice, parcvinc_tpjuros, parcvinc_txjuros e parcvinc_multas.

Mostra-se, a seguir, a distribuição de frequência do tipo de juros encontrados nos parcelamentos ativos:

parcel_ativos %>%
  count( parcvinc_indice, parcvinc_tpjuros) %>% 
  pivot_wider(names_from =parcvinc_indice , values_from=n)
# A tibble: 3 x 8
  parcvinc_tpjuros `IGP-DI` `IGP-M`  INPC `IPC-FIPE`  IPCA Outros SELIC
  <chr>               <int>   <int> <int>      <int> <int>  <int> <int>
1 Composto                1     134   574         12   438     30    18
2 Simples                25     304  2777         73  2893    166   118
3 <NA>                   NA      NA    NA         NA     1      3   261

Além do uso de juros simples também existe a adoção da taxa SELIC como indexador da inflação!

Parece que existe um bom estímulo a que os entes não repassem as constribuições aos RPPS! É um ótimo negócio o ente se financiar junto ao RPPS pagando juros simples!

Além disso, atuarialmente essa é uma prática contrária ao princípio constitucional do equilíbrio financeiro e atuarial visto que induz a formação de deficts atuariais.

7.6 Adimplência dos parcelamentos

Nota: O contéudo desta seção baseia-se em muitas suposições sobre as variáveis que precisam ser cofirmadas junto à SPREV.

Monitorar se os parcelamentos de débitos vem sendo adimplidos com regularidade é algo que as pessoas interessadas na saúde financeira dos RPPS podem querer fazer. Assim, uma questão que surge é a seguinte: os dados contidos nessa base permitem avaliar se o ente vem pagando com regularidade sua dívida junto ao RPPS?

A base contém algumas variáveis que podem ajudar a responder a questão. A variável vlr_consol informa o valor total do débito consolidado, a variável qtd_parc indica a quantidade de parcelas do débito, a variável vlr_parc_ini indica o valor da parcela inicial (essa variável é o quociente entre as variáveis vlr_consol e qtd_parc), a variável dt_venc1a informa a data de vencimento da primeira parcela e a variável sd_estim_satualiz informa o saldo estimado da dívida sem atualização.

Para a metodologia proposta para checagem do regular adimplemento do parecelamento, assume-se que a variável sd_estim_satualiz reflita o saldo a pagar na data de geração dos dados, ou seja, é a diferença entre o valor consolidado e o valor já pago.

Ocorre que o valor já pago não consta da base de dados, mas pode ser determinado multiplicando-se o valor da primeira parcela pela quantidade de meses decorridos da data de vencimento da primeira parcela até a data de geração dos dados.

Assume-se a hipótese (a ser confirmada junto à SPREV) de que o valor da variável sd_estim_satualiz seja gerado pela SPREV a partir de informações colhidas no DIPR, de forma que cada parcela informada naquele demonstrativo seja subtraída do valor consolidado do débito de forma que decorrido o prazo do parcelamento (qtd_parc) o débito esteja quitado.

Com essas suposições, uma verificação que talvez possa fornecer alguma indicação quanto a regularidade do pagamento dos acordos seria dividir o saldo estimado sem atualização pelo valor da parcela inicial. Isso daria a quantidade de parcelas que ainda faltam a ser pagas.

Diminuindo esse valor da quantidade de parcelas, obtem-se a quantidade de parcelas pagas. Tomando a data de vencimento da primeira parcela e adicionando-se a quantidade de meses iqual à quantidade de parcelas pagas espera-se obter uma data próxima à data de extração dos dados que se deu em 02/10/2020 conforme consta no nome do arquivo contendo os dados.

O código a seguir implementa essa ideia, calculando a data referente à última parcela na data de extração dos dados.

parcel_ativos2 <- parcel_ativos %>% 
                  mutate(qtd_parc_apagar = sd_estim_satualiz / vlr_parc_ini,
                         qtd_parc_pagas = qtd_parc - qtd_parc_apagar,
                         dt_parc_atual = dt_venc1a + months(as.integer(qtd_parc_pagas)))
head(parcel_ativos2)
# A tibble: 6 x 32
  ente  uf    tipo  situacao num_acordo rubrica lei   dt_consol  dt_assin  
  <chr> <chr> <chr> <chr>    <chr>      <chr>   <chr> <date>     <date>    
1 Abad~ GO    P     Aceito   00198/2009 OUTR    LEI ~ 2009-03-27 2009-03-27
2 Abad~ GO    P     Aceito   01121/2016 CP60    Lei ~ 2016-12-21 2016-12-21
3 Abad~ GO    P     Aceito   00138/2017 CP60    Lei ~ 2017-02-03 2017-02-06
4 Abad~ GO    P     Aceito   00645/2017 CP60    Lei ~ 2017-07-24 2017-07-24
5 Abad~ GO    P     Aceito   01426/2018 CP60    Lei ~ 2018-12-21 2018-12-21
6 Abad~ GO    P     Aceito   00143/2019 CP60    Lei ~ 2019-02-08 2019-02-11
# ... with 23 more variables: dt_venc1a <date>, compet_ini <date>,
#   compet_fin <date>, vlr_consol <dbl>, qtd_parc <dbl>, vlr_parc_ini <dbl>,
#   sd_estim_satualiz <dbl>, sd_estim_catualiz <dbl>, comp_indice <chr>,
#   comp_tp_juros <chr>, comp_txjuros <dbl>, comp_multa <dbl>,
#   parcvinc_indice <chr>, parcvinc_tpjuros <chr>, parcvinc_txjuros <dbl>,
#   parcvinc_multa <dbl>, parcatraso_indice <chr>, parcatraso_tpjuros <chr>,
#   parcatraso_txjuros <dbl>, parcatraso_multa <dbl>, qtd_parc_apagar <dbl>,
#   qtd_parc_pagas <dbl>, dt_parc_atual <date>

Caso os entes tenham realizado os pagamentos com regularidade, espera-se que os valores da variável dt_parc_atual estejam próximas a Out/2020, visto que a data de extração dos dados foi em 02/10/2020.

Uma rápida verificação do range da variável irá confirmar se de fato isto está ocorrendo:

range(parcel_ativos2$dt_parc_atual, na.rm = TRUE)
[1] "2011-02-15" "2032-05-01"

Diferentemente do esperado, tem-se datas que vão do ano de 2011 a 2032. O que pode ter acontecido?

O código a seguir faz a contagem das datas no mês de outubro de 2020.

parcel_ativos2 %>% 
  count(out2020 = dt_parc_atual %within% interval(dmy("01102020"), dmy("31102020")))
# A tibble: 3 x 2
  out2020     n
  <lgl>   <int>
1 FALSE    2513
2 TRUE     5251
3 NA         64

O resultado mostra que 5251 registros possuem a data da parcela atual no mês de outubro de 2020 e que 2513 não.

Deve-se olhar com mais cuidado para esses 2513 registros. O código a seguir aplica um filtro para captuar esse registros.

nao_conformes <- parcel_ativos2 %>%
  filter(!dt_parc_atual %within% interval(dmy("01102020"), dmy("31102020")))

Inspecionando os dados, verifica-se que parte deles possuem o valor da variável sd_estim_satualiz zerado, o que não é algo que seria esperado de ocorrer, visto que os parcelamentos já quitados foram excluídos da base de dados. Deve-se obter mais informações junto à SPREV quanto as possíveis causas desse fato.

sd_zero <- nao_conformes %>% 
  filter(sd_estim_satualiz == 0)

nao_conformes %>% 
  count(sd_zerado = sd_estim_satualiz == 0) 
# A tibble: 2 x 2
  sd_zerado     n
  <lgl>     <int>
1 FALSE       403
2 TRUE       2110

Dos 2513 acordos, 2110 estão nessa situação. Os demais 403 não estão conforme o esperado por outra razão ainda a ser determinada.

O códido a seguir cria uma nova base com esses 403 registros para investigação posterior.

nao_conformes2 <- nao_conformes %>% 
  filter(sd_estim_satualiz > 0) 

Inspecionando a base de dados, verifica-se que muitos registros possuem a data da última parcela em Set/2020 que é próximo do esperado, não representando uma não conformidade, de forma que serão excluídos da base.

nao_conformes3 <- nao_conformes2 %>% 
  filter(!dt_parc_atual %within% interval(dmy(01092020), dmy(30092020))) 

Com esse filtro, a quantidade de registros “não conformes” cai para 52.

O código a seguir obtém a quantidade de datas em cada ano:

nao_conformes3 %>% 
  count(ano_data = format(dt_parc_atual, "%Y")) %>% 
  arrange(ano_data)
# A tibble: 11 x 2
   ano_data     n
   <chr>    <int>
 1 2020         2
 2 2021        15
 3 2022         7
 4 2023         9
 5 2024         7
 6 2025         5
 7 2026         2
 8 2027         1
 9 2028         1
10 2031         2
11 2032         1

Tem-se duas datas em 2020 (Nov e Dez) e as demais em anos posteriores.

Uma possível justificativa para isso (mas que deve ser confirmado junto à SPREV) seria o pagamento de mais de uma parcela no mês, o que levaria a um valor de sd_estim_satuliz inferior ao que seria esperadoe e a uma quantidade de parcelas a serem pagas maior que o correto. Isso implica datas da parcela atual posteriores a Out/2020.