# Limpando o ambiente
rm(list = ls())
# =========== Área de bibliotecas =================
# Pacotes necessários
if (!require("openxlsx")) install.packages("openxlsx")
## Carregando pacotes exigidos: openxlsx
if (!require("fs")) install.packages("fs")
## Carregando pacotes exigidos: fs
if (!require("htmltools")) install.packages("htmltools")
## Carregando pacotes exigidos: htmltools
if (!require("htmlTable")) install.packages("htmlTable")
## Carregando pacotes exigidos: htmlTable
library(openxlsx)
library(fs)
library(htmltools)
library(htmlTable)

DEFLATOR 1) Funções

# =========== Área de Funções =====================
ler_mip_ano <- function(ano, deflator = 1, pasta = "./Outputs") {
  
  # Definições fixas para matriz 68x68
  nSetores <- 68
  nColunaFinal <- 77
  nLInhaFinal <- 90
  nNumColunasDemanda <- 6
  
  # Caminho da planilha
  pasta <- fs::path_expand(pasta)
  arq <- file.path(pasta, paste0("MIP_", ano, "_68x68MetodoGuilhoto.xlsx"))
  
  # Leitura da planilha
  dSheet <- read.xlsx(arq, sheet = "MIP", rowNames = TRUE)
  mMatriz <- as.matrix(dSheet)
  dimnames(mMatriz) <- NULL
  nomes_setores <- rownames(dSheet)[1:nSetores]
  
  # Matrizes e vetores básicos (valores nominais)
  mZ_nom <- mMatriz[1:nSetores, 1:nSetores]
  mDemanda_nom <- mMatriz[1:nSetores, 70:75]
  vX_nom <- mMatriz[75 + 13, 1:nSetores]
  mVA_nom <- mMatriz[76:89, 1:nSetores]
  
  #  DEFLACIONAMENTO (valores reais em preços constantes do ano-base)
  mZ <- mZ_nom / deflator
  mDemanda <- mDemanda_nom / deflator
  vX <- vX_nom / deflator
  mVA <- mVA_nom / deflator
  
  # Matriz A (coeficientes técnicos reais)
  mA <- t(t(mZ) / vX)
  mA[!is.finite(mA)] <- 0
  
  # Leontief aberto
  I <- diag(nSetores)
  B <- solve(I - mA)
  Y = rowSums(mDemanda)
  
  # Dados adicionais
  ocupacoes <- mVA[14, ]
  renda_trabalho <- mVA[2, ] + mVA[9, ] * 0.41
  demanda_familias <- mDemanda[, 4]
  
  # Leontief fechado (em valores reais)
  mZBarr <- rbind(mZ, renda_trabalho)
  mZBarr <- cbind(mZBarr, c(demanda_familias, 0))
  vX_barr <- c(vX, sum(vX))
  mABarr <- t(t(mZBarr) / vX_barr)
  mABarr[!is.finite(mABarr)] <- 0
  IBarr <- diag(nSetores + 1)
  B_fechado <- solve(IBarr - mABarr)
  
  list(
    ano = ano,
    setores = nomes_setores,
    Z = mZ,
    A = mA,
    B = B,
    Y = Y,
    Demanda = mDemanda,
    VA = mVA,
    VBP = vX,
    Ocupacoes = ocupacoes,
    Renda = renda_trabalho,
    B_fechado = B_fechado
  )
}

