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

Taffler Z-Score

Install and import#

bash
npm install fintech-algorithms
ts
import { tafflerZScore } from "fintech-algorithms/fundamental-analysis-and-valuation/quality-and-distress/taffler-z-score";

Signature#

tafflerZScore(data)

Computes the transformed Taffler UK industrial Z-Score from profitability, working-capital adequacy, financial risk and the no-credit interval, and reports which side of the zero cutoff the score falls on.

Parameters#

NameTypeNotes
data{ current_liabilities: number; total_liabilities: number; total_assets: number; profit_before_tax: number; current_assets: number; quick_assets: number; daily_operating_expenses: number }One accounting record. profit_before_tax is scaled by current_liabilities, current_assets by total_liabilities, and current_liabilities by total_assets. The no-credit interval is quick_assets less current_liabilities divided by daily_operating_expenses, so that input must already be a per-day figure.

Returns#

{ state: string; method: string; ratios: { pbt_to_current_liabilities: number; current_assets_to_total_liabilities: number; current_liabilities_to_total_assets: number; no_credit_interval_days: number }; z_score: number; screen: string; index_cutoff: number }

ratios holds the four terms, with no_credit_interval_days expressed in days. z_score applies the constant 3.2 with coefficients 12.18, 2.5, -10.68 and 0.0289 in that order. index_cutoff is 0 and screen is distress-side for a negative score and non-distress-side otherwise. method is taffler-1983-uk-industrial-transformed 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 current_liabilities, total_liabilities, total_assets or daily_operating_expenses is zero or negative — 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
{
  "current_liabilities": 250,
  "total_liabilities": 550,
  "total_assets": 1000,
  "profit_before_tax": 140,
  "current_assets": 450,
  "quick_assets": 320,
  "daily_operating_expenses": 3
}

Call#

tafflerZScore(data)

Returns#

object with 6 fields: state, method, ratios, z_score, screen, index_cutoff

{
  "state": "calculated",
  "method": "taffler-1983-uk-industrial-transformed",
  "ratios": {
    "pbt_to_current_liabilities": 0.56,
    "current_assets_to_total_liabilities": 0.8181818181818182,
    "current_liabilities_to_total_assets": 0.25,
    "no_credit_interval_days": 23.333333333333332
  },
  "z_score": 10.07058787878788,
  "screen": "non-distress-side",
  "index_cutoff": 0
}

Other exports#

This module also exports calculate, altmanZScore, piotroskiFScore, beneishMScore, sloanAccrualMeasure, ohlsonOScore, zmijewskiXScore, springateSScore, fulmerHScore, 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#

Taffler Z-Score — evidence clock
Taffler Z-Score — model anatomy
Taffler Z-Score — system map
Taffler Z-Score — threshold and interpretation
Taffler Z-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#