Antes de iniciarmos qualquer análise, é necessário carregar os pacotes que serão utilizados:

# Carregar os pacotes necessários
#--------------------------------
library(tidyr)
library(readxl)
library(writexl)
library(readr)
library(dplyr)
library(lubridate)
library(knitr)
library(ggplot2)
library(stringr)
library(scales)


Introdução

O objetivo deste documento é mostrar como os dados previdenciários disponibilizados pela Secretaria de Previdência do Ministério da Economia (SPrev/ME) podem ser utilizados para ajudar no acompanhamento da gestão dos RPPS.

Para alcançar esse objetivo vamos apresentar os scripts elaborados em R para que outros interessados possam, também, realizar as análises indicadas e apresentar novas contribuições.

Diversas bases de dados e relatórios são disponbilizados pela SPrev/ME em seu site (<http://www.previdencia.gov.br/dados-abertos/estatisticas-e-informacoes-dos-rpps/>) e já se sabe há muito tempo que o principal problema atualmente não é tanto a disponibilidade de dados mas a capacidade de análise dos mesmos.

Acho que podemos falar de Análise de Dados Previdenciários para designar uma área de conhecimento a ser desenvolvida nos órgãos encarregados da supervisão e controle dos RPPS com o objetivo de auxiliar na execução dessa atividade.

Conhecer esses dados, suas limitações, inconsistências, analisá-los e enriquecê-los com outros dados e propor melhorias constituem o escopo dessa área.

Nos tópicos a seguir vamos mostrar algumas análises possíveis com os dados disponibilizados. A ideia é que as análises descritas neste documento sejam incluídas no painel de dados previdenciários (ainda em elaboração) disponível no link https://marcosfs2006.shinyapps.io/rpps-painel/ elaborado com os dados disponibilizados pela SPrev/ME.

Como esse painel está hospedado num serviço gratuito não é não se sabe se o mesmo vai suportar as bases de dados necessárias para as análises.



CRP

Neste tópico nosso objetivo é mostrar algumas possibilidades de análise em relação aos dados do Certificados de Regularidade Previdenciária - CRP contidos no arquivo CRP Emitido.csv disponibilizado no site da SPrev.

O link para _download_é http://sa.previdencia.gov.br/site/2019/08/CRP-Emitido.zip

A primeira etapa, como sempre, é realizar a importação dos dados e realizar o pré-processamento dos mesmos.

A importação é feita da seguinte forma:

setwd("..\\dados")
crp <- read_csv2("CRP Emitido.csv")

Vamos inspecionar a base de dados para a conhecermos um pouco melhor:

kable(head(crp))
UF ENTE REGIME NR CRP DATA DE EMISSÃO DATA DE VALIDADE CRP JUDICIAL SITUAÇÃO DO CRP
AC Acrelândia RGPS 980643-298 19/07/2001 15/01/2002 NÃO VENCIDO
AC Acrelândia RGPS 980643-3763 18/01/2002 17/07/2002 NÃO VENCIDO
AC Acrelândia RGPS 980643-8191 18/07/2002 14/01/2003 NÃO VENCIDO
AC Acrelândia RGPS 980643-13231 14/01/2003 13/07/2003 NÃO VENCIDO
AC Acrelândia RGPS 980643-19585 18/11/2003 16/05/2004 NÃO VENCIDO
AC Acrelândia RGPS 980643-24818 16/07/2004 14/09/2004 NÃO VENCIDO

A base nos fornece algumas informações sobre o CRP e compreende tanto os Regimes Próprios como o Regime Geral. Vamos nos restringir aos Regimes Próprios:

crp <- filter(crp, REGIME == "RPPS")

Também é possível ver que o arquivo contém, para cada Ente, um histórico dos CRP emitidos para os mesmos. Vamos obter, para cada ente, o CRP mais recente emitido constante da base de dados:

crp <- crp %>%
          mutate(`DATA DE EMISSÃO` = dmy(`DATA DE EMISSÃO`),
                 `DATA DE VALIDADE`= dmy(`DATA DE VALIDADE`)) %>%
          group_by(UF, ENTE) %>%
          filter(`DATA DE EMISSÃO` == max(`DATA DE EMISSÃO`))

Vamos inspecionar novamente a base de dados.

kable(head(crp))
UF ENTE REGIME NR CRP DATA DE EMISSÃO DATA DE VALIDADE CRP JUDICIAL SITUAÇÃO DO CRP
AC Governo do Estado do Acre RPPS 931001-175199 2019-05-04 2019-10-31 SIM VÁLIDO
AC Rio Branco RPPS 980139-175140 2019-04-29 2019-10-26 NÃO VÁLIDO
AL Arapiraca RPPS 982705-174661 2019-04-09 2019-10-06 NÃO VÁLIDO
AL Atalaia RPPS 982707-112197 2013-03-18 2013-09-14 NÃO VENCIDO
AL Barra de Santo Antônio RPPS 982709-176337 2019-06-16 2019-12-13 SIM VÁLIDO
AL Batalha RPPS 982713-11816 2002-11-29 2003-05-28 NÃO VENCIDO

Antes de prosseguirmos, devemos excluir as duplicidades existentes na base de dados. Por exemplo, o Ente “Governo do Estado de Roraima” aparece com o mesmo CRP 4 vezes na base de dados:

filter(crp, ENTE == "Governo do Estado de Roraima") %>%
  kable()
UF ENTE REGIME NR CRP DATA DE EMISSÃO DATA DE VALIDADE CRP JUDICIAL SITUAÇÃO DO CRP
RR Governo do Estado de Roraima RPPS 936001-174691 2019-04-10 2019-10-07 SIM VÁLIDO
RR Governo do Estado de Roraima RPPS 936001-174691 2019-04-10 2019-10-07 SIM VÁLIDO
RR Governo do Estado de Roraima RPPS 936001-174691 2019-04-10 2019-10-07 SIM VÁLIDO
RR Governo do Estado de Roraima RPPS 936001-174691 2019-04-10 2019-10-07 SIM VÁLIDO

Vamos excluir as duplicidades:

crp <- crp %>%
          filter(!duplicated(`NR CRP`))

Se quisermos exportar a base de dados para uma planilha do Excel podemos fazer da seguinte forma:

setwd("..\\dados-produzidos")
write_xlxs(crp, file = "crp_DtRef2019-08.xlxs")

Agora estamos em condições de responder a algumas questões: Quantos Entes com CRP vencido existe em cada Estado? Quanto isso representa do total de RPPS existentes no Estado?

crp %>%
  group_by(UF) %>%
  summarise(QtdRPPS = n(),
            QtdRPPS_CRPVencido = sum(`SITUAÇÃO DO CRP` == "VENCIDO"),
            PctRPPS_CRPVencido = round(QtdRPPS_CRPVencido / QtdRPPS * 100, 2)) %>%
  arrange(desc(PctRPPS_CRPVencido)) %>% 
  kable()
UF QtdRPPS QtdRPPS_CRPVencido PctRPPS_CRPVencido
PA 28 17 60.71
AL 74 41 55.41
GO 171 89 52.05
RJ 78 40 51.28
AP 4 2 50.00
SE 4 2 50.00
TO 30 14 46.67
RN 39 18 46.15
PI 68 30 44.12
BA 37 16 43.24
MG 218 83 38.07
PB 71 27 38.03
SP 221 80 36.20
CE 65 23 35.38
MA 47 15 31.91
PR 178 55 30.90
MS 51 15 29.41
PE 149 37 24.83
MT 106 25 23.58
RS 329 74 22.49
AM 27 6 22.22
ES 35 7 20.00
SC 70 13 18.57
RO 30 5 16.67
AC 2 0 0.00
DF 1 0 0.00
RR 2 0 0.00

Em boa parte dos estados tem-se um elevado percentual de Entes com o CRP vencido.

Também poderíamos incluir na tabela acima a quantidade de Entes com CRP obtido pela via judicial e qual o percentual em relação ao total de Entes no Estado.

crp %>%
  group_by(UF) %>%
  summarise(QtdRPPS = n(),
            QtdRPPS_CRPVencido  = sum(`SITUAÇÃO DO CRP` == "VENCIDO"),
            PctRPPS_CRPVencido  = round(QtdRPPS_CRPVencido / QtdRPPS * 100, 2),
            QtdRPPS_CRPJudicial = sum(`CRP JUDICIAL` == "SIM"),
            PctRPPS_CRPJudicial = round(QtdRPPS_CRPJudicial / QtdRPPS * 100, 2)) %>%
  arrange(desc(PctRPPS_CRPVencido)) %>% 
  kable()
UF QtdRPPS QtdRPPS_CRPVencido PctRPPS_CRPVencido QtdRPPS_CRPJudicial PctRPPS_CRPJudicial
PA 28 17 60.71 9 32.14
AL 74 41 55.41 41 55.41
GO 171 89 52.05 29 16.96
RJ 78 40 51.28 21 26.92
AP 4 2 50.00 3 75.00
SE 4 2 50.00 4 100.00
TO 30 14 46.67 4 13.33
RN 39 18 46.15 12 30.77
PI 68 30 44.12 16 23.53
BA 37 16 43.24 22 59.46
MG 218 83 38.07 50 22.94
PB 71 27 38.03 47 66.20
SP 221 80 36.20 40 18.10
CE 65 23 35.38 35 53.85
MA 47 15 31.91 38 80.85
PR 178 55 30.90 22 12.36
MS 51 15 29.41 8 15.69
PE 149 37 24.83 117 78.52
MT 106 25 23.58 3 2.83
RS 329 74 22.49 32 9.73
AM 27 6 22.22 23 85.19
ES 35 7 20.00 6 17.14
SC 70 13 18.57 9 12.86
RO 30 5 16.67 11 36.67
AC 2 0 0.00 1 50.00
DF 1 0 0.00 1 100.00
RR 2 0 0.00 1 50.00

Vamos criar uma nova coluna na base de dados contendo a quantidade de dias decorridos da data de validade do CRP até a data de hoje (elaboração desse documento).

crp <- crp %>%
  mutate(QtdDias = as.numeric(difftime(as.POSIXct(Sys.Date()), `DATA DE VALIDADE`, units = "days")))

Qual o Ente com o CRP vencido a mais tempo?

crp %>%
  filter(QtdDias == max(crp$QtdDias)) %>%
  select(UF, ENTE, `DATA DE EMISSÃO`, `DATA DE VALIDADE`, QtdDias) %>%
  kable(caption = paste("Data de Referência: ", format(Sys.Date(), "%d.%m.%Y") , sep = ""))
Data de Referência: 23.09.2019
UF ENTE DATA DE EMISSÃO DATA DE VALIDADE QtdDias
PI Barreiras do Piauí 2001-07-24 2002-01-20 6455

Agora criar uma nova coluna na base de dados contendo um escalonamento da variável QtdDias de dados de forma a classificar os Entes em função da quantidade de dias em que os CRP estão vencidos. Por exemplo, podemos adotar a seguinte classificação: “a vencer”, “1 a 30 dias”, “31 a 60 dias”, “61 a 90 dias”, “91 a 180 dias”, “181 a 365 dias”, “1 a 5 anos” e “mais de 5 anos”.

Para fazer esse escalonamento, vamos criar uma nova coluna na base de dados.

crp <- crp %>%
        mutate(categoria = cut(QtdDias,
                               breaks =c(-Inf, 0, 30, 60, 90, 180, 365, 5*365, Inf) ,
                               labels = c("a vencer",
                                          "1 a 30 dias",
                                          "31 a 60 dias",
                                          "61 a 90 dias",
                                          "91 a 180 dias",
                                          "181 a 365 dias",
                                          "1 a 5 anos",
                                          "mais de 5 anos")))

Agora podemos fazer um gráfico que mostre a frequência de Entes em cada uma dessas categorias.

crp %>%
  group_by(categoria) %>%
  summarise(frequencia = n()) %>%
  ggplot(aes(x=categoria, y=frequencia)) +
    geom_bar(stat="identity", fill="orange") +
    geom_text(aes(label=frequencia), color="blue", vjust = 0, hjust=1, size=4) +
    coord_flip()

Também é possível fazer o mesmo gráfico para os Entes de um mesmo estado ou mesmo para os Entes que estão em um mesmo grupo conforme definido pels SPrev.

Vamos ver como está situação dos RPPS do Estado do Rio de Janeiro:

Estado <- "RJ"

crp %>%
  filter(UF == Estado) %>%
  group_by(categoria) %>%
  summarise(frequencia = n()) %>%
  ggplot(aes(x=categoria, y=frequencia)) +
    geom_bar(stat="identity", fill="orange") +
    geom_text(aes(label=frequencia), color="blue", vjust = 0, hjust=1, size=4) +
    coord_flip()

Quais são os Entes do RJ com CRP vencido a mais de 5 anos?

filter(crp, UF == Estado, categoria == "mais de 5 anos") %>% 
  kable()
UF ENTE REGIME NR CRP DATA DE EMISSÃO DATA DE VALIDADE CRP JUDICIAL SITUAÇÃO DO CRP QtdDias categoria
RJ Araruama RPPS 985803-28572 2004-12-23 2005-02-21 NÃO VENCIDO 5327 mais de 5 anos
RJ Belford Roxo RPPS 982909-99748 2011-09-27 2012-03-25 NÃO VENCIDO 2738 mais de 5 anos
RJ Iguaba Grande RPPS 980774-47771 2007-05-18 2007-11-14 NÃO VENCIDO 4331 mais de 5 anos
RJ Itaocara RPPS 985841-88200 2010-07-28 2011-01-24 NÃO VENCIDO 3164 mais de 5 anos
RJ Magé RPPS 985849-30352 2005-03-02 2005-05-01 SIM VENCIDO 5258 mais de 5 anos
RJ Rio Bonito RPPS 985885-117820 2013-11-05 2014-05-04 SIM VENCIDO 1968 mais de 5 anos
RJ São Gonçalo RPPS 985897-114709 2013-07-08 2014-01-04 NÃO VENCIDO 2088 mais de 5 anos

Infelizmente a base de dados não possui informações sobre os critérios do CRP. Essas seriam informações interessantes de constar da base de dados.



DAIR

Este capítulo é dedicado à análise dos dados relativos ao Demonstrativo das Aplicações e Investimento dos Recursos - DAIR. Este demonstrativo evidencia, mês a mês, a posição dos investimentos feitos pelos RPPS bem como dos ativos vinculados ao sistema previdenciário.


Importação e Pré-Processamento dos Dados

Antes de iniciarmos qualquer análise com a base de dados do DAIR será necessário importá-la e realizar um pré-processamento com vistas a deixar a base pronta para uso.

Os dados do DAIR podem ser baixados na site da SPrev/ME e, para os exercícos de 2018 e 2019, estão contidos nos seguintes arquivos: Carteira 2018.csv e Carteira 2019.csv

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

setwd("..\\dados")
arquivos <- c("Carteira 2018.csv", "Carteira 2019.csv")
invest <- lapply(arquivos, read.csv2, stringsAsFactors = FALSE, na.strings = c("NULL", "", " "))
invest <- do.call('rbind', invest)

# Alterar os nomes das colunas
names(invest) <- c("cnpj", "uf", "ente", "competencia", "segmento",
                   "tipo_ativo", "limite_resol_cmn", "ident_ativo",
                   "nm_ativo", "qtd_quotas", "vlr_atual_ativo", "vlr_total_atual",
                   "perc_recursos_rpps", "pl_fundo", "perc_pl_fundo")

Feita a importação vamos inspecionar a base de dados.

kable(head(invest), format.args = list(decimal.mark = ",", big.mark = "."))
cnpj uf ente competencia segmento tipo_ativo limite_resol_cmn ident_ativo nm_ativo qtd_quotas vlr_atual_ativo vlr_total_atual perc_recursos_rpps pl_fundo perc_pl_fundo
63.606.479.000.124 AC Governo do Estado do Acre 1/2018 Disponibilidades Financeiras NA NA 3550 / 8307-0 1 Banco do Brasil S.A. 1,0 0,00000 0,0 0,00 NA NA
63.606.479.000.124 AC Governo do Estado do Acre 1/2018 Disponibilidades Financeiras NA NA 3550 / 5738-X 1 Banco do Brasil S.A. 1,0 14.391.809,91000 14.391.809,9 96,07 NA NA
63.606.479.000.124 AC Governo do Estado do Acre 1/2018 Disponibilidades Financeiras NA NA 2358 / 6178-6 1 Banco do Brasil S.A. 1,0 0,00000 0,0 0,00 NA NA
63.606.479.000.124 AC Governo do Estado do Acre 1/2018 Disponibilidades Financeiras NA NA 3550 / 6080-1 1 Banco do Brasil S.A. 1,0 0,00000 0,0 0,00 NA NA
63.606.479.000.124 AC Governo do Estado do Acre 1/2018 Renda Fixa FI 100% títulos TN 99,99 11328882/0001-35 BB PREVIDENCIÁRIO RENDA FIXA IRF M1 252.362,9 2,33025 588.068,6 3,93 12.260.945.819 0
63.606.479.000.124 AC Governo do Estado do Acre 1/2018 Disponibilidades Financeiras NA NA 3550 / 8361-5 1 Banco do Brasil S.A. 1,0 0,00000 0,0 0,00 0 NA

Quantos registros tem a base?

nrow(invest)
[1] 454412

Será necessário realizar alguns procedimentos de “limpeza” na base de dados. A mais importante sendo a conversão de encoding das variáveis não numéricas.

invest <- invest %>%
  mutate(ente        = iconv(ente,       from = "utf-8", to="latin1"),
         segmento    = iconv(segmento,   from = "utf-8", to="latin1"),
         tipo_ativo  = iconv(tipo_ativo, from = "utf-8", to="latin1"),
         nm_ativo    = iconv(nm_ativo,   from = "utf-8", to="latin1"),
         ident_ativo = trimws(ident_ativo))

# Preencher valores do campo "tipo_ativo" para as disponibilidades. 
invest$tipo_ativo <- ifelse(invest$segmento == "Disponibilidades Financeiras", "Disp", invest$tipo_ativo)

# Converter a variável "competencia" para o formato de data
invest$competencia <- as.Date(paste("01", invest$competencia, sep="/"), "%d/%m/%Y")

Outra transformação é fazer a exclusão de símbolos de pontuação da variável ident_ativo. Em especial para os CNPJ que identificam os fundos de investimentos.

invest$ident_ativo <- gsub("[[:punct:]]", "", invest$ident_ativo)

Vamos verificar o período compreendido pela base de dados:

sort(unique(invest$competencia))
 [1] "2018-01-01" "2018-02-01" "2018-03-01" "2018-04-01" "2018-05-01" "2018-06-01" "2018-07-01" "2018-08-01" "2018-09-01" "2018-10-01" "2018-11-01" "2018-12-01" "2019-01-01"
[14] "2019-02-01" "2019-03-01"

Diversas outras verificações podem ser feitas na base de dados com vistas à obtenção de um melhor conhecimento da mesma, mas vamos nos restringir a essas por ora.


Entrega do DAIR à SPrev/ME

Um verificação necessária diz respeito a saber se o RPPS está encaminhando regularmente o DAIR à SPrev/ME.

Aliás, esse é um ponto de verificação constante na Resolução Atricon 05/2018 que Aprova as Diretrizes de Controle Externo Atricon nº 3214/2018, relacionadas à temática “Controle Externo na gestão dos Regimes Próprios de Previdência Social”.

25.1 (…)

u) se há o envio tempestivo à Secretaria de Previdência (SPREV) do Ministério da Fazenda dos demonstrativos obrigatórios (DIPR, DRAA, DPIN, DAIR e demonstrativos contábeis).

Para executarmos essa verificação é necessário comparar os Entes que constam da base de dados do DAIR (invest) com uma outra base de dados que contenha todos os RPPS.

Vamos usar a base de dados do Indicador de Situação Previdenciária - ISP contida no arquivo RESULTADO-ISP-2018.01.xlsx como nossa referência.

A importação dos dados é feita da seguir:

setwd("..\\dados")
isp <- read_excel("RESULTADO-ISP-2018.01.xlsx")
isp <- isp[, -c(31, 32, 33, 34)]
names(isp) <- c("ENTE",    "UF", "REGIAO", "GRUPO", "ESCRITURA",    "APLICFIN",
                "CONTRIB", "COBSERVPUB", "CONCBENEF",   "EQUILATUAR",   "PARTSEG",  "PARCELTEMP",
                "REGRAS",    "UTILRECPREV", "CONF", "CLASSIF_CONF", "ENDIVID",  "SOLVFIN",
                "RAZAOAI", "COMPROMATUAR",  "SOLVATUAR",    "EQUIL",    "CLASSIF_EQUIL",
                "DRAA",    "DIPR",  "DPIN", "DAIR", "TRANSP",   "CLASSIF_TRANSP",   "ISP201801")

Como será necessário juntar essa base com a base do DAIR, vamos limpar um pouco a base de dados para tornar viável essa operação.

# Entes na base do DAIR
entes_dair <- invest %>%
  select(ente, uf, competencia) %>%
  distinct() %>%
  unite(ente, ente, uf, sep=" - ") %>%
  mutate(ente = iconv(ente, from = "utf-8", to="ASCII//TRANSLIT"),
         ente = toupper(ente))

# Entes na base do ISP
entes_geral <- isp %>%
  select(ENTE) %>%
  mutate(ENTE = iconv(ENTE, from = "utf-8", to="ASCII//TRANSLIT"))

Agora vamos juntar as bases e fazer a checagem.

entrega_dair <- entes_geral %>%
  left_join(entes_dair, by=c("ENTE" = "ente")) %>%
  mutate(entregou = "X") %>%
  distinct() %>%
  spread(key=competencia, value = entregou, fill = "-") %>%
  select(- `<NA>`)  

A base de dados entrega_dair nos informa quais entes fizeram a entrega do DAIR no período a que se refere a base de dados. Para conultarmos os Entes de uma UF específica, por exemplo AL, podemos fazer da seguinte forma:

uf <- "AL"

entrega_dair %>%
  filter(grepl(paste(uf, "$", sep=""), ENTE)) %>%
  kable()
ENTE 2018-01-01 2018-02-01 2018-03-01 2018-04-01 2018-05-01 2018-06-01 2018-07-01 2018-08-01 2018-09-01 2018-10-01 2018-11-01 2018-12-01 2019-01-01 2019-02-01 2019-03-01
ARAPIRACA - AL X X X X X X X X X X X X X X -
ATALAIA - AL X X X X X X X X X X X X X X X
BARRA DE SANTO ANTONIO - AL - - - - - - - - - - - - - - -
BELEM - AL - - - - - - - - - - - - - - -
BELO MONTE - AL - - - - - - - - - - - - - - -
BOCA DA MATA - AL - - - - - - - - - - - - - - -
BRANQUINHA - AL - - - - - - - - - - - - - - -
CACIMBINHAS - AL - - - - - - - - - - - - - - -
CAJUEIRO - AL X X X - - - - - - - - - - - -
CAMPESTRE - AL X X X X X X X X X X X X X - -
CAMPO ALEGRE - AL - - - - - - - - - - - - - - -
CANAPI - AL X X X X X X X - - - - - - - -
CARNEIROS - AL - - - - - - - - - - - - - - -
CHA PRETA - AL - - - - - - - - - - - - - - -
COITE DO NOIA - AL - - - - - - - - - - - - - - -
COLONIA LEOPOLDINA - AL - - - - - - - - - - - - - - -
COQUEIRO SECO - AL - - - - - - - - - - - - - - -
CORURIPE - AL X X X X X X X X X X X X X X -
CRAIBAS - AL - - - - - - - - - - - - - - -
FLEXEIRAS - AL - - - - - - - - - - - - - - -
GIRAU DO PONCIANO - AL - - - - - - - - - - - - - - -
GOVERNO DO ESTADO DE ALAGOAS - AL X X X X X X X X X X X X X X X
IGACI - AL - - - - - - - - - - - - - - -
INHAPI - AL - - - - - - - - - - - - - - -
JACUIPE - AL - - - - - - - - - - - - - - -
JAPARATINGA - AL - - - - - - - - - - - - - - -
JARAMATAIA - AL - - - - - - - - - - - - - - -
JEQUIA DA PRAIA - AL - - - - - - - - - - - - - - -
JUNDIA - AL - - - - - - - - - - - - - - -
JUNQUEIRO - AL - - - - - - - - - - - - - - -
LAGOA DA CANOA - AL - - - - - - - - - - - - - - -
MACEIO - AL - - - - - - - - - - - - - - -
MAJOR IZIDORO - AL X X X X X X X X X X X X X X X
MAR VERMELHO - AL - - - - - - - - - - - - - - -
MARAGOGI - AL X X X X X X X X X X X X X X -
MARAVILHA - AL - - - - - - - - - - - - - - -
MARECHAL DEODORO - AL - - - - - - - - - - - - - - -
MARIBONDO - AL X X X X - - - - - - - - - - -
MATA GRANDE - AL - - - - - - - - - - - - - - -
MATRIZ DE CAMARAGIBE - AL X X X X X X X X X X X X - - -
MESSIAS - AL X X X X X X X X X X X X X X X
MINADOR DO NEGRAO - AL - - - - - - - - - - - - - - -
MONTEIROPOLIS - AL - - - - - - - - - - - - - - -
MURICI - AL - - - - - - - - - - - - - - -
NOVO LINO - AL - - - - - - - - - - - - - - -
OLHO D’AGUA DAS FLORES - AL - - - - - - - - - - - - - - -
OLIVENCA - AL - - - - - - - - - - - - - - -
OURO BRANCO - AL - - - - - - - - - - - - - - -
PALESTINA - AL - - - - - - - - - - - - - - -
PALMEIRA DOS INDIOS - AL - - - - - - - - - - - - - - -
PAO DE ACUCAR - AL - - - - - - - - - - - - - - -
PASSO DE CAMARAGIBE - AL - - - - - - - - - - - - - - -
PAULO JACINTO - AL - - - - - - - - - - - - - - -
PENEDO - AL - - - - - - - - - - - - - - -
PILAR - AL - - - - - - - - - - - - - - -
PINDOBA - AL X X X X X X X X X X X X X X -
PIRANHAS - AL X X X X X X X X X X X X X X -
POCO DAS TRINCHEIRAS - AL - - - - - - - - - - - - - - -
PORTO CALVO - AL - - - - - - - - - - - - - - -
PORTO DE PEDRAS - AL X X X X X X X X X X X - - - -
QUEBRANGULO - AL - - - - - - - - - - - - - - -
SANTA LUZIA DO NORTE - AL X X X X X X X X X X X X - - -
SANTANA DO MUNDAU - AL - - - - - - - - - - - - - - -
SAO JOSE DA LAJE - AL - - - - - - - - - - - - - - -
SAO JOSE DA TAPERA - AL - - - - - - - - - - - - - - -
SAO LUIZ DO QUITUNDE - AL - - - - - - - - - - - - - - -
SAO MIGUEL DOS MILAGRES - AL - - - - - - - - - - - - - - -
SAO SEBASTIAO - AL - - - - - - - - - - - - - - -
SENADOR RUI PALMEIRA - AL - - - - - - - - - - - - - - -
TANQUE D’ARCA - AL - - - - - - - - - - - - - - -
TAQUARANA - AL - - - - - - - - - - - - - - -
TEOTONIO VILELA - AL - - - - - - - - - - - - - - -
VICOSA - AL - - - - - - - - - - - - - - -