ler_mip_ano_setorial <- function(ano, deflatores_setoriais, pasta = "./Outputs") {
  nSetores <- 68
  pasta <- fs::path_expand(pasta)
  arq <- file.path(pasta, paste0("MIP_", ano, "_68x68MetodoGuilhoto.xlsx"))
  if (!file.exists(arq)) stop(paste("Arquivo não encontrado:", arq))
  
  dSheet <- read.xlsx(arq, sheet = "MIP", rowNames = TRUE)
  mMatriz <- as.matrix(dSheet)
  dimnames(mMatriz) <- NULL
  nomes_setores <- rownames(dSheet)[1:nSetores]
  
  mZ_nom <- mMatriz[1:nSetores, 1:nSetores]
  mDemanda_nom <- mMatriz[1:nSetores, 70:75]
  vX_nom <- mMatriz[75 + 13, 1:nSetores]
  mVA_nom <- mMatriz[76:89, 1:nSetores]
  
  # Deflação setorial (vetorial) conforme metodologia Passoni & Freitas
  defl <- as.numeric(deflatores_setoriais)
  mZ <- mZ_nom / matrix(defl, nSetores, nSetores, byrow = TRUE)
  mDemanda <- mDemanda_nom / defl
  vX <- vX_nom / defl
  mVA <- mVA_nom / matrix(defl, nrow(mVA_nom), nSetores, byrow = TRUE)
  
  mA <- t(t(mZ) / vX)
  mA[!is.finite(mA)] <- 0
  I <- diag(nSetores)
  B <- solve(I - mA)
  Y = rowSums(mDemanda)
  
  renda_trabalho <- mVA[2, ] + mVA[9, ] * 0.41
  demanda_familias <- mDemanda[, 4]
  mZBarr <- rbind(mZ, renda_trabalho)
  mZBarr <- cbind(mZBarr, c(demanda_familias, 0))
  vX_barr <- c(vX, sum(vX))
  mABarr <- t(t(mZBarr) / vX_barr)
  mABarr[!is.finite(mABarr)] <- 0
  IBarr <- diag(nSetores + 1)
  B_fechado <- solve(IBarr - mABarr)
  
  list(
    ano = ano,
    setores = nomes_setores,
    Z = mZ,
    A = mA,
    B = B,
    Y = Y,
    Demanda = mDemanda,
    VA = mVA,
    VBP = vX,
    Renda = renda_trabalho,
    B_fechado = B_fechado
  )
}


decompor_tipo1 <- function(dados0, dados1) {
  # Verificação de consistência
  if (!all(dados0$setores == dados1$setores)) {
    stop("Os conjuntos de setores não coincidem entre os dois anos.")
  }
  
  # Cálculos principais
  dy <- dados1$Y - dados0$Y
  dB <- dados1$B - dados0$B
  term_dem  <- dados1$B %*% dy
  term_tech <- dB %*% dados0$Y
  delta_x   <- term_dem + term_tech
  
  # Evitar divisão por zero
  delta_x_safe <- ifelse(abs(delta_x) < 1e-8, NA, delta_x)
  
  # Cálculo de proporções relativas (% da variação total)
  prop_dem  <- 100 * as.numeric(term_dem)  / delta_x_safe
  prop_tech <- 100 * as.numeric(term_tech) / delta_x_safe
  
  # Arredondar para 2 casas decimais
  df <- data.frame(
    Setor           = dados1$setores,
    Variação        = round(term_dem+term_tech, 2),
    Var.Demanda     = round(term_dem, 2),
    Var.Tecnologia  = round(term_tech, 2),
    Demanda_pct     = round(prop_dem, 2),
    Tecnologia_pct  = round(prop_tech, 2),
    Total_pct       = round(100, 2)
  )
  
  df_long <- data.frame(
    Setor           = dados1$setores,
    Demanda_pct     = round(prop_dem, 2),
    Tecnologia_pct  = round(prop_tech, 2),
    Total_pct       = round(100, 2)
  )
  # Forma longa para gráficos
  df_long <- df_long |>
    tidyr::pivot_longer(cols = c( "Demanda_pct", "Tecnologia_pct"),
                        names_to = "Componente",
                        values_to = "Contribuição_pct")
  
  
  return(list(
    tabela_normalizada = df,
    tabela_longa = df_long
  ))

}

