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

Fulmer H-Score

Install and import#

bash
npm install fintech-algorithms
ts
import { fulmerHScore } from "fintech-algorithms/fundamental-analysis-and-valuation/quality-and-distress/fulmer-h-score";

Signature#

fulmerHScore(data)

Computes Fulmer's 1984 nine-factor small-firm H-Score, including the two base-10 logarithm terms on tangible assets and interest coverage, and reports which side of the zero cutoff the score falls on.

Parameters#

NameTypeNotes
data{ total_assets: number; total_debt: number; equity: number; interest_expense: number; tangible_assets_usd_thousands: number; ebit: number; retained_earnings: number; sales: number; ebt: number; operating_cash_flow: number; current_liabilities: number; working_capital: number }One accounting record. total_assets scales retained_earnings, sales, total_debt and current_liabilities; equity scales ebt; total_debt scales operating_cash_flow and working_capital. tangible_assets_usd_thousands must already be stated in USD thousands because it is passed straight to a base-10 logarithm, and ebit over interest_expense supplies the second logarithm.

Returns#

{ state: string; method: string; variables: { retained_earnings_to_assets: number; sales_to_assets: number; ebt_to_equity: number; operating_cash_flow_to_debt: number; debt_to_assets: number; current_liabilities_to_assets: number; log10_tangible_assets_usd_thousands: number; working_capital_to_debt: number; log10_ebit_interest: number }; h_score: number; screen: string; index_cutoff: number; scale_policy: string }

variables holds the nine factors and h_score weights them by 5.528, 0.212, 0.073, 1.270, -0.120, 2.335, 0.575, 1.083 and 0.894 before subtracting the constant 6.075. index_cutoff is 0 and screen is distress-side for a negative score and non-distress-side otherwise. scale_policy records that tangible assets are expressed in USD thousands before the logarithm. method is fulmer-1984-small-firm-nine-factor and state is calculated.

Errors#

  • When data is not a plain object — throws TypeError
  • When any field read is missing or not a finite number — throws TypeError
  • When total_assets, total_debt, equity, interest_expense or tangible_assets_usd_thousands is zero or negative — throws RangeError
  • When ebit divided by interest_expense is zero or negative, so the base-10 logarithm is undefined — throws RangeError

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

Worked example#

executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.

Input#

data
{
  "total_assets": 1000,
  "total_debt": 550,
  "equity": 450,
  "interest_expense": 40,
  "tangible_assets_usd_thousands": 800000,
  "ebit": 160,
  "retained_earnings": 300,
  "sales": 1200,
  "ebt": 140,
  "operating_cash_flow": 110,
  "current_liabilities": 250,
  "working_capital": 200
}

Call#

fulmerHScore(data)

Returns#

object with 7 fields: state, method, variables, h_score, screen, index_cutoff, scale_policy

{
  "state": "calculated",
  "method": "fulmer-1984-small-firm-nine-factor",
  "variables": {
    "retained_earnings_to_assets": 0.3,
    "sales_to_assets": 1.2,
    "ebt_to_equity": 0.3111111111111111,
    "operating_cash_flow_to_debt": 0.2,
    "debt_to_assets": 0.55,
    "current_liabilities_to_assets": 0.25,
    "log10_tangible_assets_usd_thousands": 5.903089986991944,
    "working_capital_to_debt": 0.36363636363636365,
    "log10_ebit_interest": 0.6020599913279624
  },
  "h_score": 0.958597667696858,
  "screen": "non-distress-side",
  "index_cutoff": 0,
  "scale_policy": "tangible assets expressed in USD thousands before log10"
}

Other exports#

This module also exports calculate, altmanZScore, piotroskiFScore, beneishMScore, sloanAccrualMeasure, ohlsonOScore, zmijewskiXScore, springateSScore, tafflerZScore, groverGScore, dechowFScoreForMisstatementRisk, dechowDichevAccrualQuality, modifiedJonesDiscretionaryAccrualModel. 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#

Fulmer H-Score — evidence clock
Fulmer H-Score — model anatomy
Fulmer H-Score — system map
Fulmer H-Score — threshold and interpretation
Fulmer H-Score — variant boundaries

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 Quality and Distress family#