O quadro acima nos fornece uma indicação de quais RPPS estão inadimplentes com a obrigação de encaminhamento do DAIR à SPrev. O quadro está ordenado por ordem alfabética mas poderia ser ordenado por inadimplência, ou seja, RPPS com maior quantidade de inadimplência no período viriam primeiro.

Caso seja necessário exportar os dados para uma planilha do excel:

setwd("..\\dados-produzidos")
write_xlsx(entrega_dair, "entrega_dair_AL.xlsx")


Aplicações em Fundos Vedados

Uma análise possível com os dados disponibilizados é a verificação de que o RPPS possui recursos aplicados em fundos de investimentos vedados. A partir da edição da Resolução CMN n. 4.604/17 que altera a Resolução CMN n. 3.922/10, a SPrev passou a divulgar uma relação com os fundos de investimentos que seriam vedados aos RPPS. A lista é constantemente atualizada e por ocasião da elaboração deste documento a lista disponível era FUNDOS-VEDADOS-CARTEIRA-DOS-FUNDOS-21122018.pdf. Este arquivo pode ser baixado no site da SPrev.

Os dados contidos no arquivo acima foram extraídos utilizando-se um script em R gerando o arquivo fundos_vedados_21-12-2018.xlsx que será utilizado para verificar se um RPPS possui recursos aplicados nesses fundos.

Vamos à importação dos dados:

setwd("..\\dados")
fundos_vedados <- read_excel("fundos_vedados_21-12-2018.xlsx")

Essa base de dados possui 138 registros. Será que existe duplicidade de fundos na base?

any(duplicated(fundos_vedados$`CNPJ DO FUNDO`))
[1] FALSE

Para a identificação dos RPPS que possuem investimentos em fundos vedados será necessário “cruzar” os dados das duas bases: invest e fundos_vedados. Mas para isso será necessário, antes, fazer uma correção na base, especificamente na variável que identifica o CNPJ do fundo de investimento, visto que essa é a chave que nos permitirá relacionar as duas bases de dados.

Na base invest a variável que contém informação sobre o CNPJ do fundo de investimento é ident_ativo e na base fundos_vedados é a variável CNPJ DO FUNDO.

Vamos inspecionar as quinze primeiros valores destas duas variáveis:

invest$ident_ativo[1:15]
 [1] "3550  83070"    "3550  5738X"    "2358  61786"    "3550  60801"    "11328882000135" "3550  83615"    "3550  83070"    "3550  5738X"    "11328882000135" "2358  61786"   
[11] "3550  60801"    "3550  83615"    "2358  61786"    "3550  60801"    "3550  83615"   
fundos_vedados$`CNPJ DO FUNDO`[1:15]
 [1] "00.828.035/0001-13" "01.107.772/0001-90" "01.375.954/0001-41" "01.653.201/0001-50" "03.362.624/0001-47" "04.877.280/0001-71" "05.086.234/0001-17" "05.313.396/0001-40"
 [9] "06.018.364/0001-85" "06.086.158/0001-02" "07.399.646/0001-32" "07.766.151/0001-02" "07.967.080/0001-06" "08.203.825/0001-15" "09.006.914/0001-34"

Como pode ser visto, os valores do CNPJ estão “formatados” de formas distintas nas duas bases. Será necessário realizar a correção que vai consistir simplesmente remover os caracteres de pontuação. É isso que o código a seguir faz.

fundos_vedados$`CNPJ DO FUNDO` <- gsub("[[:punct:]]", "", fundos_vedados$`CNPJ DO FUNDO`)

Agora que fizemos a limpeza das variáveis, podemos realizar o cruzamento dos dados. No comando abaixo criamos uma nova coluna (ou variável caso prefiram) na base de dados invest chamada aplica_fundo_vedado que assumirá o valor 1 caso o CNPJ do fundo conste da base de fundos vedados e 0 caso contrário. Logo em seguida aplicamos um filtro para obter apenas os registros onde a variável aplica_fundos_vedados assume o valor 1 e criamos uma nova base de dados com esses valores chamada invest_fv.

invest_fv <- invest %>%
               mutate(aplica_fundo_vedado = ifelse(ident_ativo %in% fundos_vedados$`CNPJ DO FUNDO`, 1, 0)) %>%
               filter(aplica_fundo_vedado == 1)

Gerada essa nova base de dados, vamos agora exportá-la para um arquivo do Excel.

setwd("..\\dados-produzidos")
write_xlsx(invest_fv, "AplicacoesFundosVedadosBR.xlsx")

Filtrando a base de dados podemos agora identificar os Entes de um EstadoF que possuíam, em ao menos um dos períodos abrangidos pela base de dados, aplicações em fundos de investimentos vedados.

Exemplo: Será que no estado do Tocantins existe algum RPPS com aplicações em fundos vedados?

# Definição da UF de interesse
UF <- "TO"

# Aplicação de filtro
invest_fv %>%
  filter(uf == UF) %>%
  select(ente, ident_ativo, nm_ativo) %>%
  distinct() %>%
  kable()
ente ident_ativo nm_ativo
Governo do Estado do Tocantins 13651947000104 TOTEM FI RF II
Governo do Estado do Tocantins 14721044000115 INFRA SANEAMENTO FIP
Governo do Estado do Tocantins 20886575000160 FI EM PARTICIPAÇÕES FP2
Governo do Estado do Tocantins 13555918000149 AQUILLA FII
Governo do Estado do Tocantins 14069202000102 AQUILLA RENDA FII
Governo do Estado do Tocantins 13593438000172 ECO HEDGE FIM CP LP
Governo do Estado do Tocantins 12440789000180 LEME MULTISETORIAL IPCA FIDC
Governo do Estado do Tocantins 11827568000105 INCENTIVO FI REFERENCIADO CDI CP
Governo do Estado do Tocantins 18369510000104 INFRA REAL ESTATE FII
Governo do Estado do Tocantins 13344834000166 INCENTIVO FIDC MULTISETORIAL II
Governo do Estado do Tocantins 10355516000102 TOP FUNDO DE INVESTIMENTO RENDA FIXA
Governo do Estado do Tocantins 11784036000120 LEME IMA-B FI RF PREVIDENCIÁRIO
Governo do Estado do Tocantins 23954899000187 TOWER BRIDGE II RF FI IMA-B 5
Governo do Estado do Tocantins 12312767000135 ÁTICO FLORESTAL FIP
Governo do Estado do Tocantins 15798354000109 FUNDO DE INVESTIMENTO EM PARTICIPAÇÕES LSH
Governo do Estado do Tocantins 09006914000134 RB CAPITAL RENDA - FII
Governo do Estado do Tocantins 15461076000191 FUNDO DE INVESTIMENTO IMOBILIÁRIO BR HOTÉIS - FII
Governo do Estado do Tocantins 12845801000137 TOWER BRIDGE RF FI IMA-B 5
Governo do Estado do Tocantins 15350909000147 VITÓRIA RÉGIA FI RF LP
Governo do Estado do Tocantins 10625626000147 CONQUEST FIP
Governo do Estado do Tocantins 13707891000162 VIAJA BRASIL PRIVATE EQUITY FIP
Governo do Estado do Tocantins 14631148000139 ÁTICO RENDA FII
Palmas 17213821000109 FIP CAIS MAUA DO BRASIL INFRAESTRUTURA
Palmas 09006914000134 RB CAPITAL RENDA II FII
Palmas 25246183000150 TERCON FIC FIM MULTICRÉDITO CRÉDITO PRIVADO


Perfil das Aplicações de um RPPS

Agora vamos estudar o perfil dos investimentos de um determinado RPPS. Vamos olhar o RPPS de São Gonçalo no Estado do Rio de Janeiro.

Vamos a seguir identificar o Ente e o período de interesse para definição do perfil.

ENTE <- "São Gonçalo"
UF <-  "RJ"

periodo <- range(invest$competencia, na.rm = TRUE)
periodo <- seq(periodo[1], periodo[2], by='month')

Feita a identificação vamos filtrar a base de dados para encontrar os registros relativos ao Ente selecionado.

invest_rpps <- invest %>%
  filter(uf == UF, ente == ENTE) %>%
  arrange(competencia) %>%
  select(competencia, tipo_ativo, vlr_total_atual) %>%
  group_by(competencia, tipo_ativo) %>%
  summarise(vlr_total_atual = sum(vlr_total_atual, na.rm = TRUE)) %>%
  spread(key = competencia, value = vlr_total_atual) 
kable(invest_rpps,
      format.args = list(decimal.mark = ",", big.mark = "."),
      col.names = c("Tipo Ativo", format(as.Date(names(invest_rpps[-1])), "%m/%Y")))
Tipo Ativo 01/2018 02/2018 03/2018 04/2018 05/2018 06/2018 07/2018 08/2018 09/2018 10/2018 11/2018 12/2018 01/2019 02/2019
Disp 5.224.878 4.146.390 23.984,19 15.013,17 3.378,3 3.807,39 18.744,58 9.356,72 12.536,63 12.734,01 19.810,5 481.004,5 20.577,35 4.383.475,4
FI 100% títulos TN 5.355.800 5.387.976 5.439.669,25 NA NA NA NA NA NA NA NA NA NA NA
FI 100% títulos TN - Art. 7º, I, b NA NA NA 5.463.394,02 5.378.163,5 5.382.668,62 5.456.296,12 5.414.787,83 5.478.713,96 5.654.074,88 5.705.889,9 7.485.045,0 7.587.217,76 7.608.137,0
FI de Renda Fixa 1.003.936 2.608.065 3.073.739,29 NA NA NA NA NA NA NA NA NA NA NA
FI em Participações - Art. 8º, IV, a NA NA NA 9.018.494,10 9.017.556,9 9.016.619,68 9.015.701,35 9.014.783,03 9.013.864,09 9.012.945,16 9.012.025,4 9.011.104,9 9.010.185,35 9.009.186,8
FI em Participações - Fechado 9.021.537 9.020.500 9.019.431,32 NA NA NA NA NA NA NA NA NA NA NA
FI Multimercado - Aberto - Art. 8º, III NA NA NA 1.138.395,17 1.135.119,8 1.126.206,02 1.115.459,63 1.102.219,57 996.980,81 996.025,21 1.018.345,2 856.668,5 855.624,31 855.192,7
FI Renda Fixa - Geral - Art. 7º, IV, a NA NA NA 0,00 0,0 0,00 0,00 0,00 4.554.008,80 9.501.346,42 11.087.416,7 2.096.557,8 14.694.334,08 9.733.664,9
FI Renda Fixa Crédito Privado 3.360.512 2.783.212 2.782.746,72 NA NA NA NA NA NA NA NA NA NA NA
FI Renda Fixa Crédito Privado - Art. 7º, VII, b NA NA NA 2.782.259,17 2.780.138,2 2.780.012,69 2.779.960,16 2.780.306,86 2.780.734,35 2.780.862,96 2.553.965,4 2.553.328,7 2.553.199,68 2.553.279,5
FI Renda Fixa Referenciado - Art. 7º, III, a NA NA NA 7.594.082,37 8.198.627,7 11.745.578,39 9.070.563,91 9.480.812,26 0,00 0,00 0,0 0,0 0,00 0,0
FI Renda Fixa/Referenciados RF 1.142.921 1.141.682 1.139.725,66 NA NA NA NA NA NA NA NA NA NA NA

O quadro mostra uma mudança nas aplicações a partir de abril de 2018 em resposta às alterações introduzidas pela Resolução CMN n. 4.604/17 do Conselho Monetário Nacional que alterou a Resolução CMN n. 3.922/10. Talvez em razão disso seja interessante limitar a série para os meses posteriores a abril de 2018, inclusive.

invest_rpps <- invest_rpps %>% select(-(2:4))
invest_rpps <- invest_rpps[complete.cases(invest_rpps[,-1]),]
kable(invest_rpps,
      format.args = list(decimal.mark = ",", big.mark = "."),
      col.names = c("Tipo Ativo", format(as.Date(names(invest_rpps[-1])), "%m/%Y")))
Tipo Ativo 04/2018 05/2018 06/2018 07/2018 08/2018 09/2018 10/2018 11/2018 12/2018 01/2019 02/2019
Disp 15.013,17 3.378,3 3.807,39 18.744,58 9.356,72 12.536,63 12.734,01 19.810,5 481.004,5 20.577,35 4.383.475,4
FI 100% títulos TN - Art. 7º, I, b 5.463.394,02 5.378.163,5 5.382.668,62 5.456.296,12 5.414.787,83 5.478.713,96 5.654.074,88 5.705.889,9 7.485.045,0 7.587.217,76 7.608.137,0
FI em Participações - Art. 8º, IV, a 9.018.494,10 9.017.556,9 9.016.619,68 9.015.701,35 9.014.783,03 9.013.864,09 9.012.945,16 9.012.025,4 9.011.104,9 9.010.185,35 9.009.186,8
FI Multimercado - Aberto - Art. 8º, III 1.138.395,17 1.135.119,8 1.126.206,02 1.115.459,63 1.102.219,57 996.980,81 996.025,21 1.018.345,2 856.668,5 855.624,31 855.192,7
FI Renda Fixa - Geral - Art. 7º, IV, a 0,00 0,0 0,00 0,00 0,00 4.554.008,80 9.501.346,42 11.087.416,7 2.096.557,8 14.694.334,08 9.733.664,9
FI Renda Fixa Crédito Privado - Art. 7º, VII, b 2.782.259,17 2.780.138,2 2.780.012,69 2.779.960,16 2.780.306,86 2.780.734,35 2.780.862,96 2.553.965,4 2.553.328,7 2.553.199,68 2.553.279,5
FI Renda Fixa Referenciado - Art. 7º, III, a 7.594.082,37 8.198.627,7 11.745.578,39 9.070.563,91 9.480.812,26 0,00 0,00 0,0 0,0 0,00 0,0

Os comandos a seguir fornecem um gráfico do percentual aplicado em cada fundo de investimento por mês com indicação de eventuais fundos vedados. Vamos explicitar o passo a passo até a elaboração do gráfico.

O primeiro passo é obter na base de investimentos (invest) os dados relativos ao RPPS de interesse e os registros relativos aos ativos que se refiram a fundos de investimentos.

Isso é feito a seguir:

perfil <- invest %>%
  filter(uf == UF, ente == ENTE, grepl("\\d{14}", ident_ativo)) %>%
  mutate(fundos = paste(nm_ativo, " [", ident_ativo, "]", sep = "")) %>%
  group_by(competencia, fundos) %>% 
  summarise(vlr_total_atual = sum(vlr_total_atual, na.rm = TRUE)) %>%
  ungroup() %>%
  group_by(competencia) %>%
  mutate(pct_aplic_fundo = vlr_total_atual / sum(vlr_total_atual, na.rm = TRUE)) 

O passo a seguir não é absolutamente necessário para o que queremos. Ele apenas vai nos permitir uma certa ordenação dos fundos de investimentos no gráfico de forma que fundos com maior valor aplicado apareçam antes de fundos com menos recursos. A estratégia adotada (não necessariamente a melhor) é ordenar pelo valor médio do percentual investido no período.

medias <- perfil %>%
  group_by(fundos) %>%
  summarise(media = mean(pct_aplic_fundo, na.rm = TRUE)) %>%
  arrange(desc(media)) %>%
  mutate(ordem = rank(media, ties.method= "first"))

Agora precisamos juntar esses dados com a base de dados do RPPS obtida anteriormente.

# Juntar com base contendo a ordenação dos fundos
perfil <- perfil %>%
              left_join(medias[, c("fundos", "ordem")], by="fundos") %>%
              arrange(desc(ordem))

Agora vamos identificar os fundos vedados.

# Identificar fundos que sejam vedados.
perfil <- perfil %>%
              mutate(vedado = ifelse(gsub(".*\\[(.*)\\]", "\\1", fundos) %in% fundos_vedados$`CNPJ DO FUNDO`, "Vedado", "Permitido"))

E agora já podemos fazer o gráfico.

ggplot(perfil, aes(x=competencia, y=reorder(fundos, ordem), size=pct_aplic_fundo,colour = factor(vedado))) +
  geom_point() +
  xlab("Meses") + ylab("Fundos") +
  scale_color_manual(values = c("lightblue", "tomato"))

O gráfico mostra a existência de um mesmo fundo com denominações ligeiramente diferentes. Exemplo: o Itaú Soberano e o Catânia.

Se o RPPS inciar um investimento em um fundo novo será possível identificá-lo nesse gráfico, o que parece ser um recurso interessante para o monitoramento das carteiras de fundos de investimento dos RPPS.


Evolução dos Ativos Garantidores

De grande importância para os RPPS são os seus ativos garantidores, ou seja, os recursos que o RPPS acumula e aplica no mercado financeiro para ajudar a pagar os benefícios juntamente com os bens, valores e direitos vinculados ao RPPS.

Neste capítulo nosso objetivo é verificar como os ativos garantidores estão evoluindo no tempo. Basicamente nossa proposta é fazer um gráfico de linha mostrando a evolução dos recursos.

Em razão de disposições contidas na Resolução CMN n. 3.922/10 vamos trabalhar com os conceitos de Ativo Garantidor Bruto e Ativo Garantidor Líquido.

Por ativo garantidor bruto iremos considerar a totalidade dos ativos que o RPPS relaciona no DAIR. O ativo garantidor líquido não inclui determinados ativos conforme disposto no art. 6o da Resolução CMN n. 3.922/10.

Na base de dados do DAIR a identificação dos ativos está definida na variável tipo_ativo. Antes de iniciarmos, vamos verificar quais tipos de ativos existem na base de dados:

invest %>%
  distinct(tipo_ativo) %>%
  kable()
tipo_ativo
Disp
FI 100% títulos TN
FI 100% títulos TN - Art. 7º, I, b
FI de Renda Fixa
FI em Ações
FI Renda Fixa Crédito Privado
FI Imobiliários
FI Multimercado - Aberto
FI Renda Fixa - Geral - Art. 7º, IV, a
FI de Ações - Geral - Art. 8º, II, a
FI Multimercado - Aberto - Art. 8º, III
FI Renda Fixa Crédito Privado - Art. 7º, VII, b
FI de Ações - Índices c/ no mínimo 50 ações - Art. 8º, I, a
FI Imobiliários - Art. 8º, IV, b
Títulos de Renda Fixa
FI Renda Fixa/Referenciados RF
FI Renda Fixa Referenciado - Art. 7º, III, a
Poupança
Poupança - Art. 7º, VI, b
CDB - Certificado de Depósito Bancário - Art. 7º, VI, a
Valores Mobiliários
FI de Índices Referenciados em Renda Fixa
Outros Bens, Direitos e Ativos
FI de Índices Referenciados em RF Subíndices Anbima
Títulos Tesouro Nacional
ETF - Demais Indicadores de RF - Art. 7º, IV, b
Títulos Públicos de emissão do TN - Art. 7º , I, a
ETF - Renda Fixa Referenciado - Art. 7º, III, b
FI Ações referenciados
FI em Direitos Creditórios - Fechado - Cota Sênior
FI em Participações - Fechado
Prédio Comercial
FI em Direitos Creditórios - Aberto - Cota Sênior
FI em Participações - Art. 8º, IV, a
FI em Direitos Creditórios - Cota Sênior - Art. 7º, VII, a
Operações Compromissadas com Títulos do TN
Operações compromissadas - Art. 7º , II
FI de Índices Referenciados em Ações
ETF - Índice de Ações (c/ no mínimo 50) - Art. 8º, I, b
Outros - Imóveis
Terreno
Casa
Loja
FI Imobiliário
Prédio Residencial
NA
Fundos de Investimento não previstos em Resolução CMN
Apartamento
Fundo Investimento - Sufixo Investimento no Exterior
ETF - Demais Índices de Ações - Art. 8º, II, b
FI em Direitos Creditórios - Aberto - Cota Subordinada

Algumas observações: em razão das alterações feitas na Resolução CMN n. 3.922/10 pela Resolução CMN n. 4.604/17, que passaram a vigir a partir de abril de 2018, alguns ativos estão com duas denominações na base, refletindo as alterações realizadas no CADPREV para se adequar à legislação. Por exemplo os ativos FI 100% títulos TN e FI 100% títulos TN - Art. 7º, I, b ou Poupança e Poupança - Art. 7º, VI, b.

Também é possível ver a existência de ativos sem identificação, representados pelo NA. Vamos ver quantos ativos estão nessa condição:

sum(is.na(invest$tipo_ativo))
[1] 4

Apenas 4 observações. Vamos inspecioná-las:

kable(subset(invest, is.na(tipo_ativo)))
cnpj uf ente competencia segmento tipo_ativo limite_resol_cmn ident_ativo nm_ativo qtd_quotas vlr_atual_ativo vlr_total_atual perc_recursos_rpps pl_fundo perc_pl_fundo
91760 0.30 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
91797 0.26 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
91823 0.24 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
91861 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

Aparentemente foram erros. Vamos excluir esses registros da base de dados:

invest <- subset(invest, !is.na(tipo_ativo))

Agora estamos em condições de realizar a soma dos ativos registrados no DAIR em cada mês para obtermos o total dos ativos garantidores brutos no mês.

ativoGarantBruto <- invest %>%
  group_by(uf, ente, competencia) %>%
  summarize(vlrAtivoTotal = sum(vlr_total_atual, na.rm=TRUE)) 

Vamos ver agora como está evoluindo os ativos garantidores totais de Nova Iguaçu no Estado do Rio de Janeiro:

ENTE <- "Nova Iguaçu"
UF <- "RJ"

ativoGarantBruto %>%
  filter(uf == UF, ente == ENTE) %>%
  ggplot(aes(x=competencia, y=vlrAtivoTotal)) +
  geom_line() +
  geom_point() +
  theme(axis.text.x = element_text(angle = 90, vjust=0.5)) +
  scale_x_date(date_breaks="1 month", labels = date_format("%Y-%m"))

Alguma coisa parece errada em janeiro e fevereiro de 2019. Mais de 60 bilhões!?!?

Vamos agora calcular os ativos garantidores líquidos, ou seja, devemos excluir do rol de ativos constantes do DAIR, de acordo com o art.6o da Resolução CMN 3.922/10, os ativos vinculados por lei ao regime próprio de previdência social, demais bens, direitos e ativos com finalidade previdenciária do regime próprio de previdência social, as disponibilidades financeiras mantidas em conta corrente e as cotas de fundos de investimento imobiliário que forem admitidas à negociação no mercado secundário, conforme regulamentação da CVM, e que sejam integralizadas por imóveis legalmente vinculados ao Regime Próprio de Previdência Social.

