Author: The tatooheene team
Date: 2025-12-15

# Depreciation & interest for medical equipment

#### The tatooheene team

#### 2025-12-15

## What this vignette covers

- The formula and meaning of the annuity factor and the annual depreciation and interest charge.
- How to call `depreciation_interest()` and interpret its outputs.
- Edge cases: zero interest rate and validation checks.

## Background & formulas

Let:

- \(k\) = annual depreciation and interest costs,
- \(V\) = replacement value,
- \(R\) = residual value at end of period,
- \(n\) = depreciation period (years),
- \(i\) = annual interest rate (decimal),
- \(a_{n,i}\) = annuity factor.

Annual depreciation + interest:

\(k = \frac{V - \frac{R}{(1 + i)^N}}{a_{n,i}}\).

Annuity factor:

\(a_{n,i} = \frac{1}{i}*\bigg(1-\frac{1}{(1 + i)^{n}}\bigg)\).

## Quick starts

Default (returns a data frame)

    depreciation_interest(
      v_replace_val = 50000, # replacement value
      r_salvage_val = 5000   # salvage value at end of period
    )
    #>   Annuity factor Yearly depreciation and interest costs
    #> 1       8.752064                               5266.644

Only the annuity factor

    depreciation_interest(
      v_replace_val = 50000,
      r_salvage_val = 5000,
      output = "annuity_factor"
    )
    #> [1] 8.752064

Only the annual cost (k)

    depreciation_interest(
      v_replace_val = 50000,
      r_salvage_val = 5000,
      output = "annual_cost"
    )
    #> [1] 5266.644

## Zero‑interest edge case

When \(i\) = 0, the function uses the mathematical limit:

- \(a = n\),
- \(k = (V - R)/n\).

    depreciation_interest(
      v_replace_val = 50000,
      r_salvage_val = 5000,
      n_amortisation_period = 8,
      i_interest_rt = 0,
      output = "dataframe"
    )
    #>   Annuity factor Yearly depreciation and interest costs
    #> 1              8                                   5625

## Input validation & common messages

- `v_replace_val` must be a single positive number; `r_salvage_val` a non‑negative number.
- `n_amortisation_period` must be > 0; `i_interest_rt` must be ≥ 0.
- If salvage value exceeds replacement value, a warning is raised (allowed, but uncommon).

Example (triggers an error):

    depreciation_interest(
      v_replace_val = 50000,
      r_salvage_val = -1
    )
    #> Error: `r_salvage_val` must be a single non-negative number.