MIP 2021

# Limpandoo ambiente
rm(list = ls())

# =========== Área de bibliotecas =================
# Pacotes necessários
if (!require("httr")) install.packages("httr")
## Carregando pacotes exigidos: httr
if (!require("readxl")) install.packages("readxl")
## Carregando pacotes exigidos: readxl
if (!require("writexl")) install.packages("writexl")
## Carregando pacotes exigidos: writexl
if (!require("fs")) install.packages("fs")
## Carregando pacotes exigidos: fs
if (!require("openxlsx")) install.packages("openxlsx")
## Carregando pacotes exigidos: openxlsx
library(httr)
library(readxl)
library(writexl)
library(openxlsx)
library(fs)

# =========== Área do código principal ============
#
# Download das Tabela sde REcursos e Usos
#
# URL do ZIP com as Tabelas de Recursos e Usos (ajuste conforme o ano desejado)
url <- "https://ftp.ibge.gov.br/Contas_Nacionais/Sistema_de_Contas_Nacionais/2021/tabelas_xls/tabelas_de_recursos_e_usos/nivel_68_2010_2021_xls.zip"
#
# Nome do arquivo para salvar localmente
ArquivoDestino <- "Recursos_Usos_2021.zip"

# Diretório de destino
PastaDestino <- "./TRU_2021"
dir_create(PastaDestino)

# Download do arquivo ZIP
GET(url, write_disk(file.path(PastaDestino,ArquivoDestino), overwrite = TRUE))
## Response [https://ftp.ibge.gov.br/Contas_Nacionais/Sistema_de_Contas_Nacionais/2021/tabelas_xls/tabelas_de_recursos_e_usos/nivel_68_2010_2021_xls.zip]
##   Date: 2025-07-25 11:40
##   Status: 200
##   Content-Type: application/zip
##   Size: 1.84 MB
## <ON DISK>  C:\Users\katha\OneDrive\Documentos\FACULDADE\email\fl e bl 2021\TRU_2021\Recursos_Usos_2021.zip
# Extração do ZIP
unzip(file.path(PastaDestino,ArquivoDestino),
      files = NULL,
      overwrite = TRUE,
      exdir = PastaDestino)
#
# Lendo as Tabelas
nAnoMIP = 2021
nSetores = 68
nProdutos = 128
# Lendo Oferta

dSheet <- read_excel(file.path(PastaDestino,paste0("68_tab1_", nAnoMIP, ".xls")),
                     sheet = "oferta")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
mMatriz = dSheet[5:132, 3:9]
mOferta= apply(as.matrix.noquote(mMatriz),2,as.numeric)

# lendo Producao
dSheet <- read_excel(file.path(PastaDestino,paste0("68_tab1_", nAnoMIP, ".xls")),
                     sheet = "producao")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
## • `` -> `...12`
## • `` -> `...13`
## • `` -> `...14`
## • `` -> `...15`
## • `` -> `...16`
## • `` -> `...17`
## • `` -> `...18`
## • `` -> `...19`
## • `` -> `...20`
## • `` -> `...21`
## • `` -> `...22`
## • `` -> `...23`
## • `` -> `...24`
## • `` -> `...25`
## • `` -> `...26`
## • `` -> `...27`
## • `` -> `...28`
## • `` -> `...29`
## • `` -> `...30`
## • `` -> `...31`
## • `` -> `...32`
## • `` -> `...33`
## • `` -> `...34`
## • `` -> `...35`
## • `` -> `...36`
## • `` -> `...37`
## • `` -> `...38`
## • `` -> `...39`
## • `` -> `...40`
## • `` -> `...41`
## • `` -> `...42`
## • `` -> `...43`
## • `` -> `...44`
## • `` -> `...45`
## • `` -> `...46`
## • `` -> `...47`
## • `` -> `...48`
## • `` -> `...49`
## • `` -> `...50`
## • `` -> `...51`
## • `` -> `...52`
## • `` -> `...53`
## • `` -> `...54`
## • `` -> `...55`
## • `` -> `...56`
## • `` -> `...57`
## • `` -> `...58`
## • `` -> `...59`
## • `` -> `...60`
## • `` -> `...61`
## • `` -> `...62`
## • `` -> `...63`
## • `` -> `...64`
## • `` -> `...65`
## • `` -> `...66`
## • `` -> `...67`
## • `` -> `...68`
## • `` -> `...69`
## • `` -> `...70`
## • `` -> `...71`
mMatriz = dSheet[5:132, 3:70]
mProducao= apply(as.matrix.noquote(mMatriz),2,as.numeric)