Para tanto devemos conseguir identificar, no rol de ativos que integram o DAIR, aqueles que se encaixam nas categorias acima mencionadas. Para simplificar essa tarefa vamos trabalhar com os dados posteriores a abril de 2018 em razão de ter sido essa a data limite para os RPPS ajustarem seus investimentos ao regramento definido pela Resolução n. CMN 4.604/17 e também porque a partir dessa data o DAIR passou a contar com novos ativos.

Vamos então filtrar a base de dados:

ativoGarantLiquido <- invest %>%
  filter(competencia >= ymd("2018-04-01"))

Vamos agora inspecionar o rol de ativos com vistas a identificarmos quais devem ser excluídos.

ativoGarantLiquido %>%
  distinct(tipo_ativo) %>%
  kable()
tipo_ativo
Disp
FI 100% títulos TN - Art. 7º, I, b
FI Renda Fixa - Geral - Art. 7º, IV, a
FI de Ações - Geral - Art. 8º, II, a
FI Multimercado - Aberto - Art. 8º, III
FI Renda Fixa Crédito Privado - Art. 7º, VII, b
FI de Ações - Índices c/ no mínimo 50 ações - Art. 8º, I, a
FI Imobiliários - Art. 8º, IV, b
FI Renda Fixa Referenciado - Art. 7º, III, a
Poupança - Art. 7º, VI, b
CDB - Certificado de Depósito Bancário - Art. 7º, VI, a
Títulos de Renda Fixa
Valores Mobiliários
ETF - Demais Indicadores de RF - Art. 7º, IV, b
Outros Bens, Direitos e Ativos
Títulos Públicos de emissão do TN - Art. 7º , I, a
ETF - Renda Fixa Referenciado - Art. 7º, III, b
FI em Participações - Art. 8º, IV, a
FI em Direitos Creditórios - Cota Sênior - Art. 7º, VII, a
Prédio Comercial
Operações compromissadas - Art. 7º , II
ETF - Índice de Ações (c/ no mínimo 50) - Art. 8º, I, b
Outros - Imóveis
Terreno
Casa
Loja
Prédio Residencial
Fundos de Investimento não previstos em Resolução CMN
FI 100% títulos TN
FI de Renda Fixa
FI em Ações
FI Multimercado - Aberto
Apartamento
Fundo Investimento - Sufixo Investimento no Exterior
ETF - Demais Índices de Ações - Art. 8º, II, b

Para realizar a exclusão dos ativos vamos adotar o seguinte critério: excluir todos os ativos em cujas descrições, constantes do quadro acima, não estejam presentes a indicação do dispositivo da Resolução CMN n. 3.922/10 no qual o ativo se enquadra. Não sei se o critério é adequado mas servirá ao propósito de ilustrar como realizar o procedimento. Surgindo formas melhores de se fazer a seleção de ativos vamos implementar.

Então o próximo passo é realizar a exclusão dos referidos ativos:

ativoGarantLiquido <- ativoGarantLiquido %>%
  filter(grepl("Art.*$", tipo_ativo))

Vamos dar uma conferida:

ativoGarantLiquido %>%
  distinct(tipo_ativo) %>%
  kable()
tipo_ativo
FI 100% títulos TN - Art. 7º, I, b
FI Renda Fixa - Geral - Art. 7º, IV, a
FI de Ações - Geral - Art. 8º, II, a
FI Multimercado - Aberto - Art. 8º, III
FI Renda Fixa Crédito Privado - Art. 7º, VII, b
FI de Ações - Índices c/ no mínimo 50 ações - Art. 8º, I, a
FI Imobiliários - Art. 8º, IV, b
FI Renda Fixa Referenciado - Art. 7º, III, a
Poupança - Art. 7º, VI, b
CDB - Certificado de Depósito Bancário - Art. 7º, VI, a
ETF - Demais Indicadores de RF - Art. 7º, IV, b
Títulos Públicos de emissão do TN - Art. 7º , I, a
ETF - Renda Fixa Referenciado - Art. 7º, III, b
FI em Participações - Art. 8º, IV, a
FI em Direitos Creditórios - Cota Sênior - Art. 7º, VII, a
Operações compromissadas - Art. 7º , II
ETF - Índice de Ações (c/ no mínimo 50) - Art. 8º, I, b
ETF - Demais Índices de Ações - Art. 8º, II, b

Aparentemente está tudo ok. Podemos agora somar os valores dos ativos. Esse passo é idêntico ao já realizado para agregar os valores dos ativos brutos.

ativoGarantLiquido <- ativoGarantLiquido %>%
  group_by(uf, ente, competencia) %>%
  summarize(vlrAtivoTotal = sum(vlr_total_atual, na.rm=TRUE)) 

Agora vamos ao gráfico:

ENTE <- "Nova Iguaçu"
UF <- "RJ"

ativoGarantLiquido %>%
  filter(uf == UF, ente == ENTE) %>%
  ggplot(aes(x=competencia, y=vlrAtivoTotal)) +
  geom_line() +
  geom_point() +
  theme(axis.text.x = element_text(angle = 90, vjust=0.5)) +
  scale_x_date(date_breaks="1 month", labels = date_format("%Y-%m"))

Vemos agora uma queda nos ativos liquidos de novembro para dezembro de 2018.

Uma boa ideia é apresentar as duas séries no mesmo gráfico e também obter a relação entre o ativo garantidor liquido e ativo garantidor bruto.

ativoGarantBruto$tipo <- "Ativo Bruto"
ativoGarantLiquido$tipo <- "Ativo Liquido"
ativos_garantidores <- rbind(ativoGarantBruto, ativoGarantLiquido)

Vamos agora fazer o gráfico:

ENTE <- "Nova Iguaçu"
UF <- "RJ"

ativos_garantidores %>%
  filter(uf == UF, ente == ENTE) %>%
  ggplot(aes(x=competencia, y=log(vlrAtivoTotal), group=tipo, color=tipo)) +
    geom_line(size=1) +
    geom_point(size=2) +
  theme(axis.text.x = element_text(angle = 90, vjust=0.5)) +
  scale_x_date(date_breaks="1 month", labels = date_format("%Y-%m"))

Para que fosse possível ter a visualização dos dados fizemos o gráfico do logaritimo dos valores dos ativos.

A relação entre ativos líquidos e brutos pode ser obtida da seguinte forma:

ativos_garantidores2 <- ativoGarantBruto %>%
                          inner_join(ativoGarantLiquido, by=c("ente", "competencia")) %>%
                          mutate(relacao = round(vlrAtivoTotal.y / vlrAtivoTotal.x * 100, 2))

Vamos plotar essa relação para o município de São Gonçalo no ERJ:

ENTE <- "São Gonçalo"
UF <- "RJ"

ativos_garantidores2 %>%
  filter(uf.x == UF, ente == ENTE) %>%
  ggplot(aes(x=competencia, y=relacao)) + 
  geom_line() +
  geom_point() +
  theme(axis.text.x = element_text(angle = 90, vjust=0.5)) +
  scale_x_date(date_breaks="1 month", labels = date_format("%Y-%m"))


Enquadramento de Fundos de Investimentos

Uma outra verificação possível com os dados disponibilizados refere-se ao enquadramento dos fundos de invetimentos realizado pelos RPPS. Estamos aqui denominando de “enquadramento” ao ato de classificar um determinado ativo, em especial os fundos de investimento, em uma das opções constantes da Resolução CMN n. 3.922/10.

Assim, nosso objetivo nesse tópico é conferir o enquadramento informado pelo RPPS ao preencher o DAIR com o enquadramento definido pela SPrev/ME em relação aos fundos de investimento.

Periodicamente a SPrev publica em seu site uma planilha com o enquadramento dos fundos de investimento conforme Resolução CMN n. 3.922/10. Assim é possível comparar o enquadramento divulgado pela SPrev, contida nessa planilha, com o enquadramento realizado pelos RPPS por ocasião do preenchimento do DAIR.

Vamos importar os dados contidos na planilha da SPrev:

setwd("..\\dados")
EnquadSPrev <- read_excel("Planilha-de-Enquadramento-dos-Fundos-com-aplicacoes-dos-RPPS_082019_.xlsx", skip=1) 

Vamos colocar nomes mais amigáveis na base de dados.

names(EnquadSPrev) <- c("cnpj", "nm_fundo", "seguimento", "tipo_ativo", "cnpj_admin", "cnpj_gestor")

Agora podemos inspecionar a base de dados.

kable(head(EnquadSPrev))
cnpj nm_fundo seguimento tipo_ativo cnpj_admin cnpj_gestor
68305000135 FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO CAIXA EMPREENDER RENDA FIXA LONGO PRAZO Renda Fixa FI Renda Fixa - Geral - Art. 7º, IV, a 00.360.305/0001-04 00.360.305/0001-04
180995000110 SAFRA EXECUTIVE MAX RF FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO Renda Fixa FI Renda Fixa - Geral - Art. 7º, IV, a 06.947.853/0001-11 62.180.047/0001-31
322699000106 BRADESCO H FUNDO DE INVESTIMENTO RENDA FIXA REFERENCIADO DI CRÉDITO PRIVADO LONGO PRAZO EXECUTIVO Renda Fixa FI Renda Fixa “Crédito Privado” - Art. 7º, VII, b 60.746.948/0001-12 62.375.134/0001-44
743026000120 BANRISUL VIP FUNDO DE INVESTIMENTO RENDA FIXA DE LONGO PRAZO Renda Fixa FI Renda Fixa - Geral - Art. 7º, IV, a 92.702.067/0001-96 93.026.847/0001-26
756851000169 BB RENDA FIXA 500 FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO Renda Fixa FI Renda Fixa - Geral - Art. 7º, IV, a 30.822.936/0001-69 30.822.936/0001-69
787095000135 BANESTES FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO EM AÇÕES Renda Variável FI de Ações - Geral - Art. 8º, II, a 28.127.603/0001-78 28.156.057/0001-01

Feita a importação dos dados, será necessário realizar o pré-processamento com vistas a melhorar a qualidade da base para uso posterior.

Um primeiro ajuste é retirar da variável tipo_ativo a parte da string que identifica o dispositivo da Resolução CMN 3922/10 no qual o fundo está enquadrado. Por exemplo, na string FI de Ações - Índices c/ no mínimo 50 ações - Art. 8º, I, a, queremos apenas o valor Art. 8º, I, a. Podemos fazer isso da seguinte forma:

EnquadSPrev <- EnquadSPrev %>%
                 mutate(enquad_sprev = str_extract(tipo_ativo, "Art.*$"))

Um outro ajuste é corrigir o valor do CNPJ do fundo de investimento que, no processo de importação, perdeu os zeros que estavam à esquerda. Será necessário voltar com esses zeros para que os CNPJ tenham todos 14 dígitos.

EnquadSPrev$cnpj <- sprintf("%014.0f", EnquadSPrev$cnpj)

Vamos agora filtrar a base de dados do DAIR (invest) de forma a obter apenas os registros a partir de abril de 2018 (data a partir da qual as alterações introduzidas pela Resolução CMN n. 4.604/17 passaram a vigorar) bem como os registros relativos a fundos de investimentos. Isso pode ser feito da seguinte forma:

invest_fundos <- filter(invest,
                        competencia >= as.Date("2018-04-01"),
                        grepl("\\d{14}", ident_ativo))

Agora vamos criar uma nova coluna nesta base de dados contendo o enquadramento do fundo de investimento efetuado pelo RPPS ao preencher o DAIR. Vamos fazer da mesma forma que fizemos para o arquivo contendo a classificação realizada pela SPrev.

invest_fundos <- invest_fundos %>%
                 mutate(enquad_rpps = str_extract(tipo_ativo, "Art.*$"))

Ok. Agora podemos juntar esta base, contendo os dados provenientes do DAIR, com a base contendo o enquadramento dos fundos realizado pela SPrev, para que tenhamos na mesma base de dados tanto o enquadramento realizado pelo RPPS como o enquadramento informado pela SPrev .

invest_fundos <- invest_fundos %>%
                  left_join(EnquadSPrev[,c("cnpj", "nm_fundo", "enquad_sprev")],
                            by=c("ident_ativo" = "cnpj"))
# Aumentou a quantidade de registros. 

Agora já temos condições de comparar as variáveis enquad_rpps com a variável enquad_sprev para identificar eventuais divergências de enquadramento. Antes, porém, mais uma pequena modificação nos dados, especificamente nas duas variáveis citadas.

invest_fundos <- invest_fundos %>%
                  mutate(enquad_rpps = toupper(gsub('[[:punct:]]| |º', '', enquad_rpps)),
                         enquad_sprev= toupper(gsub('[[:punct:]]| |º', '', enquad_sprev)))

Vamos agora criar uma nova variável na base de dados invest_fundos contendo os valores 0 e 1 caso os enquadramentos sejam, respectivamente, iguais ou diferentes.

invest_fundos$diverg_enquad <- ifelse(invest_fundos$enquad_rpps == invest_fundos$enquad_sprev, 0, 1)

Vamos agora filtrar para obtermos apenas os registros para os quais as classificações foram diferentes.

divergencia_enquad <- filter(invest_fundos, diverg_enquad == 1)

Quantos registros nessa condição:

nrow(divergencia_enquad)
[1] 26019

Quantos entes apresentaram problemas com o enquadramento de fundos de investimentos?

length(unique(divergencia_enquad$ente))
[1] 1293

Vamos ver, por exemplo, o município de Japeri no Estado do Rio de Janeiro.

ENTE <- "Japeri"
UF <- "RJ"

diverg_rpps <- divergencia_enquad %>%
                  filter(uf == UF, ente == ENTE) %>%
                  select(ente, competencia, ident_ativo, nm_ativo, enquad_rpps, enquad_sprev) %>%
                  arrange(competencia)  
kable(diverg_rpps)
ente competencia ident_ativo nm_ativo enquad_rpps enquad_sprev
Japeri 2018-04-01 03737206000197 CAIXA FI BRASIL REF. DI LONGO PRAZO ART7IVB ART7IVA
Japeri 2018-04-01 12845801000137 TOWER BRIDGE FI RF IMAB 5 ART7IIIB ART7IVA
Japeri 2018-04-01 07187570000181 BRADESCO FICFI RF REFERENCIADO DI PODER PUBLICO ART7IIIA ART7IVA
Japeri 2018-04-01 13594673000169 TMJ IMA B FI RF ART7IIIB ART7IVA
Japeri 2018-04-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-04-01 17213849000146 FI SICILIA RF LP ART7IIIB ART7IVA
Japeri 2018-04-01 19391026000136 BRS IMA-B ATIVO FIC RF ART7IIIB ART7IVA
Japeri 2018-05-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-05-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-06-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-06-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-07-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-07-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-08-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-08-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-09-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-09-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-10-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
Japeri 2018-10-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-11-01 23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB
Japeri 2018-11-01 05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB

Caso a gente queira apenas a relação dos fundos com divergência:

diverg_rpps %>%
  distinct(ident_ativo, nm_ativo, enquad_rpps, enquad_sprev) %>%
  kable()
ident_ativo nm_ativo enquad_rpps enquad_sprev
03737206000197 CAIXA FI BRASIL REF. DI LONGO PRAZO ART7IVB ART7IVA
12845801000137 TOWER BRIDGE FI RF IMAB 5 ART7IIIB ART7IVA
07187570000181 BRADESCO FICFI RF REFERENCIADO DI PODER PUBLICO ART7IIIA ART7IVA
13594673000169 TMJ IMA B FI RF ART7IIIB ART7IVA
05164356000184 CAIXA FI BRASIL TITULOS PUBLICOS RF ART7IVA ART7IB
17213849000146 FI SICILIA RF LP ART7IIIB ART7IVA
19391026000136 BRS IMA-B ATIVO FIC RF ART7IIIB ART7IVA
23215097000155 CAIXA FIC BRASIL GESTÃO ESTRATÉGICA ART7IVA ART7IB

Uma consequência imediata de divergências nos enquadramentos dos fundos de investimento é a possibilidade de burla aos limites impostos pela Resolução CMN n. 3.922/10. Essa análise é o objeto da próxima seção.


Limites de Aplicações da Resolução CMN n. 3.922/10

Os RPPS possuem limitações à quantidade de recursos que pode investir em determinados tipos de ativos. Estes limites estão estabelecidos na Resolução CMN n. 3.922/10. Assim, uma verificação de grande importância é quanto ao atendimento desses limites pelos RPPS.

Esta verificação é, inclusive, recomendada pela Resolução Atricon n. 05/2018, conforme descrito a seguir:

" (…)

25 A fiscalização dos RPPS terá como escopo, prioritariamente e no que couber, pontos de controle selecionados as seguir, dentre as quatro principais áreas de atuação de auditoria previdenciária:

25.4 Aplicações financeiras:

f) se a carteira de investimentos está dentro dos limites normativos "

Para realizar esta verificação, devemos calcular o percentual aplicado em cada tipo de ativo e comparar esses valores com os limites estabelecidos na Resolução CNM n. 3.922/10.

A base de dados do DAIR possui um campo denominado limites_resol_cmn que indica esses limites. Possui, também outro campo denominado perc_recursos_rpps que informa o percentual dos recursos do RPPS investido em cada um dos ativos elencados no DAIR.

Para fazermos essa verificação devemos somar esses percentuais, em cada mês, para todos os ativos de mesma natureza, ou seja, de mesma classificação, e comparar o valor obtido com o percentual permitido pela Resolução CMN n. 3.922/10.

Nossa abordagem será a seguinte: somaremos os valores de cada tipo de ativo para cada Ente e para cada mês e verificaremos o quanto o valor aplicado em cada tipo de ativo representa do total dos ativos garantidores liquidos (Art. 6o da Res. CMN n. 3.922/10) no mês.

Os limites de aplicação permitidos serão então adicionados à base de dados a partir de um arquivo externo em excel contendo a relação dos ativos e seus limites.

Vamos fazer esse passo a passo a partir da base de dados bruta.

A primeira coisa a ser feita é filtrar a base para pegarmos os registros posteriores a abril de 2018 que, como já dissemos, já incorpora as alterações promovidas na Resolução CMN n. 3.922/10 pela Resolução CMN n. 4.604/17.

Vamos então filtrar a base de dados:

dairLimites <- invest %>% 
                filter(competencia >= ymd("2018-04-01"))

Agora precisamos ter uma classificação para cada tipo de ativo na base de dados. Em princípio, a coluna tipo_ativo deveria ser suficiente, mas não é. Vamos relembrar quais tipos de ativos estão na base filtrada:

dairLimites %>%
  distinct(tipo_ativo) %>%
  kable()
tipo_ativo
Disp
FI 100% títulos TN - Art. 7º, I, b
FI Renda Fixa - Geral - Art. 7º, IV, a
FI de Ações - Geral - Art. 8º, II, a
FI Multimercado - Aberto - Art. 8º, III
FI Renda Fixa Crédito Privado - Art. 7º, VII, b
FI de Ações - Índices c/ no mínimo 50 ações - Art. 8º, I, a
FI Imobiliários - Art. 8º, IV, b
FI Renda Fixa Referenciado - Art. 7º, III, a
Poupança - Art. 7º, VI, b
CDB - Certificado de Depósito Bancário - Art. 7º, VI, a
Títulos de Renda Fixa
Valores Mobiliários
ETF - Demais Indicadores de RF - Art. 7º, IV, b
Outros Bens, Direitos e Ativos
Títulos Públicos de emissão do TN - Art. 7º , I, a
ETF - Renda Fixa Referenciado - Art. 7º, III, b
FI em Participações - Art. 8º, IV, a
FI em Direitos Creditórios - Cota Sênior - Art. 7º, VII, a
Prédio Comercial
Operações compromissadas - Art. 7º , II
ETF - Índice de Ações (c/ no mínimo 50) - Art. 8º, I, b
Outros - Imóveis
Terreno
Casa
Loja
Prédio Residencial
Fundos de Investimento não previstos em Resolução CMN
FI 100% títulos TN
FI de Renda Fixa
FI em Ações
FI Multimercado - Aberto
Apartamento
Fundo Investimento - Sufixo Investimento no Exterior
ETF - Demais Índices de Ações - Art. 8º, II, b

A maior parte dos ativos constante da base de dados já possui uma classificação, mas temos ainda um rol de ativos não classificados, que elencamos a seguir:

Disp
Prédio Comercial
Outros - Imóveis
Terreno
Casa
Loja
Prédio Residencial
Apartamento
Outros Bens, Direitos e Ativos
Títulos de Renda Fixa
Valores Mobiliários
Fundos de Investimento não previstos em Resolução CMN
FI 100% títulos TN
FI de Renda Fixa
FI em Ações
FI Multimercado - Aberto
Fundo Investimento - Sufixo Investimento no Exterior

Olhando o rol de ativos não classificados, podemos dizer que basicamente temos disponibilidades (Disp), imóveis (Prédio Comercial, Outros - Imóveis, Terreno, Casa, Loja, Prédio Residencial, Apartamento), ativos vinculados ao RPPS (Outros Bens, Direitos e Ativos, Títulos de Renda Fixa, Valores Mobiliários e Fundos de Investimento não previstos em Resolução CMN) e um punhado de fundos de investimento que podem ser classificados(FI 100% títulos TN, FI de Renda Fixa, FI em Ações, FI Multimercado - Aberto e Fundo Investimento - Sufixo Investimento no Exterior).

Em razão disso, vamos criar uma nova coluna na base de dados contendo uma classificação para todos os ativos.

Para os ativos sem classificação, vamos adotar as seguintes classificações: Disp, Imoveis e Outros. Os fundos não classificados o serão da seguinte forma:

Fundo Classificação
FI 100% títulos TN Art. 7º, I, b
FI de Renda Fixa Art. 7º, IV, b
FI em Ações Art. 8º, II, a
FI Multimercado - Aberto Art. 8º, III
Fundo Investimento - Sufixo Investimento no Exterior Art. 9ºA, II

Vamos agora à criação dessa nova coluna. Mas vamos por etapas para a coisa ficar clara:

O primeiro passo é criar a nova coluna (classificacao) e colocar a classificação dos ativos que já estão classificados. Isso pode ser feito da seguinte forma:

dairLimites <- dairLimites %>%
                mutate(classificacao = str_extract(tipo_ativo, "Art.*$"))

Agora temos que ir preenchendo esta nova coluna com a classificação dos demais ativos não classificados. Vamos fazer isso a seguir, começando com as disponibilidades e os imóveis:

dairLimites <- dairLimites %>%
  mutate(classificacao =  ifelse(tipo_ativo == "Disp", "Disp",
                          ifelse(tipo_ativo %in% c("Prédio Comercial", "Outros - Imóveis",
                                                     "Terreno", "Casa", "Loja", "Prédio Residencial",
                                                     "Apartamento"), "Imoveis",
                          ifelse(tipo_ativo %in% c("Outros Bens, Direitos e Ativos",
                                                     "Títulos de Renda Fixa",
                                                     "Valores Mobiliários",
                                                     "Fundos de Investimento não previstos em Resolução CMN"), "Outros",
                                 classificacao)))
         )

Da mesma forma, vamos classificar os fundos que não estavam classificados.

dairLimites <- dairLimites %>%
  mutate(classificacao = ifelse(tipo_ativo == "FI 100% títulos TN", "Art. 7º, I, b",
                         ifelse(tipo_ativo == "FI de Renda Fixa", "Art. 7º, IV, b",
                         ifelse(tipo_ativo == "FI em Ações", "Art. 8º, II, a",
                         ifelse(tipo_ativo == "FI Multimercado - Aberto", "Art. 8º, III",
                         ifelse(tipo_ativo == "Fundo Investimento - Sufixo Investimento no Exterior", "Art. 9ºA, II", classificacao)))))
         )

Vamos agora “padronizar” a variável classificacao para garantir que não tenhamos dois ativos de mesma classificação classificados de forma diferente por conta de um espaço a mais ou a menos ou outro problema qualquer.

dairLimites <- dairLimites %>%
  mutate(classificacao = toupper(gsub('[[:punct:]]| |º', '', classificacao)))

Vamos agora inspecionar os valores da variável classificacao:

dairLimites %>%
  distinct(classificacao) %>%
  arrange(classificacao) %>%
  kable()
classificacao
ART7IA
ART7IB
ART7II
ART7IIIA
ART7IIIB
ART7IVA
ART7IVB
ART7VIA
ART7VIB
ART7VIIA
ART7VIIB
ART8IA
ART8IB
ART8IIA
ART8IIB
ART8III
ART8IVA
ART8IVB
ART9AII
DISP
IMOVEIS
OUTROS

Todas as observações estão classificadas. Podemos agora continuar. O próximo passo é somar os valores de todos os ativos de uma mesma classificação para cada ente e para cada mês e ver quanto o ativo representa do ativo total do RPPS. Com isso saberemos, por exemplo, quanto de recursos um Ente tem aplicado num determinado tipo de ativo e qual o percentual dos recursos que esse ativo representa na carteira do RPPS (ativo garantidor bruto).

Vamos criar uma nova base de dados com essa agregação.

