##############################################################################
# Packages
library(exams)
library(manacc)
library(tidyverse)
library(knitr)
library(kableExtra)
library(randomNames)


##############################################################################
# Initialization
question_id <- "EN00000033"
wdir <- getwd()
parameters <- teachR::param_quest(wdir, question_id, alttype = "mcq", altlevel = "3 Apply")
for (i in 1:length(parameters)) assign(names(parameters)[[i]], parameters[[i]])
options(xtable.comment = FALSE, xtable.floating = FALSE, xtable.timestamp = "")
set.seed(seed)


##############################################################################
# Preparation
basepar <- manacc::income_statements(basevol = 20000, profitable = c(TRUE))
company <- basepar$company[[1]]
product <- basepar$product[[1]]
singular <- basepar$singular[[1]]
plural <- basepar$plural[[1]]

person <- manacc::make_persons(2)
currentmonth <- lubridate::month(Sys.Date(), label = TRUE, abbr = FALSE)
lastmonth <- lubridate::month(Sys.Date()-30, label = TRUE, abbr = FALSE)

oplev <- manacc::cvp_oplev(rev = basepar$rev[[1]], cm = basepar$cm[[1]], oi = basepar$oi[[1]])

##############################################################################
# Answers

if (reqexpl != "" & exasolu == "exam" & type_table != "html") lines <- paste0("\\vspace{",15,"cm}") else lines <- rep(" \\ ", 2)
#lines <- rep("\\ ", 2)

rightrev <- paste0(currencysymb, writR::dbl(oplev$solution["newrev"]),".")
wrongrev <- sample(paste0(currencysymb, writR::dbl(oplev$wrong_newrev), "."),4)

questions <- c(rightrev, wrongrev)

solutions <- c(TRUE, rep(FALSE,4))

explanations <- c(
  "",
  "",
  "",
  "",
  "",
  ""
)


##############################################################################
# Randomize order (do not edit)
alea <- sample(c(1, sample(2:length(questions), (alternatives-1))), alternatives)
questions <- questions[alea]
solutions <- solutions[alea]
explanations <- explanations[alea]

Question

r txt_question_id r person$first_name[[1]] r person$last_name[[1]] is a financial analyst following companies commercializing r product. r tools::toTitleCase(person$pronoun[[1]]) has the following information for one of the firms r person$pronoun[[1]] follows:

Based on this information, what is the expected revenue in r currentmonth? r reqexpl r points
\ Hint: you will need to rework the detailed formula of the margin of safety ratio and all three formulas of the operating leverage to successively find 1) the operating leverage in r lastmonth, 2) the Margin Safety Ratio in r lastmonth, 3) the revenue in r lastmonth, 4) the percentage increase in revenue and finally 5) the expected revenue in r currentmonth.

if (reqexpl == "") exams::answerlist(questions, markup = "markdown") else writeLines(lines)

Solution

With the available data, you can first compute the operating leverage in r lastmonth:

$$ OPLEV_{r lastmonth} = \frac{\text{Contribution Margin}}{\text{Operating Income}} = \frac{r writR::dbl(oplev$base$cm[[1]])}{r writR::dbl(oplev$base$oi[[1]])} = r writR::dbl(oplev$solution["oplev"]) $$

Then, by reworking the formula showing the relationship between Margin of Safety Ratio (MSR) and operating leverage, you obtain the MSR:

$$ OPLEV = \frac{1}{MSR} \leftrightarrow MSR = \frac{1}{OPLEV} = \frac{1}{r writR::dbl(oplev$solution["oplev"])} = r writR::pct(oplev$solution["msr"]) \% $$

By reworking the detailed formula of the MSR and introducing the break-even revenue and MSR, you get the revenue in r lastmonth:

$$ \begin{aligned} MSR & = \frac{R - R_B}{R} \ & \leftrightarrow \ R \times MSR & = R - R_B \ & \leftrightarrow \ R_B & = R - R \times MSR \ & \leftrightarrow \ R_B & = R \times (1 - MSR) \ & \leftrightarrow \ \frac{R_B}{1-MSR} = \frac{r writR::dbl(oplev$solution["bkrev"])}{1-r writR::dbl(oplev$solution["msr"])} & = R = r writR::dbl(oplev$solution["rev"]) \end{aligned} $$

By reworking the formula derived from the definition of the operating leverage (elasticity), you get the percentage change in revenues:

$$ OPLEV = \frac{\% \Delta OI}{\% \Delta R} \leftrightarrow \% \Delta R = \frac{\% \Delta OI}{OPLEV} = \frac{r writR::pct(oplev$solution["pctdeltarev"] * oplev$solution["oplev"]) \%}{r writR::dbl(oplev$solution["oplev"])} = r writR::pct(oplev$solution["pctdeltarev"])\% $$

Finally, you can apply this percentage increase in revenue to the revenue in r lastmonth to find the revenue in r currentmonth:

$$ R_{r currentmonth} = R_{r lastmonth} \times (1+\% \Delta R) = r writR::dbl(oplev$solution["rev"]) \times (1+r writR::dbl(oplev$solution["pctdeltarev"])) = r writR::dbl(oplev$solution["newrev"]) $$

if (reqexpl == "") exams::answerlist(ifelse(solutions, "True", "False"), explanations, markup = "markdown") else writeLines(c("\\ ","\\ "))

Meta-information

extype: r extype exsolution: r exams::mchoice2string(solutions, single = TRUE) exname: r question_id



NicolasJBM/manacc documentation built on Jan. 16, 2020, 1:42 p.m.