# Lendo Importação
dSheet <- read_excel(file.path(PastaDestino,paste0("68_tab1_", nAnoMIP, ".xls")),
                     sheet = "importacao")
## New names:
## • `` -> `...2`
## • `` -> `...3`
mMatriz = dSheet[5:132, 3]
vImportacao= apply(as.matrix(mMatriz),2,as.numeric)

#lendo Consumo Intermediário
dSheet <- read_excel(file.path(PastaDestino,paste0("68_tab2_", nAnoMIP, ".xls")),
                     sheet = "CI")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
## • `` -> `...12`
## • `` -> `...13`
## • `` -> `...14`
## • `` -> `...15`
## • `` -> `...16`
## • `` -> `...17`
## • `` -> `...18`
## • `` -> `...19`
## • `` -> `...20`
## • `` -> `...21`
## • `` -> `...22`
## • `` -> `...23`
## • `` -> `...24`
## • `` -> `...25`
## • `` -> `...26`
## • `` -> `...27`
## • `` -> `...28`
## • `` -> `...29`
## • `` -> `...30`
## • `` -> `...31`
## • `` -> `...32`
## • `` -> `...33`
## • `` -> `...34`
## • `` -> `...35`
## • `` -> `...36`
## • `` -> `...37`
## • `` -> `...38`
## • `` -> `...39`
## • `` -> `...40`
## • `` -> `...41`
## • `` -> `...42`
## • `` -> `...43`
## • `` -> `...44`
## • `` -> `...45`
## • `` -> `...46`
## • `` -> `...47`
## • `` -> `...48`
## • `` -> `...49`
## • `` -> `...50`
## • `` -> `...51`
## • `` -> `...52`
## • `` -> `...53`
## • `` -> `...54`
## • `` -> `...55`
## • `` -> `...56`
## • `` -> `...57`
## • `` -> `...58`
## • `` -> `...59`
## • `` -> `...60`
## • `` -> `...61`
## • `` -> `...62`
## • `` -> `...63`
## • `` -> `...64`
## • `` -> `...65`
## • `` -> `...66`
## • `` -> `...67`
## • `` -> `...68`
## • `` -> `...69`
## • `` -> `...70`
## • `` -> `...71`
mMatriz = dSheet[5:132, 3:70]
mCI= apply(as.matrix.noquote(mMatriz),2,as.numeric)

#lendo demanda
dSheet <- read_excel(file.path(PastaDestino,paste0("68_tab2_", nAnoMIP, ".xls")),
                     sheet = "demanda")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
mMatriz = dSheet[5:132, 3:8]
mDemanda= apply(as.matrix.noquote(mMatriz),2,as.numeric)

#lendo VA
dSheet <- read_excel(file.path(PastaDestino,paste0("68_tab2_", nAnoMIP, ".xls")),
                     sheet = "VA")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
## • `` -> `...12`
## • `` -> `...13`
## • `` -> `...14`
## • `` -> `...15`
## • `` -> `...16`
## • `` -> `...17`
## • `` -> `...18`
## • `` -> `...19`
## • `` -> `...20`
## • `` -> `...21`
## • `` -> `...22`
## • `` -> `...23`
## • `` -> `...24`
## • `` -> `...25`
## • `` -> `...26`
## • `` -> `...27`
## • `` -> `...28`
## • `` -> `...29`
## • `` -> `...30`
## • `` -> `...31`
## • `` -> `...32`
## • `` -> `...33`
## • `` -> `...34`
## • `` -> `...35`
## • `` -> `...36`
## • `` -> `...37`
## • `` -> `...38`
## • `` -> `...39`
## • `` -> `...40`
## • `` -> `...41`
## • `` -> `...42`
## • `` -> `...43`
## • `` -> `...44`
## • `` -> `...45`
## • `` -> `...46`
## • `` -> `...47`
## • `` -> `...48`
## • `` -> `...49`
## • `` -> `...50`
## • `` -> `...51`
## • `` -> `...52`
## • `` -> `...53`
## • `` -> `...54`
## • `` -> `...55`
## • `` -> `...56`
## • `` -> `...57`
## • `` -> `...58`
## • `` -> `...59`
## • `` -> `...60`
## • `` -> `...61`
## • `` -> `...62`
## • `` -> `...63`
## • `` -> `...64`
## • `` -> `...65`
## • `` -> `...66`
## • `` -> `...67`
## • `` -> `...68`
## • `` -> `...69`
## • `` -> `...70`
mMatriz = dSheet[5:18, 2:69]
mVA= apply(as.matrix.noquote(mMatriz),2,as.numeric)