decompor_tipo1_agregado <- function(dados0, dados1) {
  if (!all(dados0$setores == dados1$setores)) {
    stop("Os conjuntos de setores não coincidem entre os dois anos.")
  }
  
  # Cálculos principais
  dy <- dados1$Y - dados0$Y
  dB <- dados1$B - dados0$B
  term_dem  <- dados1$B %*% dy
  term_tech <- dB %*% dados0$Y
  delta_x   <- term_dem + term_tech
  
  # Valores agregados
  var_dem <- sum(term_dem)
  var_tech <- sum(term_tech)
  var_total_prod <- sum(delta_x)
  
  # Participações relativas (%)
  pct_dem <- 100 * var_dem / var_total_prod
  pct_tech <- 100 * var_tech / var_total_prod
  
  # Tabela estilo Passoni & Freitas
  tabela_agregada <- data.frame(
    Componente = c("Demanda Final", "Tecnologia", "Total"),
    Valor_R_Mi = round(c(var_dem, var_tech, var_total_prod) / 1, 1),
    Participacao_pct = round(c(pct_dem, pct_tech, 100), 1)
  )
  
  # Também retorna resultado desagregado original (por setor)
  delta_x_safe <- ifelse(abs(delta_x) < 1e-8, NA, delta_x)
  prop_dem  <- 100 * as.numeric(term_dem)  / var_total_prod
  prop_tech <- 100 * as.numeric(term_tech) / var_total_prod
  
  df <- data.frame(
    Setor           = dados1$setores,
    Variação        = round(term_dem+term_tech, 2),
    Var.Demanda     = round(term_dem, 2),
    Var.Tecnologia  = round(term_tech, 2),
    Demanda_pct     = round(prop_dem, 2),
    Tecnologia_pct  = round(prop_tech, 2),
    Total_pct       = round(100, 2)
  )
  
  df_long <- data.frame(
    Setor           = dados1$setores,
    Demanda_pct     = round(prop_dem, 2),
    Tecnologia_pct  = round(prop_tech, 2),
    Total_pct       = round(100, 2)
  )
  

  
  tabela_longa <- tidyr::pivot_longer(
    df_long,
    cols = c("Demanda_pct", "Tecnologia_pct"),
    names_to = "Componente",
    values_to = "Contribuição_pct"
  )
  
  return(list(
    tabela_normalizada = df,
    tabela_longa = tabela_longa,
    tabela_agregada = tabela_agregada
  ))
}


decompor_tipo2 <- function(dados0, dados1) {
  if (!all(dados0$setores == dados1$setores)) {
    stop("Os conjuntos de setores não coincidem entre os dois anos.")
  }
  
  # Matrizes de Leontief
  B0 <- dados0$B
  B1 <- dados1$B
  
  # Vetores de demanda agregada
  y0 <- dados0$Y
  y1 <- dados1$Y
  
  # Diferenças
  dB <- B1 - B0
  dy <- y1 - y0
  
  # Componentes
  term_tech <- dB %*% y1           # ΔB * y1
  term_dem  <- B0 %*% dy           # B0 * Δy
  delta_x   <- term_tech + term_dem
  
  # Cálculo de proporções relativas
  delta_x_safe <- ifelse(abs(delta_x) < 1e-8, NA, delta_x)
  prop_tech <- 100 * as.numeric(term_tech) / delta_x_safe
  prop_dem  <- 100 * as.numeric(term_dem)  / delta_x_safe
  
  df <- data.frame(
    Setor           = dados1$setores,
    Tecnologia_pct  = round(prop_tech, 2),
    Demanda_pct     = round(prop_dem, 2),
    Total_pct       = round(100, 2)
  )
  
  df_long <- df |>
    tidyr::pivot_longer(cols = c("Demanda_pct", "Tecnologia_pct"),
                        names_to = "Componente",
                        values_to = "Contribuição_pct")
  
  return(list(
    tabela_normalizada = df,
    tabela_longa = df_long
  ))
}

decompor_tipo3 <- function(dados0, dados1) {
  if (!all(dados0$setores == dados1$setores)) {
    stop("Os conjuntos de setores não coincidem entre os dois anos.")
  }
  
  # Extrai elementos
  B0 <- dados0$B
  B1 <- dados1$B
  y0 <- dados0$Y
  y1 <- dados1$Y
  
  # Diferenças
  dB <- B1 - B0
  dy <- y1 - y0
  
  # Componentes
  term_tech      <- dB %*% y0               # ΔB · y0
  term_demand    <- B0 %*% dy               # B0 · Δy
  term_interacao <- dB %*% dy               # ΔB · Δy
  delta_x        <- term_tech + term_demand + term_interacao
  
  # Prevenção de divisão por zero
  delta_x_safe <- ifelse(abs(delta_x) < 1e-8, NA, delta_x)
  
  # Proporções em %
  prop_tech      <- 100 * as.numeric(term_tech) / delta_x_safe
  prop_demand    <- 100 * as.numeric(term_demand) / delta_x_safe
  prop_interacao <- 100 * as.numeric(term_interacao) / delta_x_safe
  
  df <- data.frame(
    Setor             = dados1$setores,
    Tecnologia_pct    = round(prop_tech, 2),
    Demanda_pct       = round(prop_demand, 2),
    Interacao_pct     = round(prop_interacao, 2),
    Total_pct         = round(100, 2)
  )
  
  df_long <- df |>
    tidyr::pivot_longer(cols = c("Demanda_pct", "Tecnologia_pct", "Interacao_pct"),
                        names_to = "Componente",
                        values_to = "Contribuição_pct")
  
  return(list(
    tabela_normalizada = df,
    tabela_longa = df_long
  ))
}

