# ---- Pacotes ----
if(!require(openxlsx)){
  install.packages("openxlsx", repos="https://cloud.r-project.org")
  library(openxlsx)
} else {
  library(openxlsx)
}
## Carregando pacotes exigidos: openxlsx
## Warning: pacote 'openxlsx' foi compilado no R versão 4.5.2
# ---- Dados ----
funcionarios <- data.frame(
  nome = c("Ana Souza", "Bruno Lima", "Carla Nunes", "Daniel Freitas", "Elisa Rocha", "Fernando Alves"),
  n_inscricao = 1001:1006,
  setor = c("Administrativo", "Apoio", "Operação", "Operação", "Operação", "Gerência"),
  cargo = c("Assistente", "Auxiliar", "Operador", "Supervisor", "Operador", "Gerente de Operações"),
  contrato = as.Date(c("2022-01-10","2023-05-02","2021-03-15","2020-08-21","2023-02-14","2019-07-01")),
  salario_base = c(2500, 2300, 1800, 3200, 2000, 6000),
  stringsAsFactors = FALSE
)

vendas <- data.frame(
  nome = rep(funcionarios$nome, each = 1),
  mes = 9,
  ano = 2024,
  valor_venda = c(0, 0, 25000, 40000, 30000, 120000)
)

# ---- Funções ----
calc_comissao <- function(setor, cargo, vendas_valor){
  if(is.na(vendas_valor)) vendas_valor <- 0
  s <- tolower(setor)
  c <- tolower(cargo)
  if(grepl("gerente", c)) return(vendas_valor * 0.01)
  if(grepl("oper", s) | grepl("oper", c) | grepl("super", c)) return(vendas_valor * 0.05)
  return(0)
}

get_aliquota_ir <- function(renda){
  if(renda <= 1903.98) return(0)
  else if(renda <= 2826.65) return(7.5)
  else if(renda <= 3751.05) return(15)
  else if(renda <= 4664.68) return(22.5)
  else return(27.5)
}

calc_irpf <- function(renda, aliquota) renda * aliquota / 100
calc_inss_empregado <- function(renda) renda * 0.08
calc_inss_empregador <- function(renda) renda * 0.20
calc_fgts <- function(renda) renda * 0.08

# ---- Montagem da Folha ----
folha <- merge(funcionarios, vendas, by="nome")

# Inicializar colunas
colunas <- c("comissao", "renda_bruta", "aliquota_ir", "irpf",
             "inss", "inss_empregador", "fgts", "salario_liquido")
for(col in colunas) folha[[col]] <- 0

# Cálculos
for(i in 1:nrow(folha)){
  vendas_atual <- ifelse(is.na(folha$valor_venda[i]), 0, folha$valor_venda[i])
  folha$comissao[i] <- calc_comissao(folha$setor[i], folha$cargo[i], vendas_atual)
  folha$renda_bruta[i] <- folha$salario_base[i] + folha$comissao[i]
  folha$aliquota_ir[i] <- get_aliquota_ir(folha$renda_bruta[i])
  folha$irpf[i] <- calc_irpf(folha$renda_bruta[i], folha$aliquota_ir[i])
  folha$inss[i] <- calc_inss_empregado(folha$renda_bruta[i])
  folha$inss_empregador[i] <- calc_inss_empregador(folha$renda_bruta[i])
  folha$fgts[i] <- calc_fgts(folha$renda_bruta[i])
  folha$salario_liquido[i] <- folha$renda_bruta[i] - folha$irpf[i] - folha$inss[i]
}

# ---- Estatísticas ----
summary(folha[,c("salario_base","comissao","renda_bruta","irpf","inss","salario_liquido")])
##   salario_base     comissao       renda_bruta        irpf       
##  Min.   :1800   Min.   :   0.0   Min.   :2300   Min.   : 172.5  
##  1st Qu.:2075   1st Qu.: 300.0   1st Qu.:2638   1st Qu.: 255.0  
##  Median :2400   Median :1225.0   Median :3275   Median : 491.2  
##  Mean   :2967   Mean   : 991.7   Mean   :3958   Mean   : 792.1  
##  3rd Qu.:3025   3rd Qu.:1437.5   3rd Qu.:4775   3rd Qu.:1203.8  
##  Max.   :6000   Max.   :2000.0   Max.   :7200   Max.   :1980.0  
##       inss       salario_liquido
##  Min.   :184.0   Min.   :1944   
##  1st Qu.:211.0   1st Qu.:2172   
##  Median :262.0   Median :2522   
##  Mean   :316.7   Mean   :2850   
##  3rd Qu.:382.0   3rd Qu.:3189   
##  Max.   :576.0   Max.   :4644
folha
##             nome n_inscricao          setor                cargo   contrato
## 1      Ana Souza        1001 Administrativo           Assistente 2022-01-10
## 2     Bruno Lima        1002          Apoio             Auxiliar 2023-05-02
## 3    Carla Nunes        1003       Operação             Operador 2021-03-15
## 4 Daniel Freitas        1004       Operação           Supervisor 2020-08-21
## 5    Elisa Rocha        1005       Operação             Operador 2023-02-14
## 6 Fernando Alves        1006       Gerência Gerente de Operações 2019-07-01
##   salario_base mes  ano valor_venda comissao renda_bruta aliquota_ir   irpf
## 1         2500   9 2024           0        0        2500         7.5  187.5
## 2         2300   9 2024           0        0        2300         7.5  172.5
## 3         1800   9 2024       25000     1250        3050        15.0  457.5
## 4         3200   9 2024       40000     2000        5200        27.5 1430.0
## 5         2000   9 2024       30000     1500        3500        15.0  525.0
## 6         6000   9 2024      120000     1200        7200        27.5 1980.0
##   inss inss_empregador fgts salario_liquido
## 1  200             500  200          2112.5
## 2  184             460  184          1943.5
## 3  244             610  244          2348.5
## 4  416            1040  416          3354.0
## 5  280             700  280          2695.0
## 6  576            1440  576          4644.0
# ---- Gráfico de Custo Total ----
folha$custo_total <- folha$salario_base + folha$comissao + folha$inss_empregador + folha$fgts
barplot(folha$custo_total, names.arg = folha$nome, col = "skyblue",
        las = 2, main = "Custo Total por Funcionário", ylab = "R$ Total")