# Calculando Matriz e distribuição sem Variação de estoque
nColunaEstoque = 6
mDemandaFinalSemEstoque <- mDemanda
mDemandaFinalSemEstoque[, nColunaEstoque] <- 0.0
mConsumoTotalSemEstoque <- cbind(mCI, mDemandaFinalSemEstoque)

vTotalProduto = rowSums(mConsumoTotalSemEstoque)
mDistribuicao = mConsumoTotalSemEstoque / vTotalProduto
mDistribuicao[is.na(mDistribuicao)] <- 0

# Distribuir  IPI, ICMS e OILL
nColunaIPI = 5 
mValorIPI = mOferta[,nColunaIPI] * mDistribuicao
nColunaICMS = 6
mValorICMS = mOferta[,nColunaICMS] * mDistribuicao
nColunaOILL = 7
mValorOILL = mOferta[,nColunaOILL] * mDistribuicao



# Distribui a margem  do comércio 
nColunaMargemComercio = 2
nColunaMargemTransporte = 3

vVetorEntrada <-mOferta[, nColunaMargemComercio]
vMargem <- c(93, 94)

vPropMargem <- vVetorEntrada[vMargem[1]:vMargem[2]] / sum(vVetorEntrada[vMargem[1]:vMargem[2]])
mMargemComercio <- vVetorEntrada * mDistribuicao

mMargemDistribuida <- colSums(mMargemComercio[1:(vMargem[1]-1), ]) + colSums(mMargemComercio[(vMargem[2]+1):nrow(mMargemComercio), ])

mMargemComercio[vMargem[1]:vMargem[2], ] <- t(t(vPropMargem))  %*% mMargemDistribuida * (-1)
options(scipen = 0)
colSums(mMargemComercio)
##          ...3          ...4          ...5          ...6          ...7 
## -5.627408e-13  4.677682e-14 -1.715096e-13  4.692676e-14 -8.880952e-13 
##          ...8          ...9         ...10         ...11         ...12 
## -1.247114e-12 -7.759765e-14  1.586953e-12  4.887063e-14 -7.725154e-12 
##         ...13         ...14         ...15         ...16         ...17 
## -1.011691e-13 -2.427364e-13  1.928457e-13 -6.211698e-13 -8.859059e-14 
##         ...18         ...19         ...20         ...21         ...22 
##  1.927451e-13 -9.909296e-13 -1.426240e-13  3.263917e-13  1.690553e-13 
##         ...23         ...24         ...25         ...26         ...27 
## -1.645906e-12  4.104495e-13  7.843379e-14 -7.884804e-13 -2.322031e-13 
##         ...28         ...29         ...30         ...31         ...32 
## -6.735446e-13  1.107447e-13 -1.153244e-12 -1.956491e-13  6.054046e-13 
##         ...33         ...34         ...35         ...36         ...37 
## -1.526557e-14 -3.948175e-12 -2.520428e-12  2.564893e-13 -6.147860e-15 
##         ...38         ...39         ...40         ...41         ...42 
## -9.953149e-14 -9.674483e-13 -3.781420e-13 -1.447731e-13  3.896883e-13 
##         ...43         ...44         ...45         ...46         ...47 
## -1.110223e-12  1.204370e-12 -1.971978e-12 -2.715287e-14  3.497203e-15 
##         ...48         ...49         ...50         ...51         ...52 
## -8.704149e-14 -9.435508e-14 -1.570688e-12 -6.805667e-14 -6.933343e-14 
##         ...53         ...54         ...55         ...56         ...57 
## -4.796163e-14 -1.434963e-13  6.927792e-14  1.637579e-14  1.043610e-14 
##         ...58         ...59         ...60         ...61         ...62 
## -1.135481e-13 -3.304024e-13  1.444400e-13 -5.200285e-13 -4.218847e-14 
##         ...63         ...64         ...65         ...66         ...67 
## -1.088019e-13 -1.687539e-14 -1.709743e-13 -1.890932e-12  5.577760e-13 
##         ...68         ...69         ...70          ...3          ...4 
## -6.586398e-14 -5.253575e-13  0.000000e+00 -1.743850e-11 -2.642331e-14 
##          ...5          ...6          ...7          ...8 
##  0.000000e+00 -2.328182e-11 -6.821210e-12  0.000000e+00
# Distribui a margem  do transporte 