dairLimitesAgreg <- dairLimites %>%
  group_by(cnpj, ente, uf, competencia, classificacao) %>%
  summarise(VlrTotalAtivo = sum(vlr_total_atual, na.rm = TRUE)) %>%
  ungroup() %>%
  group_by(cnpj, ente, uf, competencia) %>%
  mutate(pctVlrTotalAtivo = round(VlrTotalAtivo / sum(VlrTotalAtivo, na.rm=TRUE), 2))
kable(head(dairLimitesAgreg, 16))
cnpj ente uf competencia classificacao VlrTotalAtivo pctVlrTotalAtivo
3848000174 Figueirópolis TO 2018-04-01 ART7IB 587035.91 0.99
3848000174 Figueirópolis TO 2018-04-01 DISP 6113.03 0.01
3848000174 Figueirópolis TO 2018-05-01 ART7IB 671861.98 1.00
3848000174 Figueirópolis TO 2018-05-01 DISP 7.78 0.00
3848000174 Figueirópolis TO 2018-06-01 ART7IB 671099.60 0.88
3848000174 Figueirópolis TO 2018-06-01 DISP 89074.49 0.12
3848000174 Figueirópolis TO 2018-07-01 ART7IB 775635.63 0.95
3848000174 Figueirópolis TO 2018-07-01 DISP 41404.80 0.05
3848000174 Figueirópolis TO 2018-08-01 ART7IB 816635.67 0.99
3848000174 Figueirópolis TO 2018-08-01 DISP 4477.92 0.01
3848000174 Figueirópolis TO 2018-09-01 ART7IB 823764.13 1.00
3848000174 Figueirópolis TO 2018-09-01 DISP 950.92 0.00
3848000174 Figueirópolis TO 2018-10-01 ART7IB 828262.04 0.98
3848000174 Figueirópolis TO 2018-10-01 DISP 15425.97 0.02
3848000174 Figueirópolis TO 2018-11-01 ART7IB 832573.14 0.96
3848000174 Figueirópolis TO 2018-11-01 DISP 34668.31 0.04

Com essa base de dados é possível verificar a composição da carteira de ativos de um RPPS mês a mês. A tabela acima mostra que o município de Figueirópolis possui disponibilidades e aplicações em fundos de investimentos classificados no “Art. 7o, I, b” da Resolução CMN n. 3.922/10 (FI 100% títulos TN).

Vamos olhar graficamente como estão evoluindo os ativos do município de Nova Iguaçu no RJ:

ENTE <- "Nova Iguaçu"
UF <- "RJ"

dairLimitesAgreg %>%
  filter(uf == UF, ente == ENTE) %>%
  ggplot(aes(x=competencia, y=pctVlrTotalAtivo, group=classificacao, color=classificacao)) +
  geom_line(size=1.5) +
  geom_point(size=4) +
  theme(axis.text.x = element_text(angle = 90, vjust=0.5)) +
  scale_x_date(date_breaks="1 month", labels = date_format("%Y-%m"))

Uma verificação interessante é se os percentuais somam 100% em todos os meses.

ENTE <- "Nova Iguaçu"
UF <- "RJ"

dairLimitesAgreg %>%
  mutate(pctVlrTotalAtivo = pctVlrTotalAtivo * 100) %>%
  ungroup() %>%
  filter(uf == UF, ente == ENTE) %>%
  select(competencia, classificacao, pctVlrTotalAtivo) %>%
  spread(key=competencia, value=pctVlrTotalAtivo) %>%
  rbind(., append("TOTAL", round(apply(.[,-1], 2, sum, na.rm=TRUE), 2))) %>%
  kable(col.names = c("Classificação", format(as.Date(names(.)[-1]), "%b/%y")))
Classificação abr/18 mai/18 jun/18 jul/18 ago/18 set/18 out/18 nov/18 dez/18 jan/19 fev/19
ART7IB 19 17 18 18 15 16 18 18 1 0 0
ART7IIIA 0 0 NA NA NA NA NA NA NA NA NA
ART7IVA 6 9 9 10 12 12 10 9 0 0 0
ART8IIA NA NA 0 0 0 0 0 0 0 0 0
DISP 0 1 0 0 1 0 0 2 6 0 0
IMOVEIS 75 73 73 72 72 71 71 71 92 100 100
TOTAL 100 100 100 100 100 99 99 100 99 100 100

Os percentuais contidos no campo pctVlrTotalAtivo foram calculados considerando todos os ativos relacionados no DAIR (ativo garantidor bruto).

Não obstante, para efeito do cálculo dos limites de aplicação de cada tipo de ativo, a Resolução CMN n. 3.922/10 dispõe em seu Art. 6o que o percentual deve ser calculado excluindo-se os ativos vinculados por lei ao regime próprio de previdencia social, demais bens, direitos e ativos com finalidade previdenciária do regime prório de previdência social, as disponibilidades financeiras mantidas em conta corrente e as cotas de fundos de investimento imobiliário que forem admitidas à negociação no mercado secundário, conforme regulamentação da CVM, e que sejam integralizadas por imóveis legalmente vinculados ao RPPS.

Assim, para realizarmos as comparações devemos calcular os percentuais excluindo-se esses ativos, ou seja, devemos considerar apenas os ativos garantidores líquidos. Além disso um outro ajuste será necessário na base de dados.

A Resolução CMN n. 3.922/10 não estipula limites individuais para os ativos classificados como “Art 7o, III, a” ou “Art 7o, III, b”. Apenas diz que a soma dos valores aplicados nos mesmos não pode ser superior a 60% dos recursos do RPPS (ativo garantidor líquido). O mesmo acontece com os ativos classificados como “Art 7o, IV, a” ou “Art 7o, IV, b” cuja soma não deve exceder 40% dos recursos do RPPS.

Uma outra restrição é que a soma dos ativos classificados no art. 8o não pode ser superior a 30%. Mas cada ativo do art. 8o possui seus limites individuais que serão utilizados na nossa verificação.

Vamos partir da base de dados dairLimites. Vamos substituir os ativos “Art 7o, III, a”** e **“Art 7o, III, b” por um ativo que chamaremos “Art 7o, III, #” e os ativos “Art 7o, IV, a” e “Art 7o, IV, b” por um ativo “Art 7o, IV, #” e recalcularemos os percentuais considerando o ativo líquido.

dairLimitesAgregLiq <- dairLimites %>%
  mutate(classificacao = ifelse(classificacao %in% c("ART7IIIA", "ART7IIIB"), "ART7III#",
                         ifelse(classificacao %in% c("ART7IVA", "ART7IVB"),   "ART7IV#", classificacao))) %>%
  group_by(cnpj, ente, uf, competencia, classificacao) %>%
  mutate(VlrTotalAtivoLiq = ifelse(classificacao %in% c("DISP", "IMOVEIS", "OUTROS"), 0, vlr_total_atual)) %>%
  summarise(VlrTotalAtivoLiq = sum(VlrTotalAtivoLiq, na.rm = TRUE)) %>%
  ungroup() %>%
  group_by(cnpj, ente, uf, competencia) %>%
  mutate(pctVlrTotalAtivoLiq = round(VlrTotalAtivoLiq / sum(VlrTotalAtivoLiq, na.rm=TRUE) * 100, 2)) %>%
  filter(!classificacao %in% c("DISP", "IMOVEIS", "OUTROS"))

Com isso temos três bases de dados derivadas da base original do DAIR: dairLimites, dairLimitesAgreg e dairLimitesAgregLiq. Vamos relembrar no que elas diferem:

  • dairLimites - é idêntica à base original invest apenas possuindo uma coluna classificacao que contem uma classificação para todos os ativos da base.
  • dairLimitesAgreg - Apresenta o percentual que cada tipo de ativo representa do total de ativos que o RPPS possui.
  • dairLimitesAgregLiq - essa base apresenta o percentual que cada tipo de ativo representa do total líquido dos ativos do RPPS, além de apresentar uma reclassificação de quatro tipos de ativos. Os ativos “Art 7o, III, a”** e **“Art 7o, III, b” tornaram-se “Art 7o, III, #” e os ativos “Art 7o, IV, a” e “Art 7o, IV, b” tornaram-se “Art 7o, IV, #”. Será essa base que utilizaremos para realizar a verificação do cumprimento dos limites.

Para que possamos realizar a análise será necessáro juntar a esta última base os limites de aplicação permitidos pela Resolução CMN n. 3.922/10. Vamos adicionar à base de dados os limites de aplicações permitidos pela Resolução CMN n. 3.922/10. Estes valores estão armazenados na planilha limites_cmn.xlsx. Vamos importar os dados:

setwd("..\\dados")
limites_cmn <- read_excel("limites_cmn.xlsx",  sheet="limites_Res4604")
limites_cmn$classificacao <- toupper(gsub('[[:punct:]]| |o', '', limites_cmn$ativo))

Vamos olhar o conteúdo do arquivo:

kable(limites_cmn)
categoria tipo tipo_ativo desc_tipo_ativo ativo limite limite_pl classificacao
Renda Fixa Títulos Públios Titulos Tesouro Nacional Títulos Públicos de Emissão do TN (SELIC) Art 7o, I, a 100 NA ART7IA
Renda Fixa Títulos Públios Operações Compromissadas Operações Compromissadas Art 7o, II 5 NA ART7II
Renda Fixa Fundos de Investimento FI 100% Títulos Públicos FI 100% Títulos TN Art 7o, I, b 100 15 ART7IB
Renda Fixa Fundos de Investimento ETF 100% Títulos Públicos ETF 100% Títulos Públicos Art 7o, I, c 100 15 ART7IC
Renda Fixa Fundos de Investimento FI Renda Fixa - Referenciados RF FI Renda Fixa Referenciado Art 7o, III, a 60 15 ART7IIIA
Renda Fixa Fundos de Investimento FI de Índices Referenciados em RF Subindices Anbima ETF - Renda Fixa Referenciado Art 7o, III, b 60 15 ART7IIIB
Renda Fixa Fundos de Investimento FI de Renda Fixa FI de Renda Fixa - Geral Art 7o, IV, a 40 15 ART7IVA
Renda Fixa Fundos de Investimento Fi de Índices Referenciados em Renda Fixa ETF - Demais Indicadores de RF Art 7o, IV, b 40 15 ART7IVB
Renda Fixa Outros Certificado de Depósito Bancário - CDB CDB - Certificado de Depósito Bancário Art 7o, VI, a 15 NA ART7VIA
Renda Fixa Outros Poupança Poupança Art 7o, VI, b 15 NA ART7VIB
Renda Fixa Outros Letras Imobiliárias Garantidas Letras Imobiliárias Garantidas Art 7o, V, b 20 NA ART7VB
Renda Fixa Fundos de Investimento FI em Direitos Creditórios - Aberto ou Fechado- Cota Sênior FI em Direitos Creditórios - Cota Senior Art 7o, VII, a 5 5 ART7VIIA
Renda Fixa Fundos de Investimento FI Renda Fixa Crédito Privado FI Renda Fixa Crédito Privado Art 7o, VII, b 5 5 ART7VIIB
Renda Fixa Fundos de Investimento Fundos de Debêntures de Infraestrutura FI Debêntures de Infraestrutura Art 7o, VII, c 5 5 ART7VIIC
Renda Variavel Fundos de Investimento FI Ações Referenciados FI de Ações - Índices c/ no mínimo 50 ações Art 8o, I, a 30 15 ART8IA
Renda Variavel Fundos de Investimento FI de Índices Referenciados em Ações ETF - Índices de Ações (c/ no mínimo 50) Art 8o, I, b 30 15 ART8IB
Renda Variavel Fundos de Investimento FI em Ações FI de Ações - Geral Art 8o, II, a 20 15 ART8IIA
Renda Variavel Fundos de Investimento ETF de Ações - Índices em geral ETF - Demais Índices de Ações Art 8o, II, b 20 15 ART8IIB
Renda Variavel Fundos de Investimento FI Multimercado - Aberto FI Multimercado - Aberto Art 8o, III 10 5 ART8III
Renda Variavel Fundos de Investimento FI em Participações - Fechado FI em Participações Art 8o, IV, a 5 5 ART8IVA
Renda Variavel Fundos de Investimento FI Imobiliários FI Imobiliários Art 8o, IV, b 5 5 ART8IVB
Renda Variavel Fundos de Investimento FI em Ações FI Ações - Mercado de Acesso Art 8o, IV, c 5 5 ART8IVC
Exterior Fundos NA FIC e FIC FI - Renda Fixa - Dívida Externa Art 9o A, I 10 NA ART9AI
Exterior Fundos NA FIC - Aberto - Investimento no Exterior Art 9o A, II 10 NA ART9AII
Exterior Fundos FI em Ações Fundos de Ações - BDR Nível I Art 9o A, III 10 NA ART9AIII

Na tabela de limites existe uma pequena incorreção que iremos ajustar logo em seguida.

Os limites para os ativos “Art 7o, III, a” e “Art 7o, III, b” foram especificados em 60% e os limites dos ativos “Art 7o, IV, a” e “Art 7o, IV, b” em 40%. Ocorre que na verdade é a soma dos dois ativos que deve perfazer, respectivamente, 60% e 40% dos recursos do RPPS.

Importados os dados vamos juntá-los à base de dados:

dairLimitesAgregLiq <- dairLimitesAgregLiq %>%
                       left_join(limites_cmn[, c("classificacao", "limite", "limite_pl")],
                                 by="classificacao")

