Net-Debt/EBITDA
Install and import#
npm install fintech-algorithmsimport { 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#
| Name | Type | Notes |
|---|---|---|
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#
{
"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#
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.
References#
- Non-GAAP Financial Measures: Compliance and Disclosure Interpretations — SEC Division of Corporation Finance
- IFRS 16 Leases — International Accounting Standards Board
- IAS 7 Statement of Cash Flows — International Accounting Standards Board
- Reconciliation of Debt and Net Income to Net Debt and Adjusted EBITDA — Issuer exhibit hosted by SEC EDGAR
- Evidence boundary