vVetorEntrada <-mOferta[, nColunaMargemTransporte]
vMargem <- c(95, 98)

vPropMargem <- vVetorEntrada[vMargem[1]:vMargem[2]] / sum(vVetorEntrada[vMargem[1]:vMargem[2]])
mMargemTransporte <- vVetorEntrada * mDistribuicao
mMargemDistribuida <- colSums(mMargemTransporte[1:(vMargem[1]-1), ]) + colSums(mMargemTransporte[(vMargem[2]+1):nrow(mMargemTransporte), ])
mMargemTransporte[vMargem[1]:vMargem[2], ] <- t(t(vPropMargem))  %*% mMargemDistribuida * (-1)


# Calcula matriz de distribuição sem exportação
nColunaExportacao <- 1
mDemandaFinalSemExportacao <- mDemandaFinalSemEstoque
mDemandaFinalSemExportacao[, nColunaExportacao] <- 0.0
mConsumoTotalSemExportacao <- cbind(mCI, mDemandaFinalSemExportacao)

vTotalProduto <- rowSums(mConsumoTotalSemExportacao)
mDistribuicaoImportacao <- mConsumoTotalSemExportacao / vTotalProduto
mDistribuicaoImportacao[is.na(mDistribuicaoImportacao)] <- 0

# Distribuir  II e importação
nColunaII <- 4
mValorII <- mOferta[, nColunaII] * mDistribuicaoImportacao
mImportacao <- vImportacao[,] * mDistribuicaoImportacao


# Calcula o consumo total a preço basicos
mConsumoTotalPrecoMercado <- cbind(mCI, mDemanda)
mConsumoTotalPrecoBase <- mConsumoTotalPrecoMercado - mMargemComercio - mMargemTransporte - mValorIPI - mValorICMS - mValorOILL - mImportacao - mValorII



# Estimação da MIP setor x setor utilizando a tecnologia baseada na indústria

nLinhasVA <- 14
nLinhaVBP <- 13
nLinhaOcupacoes <- 14
vVBP <- mVA[nLinhaVBP,]
vOcupacoes <- mVA[nLinhaOcupacoes,]

mU =mConsumoTotalPrecoBase[,1:nSetores]
mE =mConsumoTotalPrecoBase[,(nSetores+1):ncol(mConsumoTotalPrecoBase)]
options(scipen = 2)

vX = mVA[nLinhaVBP,]
mXChapeu = diag(1/vX)

mB = mU %*% mXChapeu

mV = t(mProducao)
vQ = colSums(mV)
mQChapeu = diag(1/vQ)

mD = mV %*% mQChapeu

mA = mD %*% mB
mY = mD %*% mE
mZ = mD %*% mU

mI = diag(nSetores)

mLeontief = (mI - mA)

vDemandaTotal = rowSums(mZ) + rowSums(mY)
nDemandaTotal = sum(vDemandaTotal)

mTConsumoItermediario = rbind(colSums(mValorII[,1:nSetores]),
                              colSums(mValorIPI[,1:nSetores]),
                              colSums(mValorICMS[,1:nSetores]),
                              colSums(mValorOILL[,1:nSetores]) )