Como os ativos que “criamos” (ART7III# e ART7IV#) não constam da tabela de limites, precisamos inserir “manualmente”" os valores dos limites relativos às restrições impostas pela Resolução CMN n. 3.922/10, o que faremos a seguir:

dairLimitesAgregLiq <- dairLimitesAgregLiq %>%
  mutate(limite  = ifelse(classificacao == "ART7III#", 60,
                   ifelse(classificacao == "ART7IV#",  40, limite)))

A análise quanto aos limites deve levar em consideração o Nivel no qual o RPPS está classificado. Dependendo do Nível os limites de investimento são diferenciados. Os RPPS podem não estar classificados em nível algum, ou podem estar classificados como Nivel I, Nivel II, Nivel III ou Nivel IV.

Considerando que bem poucos RPPS estão classificados em algum desses quatro níveis não vamos, por hora, considerá-los em nossa análise. Posteriormente iremos considerar esta situação na análise.

Podemos agora fazer um gráfico para visualizarmos os percentuais aplicados pelos RPPS em cada tipo de ativo. Vamos dar uma olhada no município de São Gonçalo no RJ:

ENTE <- "São Gonçalo"
UF <- "RJ"

dairLimitesAgregLiq %>%
  filter(uf == UF, ente == ENTE) %>%
  ggplot(aes(x=competencia, y=pctVlrTotalAtivoLiq)) +
    geom_point() +
    facet_wrap( ~ classificacao) +
    geom_hline(aes(yintercept = limite), color="blue") +
    labs(title = "Evolucao do Percentual Aplicado por Tipo de Ativo",
         y = '% Aplicado', x=" ") +
    theme_bw() +
    theme(axis.text.x = element_text(angle = 90, vjust=0.5)) +
    scale_x_date(date_breaks="1 month", labels = date_format("%Y-%m"))

As linhas azuis indicam o limite permitido para cada tipo de ativo. Os pontos indicam os os percentuais que o RPPS possui aplicado em cada tipo de ativo.

É importante destacar que nossa análise levou em consideração a classificação dos ativos informada pelo RPPS ao preencher o DAIR. Não obstante, conforme visto, existem divergências entre a classificação de alguns fundos de investimentos realizada pelo RPPS e a classificação realizada pela SPrev. Assim, essa mesma análise poderia/deveria ser feita considerando-se a classificação dos fundos de investimentos realizada pela SPrev. Oportunamente incluiremos esta análise nesse documento.


Limite do Patrimônio Líquido dos Fundos de Investimentos

Além de restrições em relação percentual dos recursos do RPPS que podem ser aplicados em cada tipo de ativo, a Resolução CMN n. 3.922/10 impõe restrições de aplicação de recursos com base no valor do patrimônio líquido do Fundo de Investimento (Art. 14).

Neste tópico nosso objetivo verificar se esta restrição esta sendo cumprida pelo RPPS. Para esta verificação vamos partir da base de dados dairLimites.

Primeiro vamos filtrar a base para obter os registros para os quais existam informações na variável pl_fundo ou perc_pl_fundo.

dair_plfundo <- dairLimites %>%
                      filter(!is.na(pl_fundo), !is.na(perc_pl_fundo))

A variável perc_pl_fundo indica o percentual que o valor que o RPPS possui investido no fundo representa do PL do mesmo. Vamos considerar os valores do PL do fundo constante da base de dados, e portanto informadas pelo RPPS como corretad, não obstante considerarmos que para uma verificação mais precisa esses valores deveriam ser obtidos jundo à CVM.

Vamos incluir na base de dados uma nova coluna com o cálculo do percentual que o valor aplicado no fundo (vlr_total_atual) representa do PL do fundo (perc_pl_fundo). Naturalmente que essa nova variável e a variável perc_pl_fundo devem ser iguais.

dair_plfundo <- dair_plfundo %>%
                  mutate(pct_pl_fundo_calc = round(vlr_total_atual / pl_fundo * 100, 2))

Vamos verificar se existem divergêncas entre as duas variáveis:

dair_plfundo %>%
  filter((perc_pl_fundo - pct_pl_fundo_calc) != 0) %>%
  kable()
cnpj uf ente competencia segmento tipo_ativo limite_resol_cmn ident_ativo nm_ativo qtd_quotas vlr_atual_ativo vlr_total_atual perc_recursos_rpps pl_fundo perc_pl_fundo classificacao pct_pl_fundo_calc
3741683000126 MS Mundo Novo 2018-04-01 Renda Vari?vel e Investimentos Estruturados ETF - Índice de Ações (c/ no mínimo 50) - Art. 8º, I, b 30 07279657000189 AZ QUEST AÇOES FIC AÇOES NA 95193.1 10.812224 1029249 3.06 398949720 ART8IB 353.34
3741683000126 MS Mundo Novo 2018-05-01 Renda Vari?vel e Investimentos Estruturados ETF - Índice de Ações (c/ no mínimo 50) - Art. 8º, I, b 30 07279657000189 AZ QUEST AÇOES FIC AÇOES NA 95193.1 9.880622 940567 2.86 396266741 ART8IB 345.48

À exceção dos registros acima, não há divergências entre as variáveis pct_pl_fundo_calc e perc_pl_fundo.

Agora vamos juntar a essa base de dados os limites de PL permitidos para cada tipo de fundo. Estes valores, como já mostrado anteriormente, estão contidos na base de dados limites_cmn.

dair_plfundo <- dair_plfundo %>%
                        left_join(limites_cmn[,c("classificacao", "limite_pl")],
                                  by="classificacao")

Agora vamos criar uma nova variável que sinalizará se houve violação ao limite ou não e já faremos também o filtro para reter os registros em que houve violação dos limites.

dair_plfundo <- dair_plfundo %>%
                  mutate(estourou_limite_pl = ifelse((limite_pl - pct_pl_fundo_calc) < 0, 1, 0)) %>%
                  filter(estourou_limite_pl == 1) %>%
                  select(uf, ente, competencia, ident_ativo, nm_ativo, perc_pl_fundo, classificacao, limite_pl)

Vamos verificar quantos Entes estão na condição de terem violado essa regra.

dair_plfundo %>%
  distinct(uf, ente) %>%
  count()
# A tibble: 1 x 1
      n
  <int>
1   216

Vamos olhar a situação do município de Pinhais no estado do Paraná.

ENTE <- "Pinhais"
UF <- "PR"

dair_plfundo %>% 
  filter(uf == UF, ente == ENTE) %>%
  arrange(competencia, ident_ativo, perc_pl_fundo) %>%
  kable()
uf ente competencia ident_ativo nm_ativo perc_pl_fundo classificacao limite_pl
PR Pinhais 2018-04-01 05500127000193 Infinity Institucional FIM 7.10 ART8III 5
PR Pinhais 2018-04-01 13608335000139 MULTINVEST FIA 18.52 ART8IIA 15
PR Pinhais 2018-04-01 15188380000107 INFINITY IMAB 5+ TYGER FI RF 20.20 ART7IIIA 15
PR Pinhais 2018-04-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.91 ART8IVA 5
PR Pinhais 2018-04-01 17013985000192 GBX Prime I FIDC 8.29 ART7VIIA 5
PR Pinhais 2018-04-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-04-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 15.77 ART7VIIA 5
PR Pinhais 2018-04-01 23948956000115 Multinvest Grau de Investimento Fundo de Investimento em Cotas de Fundos de Investimento Renda Fixa 17.95 ART7IIIA 15
PR Pinhais 2018-05-01 05500127000193 Infinity Institucional FIM 6.12 ART8III 5
PR Pinhais 2018-05-01 13608335000139 MULTINVEST FIA 17.61 ART8IIA 15
PR Pinhais 2018-05-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.76 ART8IVA 5
PR Pinhais 2018-05-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-05-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 9.13 ART7VIIA 5
PR Pinhais 2018-05-01 23948956000115 Multinvest Grau de Investimento FIC FI de RF 19.56 ART7IVA 15
PR Pinhais 2018-06-01 09412687000147 Capitania multi crédito privado FIC FIM 5.79 ART8III 5
PR Pinhais 2018-06-01 13608335000139 MULTINVEST FIA 15.35 ART8IIA 15
PR Pinhais 2018-06-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.99 ART8IVA 5
PR Pinhais 2018-06-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-06-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 8.81 ART7VIIA 5
PR Pinhais 2018-06-01 23948956000115 Multinvest Grau de Investimento FIC FI de RF 15.18 ART7IVA 15
PR Pinhais 2018-07-01 09412687000147 Capitania multi crédito privado FIC FIM 5.68 ART8III 5
PR Pinhais 2018-07-01 13608335000139 MULTINVEST FIA 15.26 ART8IIA 15
PR Pinhais 2018-07-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.61 ART8IVA 5
PR Pinhais 2018-07-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-07-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 8.97 ART7VIIA 5
PR Pinhais 2018-08-01 09412687000147 Capitania multi crédito privado FIC FIM 5.68 ART8III 5
PR Pinhais 2018-08-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.51 ART8IVA 5
PR Pinhais 2018-08-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-08-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 11.99 ART7VIIA 5
PR Pinhais 2018-09-01 09412687000147 Capitania multi crédito privado FIC FIM 5.68 ART8III 5
PR Pinhais 2018-09-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.99 ART8IVA 5
PR Pinhais 2018-09-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-09-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 12.36 ART7VIIA 5
PR Pinhais 2018-10-01 09412687000147 Capitania multi crédito privado FIC FIM 5.62 ART8III 5
PR Pinhais 2018-10-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.75 ART8IVA 5
PR Pinhais 2018-10-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.99 ART7IIIA 15
PR Pinhais 2018-10-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 12.91 ART7VIIA 5
PR Pinhais 2018-10-01 23948956000115 Multinvest Grau de Investimento FIC FI de RF 15.02 ART7IVA 15
PR Pinhais 2018-11-01 09412687000147 Capitania multi crédito privado FIC FIM 5.62 ART8III 5
PR Pinhais 2018-11-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.62 ART8IVA 5
PR Pinhais 2018-11-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2018-11-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 13.25 ART7VIIA 5
PR Pinhais 2018-11-01 23948956000115 Multinvest Grau de Investimento FIC FI de RF 15.80 ART7IVA 15
PR Pinhais 2018-12-01 09412687000147 Capitania multi crédito privado FIC FIM 5.62 ART8III 5
PR Pinhais 2018-12-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.99 ART8IVA 5
PR Pinhais 2018-12-01 17013985000192 GBX Prime I FIDC 5.22 ART7VIIA 5
PR Pinhais 2018-12-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.94 ART7IIIA 15
PR Pinhais 2018-12-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 11.46 ART7VIIA 5
PR Pinhais 2018-12-01 23948956000115 Multinvest Grau de Investimento FIC FI de RF 18.63 ART7IVA 15
PR Pinhais 2019-01-01 09412687000147 Capitania multi crédito privado FIC FIM 5.80 ART8III 5
PR Pinhais 2019-01-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.82 ART8IVA 5
PR Pinhais 2019-01-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2019-01-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 15.77 ART7VIIA 5
PR Pinhais 2019-01-01 23948956000115 Multinvest Grau de Investimento FIC FI de RF 23.63 ART7IVA 15
PR Pinhais 2019-02-01 09412687000147 Capitania multi crédito privado FIC FIM 5.79 ART8III 5
PR Pinhais 2019-02-01 16720629000146 BRB QAM Fundo de Investimento em Participações Imobiliário Paraná I 24.67 ART8IVA 5
PR Pinhais 2019-02-01 20468531000110 GBX Institucional Fundo de Investimento RF IMAB-5 23.73 ART7IIIA 15
PR Pinhais 2019-02-01 23431871000165 TRX FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS CORPORATIVO I 14.20 ART7VIIA 5
summary(dair_plfundo$perc_pl_fundo)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
        5         8        15    194620        21 398949720 

A variável apresenta valores claramente fora do que seria razoável. Vamos identificar os RPPS para os quais o valor da variável perc_pl_fundo é maior do que 100%, o que é claramente um absurdo.

filter(dair_plfundo, perc_pl_fundo > 100) %>%
  kable()
uf ente competencia ident_ativo nm_ativo perc_pl_fundo classificacao limite_pl
MA Barreirinhas 2018-06-01 13077415000105 BB PREVID RF FLUXO 183.15 ART7IVA 15
MA Chapadinha 2018-10-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 2992.48 ART7IB 15
MA Chapadinha 2018-11-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 5658.87 ART7IB 15
MA Chapadinha 2018-12-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 6493.32 ART7IB 15
MA Chapadinha 2018-04-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 525.31 ART7IB 15
MA Chapadinha 2018-05-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 422.22 ART7IB 15
MA Chapadinha 2018-06-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 2363.62 ART7IB 15
MA Chapadinha 2018-07-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 705.07 ART7IB 15
MA Chapadinha 2018-08-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 246.86 ART7IB 15
MA Chapadinha 2018-09-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVESTIMENTO EM COTAS DE FUNDO DE INVESTIMENTO. 146.45 ART7IB 15
MA Monção 2018-10-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 770.39 ART7IB 15
MA Monção 2018-11-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 1521.28 ART7IB 15
MA Monção 2018-12-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 1621.28 ART7IB 15
MA Monção 2018-04-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 29691.00 ART7IB 15
MA Monção 2018-05-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 295686.94 ART7IB 15
MA Monção 2018-06-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 472.10 ART7IB 15
MA Monção 2018-07-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 682.77 ART7IB 15
MA Monção 2018-08-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 559.87 ART7IB 15
MA Monção 2018-09-01 04288966000127 BB RENDA FIXA CP SUPREMO SETOR PÚBLICO FUNDO DE INVEST. EM COTAS DE FUNDOS DE INVESTIMENTO 809.42 ART7IB 15
MA Timbiras 2018-10-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 16134.80 ART7IVA 15
MA Timbiras 2018-11-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 16234.79 ART7IVA 15
MA Timbiras 2018-12-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 16234.79 ART7IVA 15
MA Timbiras 2018-04-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 666.42 ART7IVA 15
MA Timbiras 2018-05-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 912.38 ART7IVA 15
MA Timbiras 2018-06-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 1192.46 ART7IVA 15
MA Timbiras 2018-07-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 15834.86 ART7IVA 15
MA Timbiras 2018-08-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 15919.16 ART7IVA 15
MA Timbiras 2018-09-01 13077415000105 BB PREVIDENCIÁRIO RENDA FIXA FLUXO FUNDO DE INVESTIMENTO EM COTAS DE FUNDOS DE INVESTIMENTO 16034.64 ART7IVA 15
MS Mundo Novo 2018-04-01 07279657000189 AZ QUEST AÇOES FIC AÇOES 398949719.53 ART8IB 15
MS Mundo Novo 2018-05-01 07279657000189 AZ QUEST AÇOES FIC AÇOES 396266741.02 ART8IB 15
RS Mampituba 2018-05-01 21007180000103 BANRISUL FOCO IDKA IPCA 2A 126.72 ART7IB 15
SP João Ramalho 2018-04-01 13077415000105 BB FLUXO FIC RENDA FIXA PREVIDENCIÁRIO 1037071.89 ART7IVA 15
RS Nova Santa Rita 2019-02-01 15570431000160 Banrisul FII Novas Fronteiras 856.19 ART8IVB 5


Artigo 15 da Resolução CMN n. 3.922/10

Outra alteração significativa promovida pela Resolução CMN nº 4.695/18 foi permitir novas aplicações de recursos dos RPPS apenas em fundos de investimento em que o administrador ou gestor seja instituição autorizada a funcionar pelo BACEN, obrigada a instituir comitê de auditoria e comitê de riscos, nos termos da regulamentação do CMN (art. 15, § 2º, I, § 8º da Resolução CMN nº 3.922/10).

Os dados relativos às instituições financeiras que atendem à este dispositivo da Resolução foram extraídos do seguinte documento: http://sa.previdencia.gov.br/site/2018/12/Instituicoes-financeiras-que-atendem-o-previsto-no-art.-15.pdf disponível para download no site da SPrev.

Outro documento expedido pela SPrev contendo esclarecimentos sobre o artigo 15 da Resolução CMN n. 3.922/10 é http://sa.previdencia.gov.br/site/2018/12/Esclarecimento-a-respeito-das-instituicoes-elegiveis_.pdf.

Um ponto que nos parece importante é que a exigência em questão foi introduzida com a edição da Resolução CMN n. 4.695/18, aprovada em reunião de 27.11.18. Assim, nos parece conveniente que a análise se dê com os dados do DAIR relativos aos meses de Dezembro de 2018 em diante.

Vamos filtrar a base de dados e extrair os registros relativos a fundos de investimentos e descartar colunas não necessárias a essa análise:

art_15 <- invest %>% 
              filter(competencia > ymd("2018-11-01"), grepl("\\d{14}", ident_ativo)) %>%
              select(uf, ente, competencia, ident_ativo, nm_ativo)

Como já sabemos, a base de dados do DAIR não traz informações sobre quem são os administradores e gestores do fundo de investimento. Não obstante, a base de dados de enquadramento dos fundos disponibilizada pela SPrev e já utilizada anteriormente (EnquadSPrev) contém essa informação. Assim, parece razoável juntar as duas bases de dados (art_15 e EnquadSPrev) de forma que a base de dados do DAIR passe a conter informação relativa ao administrador e gestor dos fundos:

art_15 <- art_15 %>%
             left_join(EnquadSPrev[,c("cnpj", "nm_fundo", "cnpj_admin", "cnpj_gestor")],
                       by=c("ident_ativo" = "cnpj"))

# são acrescentadas observações... 

O passo seguinte é realizar o cruzamento da base de dados art_15 com a lista dos administradores e gestores que atendem ao disposto no artigo 15 da Resolução CMN n. 3.922/10.

Os dados dos administradores e gestores “permitidos” constam do arquivo AdministradorGestorFundos.xlsx gerado a partir do documento disponibilizado pela SPrev. Vamos importar esses dados:

setwd("..\\dados")
administrador_gestor <- read_excel("AdministradorGestorFundos.xlsx")

Vamos agora cruzar os dados deste arquivo (administrador_gestor) com os dados relativos aos fundos de investimentos constantes da base do DAIR (art_15). Antes, contudo, algumas modificações nas bases de dados serão necessárias.

Na base administrador_gestor vamos retirar a pontuação constante na variável CNPJ que identifica a instituição financeira.

administrador_gestor <- administrador_gestor %>%
                          mutate(CNPJ = gsub("[[:punct:]]", "", CNPJ))

Na base art_15 precisamos extrair a raiz do CNPJ e a pontuação nas variáveis cnpj_admin e cnpj_gestor.

art_15 <- art_15 %>%
            mutate(cnpj_admin  = gsub("(.*)/\\d{4}-\\d{2}", "\\1", cnpj_admin),
                   cnpj_admin  = gsub("[[:punct:]]", "", cnpj_admin),
                   cnpj_gestor = gsub("(.*)/\\d{4}-\\d{2}", "\\1", cnpj_gestor),
                   cnpj_gestor  = gsub("[[:punct:]]", "", cnpj_gestor))

Agora vamos identificar quais fundos possuem administrador ou gestor dentre os que são permitidos.

art_15 <- art_15 %>%
              mutate(adm_gest_permitido = ifelse(cnpj_admin  %in% administrador_gestor$CNPJ |
                                                 cnpj_gestor %in% administrador_gestor$CNPJ, 1, 0))

Vamos agora verificar se algum RPPS possui investimentos em fundos que não atendem ao artigo 15 da Resolução CMN n. 3922/10:

art_15 <- art_15 %>%
              filter(adm_gest_permitido == 0, !is.na(nm_fundo)) 

Vamos inspecionar a base de dados:

kable(head(art_15))
uf ente competencia ident_ativo nm_ativo nm_fundo cnpj_admin cnpj_gestor adm_gest_permitido
AM Governo do Estado do Amazonas 2018-12-01 17253869000140 SAFRA CARTEIRA PREMIUM FI MULTIMERCADO SAFRA CARTEIRA PREMIUM FUNDO DE INVESTIMENTO MULTIMERCADO 06947853 62180047 0
AM Manaus 2018-12-01 11989256000190 BVA MASTER II FIDC MULTISETORIAL SENIOR FIDC MULTISETORIAL MASTER II 27652684 22119959 0
AM Manaus 2018-12-01 09315625000117 FI SECURITY REFERENCIADO DI LP FUNDO DE INVESTIMENTO SECURITY RENDA FIXA REFERENCIADO DI LONGO PRAZO CRÉDITO PRIVADO 02201501 02295841 0
AM Manaus 2018-12-01 10355516000102 TOP FI RENDA FIXA TOP FUNDO DE INVESTIMENTO RENDA FIXA 02201501 22119959 0
AM Manaus 2018-12-01 11902276000181 RECUPERAÇÃO BRASIL RF LP FUNDO DE INVESTIMENTO RECUPERAÇÃO BRASIL RENDA FIXA LONGO PRAZO 15489568 02888152 0
AM Manaus 2018-12-01 15350909000147 VITORIA REGIA FIRF LP VITÓRIA RÉGIA FUNDO DE INVESTIMENTO DE RENDA FIXA LONGO PRAZO 02201501 22119959 0

Vamos obter uma lista dos fundos de investimento que estão nessa situação, qual seja, possuirem gestor e administrador que não estão entre os permitidos:

fundos_art_15 <- art_15 %>%
                    distinct(ident_ativo, nm_ativo)

Quantos são:

nrow(fundos_art_15)
[1] 1007

Quais RPPS tem aplicações neste tipo de fundo:

entes_art_15 <- art_15 %>%
                    distinct(uf, ente)

Quantos RPPS por UF?

entes_art_15 %>% 
  group_by(uf) %>% 
  count() %>% 
  arrange(desc(n)) %>%
  kable()
uf n
SP 115
RS 66
MG 43
SC 41
RJ 39
PR 33
GO 26
CE 13
MS 13
MT 11
RO 11
PE 9
PA 8
ES 3
PB 3
AM 2
RN 2
TO 2
AP 1
BA 1
DF 1
MA 1
PI 1
RR 1
SE 1

Vamos verificar, por exemplo, se o RPPS de Belford Roxo no Estado do RJ investiu em algum desses fundos após novembro de 2018 ou se esses fundos já estavam na carteira do RPPS antes disso.

## Obs. Em Barueri identifiquei que um mesmo fundo aparece mais de uma vez em um mesmo mês... Existem outros casos

ENTE <- "Belford Roxo" 
UF <-  "RJ"

art_15 %>%
  filter(uf == UF, ente == ENTE) %>%
  group_by(uf, ente, nm_ativo, competencia) %>%
  distinct(ident_ativo) %>%
  select(uf, ente, competencia, ident_ativo, nm_ativo) %>%
  spread(key=competencia, value=ident_ativo) %>%
  kable()
uf ente nm_ativo 2018-12-01 2019-01-01 2019-02-01
RJ Belford Roxo AQUILLA FUNDO DE INVESTIMENTO IMOBILIÁRIO 13555918000149 13555918000149 13555918000149
RJ Belford Roxo ÁTICO GESTÃO EMPRESARIAL - FIP 18373362000193 18373362000193 18373362000193
RJ Belford Roxo ÁTICO FIDC IMOBILIÁRIOS 12053694000104 12053694000104 12053694000104
RJ Belford Roxo ÁTICO FLORESTAL - FIP 12312767000135 12312767000135 12312767000135
RJ Belford Roxo ÁTICO RENDA FI IMOBILIÁRIO - FII 14631148000139 14631148000139 14631148000139
RJ Belford Roxo CORAL FIDC MULTISETORIAL 11351413000137 11351413000137 11351413000137
RJ Belford Roxo FI MULTIMERCADO SCULPTOR CRÉDITO PRIVADO 14655180000154 14655180000154 14655180000154
RJ Belford Roxo FI RF MONTE CARLO INSTITUCIONAL IMA-B 15153656000111 15153656000111 15153656000111
RJ Belford Roxo FI SECURITY REFERENCIADO DI LP LP CRÉDITO PRIVADO 09315625000117 09315625000117 09315625000117
RJ Belford Roxo FIDC MULTISETORIAL MASTER II 11989256000190 11989256000190 11989256000190
RJ Belford Roxo FIRF CRÉDTIO PRIVADO PORTFÓLIO MASTER I 09613232000190 09613232000190 09613232000190
RJ Belford Roxo FUNDO DE INVESTIMENTO EM PARTICIPAÇÕES TURISMO BRASIL 12360621000165 NA NA
RJ Belford Roxo PIATÃ FI RF PREVIDENCIÁRIO CRÉDITO PRIVADO 09613226000132 09613226000132 09613226000132


DIPR

Neste capítulo vamos tratar das possibilidades de análise relativa à base de dados do DIPR. Vamos trabalhar com as bases de dados DIPR-2018-30042019.xlsx e DIPR-2019-30042019.xlsx disponibilizadas pela SPrev que compreendem os exercícios de 2018 e 2019.

Como de costume, vamos realizar a importação dos dados. Como temos uma planilha Excel vamos utilizar a função read_excel() do pacote readxl.

setwd("..\\dados")
arquivos_dipr <- c("DIPR-2018-30042019.xlsx", "DIPR-2019-30042019.xlsx")
dipr <- lapply(arquivos_dipr,
               read_excel,
               sheet = "diprResultadoPrevidenciario",
               skip = 4, col_names = FALSE)
dipr <- do.call('rbind', dipr)

Como a planilha possui um cabeçalho contendo a denominação das colunas a importação foi feita sem os nomes das variáveis. Iremos, a seguir, fazer a inclusão do nome das mesmas:

names(dipr) <- c("ente", "uf", "competencia", "plano_segreg", "dt_info", "bc_pat_serv", 
  "bc_pat_serv_ug", "bc_pat_apo", "bc_pat_pen", "bc_serv", "bc_apo",
  "bc_pen", "ct_pat_serv", "ct_pat_serv_ug", "ct_pat_apo", "ct_pat_pen",
  "ct_serv", "ct_apo", "ct_pen", "deduc_pat", "deduc_pat_outros", "deduc_seg",
  "deduc_seg_outros", "aportes_amortiz", "aportes_insufin", "aportes_despadm",
  "aportes_pagtesouro", "aportes_outros", "parcelamentos", "bcug_pat", "bcug_serv",
  "bcug_serv_afast", "bcug_apos", "bcug_pen", "ctug_pat", "ctug_serv", "ctug_serv_afast",
  "ctug_apos", "ctug_pen", "rb_serv", "rb_apos", "rb_pen", "nb_serv", "nb_apos", "nb_pen",
  "nb_dep", "ing_contr", "ing_aportes", "ing_parc", "ing_acres_leg", "ing_contr_cedlic",
  "ing_comprev", "ing_aplicfin", "ing_ativos", "ing_outros", "desp_apo", "desp_pen_morte",
  "desp_auxdoenca", "desp_salmater", "desp_salfam", "desp_auxreclu", "desp_decjud",
  "desp_beneftesouro", "desp_despadm", "desp_invest", "desp_rest", "desp_comprev", 
  "desp_outras", "total_receita", "total_despesa", "resutado_final", "bcmil_pat_ativ",
  "bcmil_ativos", "bcmil_reserva", "bcmil_pen", "ctmil_pat", "ctmil_ativos", "ctmil_reserva",
  "ctmil_pen", "rbmil", "nbmil_ativos", "nbmil_reserva", "nbmil_pen", "nbmil_dep",
  "ingmil_contr", "ingmil_aportes", "ingmil_outras", "despmil_reseva", "despmil_penmorte",
  "despmil_outras", "resultado_final")

Realizada a importação dos dados, será necessário realizar um pré-processamento.

# Limpar alguns dados
dipr$ente <- gsub("^Governo do |Prefeitura Municipal d[eoa] ", "", dipr$ente)


# Função para converter para formato numerico
convnum <- function(x){
  x <- gsub("\\.", "", x)
  x <- gsub(",", ".", x)
  as.numeric(x)
}

# convertendo os dados...
dipr[,-c(1:5)] <- sapply(dipr[,-c(1:5)], convnum)

Importado o conjunto de dados, vamos salvá-lo no formato .Rds do R para uso posterior.

setwd("..\\dados-produzidos")
saveRDS(dipr, file = "dipr2018-2019_DtGer30042019.Rds")


Pendências na Entrega do DIPR

Para um efetivo acompanhamento da gestão dos RPPS é necessário identificarmos quais RPPS não estão encaminhando o DIPR à SPrev/ME com vistas à adoção das providências adequadas.

Aliás, esse é um ponto de verificação constante na Resolução Atricon 05/2018 que Aprova as Diretrizes de Controle Externo Atricon nº 3214/2018, relacionadas à temática “Controle Externo na gestão dos Regimes Próprios de Previdência Social”.

25.1 (…)

u) se há o envio tempestivo à Secretaria de Previdência (SPREV) do Ministério da Fazenda dos demonstrativos obrigatórios (DIPR, DRAA, DPIN, DAIR e demonstrativos contábeis).

Para executarmos esta verificação nossa estratégia será comparar os Entes que constam da base de dados do DIPR com uma relação que contenha todos os RPPS brasileiros. Nossa escolha para a obtenção dessa relação foi o a base de dados do Indicador de Situação Previdenciária - ISP contida no arquivo RESULTADO-ISP-2018.01.xlsx disponibilizado pela SPrev.

Infelizmente a base do DIPR não possui informação quanto ao CNPJ do Ente. Esta é uma variável importante quando queremos relizar o cruzamento entre as diversas bases de dados disponibilizadas pela SPrev bem como com outras bases de dados. Assim, o cruzamento será feito com base no nome do Ente, o que nos coloca a necessidade de garantir que o nome do ente esteja escrito da mesma maneira nas duas bases. Para tante algumas transformações deverão ser realizadas na variável que contém o nome dos Entes.

Vamos importar os dados do ISP:

setwd("..\\dados")
isp <- read_excel("RESULTADO-ISP-2018.01.xlsx")
isp <- isp[, -c(31, 32, 33, 34)]
names(isp) <- c("ENTE",    "UF", "REGIAO", "GRUPO", "ESCRITURA",    "APLICFIN",
                "CONTRIB", "COBSERVPUB", "CONCBENEF",   "EQUILATUAR",   "PARTSEG",  "PARCELTEMP",
                "REGRAS",    "UTILRECPREV", "CONF", "CLASSIF_CONF", "ENDIVID",  "SOLVFIN",
                "RAZAOAI", "COMPROMATUAR",  "SOLVATUAR",    "EQUIL",    "CLASSIF_EQUIL",
                "DRAA",    "DIPR",  "DPIN", "DAIR", "TRANSP",   "CLASSIF_TRANSP",   "ISP201801")

Como será necessário juntar essa base com a base do DIPR, vamos limpar um pouco a base de dados para tornar viável essa operação.

dipr$ente <- toupper(dipr$ente)
dipr$ente <- iconv(dipr$ente, from = "utf-8", to="ASCII//TRANSLIT")
dipr$ente <- paste(dipr$ente, dipr$uf, sep=" - ")

isp$ENTE <- gsub("^GOVERNO DO ", "", isp$ENTE)
isp$ENTE <- iconv(isp$ENTE, from = "utf-8", to="ASCII//TRANSLIT")

Agora vamos tentar juntar as bases e fazer a checagem. Vamos ver como estão os Entes do Estado do Mato Grosso.

uf <- "MT"

entrega_dipr <- isp %>%
  select(ENTE) %>%
  left_join(dipr[, c("ente", "competencia")], by=c("ENTE" = "ente")) %>%
  mutate(entregou = "X",
         competencia = factor(competencia, levels = unique(dipr$competencia), ordered = TRUE)) %>%
  filter(grepl(paste(uf, "$", sep=""), ENTE)) %>%
  distinct() %>%
  spread(key=competencia, value = entregou, fill = "-") %>%
  select(- `<NA>`)  
kable(entrega_dipr)
ENTE JAN/2018 FEV/2018 MAR/2018 ABR/2018 MAI/2018 JUN/2018 JUL/2018 AGO/2018 SET/2018 OUT/2018 NOV/2018 DEZ/2018 JAN/2019 FEV/2019
ACORIZAL - MT - - - - - - - - - - - - - -
AGUA BOA - MT X X X X X X X X X X X X X X
ALTA FLORESTA - MT X X X X X X X X X X X X X X
ALTO ARAGUAIA - MT X X X X X X X X X X X X X X
APIACAS - MT X X X X X X X X X X X X X X
ARAGUAIANA - MT X X X X X X X X X X - - - -
ARAGUAINHA - MT - - - - - - - - - - - - - -
ARAPUTANGA - MT X X X X X X X X X X X X - -
ARIPUANA - MT X X X X X X X X X X X X X X
BARAO DE MELGACO - MT X X X X X X X X X X X X X X
BARRA DO BUGRES - MT X X X X X X X X X X X X X X
BARRA DO GARCAS - MT X X X X X X X X X X X X - -
CACERES - MT X X X X X X X X X X X X X X
CAMPINAPOLIS - MT X X X X X X X X X X X X X X
CAMPO NOVO DO PARECIS - MT X X X X X X X X X X X X X X
CAMPO VERDE - MT X X X X X X X X X X X X X X
CANARANA - MT X X X X X X X X X X X X X X
CARLINDA - MT X X X X X X X X X X X X - -
CASTANHEIRA - MT X X X X X X X X X X X X - -
CHAPADA DOS GUIMARAES - MT - - - - - - - - - - - - - -
CLAUDIA - MT X X X X X X X X X X X X X X
COCALINHO - MT X X X X X X - - - - - - - -
COLIDER - MT X X X X X X X X X X X X X X
COLNIZA - MT X X X X X X X X X X X X - -
COMODORO - MT X X X X X X X X X X X X - -
CONFRESA - MT X X X X X X X X X X X X X X
CONQUISTA D’OESTE - MT X X X X X X X X X X X X X X
COTRIGUACU - MT X X X X X X X X X X X X X X
CUIABA - MT X X X X X X X X X X X X X X
CURVELANDIA - MT X X X X X X X X X X X X X X
ESTADO DO MATO GROSSO - MT X X X X X X X X X X X X X X
FELIZ NATAL - MT X X X X X X X X X X X X X X
GAUCHA DO NORTE - MT X X X X X X X X X X X X X X
GENERAL CARNEIRO - MT X X X X X X X X X X X X X X
GLORIA D’OESTE - MT X X X X X X X X X X X X X X
GUARANTA DO NORTE - MT X X X X X X X X X X X X X X
GUIRATINGA - MT X X X X X X X X X X X X X X
IPIRANGA DO NORTE - MT X X X X X X X X X X X X X X
ITAUBA - MT X X X X X X X X X X X X X X
ITIQUIRA - MT X X X X X X X X X X X X - -
JACIARA - MT X X X X X X X X X X - - - -
JAURU - MT X X X X X X X X X X X X X X
JUARA - MT X X X X X X X X X X X X - -
JUINA - MT X X X X X X X X X X X X X X
JURUENA - MT X X X X X X X X X X X X - -
LAMBARI D’OESTE - MT X X X X X X X X X X X X - -
LUCAS DO RIO VERDE - MT X X X X X X X X X X X X X X
MARCELANDIA - MT X X X X X X X X X X X X X X
MATUPA - MT X X X X X X X X X X X X X X
MIRASSOL D’OESTE - MT X X X X X X X X X X X X - -
NOBRES - MT X X X X X X X X X X X X - -
NORTELANDIA - MT X X X X X X X X X X X X - -
NOSSA SENHORA DO LIVRAMENTO - MT X X X X X X X X X X X X X X
NOVA BRASILANDIA - MT X X X X X X X X X X X X - -
NOVA CANAA DO NORTE - MT X X X X X X X X X X X X X X
NOVA LACERDA - MT X X X X X X X X X X X X X X
NOVA MARILANDIA - MT X X X X X X X X X X X X X X
NOVA MONTE VERDE - MT X X X X X X X X X X X X X X
NOVA MUTUM - MT X X X X X X X X X X X X X X
NOVA NAZARE - MT X X X X X X X X X X X X - -
NOVA OLIMPIA - MT X X X X X X X X X X X X - -
NOVA SANTA HELENA - MT X X X X X X X X X X X X X X
NOVA UBIRATA - MT X X X X X X X X X X X X - -
NOVA XAVANTINA - MT X X X X X X X X X X - - - -
NOVO HORIZONTE DO NORTE - MT X X X X X X X X X X X X X X
NOVO MUNDO - MT X X X X X X X X X X X X X X
PARANAITA - MT X X X X X X X X X X - - - -
PARANATINGA - MT X X X X X X X X X X X X X X
PEIXOTO DE AZEVEDO - MT X X X X X X X X X X X X X X
PLANALTO DA SERRA - MT X X X X X X X X X X X X - -
PONTAL DO ARAGUAIA - MT X X X X X X X X X X - - - -
PONTE BRANCA - MT X X X X X X X X X X X X - -
PONTES E LACERDA - MT X X X X X X X X X X X X X X
PORTO ESPERIDIAO - MT X X X X X X X X - - - - - -
PORTO ESTRELA - MT X X X X X X X X X X X X X X
POXOREO - MT X X X X X X X X X X X X - -
PRIMAVERA DO LESTE - MT X X X X X X X X X X X X - -
QUERENCIA - MT X X X X X X X X X X X X - -
RESERVA DO CABACAL - MT X X X X - - - - - - - - - -
RIBEIRAO CASCALHEIRA - MT X X - - - - - - - - - - - -
RIBEIRAOZINHO - MT X X X X X X X X X X X X X X
RIO BRANCO - MT X X X X X X X X X X X X X X
RONDONOPOLIS - MT - - - - - - - - - - - - - -
ROSARIO OESTE - MT X X X X X X X X X X X X - -
SANTA RITA DO TRIVELATO - MT X X X X X X X X X X X X X X
SANTA TEREZINHA - MT X X X X X X X X X X - - - -
SANTO AFONSO - MT X X X X X X X X X X X X - -
SANTO ANTONIO DO LESTE - MT X X X X X X X X X X - - - -
SANTO ANTONIO DO LEVERGER - MT X X X X - - - - - - - - - -
SAO FELIX DO ARAGUAIA - MT X X X X X X X X X X - - - -
SAO JOSE DO POVO - MT X X X X X X X X X X X X X X
SAO JOSE DO RIO CLARO - MT X X X X X X X X X X X X X X
SAO JOSE DOS QUATRO MARCOS - MT X X X X X X X X X X X X - -
SINOP - MT X X X X X X X X X X X X X X
SORRISO - MT X X X X X X X X X X X X X X
TABAPORA - MT X X X X X X X X X X X X X X
TANGARA DA SERRA - MT X X X X X X X X X X X X X X
TAPURAH - MT X X X X X X X X X X X X X X
TERRA NOVA DO NORTE - MT X X X X X X X X X X X X X X
TORIXOREU - MT X X - - - - - - - - - - - -
VALE DE SAO DOMINGOS - MT X X X X X X X X X X X X X X
VARZEA GRANDE - MT X X X X X X X X X X X X X X
VERA - MT X X X X X X X X X X X X X X
VILA BELA DA SANTISSIMA TRINDADE - MT X X X X X X X X X X X X X X
VILA RICA - MT X X X X X X X X X X X X X X

