fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Net-Debt/EBITDA

Install and import#

bash
npm install fintech-algorithms
ts
import { netDebtToEbitda } from "fintech-algorithms/fundamental-analysis-and-valuation/statement-ratios/net-debt-ebitda";

Signature#

netDebtToEbitda(input)

Builds EBITDA by adding interest, income tax and depreciation and amortization back to net income, nets borrowings against cash under a declared lease policy, and divides net debt by EBITDA.

Parameters#

NameTypeNotes
input{ net_income: number; interest_expense: number; income_tax_expense: number; depreciation_and_amortization: number; current_borrowings: number; noncurrent_borrowings: number; lease_liabilities: number; cash_and_cash_equivalents: number; include_lease_liabilities: boolean }A plain object. net_income, interest_expense, income_tax_expense and depreciation_and_amortization are summed into EBITDA; current_borrowings, noncurrent_borrowings and — only when include_lease_liabilities is true — lease_liabilities are summed into gross debt, from which cash_and_cash_equivalents is subtracted. The eight numeric keys must be finite numbers and include_lease_liabilities must be a boolean.

Returns#

{ ebitda: number; gross_debt: number; net_debt: number; net_debt_to_ebitda: number | null; lease_policy: string; state: string; reason: string }

ebitda, gross_debt and net_debt show the bridge and are always emitted, and lease_policy records the choice as included or excluded. net_debt_to_ebitda is net debt over EBITDA, or null when EBITDA is not positive — in that case state is not-meaningful and reason is nonpositive-ebitda. Otherwise state is net-cash when net debt is below zero and net-debt when it is not, with reason net-debt-divided-by-ebitda.

Errors#

  • When any of the eight numeric inputs is not a finite number — throws RangeError
  • When include_lease_liabilities is not a boolean — throws RangeError
  • When interest_expense, depreciation_and_amortization, current_borrowings, noncurrent_borrowings, lease_liabilities or cash_and_cash_equivalents is negative — throws RangeError

Complexity: time O(1), space O(1).

Worked example#

verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.

Input#

input
{
  "net_income": 120,
  "interest_expense": 45,
  "income_tax_expense": 35,
  "depreciation_and_amortization": 80,
  "current_borrowings": 60,
  "noncurrent_borrowings": 600,
  "lease_liabilities": 90,
  "cash_and_cash_equivalents": 150,
  "include_lease_liabilities": true
}

Call#

netDebtToEbitda(input)

Returns#

object with 7 fields: ebitda, gross_debt, net_debt, net_debt_to_ebitda, lease_policy, state, reason

{
  "ebitda": 280,
  "gross_debt": 750,
  "net_debt": 600,
  "net_debt_to_ebitda": 2.142857142857,
  "lease_policy": "included",
  "state": "net-debt",
  "reason": "net-debt-divided-by-ebitda"
}

Other exports#

This module also exports dupontDecomposition, roicCalculation, cashConversionCycle, interestCoverageRatio, commonSizeStatements, calculate. Every module additionally exports run as an alias of its primary function, and a meta object carrying its catalog id, domain, family, shape and article URL.

Diagrams#

Net-Debt/EBITDA — article hero
Net-Debt/EBITDA — definition comparison
Net-Debt/EBITDA — evidence lineage
Net-Debt/EBITDA — formula anatomy
Net-Debt/EBITDA — system map
Net-Debt/EBITDA — worked example

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

The rest of the Statement Ratios family#