nLinhaVA=1
vOfertaTotal = colSums(mZ) + colSums(mImportacao[,1:nSetores]) +
  colSums(mTConsumoItermediario) + mVA[nLinhaVA,]    
nOfertaTotal = sum(vOfertaTotal)
vDiferencas = vDemandaTotal - vOfertaTotal
vDiferencaTotal = sum(vDiferencas)
vDiferencas
##          ...3          ...4          ...5          ...6          ...7 
##  0.000000e+00  5.820766e-11  7.275958e-12  0.000000e+00  1.164153e-10 
##          ...8          ...9         ...10         ...11         ...12 
##  0.000000e+00 -3.637979e-12 -5.820766e-11  1.455192e-11 -5.820766e-11 
##         ...13         ...14         ...15         ...16         ...17 
##  0.000000e+00 -7.275958e-12  1.455192e-11 -1.455192e-11  1.455192e-11 
##         ...18         ...19         ...20         ...21         ...22 
##  7.275958e-12  0.000000e+00 -3.637979e-12  0.000000e+00  2.910383e-11 
##         ...23         ...24         ...25         ...26         ...27 
##  5.820766e-11  0.000000e+00 -1.455192e-11  0.000000e+00  0.000000e+00 
##         ...28         ...29         ...30         ...31         ...32 
##  2.910383e-11  0.000000e+00  1.455192e-11  0.000000e+00 -2.910383e-11 
##         ...33         ...34         ...35         ...36         ...37 
##  0.000000e+00 -5.820766e-11  0.000000e+00  0.000000e+00  0.000000e+00 
##         ...38         ...39         ...40         ...41         ...42 
##  0.000000e+00  0.000000e+00  0.000000e+00  1.455192e-11  0.000000e+00 
##         ...43         ...44         ...45         ...46         ...47 
##  0.000000e+00  0.000000e+00 -5.820766e-11  0.000000e+00  0.000000e+00 
##         ...48         ...49         ...50         ...51         ...52 
## -2.910383e-11  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00 
##         ...53         ...54         ...55         ...56         ...57 
##  0.000000e+00  0.000000e+00 -1.164153e-10  0.000000e+00  0.000000e+00 
##         ...58         ...59         ...60         ...61         ...62 
##  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00 
##         ...63         ...64         ...65         ...66         ...67 
## -2.328306e-10  0.000000e+00  0.000000e+00  0.000000e+00  5.820766e-11 
##         ...68         ...69         ...70 
##  0.000000e+00  2.910383e-11  0.000000e+00
# Montagem da Matriz - Preparação dos totais


vMConsumoIntermdiario = colSums(mImportacao[,1:nSetores])
vMDemandaFinal        = colSums(mImportacao[,nSetores+1:6])

vValorIIConsumoIntermdiario = colSums(mValorII[,1:nSetores])
vValorIIDemandaFinal        = colSums(mValorII[,nSetores+1:6])

vValorIPIConsumoIntermdiario = colSums(mValorIPI[,1:nSetores])
vValorIPIDemandaFinal        = colSums(mValorIPI[,nSetores+1:6])

vValorICMSConsumoIntermdiario = colSums(mValorICMS[,1:nSetores])
vValorICMSDemandaFinal        = colSums(mValorICMS[,nSetores+1:6])

vValorOIConsumoIntermdiario = colSums(mValorOILL[,1:nSetores])
vValorOIDemandaFinal        = colSums(mValorOILL[,nSetores+1:6])

mTConsumoIntermediario = rbind(vValorIIConsumoIntermdiario, vValorIPIConsumoIntermdiario, 
                               vValorICMSConsumoIntermdiario, vValorOIConsumoIntermdiario)

mTDemandaFinal = rbind(vValorIIDemandaFinal, vValorIPIDemandaFinal, 
                       vValorICMSDemandaFinal, vValorOIDemandaFinal)

# Montagem da Oferta
vOfertaNacional <- colSums(mZ)
vOfertaTributos <- colSums(mTConsumoIntermediario)
vOfertaConsumoIntermediario <- vOfertaNacional + vMConsumoIntermdiario + vOfertaTributos
mOfertaConsumoIntermediario <- rbind(mZ, vOfertaNacional, vMConsumoIntermdiario, mTConsumoIntermediario,
                                     vOfertaConsumoIntermediario, mVA)