O quadro acima nos fornece uma indicação de quais RPPS estão inadimplentes com a obrigação de encaminhamento do DIPR à SPrev. O quadro está ordenado por ordem alfabética, mas poderia ser ordenado por inadimplência, ou seja, RPPS com maior quantidade de inadimplência no período viriam primeiro.

Caso seja necessário exportar os dados para uma planilha do excel:

setwd("..\\dados-produzidos")
write_xlsx(entrega_dipr, "entrega_dipr_MT.xlsx")


Segregação de Massas

A base de dados do DIPR também nos fornece de imediato uma informação relevante: os RPPS com segregação de messas (dentre os que encaminharam o DIPR à SPrev/ME).

Vamos identificar quais RPPS do Estado do Rio de Janeiro possuem segregação de massas.

UF <- "RJ"
entes_segreg <- dipr %>%
                  mutate(periodo = as.Date(paste("01", competencia, sep = "/"), "%d/%b/%Y")) %>%        
                  group_by(ente) %>%
                  filter(uf == UF, periodo == max(periodo, na.rm = TRUE), plano_segreg == "Financeiro") %>%
                  select(ente) %>%
                  ungroup() %>%
                  arrange(ente)

No código acima olhamos o valor da variável plano_segreg no mês mais recente disponível na base de dados para cada Ente .

Os RPPS com segregação de massas no ERJ são os seguintes:

kable(entes_segreg)
ente
ANGRA DOS REIS - RJ
BARRA MANSA - RJ
CACHOEIRAS DE MACACU - RJ
CANTAGALO - RJ
CARMO - RJ
DUAS BARRAS - RJ
DUQUE DE CAXIAS - RJ
ESTADO DO RIO DE JANEIRO - RJ
ITATIAIA - RJ
MACAE - RJ
MARICA - RJ
MENDES - RJ
NITEROI - RJ
PINHEIRAL - RJ
PORCIUNCULA - RJ
RIO CLARO - RJ
SAQUAREMA - RJ
SUMIDOURO - RJ


Recebimento dos parcelamentos

O site da SPrev/ME disponibiliza um conjunto de dados específico para parcelamentos (PARCELAMENTOS_30042019.xlsx) contendo bastante informação sobre os Termos de Parcelamento de Dívidas dos Entes.

O DIPR fornece informações sobre o montante dos valores recebidos pela Unidade Gestora do RPPS oriundos de parcelamentos. Estes dados estão disponíveis nas variáveis parcelamentos e ing_parc.

Neste tópico nosso objetivo será tentar verificar se o Ente está pagando seus parcelamentos. Não é possivel, apenas com esses dados, verificar se todos os parcelamentos estão sendo pagos, se estão sendo pagos com os acréscimos legais, etc. Mas combinando os dados do DIPR com os dados do arquivo PARCELAMENTOS_30042019.xlsx talvez seja possível obter informações interessantes. Mas por ora vamos ficar apenas com os dados disponíveis no DIPR.

Vamos antes identificar no RJ quais RPPS receberam recursos oriundos de parcelamentos no período.

UF <- "RJ"
parcel_dipr <- dipr %>%
  filter(uf == UF, !is.na(parcelamentos) | !is.na(ing_parc)) %>%
  select(ente, competencia, plano_segreg, parcelamentos, ing_parc)

Vamos olhar o município de Pinheiral no RJ ver como está o recebimento de parcelamentos:

ENTE <- "PINHEIRAL - RJ"

dipr_parcelamentos <- parcel_dipr %>%
  filter(ente == ENTE)

Vamos dar uma olhada no conjunto de dados:

kable(dipr_parcelamentos)
ente competencia plano_segreg parcelamentos ing_parc
PINHEIRAL - RJ JAN/2018 Financeiro 1687.47 1687.47
PINHEIRAL - RJ JAN/2018 Previdenciário 20529.68 20529.68
PINHEIRAL - RJ FEV/2018 Financeiro 1707.99 1707.99
PINHEIRAL - RJ FEV/2018 Previdenciário 20782.40 20782.40
PINHEIRAL - RJ MAR/2018 Financeiro 1721.45 1721.45
PINHEIRAL - RJ MAR/2018 Previdenciário 20950.17 20950.17
PINHEIRAL - RJ ABR/2018 Financeiro 1731.25 1731.25
PINHEIRAL - RJ ABR/2018 Previdenciário 21068.98 21068.98
PINHEIRAL - RJ MAI/2018 Financeiro 1743.14 1743.14
PINHEIRAL - RJ MAI/2018 Previdenciário 21221.08 21221.08
PINHEIRAL - RJ JUN/2018 Financeiro 1758.41 1758.41
PINHEIRAL - RJ JUN/2018 Previdenciário 21409.25 21409.25
PINHEIRAL - RJ JUL/2018 Financeiro 1788.86 1788.86
PINHEIRAL - RJ JUL/2018 Previdenciário 21782.94 21782.94
PINHEIRAL - RJ AGO/2018 Financeiro 1811.67 1811.67
PINHEIRAL - RJ AGO/2018 Previdenciário 22507.85 22507.85
PINHEIRAL - RJ SET/2018 Financeiro 1809.78 1809.78
PINHEIRAL - RJ SET/2018 Previdenciário 22044.38 22044.38
PINHEIRAL - RJ OUT/2018 Financeiro 1475.41 1475.41
PINHEIRAL - RJ OUT/2018 Previdenciário 23171.94 23171.94
PINHEIRAL - RJ NOV/2018 Financeiro 354.72 354.72
PINHEIRAL - RJ NOV/2018 Previdenciário 22460.82 22460.82
PINHEIRAL - RJ DEZ/2018 Financeiro 355.64 355.64
PINHEIRAL - RJ DEZ/2018 Previdenciário 22518.98 22518.98
PINHEIRAL - RJ JAN/2019 Financeiro 357.30 357.30
PINHEIRAL - RJ JAN/2019 Previdenciário 22624.20 22624.20
PINHEIRAL - RJ FEV/2019 Financeiro 358.96 358.96
PINHEIRAL - RJ FEV/2019 Previdenciário 70191.27 70191.27

A base do DIPR contém informações sobre parcelamentos em duas variáveis: parcelamentose ing_parc. Assim foram selecionadas as duas apenas para efeito de comparação, ou seja, ver se os dois valores estão “batendo”.

# Gráfico dos dados acima.
#-------------------------
dipr_parcelamentos %>%           
  mutate(competencia = as.Date(paste("01", competencia, sep = "/"), "%d/%B/%Y")) %>%
  ggplot(aes(x=competencia, y=parcelamentos)) +
  geom_line() +
  geom_point(size=2) +
  facet_wrap(~ plano_segreg)


Recebimento das contribuições

Neste tópico nosso objetivo é verificar se as contribuições devidas estão sendo recebidas pelo RPPS. Vamos dar uma olhada no município de Porto Alegre no RS.

ENTE <- "PORTO ALEGRE - RS" 
teste <- function(x){!all(is.na(x))}

dipr_contribuicoes <- dipr %>%
  filter(ente == ENTE) %>%
  select(competencia, plano_segreg, ct_pat_serv, ct_pat_serv_ug, ct_pat_apo, ct_pat_pen, ct_serv, ct_apo, ct_pen) %>%
  select_if(teste) %>% 
  gather(key=tipo, value=contribuicao, -competencia, -plano_segreg) 

Vamos dar uma olhada nos dados:

kable(dipr_contribuicoes)
competencia plano_segreg tipo contribuicao
JAN/2018 Financeiro ct_pat_serv 14743681.23
JAN/2018 Previdenciário ct_pat_serv 11277159.96
FEV/2018 Financeiro ct_pat_serv 13630951.27
FEV/2018 Previdenciário ct_pat_serv 11021252.89
MAR/2018 Financeiro ct_pat_serv 13645190.18
MAR/2018 Previdenciário ct_pat_serv 11063673.48
ABR/2018 Financeiro ct_pat_serv 13401438.77
ABR/2018 Previdenciário ct_pat_serv 11093625.02
MAI/2018 Financeiro ct_pat_serv 12980740.46
MAI/2018 Previdenciário ct_pat_serv 11016261.69
JUN/2018 Financeiro ct_pat_serv 12711227.70
JUN/2018 Previdenciário ct_pat_serv 11004772.35
JUL/2018 Financeiro ct_pat_serv 12554091.24
JUL/2018 Previdenciário ct_pat_serv 10990582.70
AGO/2018 Financeiro ct_pat_serv 12208294.63
AGO/2018 Previdenciário ct_pat_serv 10989952.32
SET/2018 Financeiro ct_pat_serv 11953218.87
SET/2018 Previdenciário ct_pat_serv 10973447.48
OUT/2018 Financeiro ct_pat_serv 11982903.13
OUT/2018 Previdenciário ct_pat_serv 11134719.08
NOV/2018 Financeiro ct_pat_serv 11730088.86
NOV/2018 Previdenciário ct_pat_serv 11120274.04
DEZ/2018 Financeiro ct_pat_serv 13332301.02
DEZ/2018 Previdenciário ct_pat_serv 12002975.82
JAN/2019 Financeiro ct_pat_serv 11884901.53
JAN/2019 Previdenciário ct_pat_serv 11312612.14
FEV/2019 Financeiro ct_pat_serv 12085991.18
FEV/2019 Previdenciário ct_pat_serv 12089387.41
JAN/2018 Financeiro ct_pat_apo 6328623.32
JAN/2018 Previdenciário ct_pat_apo 41229.74
FEV/2018 Financeiro ct_pat_apo 6427046.22
FEV/2018 Previdenciário ct_pat_apo 48182.78
MAR/2018 Financeiro ct_pat_apo 6352250.69
MAR/2018 Previdenciário ct_pat_apo 47633.73
ABR/2018 Financeiro ct_pat_apo 6573955.56
ABR/2018 Previdenciário ct_pat_apo 43863.21
MAI/2018 Financeiro ct_pat_apo 6534341.45
MAI/2018 Previdenciário ct_pat_apo 58240.33
JUN/2018 Financeiro ct_pat_apo 6623779.20
JUN/2018 Previdenciário ct_pat_apo 56724.17
JUL/2018 Financeiro ct_pat_apo 6743450.06
JUL/2018 Previdenciário ct_pat_apo 69314.73
AGO/2018 Financeiro ct_pat_apo 6790484.58
AGO/2018 Previdenciário ct_pat_apo 74215.64
SET/2018 Financeiro ct_pat_apo 6955831.01
SET/2018 Previdenciário ct_pat_apo 73925.79
OUT/2018 Financeiro ct_pat_apo 7070420.95
OUT/2018 Previdenciário ct_pat_apo 79227.22
NOV/2018 Financeiro ct_pat_apo 6946595.29
NOV/2018 Previdenciário ct_pat_apo 80861.07
DEZ/2018 Financeiro ct_pat_apo 7820161.86
DEZ/2018 Previdenciário ct_pat_apo 136785.30
JAN/2019 Financeiro ct_pat_apo 6841110.89
JAN/2019 Previdenciário ct_pat_apo 81313.99
FEV/2019 Financeiro ct_pat_apo 7408550.18
FEV/2019 Previdenciário ct_pat_apo 80459.60
JAN/2018 Financeiro ct_serv 9216219.96
JAN/2018 Previdenciário ct_serv 6490567.16
FEV/2018 Financeiro ct_serv 8669810.04
FEV/2018 Previdenciário ct_serv 6385571.07
MAR/2018 Financeiro ct_serv 8669710.32
MAR/2018 Previdenciário ct_serv 6412475.79
ABR/2018 Financeiro ct_serv 8527162.52
ABR/2018 Previdenciário ct_serv 6430735.29
MAI/2018 Financeiro ct_serv 8243400.43
MAI/2018 Previdenciário ct_serv 6392616.92
JUN/2018 Financeiro ct_serv 8072370.94
JUN/2018 Previdenciário ct_serv 6379680.45
JUL/2018 Financeiro ct_serv 7976096.30
JUL/2018 Previdenciário ct_serv 6372044.13
AGO/2018 Financeiro ct_serv 7760405.64
AGO/2018 Previdenciário ct_serv 6370782.43
SET/2018 Financeiro ct_serv 7596256.38
SET/2018 Previdenciário ct_serv 6364136.24
OUT/2018 Financeiro ct_serv 7601002.32
OUT/2018 Previdenciário ct_serv 6454192.68
NOV/2018 Financeiro ct_serv 7454927.51
NOV/2018 Previdenciário ct_serv 6449223.40
DEZ/2018 Financeiro ct_serv 8472652.89
DEZ/2018 Previdenciário ct_serv 6956520.63
JAN/2019 Financeiro ct_serv 7543092.81
JAN/2019 Previdenciário ct_serv 6557478.42
FEV/2019 Financeiro ct_serv 7683747.21
FEV/2019 Previdenciário ct_serv 7009477.66
# Gráfico dos dados acima.
dipr_contribuicoes %>%
  mutate(competencia = as.Date(paste("01", competencia, sep = "/"), "%d/%B/%Y")) %>%
  ggplot(aes(x=competencia, y=contribuicao, group=tipo, color=tipo)) +
  geom_line() +
  geom_point(size=2) +
  facet_wrap(~ plano_segreg)


Evolução das Receitas e Despesas

Neste tópico nosso objetivo é apenas visualizar como as receitas e despesas do RPPS estão evoluindo no tempo. Para isso, vamos utilizar como exemplo o RPPS de Manaus, AM. As variáveis que nos interessam são: total_receita e total_despesa.

ENTE <- "MANAUS - AM"
dipr %>%
  filter(ente == ENTE) %>%
  select(ente, competencia, plano_segreg, total_receita, total_despesa) %>%
  mutate(competencia = as.Date(paste("01", competencia, sep = "/"), "%d/%B/%Y")) %>%
  ggplot(aes(x=competencia, y=total_despesa)) +
  geom_line() +
  geom_point() +
  facet_wrap(~ plano_segreg)

Para a receita o código é o mesmo:

dipr %>%
  filter(ente == ENTE) %>%
  select(ente, competencia, plano_segreg, total_receita, total_despesa) %>%
  mutate(competencia = as.Date(paste("01", competencia, sep = "/"), "%d/%B/%Y")) %>%
  ggplot(aes(x=competencia, y=total_receita)) +
  geom_line() +
  geom_point() +
  facet_wrap(~ plano_segreg)


Quantidade de Beneficiários

Outra análise que pode ser de interesse seria avaliar como a quantidade de beneficiários está evoluindo ao longo do tempo. Informações sobre a quantidade de beneficiários estão contidas nas variáveis nb_serv, nb_apos, nb_pen e nb_dep.

Se quisermos incluir dados dos militares, teremos que considerar as variáveis nbmil_ativos, nbmil_reserva, nbmil_pen e nbmil_dep.

No gráfico a seguir vamos ver a evolução da quantidade de servidores ativos (nb_serv):

ENTE <- "JAPERI - RJ" 

dipr %>%
  filter(ente == ENTE) %>%
  select(competencia, plano_segreg, nb_serv, nb_apos, nb_pen, nb_dep) %>%
  mutate(competencia = as.Date(paste("01", competencia, sep = "/"), "%d/%B/%Y")) %>%
  ggplot(aes(x=competencia, y=nb_serv, group=1)) +
    geom_line() +
    geom_point() +
  facet_wrap(~ plano_segreg)


COMPREV

Neste tópico nosso objetivo será obter uma relação dos RPPS de uma UF com os valores do COMPREV recebido. Uma análise adicional seria verificar se todos os RPPS que informaram ter recebido COMPREV estão regulares com o CRP.

Esta verificação pode auxiliar na Diretriz Atricon que oriente os TCs a verificar:

" g) se os regimes próprios têm viabilizado o exercício do direito de compensação financeira;“”
Na base do DIPR os valores recebidos relativos ao COMPREV constam da variável ing_comprev.

Vamos olhar os RPPS do Estado do Paraná (PR). No código abaixo os valores do COMPREV do plano financeiro e previdenciário serão caso o RPPS escolhido possua segregação de massas.

UF <- "PR"

recebe_comprev <- dipr %>%
  filter(uf == UF) %>%
  select(ente, competencia, ing_comprev) %>%
  mutate(competencia = as.Date(paste("01", competencia, sep="/"), "%d/%b/%Y")) %>%
  group_by(ente, competencia) %>%
  summarise(comprev = sum(ing_comprev, na.rm=TRUE)) %>%
  spread(key=competencia, value=comprev)

Vamos olhar os dados. Como são muitos RPPS, vamos ver os dados dos 10 primeiros.

kable(head(recebe_comprev, 10))
ente 2018-01-01 2018-02-01 2018-03-01 2018-04-01 2018-05-01 2018-06-01 2018-07-01 2018-08-01 2018-09-01 2018-10-01 2018-11-01 2018-12-01 2019-01-01 2019-02-01
ADRIANOPOLIS - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 NA NA NA NA
ALMIRANTE TAMANDARE - PR 0.00 0.00 0.00 0.0 351116.9 44924.63 44924.63 44341.73 44341.73 42633.35 88682.36 44052.05 NA NA
ALTAMIRA DO PARANA - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 NA NA
ALTO PARANA - PR 4423.02 14096.92 13743.28 129343.6 15027.3 0.00 0.00 0.00 0.00 75136.50 15027.30 30054.60 14193.57 14680.23
AMAPORA - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
AMPERE - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
ANDIRA - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 729290.83 59260.77 11964.24 NA NA
ANGULO - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 NA NA
ARAPONGAS - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
ARAPOTI - PR 0.00 0.00 0.00 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Vamos excluir os Entes que cujos valores de COMPREV estejam zerados em todos os meses ou possuam NA.

recebe_comprev2 <- recebe_comprev %>%
  ungroup() %>%
  mutate(flag = apply(.[, -1], 1, function(x) all(x == 0 | is.na(x)))) %>%
  filter(!flag) %>%
  select(-flag)
