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

Grover G-Score

Install and import#

bash
npm install fintech-algorithms
ts
import { groverGScore } from "fintech-algorithms/fundamental-analysis-and-valuation/quality-and-distress/grover-g-score";

Signature#

groverGScore(data)

Computes the Grover G-Score, a three-variable re-estimation over working capital to assets, EBIT to assets and return on assets, and bands the result as distress, grey or non-distress.

Parameters#

NameTypeNotes
data{ total_assets: number; working_capital: number; ebit: number; net_income: number }One accounting record. total_assets is the common denominator for working_capital, ebit and net_income.

Returns#

{ state: string; method: string; variables: { working_capital_to_assets: number; ebit_to_assets: number; roa: number }; g_score: number; zone: string; threshold_policy: string }

variables holds the three ratios and g_score weights them by 1.650, 3.404 and -0.016 plus the constant 0.057. zone is distress-zone at -0.02 or below, non-distress-zone at 0.01 or above and grey-zone between; threshold_policy restates those bounds. method is grover-2001-reported-reestimation 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 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
{
  "total_assets": 1000,
  "working_capital": 200,
  "ebit": 160,
  "net_income": 80
}

Call#

groverGScore(data)

Returns#

object with 6 fields: state, method, variables, g_score, zone, threshold_policy

{
  "state": "calculated",
  "method": "grover-2001-reported-reestimation",
  "variables": {
    "working_capital_to_assets": 0.2,
    "ebit_to_assets": 0.16,
    "roa": 0.08
  },
  "g_score": 0.9303600000000002,
  "zone": "non-distress-zone",
  "threshold_policy": "distress<=-0.02; grey=(-0.02,0.01); non-distress>=0.01"
}

Other exports#

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

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