# Calculando Demanda Intermediaria Total
mTotalDemandaConsumoIntermediario <- rowSums(mOfertaConsumoIntermediario)

# Montagem da Demanda Final

mTDemandaFinal <- rbind(vValorIIDemandaFinal, vValorIPIDemandaFinal, vValorICMSDemandaFinal, vValorOIDemandaFinal)
vTotalLinhaDemandaNacional <- colSums(mY)
mDemanda <- rbind(mY, vTotalLinhaDemandaNacional, vMDemandaFinal, mTDemandaFinal)
vTotalLinhaDemandaFinal <- colSums(mDemanda)
mDemandaFinal <- rbind(mDemanda, vTotalLinhaDemandaFinal, matrix(0, nrow = 14, ncol = 6))

vTotalDemandaFinal <- rowSums(mDemandaFinal)

vDemandaTotal <- mTotalDemandaConsumoIntermediario + vTotalDemandaFinal
mMIP <- cbind(mOfertaConsumoIntermediario, mTotalDemandaConsumoIntermediario, mDemandaFinal,
              vTotalDemandaFinal, vDemandaTotal)


# lendo Nome de Setores
lNomeSetores <- c()
for (i in 1:nSetores) {
  lNomeSetores[[i]] <- dSheet[3, 1 + i]
  lNomeSetores[[i]] <- substr(lNomeSetores[[i]],6,50)
}

lNomeVA = c()
for (i in 1:14) {
  lNomeVA[[i]] <- dSheet[4+i, 1]
  lNomeVA[[i]] <- substr(lNomeVA[[i]],1,60)
}

sColsLabel <- c()
sRowsLabel <- c()

sRowsLabel <- c(lNomeSetores, "Oferta Nacional", "Importação", "II", "IPI", "ICMS", "OI", "Oferta Intermediária Total", lNomeVA)

sColsLabel <- c(lNomeSetores, "Consumo Intermediário", "Exportação", "Consumo do Governo", "Consumo das ISFLSF", "Consumo das Famílias", "FBCF", "Variação do estoque", "Demanda Final", "Demanda Total")

# Definindo o caminho de saída

PastaDestino <- "./TRU_2021"

sCaminhoOutput <- "./Outputs/"
dir_create(sCaminhoOutput)
nome_arquivo <- paste0("MIP_", as.character(nAnoMIP), "_", as.character(nSetores), "x", as.character(nSetores), "MetodoGuilhoto.xlsx")



# Converter a matriz 'mMIP' em um data frame
df <- as.data.frame(mMIP)
rownames(df) <- sRowsLabel
colnames(df) <- sColsLabel


# Criar um novo arquivo Excel
# e adicionar a planilha com os dados
wb <- createWorkbook()
# Definindo o caminho de saída
addWorksheet(wb, "MIP")
# Adicionando os dados à planilha
writeData(wb, "MIP", df, rowNames = TRUE)

decimal2 <- createStyle(numFmt = "0.00")
# Adicionando o estilo de formatação
addStyle(wb, sheet = "MIP", style = decimal2,
         cols = 1:77, rows = 1:89, gridExpand = TRUE)
# Salvando o arquivo Excel
saveWorkbook(wb, paste0(sCaminhoOutput, nome_arquivo), overwrite = TRUE)
print("Acabou")
## [1] "Acabou"

PCVA

# =========== Área de bibliotecas =================
# Pacotes necessários
if (!require("openxlsx")) install.packages("openxlsx")
if (!require("fs")) install.packages("fs")
if (!require("dplyr")) install.packages("dplyr")
## Carregando pacotes exigidos: dplyr
## 
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union
if (!require("kableExtra")) install.packages("kableExtra")
## Carregando pacotes exigidos: kableExtra
## 
## Anexando pacote: 'kableExtra'
## O seguinte objeto é mascarado por 'package:dplyr':
## 
##     group_rows
library(openxlsx)
library(fs)
library(dplyr)
library(kableExtra)