decompor_tipo5_dl <- function(dados0, dados1) {
  if (!all(dados0$setores == dados1$setores)) {
    stop("Os conjuntos de setores não coincidem entre os dois anos.")
  }
  
  # Elementos necessários
  B0 <- dados0$B
  B1 <- dados1$B
  y0 <- dados0$Y
  y1 <- dados1$Y
  
  dB <- B1 - B0
  dy <- y1 - y0
  y_med <- 0.5 * (y0 + y1)
  B_med <- 0.5 * (B0 + B1)
  
  # Componentes da decomposição
  term_tech   <- 0.5 * dB %*% (y0 + y1)       # ½ ΔB (y⁰ + y¹)
  term_demand <- 0.5 * (B0 + B1) %*% dy       # ½ (B⁰ + B¹) Δy
  delta_x     <- term_tech + term_demand
  
  # Prevenção de divisão por zero
  delta_x_safe <- ifelse(abs(delta_x) < 1e-8, NA, delta_x)
  
  # Proporções
  prop_tech   <- 100 * as.numeric(term_tech) / delta_x_safe
  prop_demand <- 100 * as.numeric(term_demand) / delta_x_safe
  
  df <- data.frame(
    Setor          = dados1$setores,
    Tecnologia_pct = round(prop_tech, 2),
    Demanda_pct    = round(prop_demand, 2),
    Total_pct      = round(100, 2)
  )
  
  df_long <- df |>
    tidyr::pivot_longer(cols = c("Demanda_pct", "Tecnologia_pct"),
                        names_to = "Componente",
                        values_to = "Contribuição_pct")
  
  return(list(
    tabela_normalizada = df,
    tabela_longa = df_long
  ))
}
  1. Script
# ================================================
# Script para obter deflatores implícitos do PIB (SCN10_DIPIBG10)
# do Ipeadata, calcular índices encadeados com base em 2019 = 1,
# e aplicar como deflatores em análise insumo-produto.
# ================================================

# Instale os pacotes necessários (se ainda não instalados)
if (!require("ipeadatar")) install.packages("ipeadatar")
## Carregando pacotes exigidos: ipeadatar
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
# Carregue os pacotes
library(ipeadatar)
library(dplyr)

# Obter série do deflator implícito do PIB (SCN10_DIPIBG10)
serie <- ipeadata("SCN10_DIPIBG10")


# Filtrar anos de 2010 a 2019
deflatores <- serie |>
  filter(format(date, "%Y") %in% as.character(2019:2021)) |>
  mutate(
    ano = as.integer(format(date, "%Y")),
    deflator = value / 100  # transformar para razão
  ) |>
  arrange(desc(ano))

# Criar índices encadeados com base 2021 = 1
deflatores$indice_base2021 <- 1
for (i in 2:nrow(deflatores)) {
  deflatores$indice_base2021[i] <- deflatores$indice_base2021[i-1] / (1 + deflatores$deflator[i-1])
}

# Reordenar para anos crescentes
deflatores_final <- deflatores |>
  arrange(ano) |>
  select(ano, deflator_anual = deflator, indice_base2021)

# Exibir resultado
print(deflatores_final)
## # A tibble: 3 × 3
##     ano deflator_anual indice_base2021
##   <int>          <dbl>           <dbl>
## 1  2019         0.0422           0.831
## 2  2020         0.0647           0.885
## 3  2021         0.130            1
# Criar vetor nomeado para uso com função `ler_mip_ano`
deflator_map <- deflatores_final$indice_base2021
names(deflator_map) <- deflatores_final$ano

# Exemplo de uso:
dados_2019 <- ler_mip_ano(2019, deflator = deflator_map["2019"])
dados_2021 <- ler_mip_ano(2021, deflator = deflator_map["2021"])

CHOQUE

# =========== Área de bibliotecas =================
# Pacotes necessários
if (!require("openxlsx")) install.packages("openxlsx")
if (!require("fs")) install.packages("fs")
if (!require("htmlTable")) install.packages("htmlTable")
if (!require("htmltools")) install.packages("htmltools")

library(openxlsx)
library(fs)
library(htmlTable)
library(htmltools)

