Created
September 22, 2018 00:29
-
-
Save sillasgonzaga/654972267f34afe23374c50d86eaca8a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# adaptacao da planilha de valuation da proseek | |
library(dplyr) | |
library(purrr) | |
library(magrittr) | |
#### párametros unicos | |
taxa_impostos_indiretos <- 14.65/100 | |
margem_estimada <- 19.78/100 | |
taxa_ir_base <- 8/100 | |
taxa_cs_base <- 12/100 | |
taxa_ir <- 15/100 | |
taxa_adicional_ir <- 10/100 | |
lim_adicional_ir <- 240 | |
taxa_cs <- 9/100 | |
taxa_media_depreciacao <- 10 | |
#### parametros macroeconomicos | |
# pib <- c(2.9, 3, rep(2.7, 16))/100 | |
ipca <- c(3.74, 4.18, 4.06, 3.99, rep(3.98, 14))/100 | |
igpm <- c(4.21, 4.36, 4.21, 4.15, rep(4.18, 14))/100 | |
cpi <- c(2.52267, 1.855, 1.87462, 1.96197, 2.00492, 2.00737, 2.00407, 2.03215, 2.02175, rep(2, 9))/100 | |
# selic <- c(6.7, 7.8, 8.2, 8.1, rep(80.4, 14))/100 | |
diferencial_inflacao <- ((1+ipca)/(1+cpi))-1 | |
#### parametros wacc | |
params_wacc <- list( | |
beta_desalavan = 0.68, | |
tx_livre_risco = 2.41/100, | |
premio_risco_mercado = 5.08/100, | |
premio_risco_pais = 3.46/100, | |
dif_inflacao_med = mean(diferencial_inflacao), | |
custo_divida = 9.4/100, | |
divida_cpt_proprio = 23.6/100 | |
) | |
### premissas da empresa | |
demanda_inicial <- 155 | |
demanda_inicial <- demanda_inicial * 252 | |
ticket_medio_inicial <- 52.50 | |
capex_inicial <- 1130 | |
demanda_anual <- c(demanda_inicial, rep(NA_real_, 16)) | |
ticket_medio_anual <- c(ticket_medio_inicial, rep(NA_real_, 16)) | |
crescimento_demanda <- c(0, rep(5, 4), rep(1, 7), rep(0, 5))/100 | |
#demanda_anual <- c(demanda_inicial, rep(NA_real_, 16)) | |
#demanda_inicial * (1 + crescimento_demanda) | |
for (i in 2:length(demanda_anual)){ | |
demanda_anual[i] <- demanda_anual[i-1] * (1 + crescimento_demanda[i]) | |
ticket_medio_anual[i] <- ticket_medio_anual[i-1] * (1 + ipca[i + 1]) | |
} | |
demanda_anual <- c(0, demanda_anual) | |
ticket_medio_anual <- c(0, ticket_medio_anual) | |
## calculos | |
receita_op_bruta <- round(ticket_medio_anual * demanda_anual / 1000) | |
#receita_op_bruta <- dplyr::lag(receita_op_bruta, default = 0) | |
# deducoes | |
deducoes <- round(-1 * taxa_impostos_indiretos * receita_op_bruta) | |
# custos e despesas | |
custos <- round(- 1 * (receita_op_bruta + deducoes) * (1 - margem_estimada)) | |
## IR/CS | |
# aliquota para calculo de base tributaria | |
aliq_ir <- taxa_ir_base * receita_op_bruta | |
aliq_cs <- taxa_cs_base * receita_op_bruta | |
ir_anual <- -1 * taxa_ir * aliq_ir | |
adicional_ir_anual <- ifelse(aliq_ir > lim_adicional_ir, | |
-1 * (aliq_ir - lim_adicional_ir) * taxa_adicional_ir, | |
0) | |
ir_anual <- ir_anual + adicional_ir_anual | |
cs_anual <- -1 * taxa_cs * aliq_cs | |
## capital de giro | |
contas_a_receber <- 35 | |
contas_a_pagar <- 25 | |
usos <- receita_op_bruta * contas_a_receber/360 | |
fontes <- -1 * custos * contas_a_pagar/360 | |
capital_de_giro <- fontes - usos | |
necessidade_de_cap_de_giro <- ifelse(seq_along(capital_de_giro) == 1, | |
capital_de_giro[1], | |
capital_de_giro - lag(capital_de_giro)) | |
## depreciacao | |
mat_depreciacao <- matrix(0, ncol = 6, nrow = 18) | |
colnames(mat_depreciacao) <- c("inicial", "entrada", "saida", | |
"periodo", "saldo_imob", "reinvestimentos") | |
for (i in 2:nrow(mat_depreciacao)){ | |
mat_depreciacao[i, "inicial"] <- mat_depreciacao[i - 1, "periodo"] | |
mat_depreciacao[i, "entrada"] <- (capex_anual[i - 1] + mat_depreciacao[i - 1, "reinvestimentos"])/taxa_media_depreciacao | |
mat_depreciacao[i, "saida"] <- ifelse(i - 1 < taxa_media_depreciacao, | |
0, | |
-1 * mat_depreciacao[i - taxa_media_depreciacao, "entrada"]) | |
mat_depreciacao[i, "periodo"] <- mat_depreciacao[i, "inicial"] + mat_depreciacao[i, "entrada"] + mat_depreciacao[i, "saida"] | |
mat_depreciacao[i, "reinvestimentos"] <- mat_depreciacao[i, "periodo"] | |
mat_depreciacao[i, "saldo_imob"] <- mat_depreciacao[i - 1, "saldo_imob"] + capex_anual[i - 1] + mat_depreciacao[i, "reinvestimentos"] - mat_depreciacao[i, "periodo"] | |
} | |
mat_depreciacao[1, "saldo_imob"] <- mat_depreciacao[2, "saldo_imob"] | |
mat_depreciacao <- round(mat_depreciacao) | |
## capex | |
capex_anual <- c(capex_inicial, rep(0, 17)) | |
reinvestimentos <- mat_depreciacao[, "reinvestimentos"] | |
## wacc | |
capm <- params_wacc %$% | |
{(1 + (tx_livre_risco + premio_risco_mercado * beta_desalavan + premio_risco_pais)) * (1 + dif_inflacao_med) - 1} | |
capm <- rep(capm, 18) | |
wacc <- params_wacc %$% | |
{divida_cpt_proprio * custo_divida + (1 - divida_cpt_proprio)*capm} | |
#### DRE #### | |
#receita_op_bruta_dre <- lag(receita_op_bruta, default = 0) | |
# fluxo de caixa | |
ebitda <- c(receita_op_bruta + deducoes + custos) | |
total_ir_cs <- round(c(ir_anual + cs_anual)) | |
capital_giro_dre <- round(necessidade_de_cap_de_giro) | |
fluxo_caixa_op <- ebitda + total_ir_cs + capital_giro_dre | |
capex_dre <- -1 * capex_anual - reinvestimentos | |
FCFF <- round(fluxo_caixa_op + capex_dre) | |
# lucro liquido | |
depreciacao <- -1 * mat_depreciacao[, "periodo"] | |
lucro_liq <- round(ebitda + depreciacao + total_ir_cs) | |
# calculo de resultados | |
perpet <- ifelse(seq_along(FCFF) == length(FCFF), | |
FCFF * (1 + ipca)/(wacc - ipca), | |
0) | |
periodos_desconto <- seq_along(perpet) | |
fator_desconto <- (1 + wacc)^periodos_desconto | |
fator_desconto | |
vp_fluxo <- round(FCFF/fator_desconto) | |
vp_perpet <- round(perpet/fator_desconto) | |
vpl <- sum(vp_fluxo + vp_perpet) | |
vpl | |
### conferir se ta zerando | |
ativo_circ_caixa <- rep(0, 18) | |
for (i in 2:length(ativo_circ_caixa)){ | |
ativo_circ_caixa[i] <- ativo_circ_caixa[i - 1] + FCFF[i] | |
} | |
ativo_circ_contas <- c(0, usos) | |
ativo_perm_imob <- mat_depreciacao[, "saldo_imob"] | |
pass_circ <- c(0, fontes) | |
pass_nao_circ <- rep(0.30 * capex_inicial, 18) | |
pl_capital_social <- rep(0, 18) | |
pl_capital_social[1] <- ifelse(FCFF[1] < 0, -1 * FCFF[1], 0) - pass_nao_circ[1] | |
for (i in 2:length(pl_capital_social)){ | |
pl_capital_social[i] <- ifelse(FCFF[i] < 0, -1 * FCFF[i], 0) + pl_capital_social[i-1] - (pass_nao_circ[i] - pass_nao_circ[i-1]) | |
} | |
pl_lucros_acum <- cumsum(lucro_liq) | |
pl <- pl_capital_social + pl_lucros_acum | |
check <- (ativo_circ_caixa + ativo_circ_contas + ativo_perm_imob) - (pass_circ + pass_nao_circ + pl) | |
check | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment