R/cvp_oplev.R

Defines functions cvp_oplev

Documented in cvp_oplev

#' Prepare figures for small exercises about the high-low method of cost estimation.
#' @param rev Numeric A revenue.
#' @param cm  Numeric. A contribution margin.
#' @param oi  Numeric. An operating income.
#' @return A list with the base for the computation, the solution, the wrong_oplev, wrong_msr, wrong_newrev and wrong_newoi
#' @export



cvp_oplev <- function(rev, cm, oi){
  
  pctdeltarev <- sample(seq(from = 0.01, to = 0.15, by = 0.01), 1) * sample(c(1,-1),1)
  
  fc <- cm - oi
  cmr <- round(cm/rev,4)
  bkrev <- round(fc / cmr, 2)
  ms <- rev - bkrev
  msr <- round(ms / rev, 4)
  oplev <- round(cm / oi, 2)
  pctdeltaoi <- round(oplev * pctdeltarev, 2)
  deltarev <- round(rev * pctdeltarev, 2)
  deltaoi <- round(oi * pctdeltaoi, 2)
  
  newrev = rev + deltarev
  newoi = oi + deltaoi
  newcm = newoi + fc
  newoplev <- round(newcm / newoi, 2)
  
  base <- data.frame(
    rev = c(rev, newrev),
    cm = c(cm, newcm),
    oi = c(oi, newoi),
    ms = c(rev - bkrev, newrev - bkrev),
    msr = round(c((rev - bkrev)/rev, (newrev - bkrev)/newrev),4),
    oplev = c(oplev, newoplev)
  )
  
  solution <- c(
    pctdeltarev = round(pctdeltarev,4),
    rev = rev,
    bkrev = bkrev,
    ms = ms,
    msr = msr,
    oplev = oplev,
    newrev = newrev,
    newoi = newoi
  )
  
  wrong_oplev <- c(
    woplev1 = rev / oi,
    woplev2 = rev / cm,
    woplev3 = rev / (rev-cm),
    woplev4 = rev / fc,
    woplev5 = cm / fc,
    woplev6 = cm / (rev-cm),
    woplev7 = newoplev
  )
  
  wrong_msr = 1 / wrong_oplev
  wrong_newrev = rev * (1 + pctdeltaoi / wrong_oplev)
  wrong_newoi = rev * (1 + pctdeltarev * wrong_oplev)
  
  
  wrong_oplev <- unique(setdiff(round(wrong_oplev, 2), solution["oplev"]))
  wrong_msr <- unique(setdiff(round(wrong_msr, 2), solution["msr"]))
  wrong_newrev <- unique(setdiff(round(wrong_newrev, 2), solution["newrev"]))
  wrong_newoi <- unique(setdiff(round(wrong_newoi, 2), solution["newoi"]))
  
  results <- list(
    base = base,
    solution = solution,
    wrong_oplev = wrong_oplev,
    wrong_msr = wrong_msr,
    wrong_newrev = wrong_newrev,
    wrong_newoi = wrong_newoi
  )
  
  return(results)
}
NicolasJBM/manacc documentation built on Jan. 16, 2020, 1:42 p.m.