# =========== Área de Funções =====================
# Função para ler e ajustar a matriz de insumo-produto para um ano de preços específico
ler_mip_ano <- function(ano, deflator = 1, pasta = "./Outputs") {
  
  # Definições fixas para matriz 68x68
  nSetores <- 68
  
  # Caminho da planilha
  pasta <- fs::path_expand(pasta)
  arq <- file.path(pasta, paste0("MIP_", ano, "_68x68MetodoGuilhoto.xlsx"))
  
  # Leitura da planilha
  dSheet <- read.xlsx(arq, sheet = "MIP", rowNames = TRUE)
  mMatriz <- as.matrix(dSheet)
  nomes_setores <- rownames(dSheet)[1:nSetores]
  dimnames(mMatriz) <- NULL
  
  # Matrizes e vetores básicos (valores nominais do ano do arquivo)
  mZ_nom <- mMatriz[1:nSetores, 1:nSetores]
  mDemanda_nom <- mMatriz[1:nSetores, 70:75]
  mVA_nom <- mMatriz[76:89, 1:nSetores]
  vX_nom <- mVA_nom[13, ] # VBP está na linha 13 da matriz de VA
  
  #  DEFLACIONAMENTO (neste caso, INFLACIONAMENTO para preços de 2021)
  # O deflator é o inverso do fator de inflação acumulada.
  mZ <- mZ_nom / deflator
  mDemanda <- mDemanda_nom / deflator
  vX <- vX_nom / deflator
  mVA <- mVA_nom / deflator
  
  # Retorna uma lista com todos os dados necessários já em preços de 2021
  list(
    ano = ano,
    lNomeSetores = nomes_setores,
    mZ = mZ,
    mDemanda = mDemanda,
    mVA = mVA,
    vX = vX
  )
}


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

# ALTERADO: Passo 1 - Definição do deflator para converter R$ de 2019 para R$ de 2021
inflacao_2020 <- 0.0647
inflacao_2021 <- 0.1305

inflator_acumulado <- (1 + inflacao_2020) * (1 + inflacao_2021)
deflator_2019_para_2021 <- 1 / inflator_acumulado

# ALTERADO: Passo 2 - Leitura da Matriz de 2019 e conversão para preços de 2021
PastaMipEstimada <- "./Outputs"
# A função 'ler_mip_ano' agora carrega e converte os valores para preços de 2021
dados_2019_precos_2021 <- ler_mip_ano(2019, deflator = deflator_2019_para_2021, pasta = PastaMipEstimada)

# Extração das matrizes e vetores já em R$ de 2021
nSetores <- 68
mZ <- dados_2019_precos_2021$mZ
mDemanda <- dados_2019_precos_2021$mDemanda
mVA <- dados_2019_precos_2021$mVA
vX <- dados_2019_precos_2021$vX
lNomeSetores <- dados_2019_precos_2021$lNomeSetores


#################################################################################
# Calculo do Modelo Aberto (com dados a preços de 2021)
#################################################################################
mA <- t(t(mZ) / vX)
mA[!is.finite(mA)] <- 0 # Tratamento para divisões por zero
mI <- diag(nSetores)
mLeontief <- solve(mI - mA)


#################################################################################
# Calculo do Modelo Fechado (com dados a preços de 2021)
#################################################################################
nLinhaRendaTrabalho <- 2
nLinhaRendaCapital <- 9 # E excedente operacional bruto
nColunaFamilias <- 4
vDemandaFamilias <- matrix(mDemanda[, nColunaFamilias], nrow = nSetores, ncol = 1)
# Renda do trabalho = Remunerações (linha 2) + 41% do EOB (linha 9)
vRendaTrabalho <- matrix(mVA[nLinhaRendaTrabalho, ], nrow = 1, ncol = nSetores) + matrix(mVA[nLinhaRendaCapital, ], nrow = 1, ncol = nSetores) * 0.41

mZBarr <- rbind(mZ, vRendaTrabalho)
mAux <- rbind(vDemandaFamilias, matrix(0, nrow = 1, ncol = 1))
mZBarr <- cbind(mZBarr, mAux)

vVBPBarr <- c(vX, sum(vRendaTrabalho))
mABarr <- t(t(mZBarr) / vVBPBarr)
mABarr[!is.finite(mABarr)] <- 0 # Tratamento para divisões por zero

mIBarr <- diag(nSetores + 1)
mLeontiefBarr <- solve(mIBarr - mABarr)


#################################################################################
# ALTERADO: DEFINIÇÃO DO CHOQUE DESAGREGADO - PCVA (R$ 1 bi a preços de 2021)
#################################################################################

# 1. Parâmetros do investimento (valores em MILHÕES de R$ de 2021)
total_investimento <- 1000 # Valor de R$ 1 bilhão
perc_materiais <- 0.5989   # Custo de materiais de Dez/2021 (SINAPI)
perc_mao_de_obra <- 0.4011 # Custo de mão de obra de Dez/2021 (SINAPI)

total_invest_materiais <- total_investimento * perc_materiais
total_invest_mao_de_obra <- total_investimento * perc_mao_de_obra

# 2. Choque de Materiais
nSetorConstrucao <- which(grepl("Construção", lNomeSetores))
vComprasConstrucao <- mZ[, nSetorConstrucao] # Todas as compras do setor Construção
vPropCompras <- vComprasConstrucao / (sum(vComprasConstrucao) + 1e-9) # Proporção de cada insumo
vChoque_Materiais <- vPropCompras * total_invest_materiais

# 3. Choque de Mão de Obra
nColunaFamilias <- 4
vConsumoFamilias <- mDemanda[, nColunaFamilias]
vPropConsumo <- vConsumoFamilias / sum(vConsumoFamilias)
vChoque_MaoDeObra <- vPropConsumo * total_invest_mao_de_obra

# 4. Choque total para o modelo aberto
vChoque_Total_Aberto <- vChoque_Materiais + vChoque_MaoDeObra


#################################################################################
# ANÁLISE DE IMPACTO NO MODELO ABERTO (Resultados em R$ de 2021)
#################################################################################
vDeltaY_Aberto <- matrix(vChoque_Total_Aberto, nrow = nSetores, ncol = 1)
nLinhaOcupacoes <- 14
nLinhaVA <- 1 # Assumindo que o VA total está na primeira linha da matriz mVA

# Cálculos de impacto
vDeltaX_Aberto <- mLeontief %*% vDeltaY_Aberto
nVariacaoVBP_Aberto <- sum(vDeltaX_Aberto)
nVariacaoPercentualVBP_Aberto <- (nVariacaoVBP_Aberto / sum(vX)) * 100

vRelacaoVA <- (mVA[nLinhaVA,] / vX)
vRelacaoVA[!is.finite(vRelacaoVA)] <- 0
vDeltaVA_Aberto <- vDeltaX_Aberto * vRelacaoVA
nDeltaVA_Aberto <- sum(vDeltaVA_Aberto)
nDeltaVAPercentual_Aberto <- (nDeltaVA_Aberto / sum(mVA[nLinhaVA,])) * 100

vRelacaoEmprego <- (mVA[nLinhaOcupacoes,] / vX)
vRelacaoEmprego[!is.finite(vRelacaoEmprego)] <- 0
vDeltaEmprego_Aberto <- vDeltaX_Aberto * vRelacaoEmprego
nDeltaEmprego_Aberto <- sum(vDeltaEmprego_Aberto)
nDeltaEmpregoPercentual_Aberto <- (nDeltaEmprego_Aberto / sum(mVA[nLinhaOcupacoes,])) * 100

# Tabela de resultados
resumo_aberto <- data.frame(
  Indicador = c("Variação da Produção (Milhões R$ de 2021)",
                "Variação da Produção (%)",
                "Variação do VA (Milhões R$ de 2021)",
                "Variação do VA (%)",
                "Variação do Emprego (Nº Pessoas)",
                "Variação do Emprego (%)"
  ),
  Valor = c(format(nVariacaoVBP_Aberto, big.mark = ".", decimal.mark = ",", nsmall = 2),
            paste0(format(nVariacaoPercentualVBP_Aberto, digits = 4), " %"),
            format(nDeltaVA_Aberto, big.mark = ".", decimal.mark = ",", nsmall = 2),
            paste0(format(nDeltaVAPercentual_Aberto, digits = 4), " %"),
            format(trunc(nDeltaEmprego_Aberto), big.mark = ".", decimal.mark = ","),
            paste0(format(nDeltaEmpregoPercentual_Aberto, digits = 4), " %")
  )
)

html_out_aberto <- htmlTable(resumo_aberto,
                             align = "lr",
                             caption = "Impacto do Investimento PCVA (R$ 1 bi) - Modelo Aberto (Preços de 2021)",
                             rnames = FALSE)