kable(recebe_comprev2)
ente 2018-01-01 2018-02-01 2018-03-01 2018-04-01 2018-05-01 2018-06-01 2018-07-01 2018-08-01 2018-09-01 2018-10-01 2018-11-01 2018-12-01 2019-01-01 2019-02-01
ALMIRANTE TAMANDARE - PR 0.00 0.00 0.00 0.00 351116.92 44924.63 44924.63 44341.73 44341.73 42633.35 88682.36 44052.05 NA NA
ALTO PARANA - PR 4423.02 14096.92 13743.28 129343.64 15027.30 0.00 0.00 0.00 0.00 75136.50 15027.30 30054.60 14193.57 14680.23
ANDIRA - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 729290.83 59260.77 11964.24 NA NA
BARRACAO - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16371.50 38437.18 19218.59 38437.18 19218.59 19877.59
BOA ESPERANCA - PR 0.00 0.00 0.00 0.00 0.00 0.00 184520.66 5143.13 5143.13 5143.13 5143.13 10286.26 5143.13 5319.50
BOA VENTURA DE SAO ROQUE - PR 968.40 96957.50 1955.44 1829.44 1829.44 1829.44 1829.44 1829.44 210.00 3658.88 NA NA NA NA
CAFELANDIA - PR 5584.50 0.00 12021.29 4713.26 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
CAMBARA - PR 0.00 0.00 0.00 0.00 0.00 0.00 195748.92 0.00 0.00 0.00 0.00 0.00 NA NA
CAMBE - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2961599.95 19275.73 19936.65
CAMPO LARGO - PR 69295.07 70729.21 100244.20 97340.07 100244.20 100046.70 0.00 0.00 0.00 0.00 396539.18 198160.52 99080.26 102477.49
CAMPO MOURAO - PR 148325.28 183691.77 145986.34 147916.03 147916.03 147398.59 147418.85 147550.04 0.00 0.00 588568.01 146804.18 151408.03 170491.32
CANTAGALO - PR 379.20 387.04 42000.70 807.24 807.24 807.24 807.24 807.24 807.24 807.24 807.24 1614.48 807.24 834.92
CASCAVEL - PR 358557.09 307202.44 107138.80 298155.64 282175.64 304381.37 365823.74 526176.75 588554.50 339750.44 363982.99 641158.22 320570.27 330862.13
CERRO AZUL - PR 0.00 0.00 151271.31 0.00 0.00 0.00 0.00 0.00 121987.92 7175.76 7175.76 7175.76 NA NA
CIANORTE - PR 175534.53 179166.49 178151.39 174548.46 178151.39 174761.42 177812.28 176920.39 175193.98 175118.29 175118.29 350236.58 470611.87 184104.59
COLOMBO - PR 471591.26 172693.27 182948.43 181641.72 180779.51 180310.63 0.00 363713.21 181029.66 181393.28 342976.80 363021.76 181279.04 187494.65
CORBELIA - PR 37055.76 37822.30 37822.30 37822.30 37822.30 37245.62 37822.30 37726.03 37519.77 37657.27 44115.75 75908.89 41689.62 39009.55
CRUZEIRO DO OESTE - PR 0.00 27668.48 12605.32 11199.38 0.00 25210.64 12605.32 0.00 0.00 0.00 0.00 0.00 NA NA
CURITIBA - PR 1317446.69 1344699.81 0.00 0.00 1319070.69 1328419.83 1320969.61 1322966.31 1323016.21 1323970.78 1324853.13 2642742.12 1320051.80 1355393.99
DIAMANTE DO NORTE - PR 0.00 0.00 11223.68 11223.68 0.00 0.00 44667.21 44667.21 55505.74 100172.95 11223.68 22447.36 NA NA
ESTADO DO PARANA - PR 7363869.10 9013479.46 8888642.99 8888077.77 8925224.06 8849126.87 8933547.52 8932222.72 8891785.04 8913805.30 NA NA NA NA
FAZENDA RIO GRANDE - PR 11319.43 11553.62 11005.16 9268.38 11005.16 11005.16 0.00 0.00 11005.16 11005.16 0.00 0.00 11005.16 11382.50
FLORESTA - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 324.54 649.08 NA NA
FLORIDA - PR 3564.80 0.00 909.64 454.82 454.82 454.82 0.00 0.00 0.00 0.00 NA NA NA NA
FOZ DO IGUACU - PR 981841.51 313175.73 498025.13 525267.68 497219.05 941744.24 586306.32 758246.92 524869.20 521649.00 573660.71 1073856.07 1125371.24 549739.43
FRANCISCO BELTRAO - PR 86897.60 86548.44 91993.97 93312.18 86074.80 86074.80 115599.09 95447.93 95060.67 95224.46 95224.46 190448.92 95224.46 98489.14
GUARANIACU - PR 16503.82 16845.30 16508.38 15166.35 16508.38 16508.38 16425.85 16790.13 0.00 0.00 0.00 207787.10 16790.13 17365.90
GUARAPUAVA - PR 16953.72 361795.62 20030.50 20030.50 20030.50 67788.48 0.00 178403.66 22086.01 22086.01 25126.59 42862.94 21431.47 20271.73
GUARATUBA - PR 0.00 0.00 0.00 0.00 0.00 17262.75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IBAITI - PR 0.00 80440.48 0.00 0.00 102764.06 21615.35 0.00 0.00 0.00 0.00 0.00 0.00 21299.30 21260.55
IBIPORA - PR 43279.09 44174.33 44174.33 44174.33 44174.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
INACIO MARTINS - PR 92159.51 0.00 0.00 0.00 0.00 0.00 0.00 3361.37 1513.70 3361.37 3361.37 6722.74 3361.37 3476.61
IPORA - PR 15296.85 15026.17 15026.17 14426.18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
IRATI - PR 0.00 0.00 0.00 0.00 0.00 0.00 540248.38 0.00 0.00 43703.82 14567.95 29135.90 NA NA
IVATUBA - PR 0.00 0.00 0.00 0.00 4256.25 1418.75 1418.75 1418.75 0.00 0.00 1418.75 2837.50 1278.94 1322.78
JAPURA - PR 3997.20 9784.97 9784.97 9784.97 9784.97 9784.97 9809.05 9603.22 9603.22 9603.22 9603.22 19206.44 9603.22 9932.51
JARDIM OLINDA - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 43538.69 NA NA
JUSSARA - PR 0.00 0.00 0.00 0.00 0.00 145757.60 3559.35 0.00 7272.06 3636.03 3636.03 7272.06 3636.03 3760.70
LAPA - PR 70036.81 70036.81 70036.81 70036.81 70036.81 70036.81 70036.81 70036.81 71036.81 69783.76 138858.96 69429.48 71809.96 71809.96
LARANJEIRAS DO SUL - PR 12674.83 12937.04 49618.08 13322.48 0.00 0.00 39967.44 13322.48 13322.48 13322.48 13322.48 26644.96 13322.48 13779.26
LOANDA - PR 17083.20 17436.64 17436.64 17436.64 17436.64 17436.64 17101.11 0.00 34092.69 18012.79 18012.79 36025.58 18012.79 18630.38
LOBATO - PR 0.00 0.00 17910.10 1791.01 1791.01 1791.01 1791.01 1791.01 0.00 0.00 0.00 0.00 NA NA
LONDRINA - PR 714722.88 729513.06 721813.78 720150.39 717769.61 711556.29 710556.81 708558.09 705860.97 707492.04 1901955.66 2480256.77 NA NA
MANDAGUACU - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 734727.95 0.00 23525.46 1158137.15 23798.05 24614.04
MARIA HELENA - PR 0.00 0.00 0.00 0.00 0.00 0.00 409418.52 7198.37 7198.37 7198.37 7198.37 14396.74 0.00 14538.06
MARIALVA - PR 0.00 292134.66 186836.20 143385.58 96339.07 67218.63 67218.63 0.00 67218.63 134603.62 191250.27 133764.14 66882.07 68151.91
MARILUZ - PR 0.00 0.00 0.00 0.00 0.00 0.00 120069.85 6598.87 9115.27 9115.27 9115.27 18230.54 9115.27 9427.81
MARINGA - PR 435306.67 499089.88 497180.21 438363.31 430473.98 884931.40 439904.11 1254629.34 444242.35 444187.79 443211.54 938251.79 496097.74 910426.81
MEDIANEIRA - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 56070.40 56070.40 56070.40 112140.80 56070.40 57992.87
MOREIRA SALES - PR 1678.04 10169.17 10169.17 10169.17 10169.17 10169.17 10169.17 10169.17 10169.17 10169.17 10006.88 213588.97 9682.31 10014.30
NOVA AURORA - PR 75284.33 28043.69 28043.69 28043.69 28043.69 28043.69 28043.69 0.00 27659.65 27713.57 27659.65 55427.14 NA NA
NOVA ESPERANCA - PR 76553.62 23608.11 23608.11 23608.11 23608.11 23608.11 0.00 51112.33 22667.69 23608.11 23608.11 47216.22 23608.11 24417.64
NOVO ITACOLOMI - PR 0.00 0.00 0.00 0.00 0.00 85931.31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
OURIZONA - PR 356455.12 9757.28 9757.28 9757.28 200765.93 0.00 0.00 0.00 0.00 0.00 0.00 95709.16 NA NA
PALMEIRA - PR 23258.43 223615.08 0.00 12193.92 25689.57 24728.39 25689.57 25689.57 25689.57 25689.57 8676.63 50121.94 24927.90 25349.74
PALMITAL - PR 0.00 0.00 0.00 268170.47 3610.79 3610.79 0.00 7221.58 3610.79 3610.79 3490.16 6739.04 NA NA
PALOTINA - PR 70116.12 71566.95 71566.95 0.00 0.00 0.00 271732.52 69447.23 66390.76 29307.44 NA NA NA NA
PARANACITY - PR 0.00 0.00 0.00 0.00 672835.63 15724.65 15724.65 15755.38 0.00 0.00 0.00 0.00 NA NA
PARANAVAI - PR 52526.96 52526.96 83970.29 52805.92 51754.18 52805.92 52805.92 52805.92 0.00 0.00 105136.46 52568.23 53990.58 54370.83
PEROLA - PR 24768.05 25280.50 25280.50 25280.50 25280.50 25004.78 24341.79 25083.65 25083.65 25083.65 NA NA NA NA
PINHAIS - PR 95890.23 97874.33 97874.33 97874.33 97874.33 97874.33 97874.33 97874.33 97874.33 0.00 0.00 0.00 0.00 0.00
PINHAO - PR 3438.73 3509.87 3509.87 3509.87 3509.87 0.00 0.00 0.00 3417.32 3721.86 NA NA NA NA
PITANGA - PR 2346.66 16769.24 4851.98 4851.98 4851.98 327514.97 822527.11 12325.87 105259.02 1965.95 11617.12 23234.24 1654081.83 0.00
PLANALTO - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 362326.19 NA NA NA NA
PRUDENTOPOLIS - PR 4453.87 0.00 0.00 2823.85 5067.55 5067.55 5067.55 5067.55 3705.34 0.00 NA NA NA NA
RENASCENCA - PR 16786.06 14675.06 14675.06 14675.06 14675.06 14675.06 20613.62 22073.43 15367.22 15367.22 15367.22 0.00 0.00 0.00
RIO AZUL - PR 5173.83 5280.86 5280.86 5280.86 4848.44 3991.56 0.00 4809.13 9618.26 4809.13 4670.06 8783.82 4391.91 4083.57
RIO BONITO DO IGUACU - PR 937.79 0.00 1460.45 1460.45 1460.45 0.00 0.00 0.00 0.00 0.00 1460.45 2920.90 1460.45 0.00
RIO NEGRO - PR 0.00 0.00 6337.71 9318.27 9318.27 9318.27 9318.27 9318.27 7052.77 7350.42 9318.27 18636.54 9318.27 9637.80
RONCADOR - PR 0.00 84684.35 12461.71 12461.71 12461.71 12461.71 12461.71 12461.71 12461.71 12461.71 24923.42 12461.71 NA NA
SAO JORGE DO PATROCINIO - PR 0.00 0.00 0.00 1468.56 1468.56 1468.56 1468.56 1468.56 1468.56 1468.56 1468.56 2937.12 NA NA
TEIXEIRA SOARES - PR 11175.44 11175.44 11175.44 11175.44 4648.40 11034.11 18151.17 11213.91 11213.91 12531.80 25063.60 12531.80 12531.80 12961.48
TELEMACO BORBA - PR 12649.67 472301.87 13459.30 61389.78 61389.78 61389.78 59850.36 61389.78 61389.78 136925.35 179547.93 1287362.90 89047.01 91380.75
TERRA BOA - PR 0.00 0.00 0.00 0.00 27966.67 13110.46 13227.44 36075.11 13933.58 13933.58 0.00 0.00 NA NA
TERRA ROXA - PR 23472.17 23957.67 22739.86 23530.33 23530.33 23530.33 23530.33 0.00 46805.30 23380.09 31986.82 44766.30 23580.87 24277.95
TIBAGI - PR 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2050541.50 15741.73 15741.73 31483.46 15741.73 16281.47
TOLEDO - PR 326267.41 333018.55 330509.09 0.00 661574.73 432485.61 309735.61 330243.21 328269.48 328972.26 329355.07 657787.48 328893.74 339312.22
UMUARAMA - PR 7949.68 62340.31 62176.16 61716.59 61823.45 60599.68 61823.45 61823.45 61823.45 61823.45 61823.45 123646.90 NA NA
UNIAO DA VITORIA - PR 2479.27 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Se quisermos exportar os dados:

setwd("..\\dados-produzidos")
write_xlsx(recebe_comprev2, "ReceitaCOMPREV-PR.xlsx")

Se quisermos ver a evolução temporal da receita de COMPREV de um determinado RPPS, por exemplo Alto Paraná - PR, podermos fazer da seguinte forma:

ENTE <- "ALTO PARANA - PR"

dipr %>%
  filter(ente == ENTE) %>%
  select(ente, competencia, ing_comprev) %>%
  mutate(competencia = as.Date(paste("01", competencia, sep="/"), "%d/%b/%Y")) %>%
  group_by(ente, competencia) %>%
  summarise(comprev = sum(ing_comprev, na.rm=TRUE)) %>%
  ggplot(aes(x=competencia, y=comprev, group=1)) +
  geom_line() +
  geom_point()


Como a quantidade de variáveis na base do DIPR é bem grande (91 variáveis) as possibilidades de análise são muitas mas o código aqui apresentado já dá uma boa ideia de como utilizar esses dados.


Parcelamentos de Débitos

O objetivo da análise é identificar os RPPS com parcelamentos ativos, a quantidade de parcelamentos ativos, o valor consolidado dos parcelamentos e o saldo a pagar.

Para isso, será utilizado o arquivo PARCELAMENTOS_30042019.xlsx disponibilizado pela SPrev/ME.

1. Importação dos dados:

Como de costume, o prmeiro passo é realizar a importação da base de dados.

# Entes com parcelamentos
#-------------------------------------------------------------------------------
setwd("..\\dados")
parcel <- read_excel("PARCELAMENTOS_30042019.xlsx", skip = 3, col_names = FALSE)
names(parcel) <- c("ente", "uf", "tipo", "situacao", "num_acordo", "rubrica",
                   "lei", "dt_consol", "dt_assin", "dt_venc_1a", "compet_ini",
                   "compet_fin", "vlr_consolid", "qtd_parc", "vlr_parc_ini",
                   "sd_estim_satualiz", "sd_estim_catualiz", "comp_indice",
                   "comp_tipo_juros", "comp_txjuros", "comp_multa", "parcvinc_indice",
                   "parcvinc_tipojuros", "parcvinc_txjuros", "parcvinc_multa",
                   "parcatraso_indice", "parcatraso_tipojuros",
                   "parcatraso_txjuros", "parcatraso_multa")

Vamos dar uma olhada na base de dados:

kable(head(parcel))
ente uf tipo situacao num_acordo rubrica lei dt_consol dt_assin dt_venc_1a compet_ini compet_fin vlr_consolid qtd_parc vlr_parc_ini sd_estim_satualiz sd_estim_catualiz comp_indice comp_tipo_juros comp_txjuros comp_multa parcvinc_indice parcvinc_tipojuros parcvinc_txjuros parcvinc_multa parcatraso_indice parcatraso_tipojuros parcatraso_txjuros parcatraso_multa
Abadia de Goiás GO P Aceito 00198/2009 OUTR LEI MUNICIPAL 239/2004 C/C PORTARIA 402/2008 E 83/2009 27/03/2009 27/03/2009 30/04/2009 02/2007 12/2008 216.084,06 240 900,35 108.042,00 237.692,40 SELIC Simples 1,00 NA SELIC Simples 1,00 NA SELIC Simples 1,00 NA
Abadia de Goiás GO P Aceito 01121/2016 CP60 Lei Municipal n. 636/2016, de 16 de dezembro de 2016 21/12/2016 21/12/2016 30/12/2016 02/2016 10/2016 585.393,82 60 9.756,56 312.209,92 399.628,70 IPCA Simples 0,50 1,00 IPCA Simples 0,50 NA IPCA Simples 1,00 2,00
Abadia de Goiás GO P Aceito 00138/2017 CP60 Lei Municipal n. 636/2016, de 16 de dezembro de 2016 03/02/2017 06/02/2017 01/03/2017 10/2016 10/2016 45.123,45 60 752,06 26.322,10 32.902,62 IPCA Simples 0,50 1,00 IPCA Simples 0,50 NA IPCA Simples 1,00 2,00
Abadia de Goiás GO P Aceito 00645/2017 CP60 Lei Municipal n. 636/2016, de 16 de dezembro de 2016 24/07/2017 24/07/2017 31/08/2017 02/2017 06/2017 461.544,36 60 7.692,41 307.696,40 369.235,68 IPCA Simples 0,50 1,00 IPCA Simples 0,50 NA IPCA Simples 1,00 2,00
Abadia de Goiás GO P Aceito 01426/2018 CP60 Lei Municipal n. 636/2016, de 16 de dezembro de 2016 21/12/2018 21/12/2018 30/01/2019 02/2018 10/2018 1.172.611,97 24 48.858,83 1.026.035,43 1.056.816,49 IPCA Simples 0,50 1,00 IPCA Simples 0,50 NA IPCA Simples 1,00 2,00
Abadia de Goiás GO P Aceito 00143/2019 CP60 Lei Municipal n. 636/2016, de 16 de dezembro de 2016 08/02/2019 11/02/2019 31/03/2019 11/2018 12/2018 396.962,34 22 18.043,74 378.918,54 382.707,73 IPCA Simples 0,50 1,00 IPCA Simples 0,50 NA IPCA Simples 1,00 2,00

Feita a importação, quase sempre será necessário realizar algum pré-processamento da base de dados. Aqui será necessário converter algumas variáveis para o formato numérico. Especificamente vamos converter as variáveis vlr_consolid e sd_estim_satualiz. Também faremos uma pequena redução no nome de alguns Entes.

# Converter dados para o formato numérico

convNum <- function(x){
  as.numeric(gsub(",", ".", gsub("\\.", "", x)))
}

colunas_converter <- c("vlr_consolid", "sd_estim_satualiz", "sd_estim_catualiz", "vlr_parc_ini")
parcel[, colunas_converter] <- sapply(parcel[, colunas_converter], convNum)

# Limpar os nomes dos entes:
parcel$ente <- gsub("^Governo do ", "", parcel$ente)

Vamos salvar a base no formato .Rds do R para uso posterior:

setwd("..\\dados-produzidos")
saveRDS(parcel, file="Parcelamentos_DtGer30042019.Rds")

2. Parcelamentos ativos

A variável situacao nos dá uma indicação da situação do parcelamento, muito provavelmente na data da geração da base de dados. Os valores possiveis dessa variável são:

unique(parcel$situacao)
[1] "Aceito"                   "Não aceito"               "Quitado"                  "Aguardando doc. assinado" "Aguardando análise"       "Repactuado"              

para servos conservadores em relação o montante de dívida oriunda de parcelamentos que os Entes possuem com seus RPPS, vamos retirar da base os acordos de parcelamento quitados e não aceitos.

parcel <- parcel %>% 
            filter(!(situacao %in% c("Quitado", "Não aceito")))

3. Agregação dos parcelamentos

Vamos a seguir realizar uma agregação dos dados com vistas a mostrar, em relação aos Entes qual a situação em relação a quantidade e valor dos parcelamentos.

tab_parcelamentos <- parcel %>%
  group_by(ente) %>%
  summarise(qtd_acordos = n(),
            valor_consolidado = sum(vlr_consolid, na.rm=TRUE),
            sd_sem_atualiz = sum(sd_estim_satualiz, na.rm = TRUE),
            percentual = round(sd_sem_atualiz / valor_consolidado * 100, 2)) %>%
  arrange(desc(valor_consolidado))
kable(head(tab_parcelamentos))
ente qtd_acordos valor_consolidado sd_sem_atualiz percentual
Estado do Amapá 31 3447912889 2820625396 81.81
Estado do Tocantins 9 794717442 383913282 48.31
Curitiba 5 766061169 575421093 75.11
Florianópolis 24 765330461 518112744 67.70
Betim 13 635762214 451580074 71.03
Campos dos Goytacazes 15 558804387 382784397 68.50



Fluxo Atuarial

Os fluxos atuariais são objeto do Capítulo VII da Portaria 464 de 19.11.2018. Um primeiro aspecto importante a ser considerado é que os mesmos são parte integrante da avaliação atuarial (art. 10).

Estes fluxos tem por objetivo evidenciar as projeções de todas as receitas e despesas do RPPS. Sua estrutura deverá seguir modelos aprovados pela Secretaria de Previdência.

Os modelos do fluxo atuarial e orientações quanto ao preenchimento dos mesmos podem ser obtidos nos seguintes links:

Modelos de planilhas: http://sa.previdencia.gov.br/site/2015/04/Fluxos-atuariais-Para-o-site-em-abril_2015_.zip

Instruções de preenchimento dos fluxos atuariais: http://sa.previdencia.gov.br/site/2015/04/2015-_Instru%C3%A7%C3%B5es-de-Preenchimento-dos-Fluxos-Atuariais.xlsx

Também de interesse são as orientações contidas no documento INSTRUÇÕES GERAIS PARA DOWNLOAD, PREPARAÇÃO E TRANSMISSÃO DOS FLUXOS ATUARIAIS que pode ser baixado no seguinte link: http://sa.previdencia.gov.br/site/2015/01/Instru%C3%A7%C3%B5es-gerais-para-download-prepara%C3%A7%C3%A3o-e-transmiss%C3%A3o-dos-Fluxos-Atuariais-23_jan_20151.pdf

De acordo com este documento, “os valores da linha 157 estão arredondados na casa dos centavos, de forma que os valores dessa linha devem corresponder aos valores informados na aba ‘Resultados / Valores dos Compromissos’ do DRAA”.

É vedado fazer alterações na planilha, de forma que a construção de rotinas de verificação automatizada das mesmas pode ser elaborada sem maiores complicadores.

O layout dos fluxos atuariais é apresentado a seguir:

Para a execução deste procedimento, vamos utilizar os seguintes conjuntos de dados:

Desses arquivos o primeiro e o terceiro estão disponíveis no site da SPrev. O segundo contém os dados do fluxo atuarial a ser examinado e não consta do site. Estes arquivos devem ser requisitados aos RPPS.

O arquivo 2019_FLX_CIVIL_PREV_GA_cnpj - Com cálculo Duração.xlsx será utilizado apenas para obtenção dos dos nomes das variáveis e os correspondentes códigos, o que pode ser feito da seguinte forma:

# Gerar um data frame com os nomes e os códigos das varíaveis

dicionario <- read_excel("2019_FLX_CIVIL_PREV_GA_cnpj - Com cálculo Duração.xlsx", sheet="Flx_CIVIL_PREV_GA", range="A7:BQ8")
dicionario <- t(dicionario)
dicionario <- data.frame(cod = dimnames(dicionario)[[1]], 
                       descr = unname(dicionario[, 1]))
dicionario$cod <- paste("V", dicionario$cod, sep = "")

Obtido o dicionário de dados, vamos dar uma olhada:

# Mostrar o dicionário
knitr::kable(dicionario)
cod descr
V100101 Instante
V100201 Ano
V100301 Taxa de Juros (%)
V100401 Fator de Desconto
V109001 Base de Cálculo da Contribuição Normal
V111000 Benefícios Concedidos - Contribuições dos Aposentados
V111101 Benefícios Concedidos - Contribuições Futuras dos Aposentados - Aposentadorias Programadas
V111201 Benefícios Concedidos - Contribuições Futuras dos Aposentados - Aposentadorias Especiais de Professores
V111301 Benefícios Concedidos - Contribuições Futuras dos Aposentados - Outras Aposentadorias Especiais
V111401 Benefícios Concedidos - Contribuições Futuras dos Aposentados - Aposentadorias por Invalidez
V112000 Benefícios Concedidos - Contribuições dos Pensionistas
V119900 Benefícios Concedidos - Compensação Previdenciária a Receber
V121000 Benefícios a Conceder - Contribuições do Ente
V121100 Benefícios a Conceder - Contribuições Futuras do Ente - Aposentadorias Programadas
V121200 Benefícios a Conceder - Contribuições Futuras do Ente - Aposentadorias Especiais de Professores
V121300 Benefícios a Conceder - Contribuições Futuras do Ente - Outras Aposentadorias Especiais
V121400 Benefícios a Conceder - Contribuições Futuras do Ente - Aposentadorias por Invalidez
V121500 Benefícios a Conceder - Contribuições Futuras do Ente - Pensões Por Morte de Servidores em Atividade
V121600 Benefícios a Conceder - Contribuições Futuras do Ente - Pensões Por Morte de Aposentados
V121700 Benefícios a Conceder - Contribuições Futuras do Ente - Outros Benefícios e Auxílios
V122000 Benefícios a Conceder - Contribuições dos Segurados Ativos
V122100 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Aposentadorias Programadas
V122200 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Aposentadorias Especiais de Professores
V122300 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Outras Aposentadorias Especiais
V122400 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Aposentadorias por Invalidez
V122500 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Pensões Por Morte de Segurados em Atividade
V122600 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Pensões Por Morte de Aposentados
V122700 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Outros Benefícios e Auxílios
V123000 Benefícios a Conceder - Contribuições dos Aposentados
V123100 Benefícios a Conceder - Contribuições Futuras dos Aposentados - Aposentadorias Programadas
V123200 Benefícios a Conceder - Contribuições Futuras dos Aposentados - Aposentadorias Especiais de Professores
V123300 Benefícios a Conceder - Contribuições Futuras dos Aposentados - Outras Aposentadorias Especiais
V123400 Benefícios a Conceder - Contribuições Futuras dos Aposentados - Aposentadorias por Invalidez
V124000 Benefícios a Conceder - Contribuições dos Pensionistas
V124100 Benefícios a Conceder - Contribuições Futuras dos Pensionistas - Aposentadorias Programadas
V124200 Benefícios a Conceder - Contribuições Futuras dos Pensionistas - Aposentadorias Especiais de Professores
V124300 Benefícios a Conceder - Contribuições Futuras dos Pensionistas - Outras Aposentadorias Especiais
V124400 Benefícios a Conceder - Contribuições Futuras dos Pensionistas - Aposentadorias por Invalidez
V124500 Benefícios a Conceder - Contribuições Futuras dos Pensionistas - Pensões Por Morte de Segurados em Atividade
V129000 Benefícios a Conceder - Compensação Previdenciária a Receber
V130101 Plano de Amortização do Déficit Atuarial estabelecido em lei
V130201 Parcelamentos de Débitos Previdenciários
V139901 Valor Atual da Cobertura da Insuficiência Financeira (Outras Receitas)
V190000 (A) TOTAL DAS RECEITAS COM CONTRIBUIÇÕES E COMPENSAÇÃO PREVIDENCIÁRIA
V210000 Benefícios Concedidos - Encargos
V211001 Benefícios Concedidos - Encargos - Aposentadorias Programadas
V212001 Benefícios Concedidos - Encargos - Aposentadorias Especiais de Professores
V213001 Benefícios Concedidos - Encargos - Outras Aposentadorias Especiais
V214001 Benefícios Concedidos - Encargos - Aposentadorias por Invalidez
V215001 Benefícios Concedidos - Encargos - Pensões Por Morte
V219901 Benefícios Concedidos - Encargos - Compensação Previdenciária a Pagar
V220000 Benefícios a Conceder - Encargos
V221000 Benefícios a Conceder - Encargos - Aposentadorias Programadas
V222000 Benefícios a Conceder - Encargos - Aposentadorias Especiais de Professores
V223000 Benefícios a Conceder - Encargos - Outras Aposentadorias Especiais
V224000 Benefícios a Conceder - Encargos - Aposentadorias por Invalidez
V225000 Benefícios a Conceder - Encargos - Pensões Por Morte de Servidores em Atividade
V226000 Benefícios a Conceder - Encargos - Pensões Por Morte de Aposentados
V227000 Benefícios a Conceder - Encargos - Outros Benefícios e Auxílios
V229000 Benefícios a Conceder - Encargos - Compensação Previdenciária a Pagar
V239901 Outras Despesas
V240000 (B) TOTAL DAS DESPESAS COM BENEFÍCIOS DO PLANO
V250001 (C) INSUFICIÊNCIA OU EXCEDENTE FINANCEIRO (A-B)
V260001 (D) SALDO ACUMULADO DO EXERCÍCIO A VALOR ATUAL
V270001 (E) RENTABILIDADE ESPERADA (%)
V280001 (F) Rentabilidade dos Ativos que compõem os Recursos Garantidores
V290001 (G) EVOLUÇÃO DOS RECURSOS GARANTIDORES (Informar o valor acumulado na data da avaliação)
V310000 ( H ) BENEFÍCIOS LÍQUIDOS A VALOR PRESENTE
V320000 ( I ) BENEFÍCIOS LÍQUIDOS PONDERADOS PELO INSTANTE