# =========== Área do código principal ============

# 1. Leitura da Matriz e preparação dos dados

nSetores = 68

PastaMipEstimada <- "./Outputs"
PastaMipEstimada <- fs::path_expand(PastaMipEstimada)
dSheet <- read.xlsx(file.path(PastaMipEstimada,"MIP_2021_68x68MetodoGuilhoto.xlsx"),
                    sheet = "MIP",
                    rowNames = TRUE)
mMatriz  <- as.matrix(dSheet)
lNomeSetores <- rownames(dSheet)[1:nSetores]
dimnames(mMatriz) <- NULL

mZ <- mMatriz[1:nSetores, 1:nSetores]
mVA       <- mMatriz[76:89, 1:nSetores]
nLinhaVBP <- 13
vX        <- mVA[nLinhaVBP,]


# 2. Cálculo do Modelo de Leontief
#---------------------------------------------------------------------------
mA <- t(t(mZ) / vX)
mI <- diag(nSetores)
mLeontief <- solve(mI - mA)


# 3. Cálculo dos Índices de Ligação (Hirschman-Rasmussen)
#---------------------------------------------------------------------------
mB = mLeontief

# Médias dos elementos da matriz de Leontief
vMediaLinhasB <- apply(mB, 1, mean)
vMediaColunasB <- apply(mB, 2, mean)
vMediaTodosElementosB <- sum(mB) / nSetores^2

# Cálculo dos índices
vIndiceLigacaoParaTras <- vMediaColunasB / vMediaTodosElementosB
vIndiceLigacaoParaFrente <- vMediaLinhasB / vMediaTodosElementosB

# 4. Criação da Tabela Analítica
#---------------------------------------------------------------------------
# Unindo os resultados em um único data frame
df_indices <- data.frame(
  Setor = lNomeSetores,
  Indice_Tras = vIndiceLigacaoParaTras,
  Indice_Frente = vIndiceLigacaoParaFrente
)

# Classificando cada setor nos 4 quadrantes estratégicos
df_indices <- df_indices %>%
  mutate(
    Classificacao = case_when(
      Indice_Tras > 1 & Indice_Frente > 1 ~ "Setor-Chave",
      Indice_Tras > 1 & Indice_Frente <= 1 ~ "Efeito para Trás",
      Indice_Tras <= 1 & Indice_Frente > 1 ~ "Efeito para Frente",
      TRUE ~ "Independente"
    ),
    # Criando uma coluna para ordenação (soma dos índices)
    Ordem = Indice_Tras + Indice_Frente
  ) %>%
  arrange(desc(Ordem)) %>% # Ordena do mais conectado para o menos
  select(-Ordem) # Remove a coluna de ordem que não precisa aparecer na tabela

# 5. Geração do Relatório em HTML
#---------------------------------------------------------------------------
tabela_html <- df_indices %>%
  kbl(
    caption = "Análise de Encademaneto: Índices de Ligação para Trás e para Frente (2021)",
    col.names = c("Setor", "Índice para Trás", "Índice para Frente", "Classificação Estratégica"),
    digits = 3,
    format = "html",
    align = "lcrr"
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE
  ) %>%
  # Adicionando cores para facilitar a identificação
  column_spec(4, bold = TRUE, color = "white",
              background = case_when(
                df_indices$Classificacao == "Setor-Chave" ~ "#d9534f",        # Vermelho para destaque máximo
                df_indices$Classificacao == "Efeito para Trás" ~ "#5bc0de",   # Azul
                df_indices$Classificacao == "Efeito para Frente" ~ "#f0ad4e", # Laranja
                df_indices$Classificacao == "Independente" ~ "#777777"      # Cinza
              ))

# Salva a tabela em um arquivo HTML
save_kable(tabela_html, file = "analise_indices_ligacao.html")

# Abre o arquivo HTML gerado no seu visualizador
rstudioapi::viewer("analise_indices_ligacao.html")
## NULL
print("Análise concluída. Verifique o arquivo 'analise_indices_ligacao.html' no seu diretório.")
## [1] "Análise concluída. Verifique o arquivo 'analise_indices_ligacao.html' no seu diretório."