print(html_out_aberto)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='2' style='text-align: left;'>
## Impacto do Investimento PCVA (R$ 1 bi) - Modelo Aberto (Preços de 2021)</td></tr>
## <tr>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Indicador</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Valor</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>Variação da Produção (Milhões R$ de 2021)</td>
## <td style='text-align: right;'>1.833,016</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação da Produção (%)</td>
## <td style='text-align: right;'>0.01195 %</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação do VA (Milhões R$ de 2021)</td>
## <td style='text-align: right;'>794,9433</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação do VA (%)</td>
## <td style='text-align: right;'>0.01039 %</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação do Emprego (Nº Pessoas)</td>
## <td style='text-align: right;'>14.068</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>Variação do Emprego (%)</td>
## <td style='border-bottom: 2px solid grey; text-align: right;'>0.01103 %</td>
## </tr>
## </tbody>
## </table>
html_print(HTML(html_out_aberto))

#################################################################################
# ANÁLISE DE IMPACTO NO MODELO FECHADO (Resultados em R$ de 2021)
#################################################################################
vDeltaY_Fechado <- rbind(matrix(vChoque_Materiais, nrow = nSetores, ncol = 1),
                         matrix(total_invest_mao_de_obra, nrow = 1, ncol = 1))

# Cálculos de impacto
vDeltaX_Fechado <- mLeontiefBarr %*% vDeltaY_Fechado
nVariacaoVBP_Fechado <- sum(vDeltaX_Fechado[1:nSetores])
nVariacaoPercentualVBP_Fechado <- (nVariacaoVBP_Fechado / sum(vX)) * 100

vDeltaVA_Fechado <- vDeltaX_Fechado[1:nSetores] * vRelacaoVA
nDeltaVA_Fechado <- sum(vDeltaVA_Fechado)
nDeltaVAPercentual_Fechado <- (nDeltaVA_Fechado / sum(mVA[nLinhaVA,])) * 100

vDeltaEmprego_Fechado <- vDeltaX_Fechado[1:nSetores] * vRelacaoEmprego
nDeltaEmprego_Fechado <- sum(vDeltaEmprego_Fechado)
nDeltaEmpregoPercentual_Fechado <- (nDeltaEmprego_Fechado / sum(mVA[nLinhaOcupacoes,])) * 100

# Tabela de resultados
resumo_fechado <- data.frame(
  Indicador = c("Variação da Produção (Milhões R$ de 2021)",
                "Variação da Produção (%)",
                "Variação do VA (Milhões R$ de 2021)",
                "Variação do VA (%)",
                "Variação do Emprego (Nº Pessoas)",
                "Variação do Emprego (%)"
  ),
  Valor = c(format(nVariacaoVBP_Fechado, big.mark = ".", decimal.mark = ",", nsmall = 2),
            paste0(format(nVariacaoPercentualVBP_Fechado, digits = 4), " %"),
            format(nDeltaVA_Fechado, big.mark = ".", decimal.mark = ",", nsmall = 2),
            paste0(format(nDeltaVAPercentual_Fechado, digits = 4), " %"),
            format(trunc(nDeltaEmprego_Fechado), big.mark = ".", decimal.mark = ","),
            paste0(format(nDeltaEmpregoPercentual_Fechado, digits = 4), " %")
  )
)

html_out_fechado <- htmlTable(resumo_fechado,
                              align = "lr",
                              caption = "Impacto do Investimento PCVA (R$ 1 bi) - Modelo Fechado (Preços de 2021)",
                              rnames = FALSE)
print(html_out_fechado)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='2' style='text-align: left;'>
## Impacto do Investimento PCVA (R$ 1 bi) - Modelo Fechado (Preços de 2021)</td></tr>
## <tr>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Indicador</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: center;'>Valor</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>Variação da Produção (Milhões R$ de 2021)</td>
## <td style='text-align: right;'>3.467,554</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação da Produção (%)</td>
## <td style='text-align: right;'>0.02261 %</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação do VA (Milhões R$ de 2021)</td>
## <td style='text-align: right;'>1.601,367</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação do VA (%)</td>
## <td style='text-align: right;'>0.02093 %</td>
## </tr>
## <tr>
## <td style='text-align: left;'>Variação do Emprego (Nº Pessoas)</td>
## <td style='text-align: right;'>28.454</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>Variação do Emprego (%)</td>
## <td style='border-bottom: 2px solid grey; text-align: right;'>0.0223 %</td>
## </tr>
## </tbody>
## </table>
html_print(HTML(html_out_fechado))