Importação dos Dados

Os fluxos atuariais não estão, atualmente, disponíveis para download no site da Secretaria de Previdência do Ministério da Economia (SPrev/ME) nem no CADPREVWeb.

Conseguimos um exemplar que usaremos para demonstrar como realizar sua análise usando o R.

Vamos definir uma pequena função que calculará a o Fator de Desconto (V100401) a partir das Taxas de Juros (V100301) informadas no fluxo atuarial.

# Define uma função auxiliar para calcular as taxas de desconto
#--------------------------------------------------------------
calcula_tx_desconto <- function(i, postecipado = TRUE){
  #--------------------
  # i: Variável V100301
  #--------------------
  if(postecipado){
    desconto <- 1 / (1 + i)
  } else {
    desconto <- c(1, 1 / (1 + i[2:length(i)])) 
  }
  round(cumprod(desconto), 5)
}

Vamos iniciar a análise do fluxo atuarial importando os dados contidos no aquivo 2019_FLX_CIVIL_PREV_GA_XXXXXXXXXXXXXX.csv.

A importação do conteúdo do arquivo é feito da seguintes forma:

# Importação dos dados
setwd("..\\dados")
flx_orig <- read.csv2("2019_FLX_CIVIL_PREV_GA_XXXXXXXXXXXXXX.csv", skip = 5, header=FALSE)

# Coloca nomes nas colunas
colfluxo <- c(100101, 100201, 100301, 100401, 109001,   111000, 111101, 111201, 111301,
              111401,   112000, 119900, 121000, 121100, 121200, 121300, 121400, 121500,
              121600,   121700, 122000, 122100, 122200, 122300, 122400, 122500, 122600,
              122700,   123000, 123100, 123200, 123300, 123400, 124000, 124100, 124200,
              124300,   124400, 124500, 129000, 130101, 130201, 139901, 190000, 210000,
              211001,   212001, 213001, 214001, 215001, 219901, 220000, 221000, 222000,
              223000,   224000, 225000, 226000, 227000, 229000, 239901, 240000, 250001,
              260001,   270001, 280001, 290001)

if(ncol(flx_orig) == 67){
  names(flx_orig) <- paste("V", colfluxo, sep="")
} else { 
  names(flx_orig) <- paste("V", c(colfluxo, 310000, 320000), sep="")
}

Ao colocar os nomes das colunas estamos considerando a possibilide do fluxo atuarial conter ou não as variáveis V310000 e V320000 necessárias para o cálculo da Duração do Passivo, requisito introduzido com a Portaria MF 464/18.

Os comandos a seguir irão converter algumas variáveis numéricas que foram importadas como se fossem fatores.

# Conversão de variáveis para o formato numérico
numeros <- sapply(flx_orig, is.factor)
flx_orig[,numeros] <- sapply(flx_orig[,numeros], function(x) as.numeric(gsub(",", ".", gsub("\\.", "", x))))

Feita a importação dos dados, será necessário obter os dados contidos nas linhas denominadas ** Totais de Controle:** e Totais de Controle a Valor Atual: e posteriormente excluí-las da base de dados. Isso é feito com os comandos a seguir:

# Reter as linhas de controle "Totais de Controle" e "Totais de Controle a Valor Atual"
linhas_controle <- filter(flx_orig, !grepl("^\\d+", V100101))

# e excluílas da base de dados
flx_orig <- filter(flx_orig, grepl("^\\d+", V100101))

Feito isso, o próximo passo é realizar o “recálculo” de algumas variáveis conforme mostrado a seguir.

# Identifica se o fluxo é postecipado ou não.
postecipado <- ifelse(flx_orig$V100101[1] == 1, TRUE, FALSE)

# Obtém o ano do fluxo (ano inicial do fluxo...)
ano <- flx_orig$V100201[1]

# Recálculo de algumas variáveis...
flx_orig <- mutate(flx_orig,
                  V100401 = calcula_tx_desconto(i = flx_orig$V100301 / 100, postecipado = postecipado), 
                  V111000 = V111101 + V111201 + V111301 + V111401 ,
                  V121000 = V121100 + V121200 + V121300 + V121400 + V121500 + V121600 + V121700,
                  V122000 = V122100 + V122200 + V122300 + V122400 + V122500 + V122600 + V122700,
                  V123000 = V123100 + V123200 + V123300 + V123400,
                  V124000 = V124100 + V124200 + V124300 + V124400 + V124500,
                  V190000 = V111000 + V112000 + V119900 + V121000 + V122000 + V123000 + V124000 + V129000 + V130101 + V139901,
                  V210000 = V211001 + V212001 + V213001 + V214001 + V215001 + V219901,
                  V220000 = V221000 + V222000 + V223000 + V224000 + V225000 + V226000 + V227000 + V229000 + V239901,
                  V240000 = V210000 + V220000,
                  V250001 = V190000 - V240000)

Recalculadas as variáveis de interesse a partir dos dados informados no fluxo é necessário agora determinar o valor atual das mesmas e compará-las com os valores relativos aos Totais de Controle a Valor Atual que consta da planilha do fluxo atuarial o que mostramos no tópico a seguir.


Identificação de divergências

Neste tópico o objetivo é apresentar as análises de consistência que serão realizadas no fluxo atuarial.

Uma primeira análise básica é a revisão de cálculos. Nas planilhas modelo do fluxo atuarial, algumas células são editáveis e outras são automaticamente calculadas pela planilha em função dos valores fornecidos. Essa análise consistirá apenas em checar se os valores da linha que contém os Totais de Controle a Valor Atual guardam conformidade com os valores recalculados a partir dos dados da planilha. Trata-se apenas de conferência de cálculo.

A seguir ilustramos como realizar esta conferência.

# Codigos a serem conferidos:
#----------------------------
codigos <- c("V109001", "V111000", "V111101", "V111201", "V111301", "V111401", "V112000",
             "V119900", "V121000", "V121100", "V121200", "V121300", "V121400", "V121500",
             "V121600", "V121700", "V122000", "V122100", "V122200", "V122300", "V122400",
             "V122500", "V122600", "V122700", "V123000", "V123100", "V123200", "V123300",
             "V123400", "V124000", "V124100", "V124200", "V124300", "V124400", "V124500",
             "V129000", "V130101", "V130201", "V139901", "V190000", "V210000", "V211001",
             "V212001", "V213001", "V214001", "V215001", "V219901", "V220000", "V221000",
             "V222000", "V223000", "V224000", "V225000", "V226000", "V227000", "V229000",
             "V239901", "V240000", "V250001")

# Obtenção dos valores da linha de controle calculados
#---------------------------------------------
soma_calculado    <- apply(flx_orig[, codigos], 2, sum, na.rm=TRUE) 
soma_vp_calculado <- apply(flx_orig[, codigos], 2, function(x) sum(x * flx_orig$V100401, na.rm = TRUE)) 
soma_calc <- as.data.frame(rbind(soma_calculado, soma_vp_calculado))


# Obtenção das linhas contendo os valores da linha de controle da planilha de fluxo
soma_fluxo <- linhas_controle[, codigos]
row.names(soma_fluxo) <- c("soma_fluxo", "soma_vp_fluxo")


## IDENTIFICAÇÃO DOS CÓDIGOS COM DIVERGÊNCIAS
##-------------------------------------------
dados <- as.data.frame(cbind(t(soma_calc), t(soma_fluxo)))
dados <- transform(dados,
                    dif_soma = soma_calculado - soma_fluxo,
                    dif_vp   = soma_vp_calculado - soma_vp_fluxo)

dados <- subset(dados, dif_vp != 0)[, c("soma_vp_calculado", "soma_vp_fluxo", "dif_vp")]
dados$cod <- row.names(dados)

dados <- merge(dados, dicionario, by="cod")
dados <- dados[, c("cod", "descr", "soma_vp_calculado", "soma_vp_fluxo", "dif_vp")]

dados$dif_vp <- round(dados$dif_vp, 2)

A tabela a seguir apresenta os códigos das colunas para as quais os valores presente das variáveis recalculadas (soma_vp_calculado) diferem do valor presente apresentados no arquivo do fluxo atuarial (soma_vp_fluxo).

knitr::kable(dados, format.args = list(decimal.mark = ",", big.mark = "."))
cod descr soma_vp_calculado soma_vp_fluxo dif_vp
V109001 Base de Cálculo da Contribuição Normal 102.526.743,93 102.526.271,37 472,56
V119900 Benefícios Concedidos - Compensação Previdenciária a Receber 229.841,11 229.838,88 2,23
V121000 Benefícios a Conceder - Contribuições do Ente 19.199.591,41 19.199.502,91 88,50
V121100 Benefícios a Conceder - Contribuições Futuras do Ente - Aposentadorias Programadas 11.323.615,50 11.323.563,30 52,20
V121200 Benefícios a Conceder - Contribuições Futuras do Ente - Aposentadorias Especiais de Professores 4.930.717,44 4.930.694,72 22,72
V121400 Benefícios a Conceder - Contribuições Futuras do Ente - Aposentadorias por Invalidez 676.744,02 676.740,90 3,12
V121500 Benefícios a Conceder - Contribuições Futuras do Ente - Pensões Por Morte de Servidores em Atividade 807.622,14 807.618,42 3,72
V121600 Benefícios a Conceder - Contribuições Futuras do Ente - Pensões Por Morte de Aposentados 1.290.709,99 1.290.704,04 5,95
V121700 Benefícios a Conceder - Contribuições Futuras do Ente - Outros Benefícios e Auxílios 170.182,32 170.181,53 0,79
V122000 Benefícios a Conceder - Contribuições dos Segurados Ativos 9.908.542,97 9.908.500,68 42,29
V122100 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Aposentadorias Programadas 5.864.627,52 5.864.603,11 24,41
V122200 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Aposentadorias Especiais de Professores 2.553.674,28 2.553.663,26 11,02
V122400 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Aposentadorias por Invalidez 342.418,78 342.417,20 1,58
V122500 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Pensões Por Morte de Segurados em Atividade 408.640,46 408.638,58 1,88
V122600 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Pensões Por Morte de Aposentados 653.073,13 653.070,12 3,01
V122700 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos - Outros Benefícios e Auxílios 86.108,81 86.108,41 0,40
V129000 Benefícios a Conceder - Compensação Previdenciária a Receber 6.203.528,16 6.203.468,14 60,02
V130101 Plano de Amortização do Déficit Atuarial estabelecido em lei 3.485.348,78 3.485.303,50 45,28
V190000 (A) TOTAL DAS RECEITAS COM CONTRIBUIÇÕES E COMPENSAÇÃO PREVIDENCIÁRIA 39.026.852,43 39.028.227,15 -1.374,72
V210000 Benefícios Concedidos - Encargos 1.331.527,92 1.331.519,17 8,75
V211001 Benefícios Concedidos - Encargos - Aposentadorias Programadas 1.078.066,63 1.078.059,34 7,29
V214001 Benefícios Concedidos - Encargos - Aposentadorias por Invalidez 192.998,75 192.997,35 1,40
V215001 Benefícios Concedidos - Encargos - Pensões Por Morte 60.462,54 60.462,48 0,06
V220000 Benefícios a Conceder - Encargos 64.156.893,39 64.156.346,48 546,91
V221000 Benefícios a Conceder - Encargos - Aposentadorias Programadas 30.526.723,42 30.526.433,20 290,22
V222000 Benefícios a Conceder - Encargos - Aposentadorias Especiais de Professores 23.287.782,34 23.287.543,91 238,43
V224000 Benefícios a Conceder - Encargos - Aposentadorias por Invalidez 2.240.554,53 2.240.527,95 26,58
V225000 Benefícios a Conceder - Encargos - Pensões Por Morte de Servidores em Atividade 2.673.855,76 2.673.832,24 23,52
V226000 Benefícios a Conceder - Encargos - Pensões Por Morte de Aposentados 4.273.171,95 4.273.213,67 -41,72
V227000 Benefícios a Conceder - Encargos - Outros Benefícios e Auxílios 256.291,13 256.289,95 1,18
V229000 Benefícios a Conceder - Encargos - Compensação Previdenciária a Pagar 898.514,25 898.505,56 8,69
V240000 (B) TOTAL DAS DESPESAS COM BENEFÍCIOS DO PLANO 65.488.421,31 65.487.865,65 555,66
V250001 (C) INSUFICIÊNCIA OU EXCEDENTE FINANCEIRO (A-B) -26.461.568,87 -26.459.638,50 -1.930,37

A tabela mostra diferencas desprezíveis. Para efeitos práticos pode-se, a meu ver, considerarmos que não há divergências. Parece razoável definirmos uma margem de tolerâncias para as divergências.


Conferência com o DRAA

Os dados apresentados no fluxo atuarial devem, também, guardar correspondência com os dados apresentados no DRAA. Assim, nesse tópico nosso objetivo é comparar os valores apresentados no fluxo atuarial com os apresentados no DRAA.

Os dados do DRAA serão obtidos do arquivo Valores_Compromissos.csv disponibilizado pela SPrev.

A seguir faremos a importação da base de dados e seleção dos registros relativos ao Ente e ano a que se refere o fluxo atuarial objeto de nossa análise.

setwd("..\\dados")

passivo <- read.csv2("Valores_Compromissos.csv", stringsAsFactors = FALSE)
names(passivo) <- c("cnpj", "uf", "ente", "ano", "dt_envio", "situacao_draa",
                    "tipo_plano", "tipo_massa", "codigo", "descr", "categoria",
                    "vlr_geracao_atual", "vlr_geracao_futura")

Feita a importação dos dados, será necessário realizar modificação no encoding das variáveis e converter variáveis para o formato numérico.

passivo[] <- sapply(passivo, iconv, from="utf-8", to="latin1")
passivo[,c("vlr_geracao_atual", "vlr_geracao_futura")] <- sapply(passivo[,c("vlr_geracao_atual", "vlr_geracao_futura")], function(x) as.numeric(gsub(",", ".", x)))

Agora precisamos recuperar nessa base de dados as informações relativas ao ente e ao ano do fluxo atuarial que estamos examinando. Isso pode ser feito da seguinte forma:

passivo_ente <- passivo %>%
  filter(uf=="XX", ano==2019, ente=="XX", tipo_plano == "Previdenciário") %>%
  select(codigo, descr, vlr_geracao_atual) %>%
  arrange(codigo)

Nota: Substituir XX pela uf e ente desejados. Essa informação não consta do código acima para não divulgar o RPPS cujo fluxo estamos analisando.

Vamos examinar parte dos dados:

kable(head(passivo_ente, 10), format.args = list(decimal.mark = ",", big.mark = "."))
codigo descr vlr_geracao_atual
109001 Valor Atual dos Salários Futuros 102.526.271,4
110000 VALOR ATUAL DAS CONTRIBUIÇÕES FUTURAS E COMPENSAÇÕES A RECEBER - BENEFÍCIOS CONCEDIDOS 229.838,9
111000 Benefícios Concedidos - Contribuições Futuras dos Aposentados 0,0
112000 Benefícios Concedidos - Contribuições Futuras dos Pensionistas 0,0
119900 Benefícios Concedidos - Compensação Previdenciária a Receber 229.838,9
120000 VALOR ATUAL DAS CONTRIBUIÇÕES FUTURAS E COMPENSAÇÕES A RECEBER - BENEFÍCIOS A CONCEDER: 35.311.471,7
121000 Benefícios a Conceder - Contribuições Futuras do Ente 19.199.502,9
122000 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos 9.908.500,7
123000 Benefícios a Conceder - Contribuições Futuras dos Aposentados 0,0
124000 Benefícios a Conceder - Contribuições Futuras dos Pensionistas 0,0

Agora temos que juntar estes dados ( DRAA ) com os dados relativos ao fluxo atuarial “conferido” e o “declarado”, que já foram obtidos anteriormente. Mas antes, será necessário uma pequena organização dos dados para que seja possível juntar as duas bases de dados.

soma_calc <- as.data.frame(t(soma_calc))
soma_calc$cod <- row.names(soma_calc)


soma_fluxo <- as.data.frame(t(soma_fluxo))
soma_fluxo$cod <- row.names(soma_fluxo)

dados_fluxo <- merge(soma_calc, soma_fluxo,
                    by.x="cod",
                    by.y="cod")

Vamos agora juntar os dados oriundos do fluxo atuarial com os dados oriundos do DRAA:

passivo_ente$codigo <- paste("V", passivo_ente$codigo, sep = "")

conferencia <- merge(passivo_ente, dados_fluxo[,c("cod", "soma_vp_calculado", "soma_vp_fluxo")],
                  by.x = "codigo",
                  by.y = "cod")

# Calcula diferenças entre o DRAA e Fluxo Atuarial
conferencia <- transform(conferencia,
                         dif = round(vlr_geracao_atual - soma_vp_calculado, 2))

Vamos olhar o resultado obtido:

# Apresentação do resultado (omitindo a variável "soma_vp_fluxo")
kable(conferencia[,c("codigo", "descr", "vlr_geracao_atual", "soma_vp_calculado", "dif")],
      format.args = list(decimal.mark = ",", big.mark = "."))
codigo descr vlr_geracao_atual soma_vp_calculado dif
V109001 Valor Atual dos Salários Futuros 102.526.271,37 102.526.743,93 -472,56
V111000 Benefícios Concedidos - Contribuições Futuras dos Aposentados 0,00 0,00 0,00
V112000 Benefícios Concedidos - Contribuições Futuras dos Pensionistas 0,00 0,00 0,00
V119900 Benefícios Concedidos - Compensação Previdenciária a Receber 229.838,88 229.841,11 -2,23
V121000 Benefícios a Conceder - Contribuições Futuras do Ente 19.199.502,91 19.199.591,41 -88,50
V122000 Benefícios a Conceder - Contribuições Futuras dos Segurados Ativos 9.908.500,68 9.908.542,97 -42,29
V123000 Benefícios a Conceder - Contribuições Futuras dos Aposentados 0,00 0,00 0,00
V124000 Benefícios a Conceder - Contribuições Futuras dos Pensionistas 0,00 0,00 0,00
V129000 Benefícios a Conceder - Compensação Previdenciária a Receber 6.203.468,14 6.203.528,16 -60,02
V130101 Valor Atual do Plano de Amortização do Déficit Atuarial estabelecido em lei 3.485.303,50 3.485.348,78 -45,28
V130201 Valor Atual dos Parcelamentos de Débitos Previdenciários 1.613,04 1.613,04 0,00
V210000 VALOR ATUAL DOS BENEFÍCIOS FUTUROS - ENCARGOS DE BENEFÍCIOS CONCEDIDOS 1.331.519,17 1.331.527,92 -8,75
V220000 VALOR ATUAL DOS BENEFÍCIOS FUTUROS - ENCARGOS DE BENEFÍCIOS A CONCEDER: 64.156.346,48 64.156.893,39 -546,91
V221000 Benefícios a Conceder - Encargos - Aposentadorias Programadas 30.526.433,20 30.526.723,42 -290,22
V222000 Benefícios a Conceder - Encargos - Aposentadorias Especiais de Professores 23.287.543,91 23.287.782,34 -238,43
V223000 Benefícios a Conceder - Encargos - Outras Aposentadorias Especiais 0,00 0,00 0,00
V224000 Benefícios a Conceder - Encargos - Aposentadorias por Invalidez 2.240.527,95 2.240.554,53 -26,58
V225000 Benefícios a Conceder - Encargos - Pensões Por Morte de Servidores em Atividade 2.673.832,24 2.673.855,76 -23,52
V226000 Benefícios a Conceder - Encargos - Pensões Por Morte de Aposentados 4.273.213,67 4.273.171,95 41,72
V227000 Benefícios a Conceder - Encargos - Outros Benefícios e Auxílios 256.289,95 256.291,13 -1,18
V229000 Benefícios a Conceder - Encargos - Compensação Previdenciária a Pagar 898.505,56 898.514,25 -8,69

Lembrando que as variáveis são:

vlr_geracao_atual - Valor atual obtido do DRAA
soma_vp_calculado - Valor atual recalculado a partir do fluxo
soma_vp_fluxo - Valor atual apresentado no fluxo


Análise de Razoabilidade

Outro grupo de análises refere-se a análises de razoabilidade. Estas análises consistirão basicamente em análises gráficas. O objetivo é tentar identificar comportamentos anômalos de algumas varáveis.

Exemplo: em se tratando de Geração Atual, que é um grupo fechado, é razoável que a variável V109001 (Valor Atual dos Salários Futuros ou Base de Cálculo da Contribuição Normal) apresente um comportamento decrescente ao longo dos anos, fato que deverá ser conferido no gráfico dessa variável que apresentamos a seguir juntamente com o gráfico de outras variáveis.

Valor atual dos salários futuros (V109001)

ggplot(flx_orig, aes(x=V100201, y=V109001 / 1e6)) +
  geom_line() +
  ylab("Valor Atual dos Salários Futuros \n(Em Milhões)") +
  xlab("Anos")

O gráfico se comporta como esperado.

(A) Total das receitas com contribuições e compensação previdenciária (V190000)

ggplot(flx_orig, aes(x=V100201, y=V190000 / 1e6)) +
  geom_line() +
  ylab("Total de Receitas com Contribuições e Comprev \n(Em Milhões)") +
  xlab("Anos")

Também esta variável se comporta conforme o esperado.

(B) Total das despesas com benefícios do plano (V240000)

ggplot(flx_orig, aes(x=V100201, y=V240000 / 1e6)) +
  geom_line() +
  ylab("Total das Despesas com Benefícios do Plano \n(Em Milhões)") +
  xlab("Anos")

(C) Insuficiência ou excedente financeiro (A-B) (V250001)

ggplot(flx_orig, aes(x=V100201, y=V250001 / 1e6)) +
  geom_line() +
  ylab("Resultado Financeiro \n(Em Milhões)") +
  xlab("Anos")



ISP - Indicador de Situação Previdenciária

Nosso objetivo neste tópico é mostrar algumas possibilidades de análise do Indicador de Situação Previdenciária - ISP.

Em particular uma análise possível é verificar a posiçao do indicador de um Ente em relação aos demais Entes do Estado.

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

setwd("..\\dados")
isp <- read_excel("RESULTADO-ISP-2018.01.xlsx")
isp <- isp[, -c(31, 32, 33, 34)]
names(isp) <- c("ENTE",    "UF", "REGIAO", "GRUPO", "ESCRITURA",    "APLICFIN",
                "CONTRIB", "COBSERVPUB", "CONCBENEF",   "EQUILATUAR",   "PARTSEG",  "PARCELTEMP",
                "REGRAS",    "UTILRECPREV", "CONF", "CLASSIF_CONF", "ENDIVID",  "SOLVFIN",
                "RAZAOAI", "COMPROMATUAR",  "SOLVATUAR",    "EQUIL",    "CLASSIF_EQUIL",
                "DRAA",    "DIPR",  "DPIN", "DAIR", "TRANSP",   "CLASSIF_TRANSP",   "ISP201801")

isp$ENTE <- gsub("^GOVERNO DO ", "", isp$ENTE)

Feita a importação dos dados, algumas análises com esse conjunto de dados são possíveis e serão aqui acrescidas à medida que o tempo permitir.

Podemos visualizar o indicador de um determinado RPPS em comparação com os dos demais RPPS de um mesmo Estado, ou comparar o indicador de um RPPS com os RPPS do mesmo porte.

Por exemplo, vamos ver como o RPPS do municipio de Campos dos Goytacazes no ERJ se compara com os demais RPPS do Estado do RJ com relação ao ISP:

ESTADO <- "RJ"
RPPS <- "CAMPOS DOS GOYTACAZES - RJ"

isp %>%
  filter(UF == ESTADO) %>%
  ggplot(aes(x=as.factor(UF), y=ISP201801)) +
  geom_boxplot() +
  labs(x="", y = "ISP") +
  geom_dotplot(binaxis = "y", stackdir="center", fill="lightgray", color="lightgray") +
  geom_point(y=isp$ISP201801[isp$ENTE == RPPS], color="blue", size=3, shape=8) +
  theme_bw()

Vê que o RPPS em questão está no quartil inferior da distribuição (marcado no gráfico com um asterisco azul).

Uma forma interativa de visualização do ISP pode ser obtida no seguinte site:https://marcosfs2006.shinyapps.io/Visualiza_ISP/

A Resolução Atricon 5/2018 orienta no sentido de se utilizar como referência o Indicador de Situação Previdenciária para efeito de definir os RPPS a serem avaliados nas Contas de Governo. (Item 24, m, III)

Este pode ser um ponto a ser desenvolvido posteriormente.