Early-Stage Liquidity and Runway Score
Install and import#
npm install fintech-algorithmsimport { earlyStageLiquidityAndRunwayScore } from "fintech-algorithms/fundamental-analysis-and-valuation/sector-specific-equity-scoring/early-stage-liquidity-and-runway-score";Signature#
earlyStageLiquidityAndRunwayScore(data)Measures runway from observed cash history rather than a forecast: it nets available liquidity against near-term obligations and a minimum operating balance, takes the average burn over the last six months, and compares the latest three months of burn with the three before them. Scores four weighted bands and reports the funding window separately.
Parameters#
| Name | Type | Notes |
|---|---|---|
data | RecordValue | A plain object. framework must be the string early-stage-liquidity-teaching-v1. weights must be an object holding exactly runway, burn_trend, obligation_cover and revenue_cover. monthly_net_cash_flows must be an array of at least six finite numbers, oldest first, and monthly_revenue an array of nonnegative numbers of the same length. unrestricted_cash, liquid_investments, unconditionally_committed_facility, near_term_obligations and minimum_operating_cash must all be nonnegative.min_observations: 6 |
Returns#
{ state: string; method: string; available_liquidity: number; monthly_burn: number; prior_three_month_burn: number; latest_three_month_burn: number; burn_ratio: number; runway_months: number | null; obligation_coverage: number; revenue_to_burn: number; component_scores: Record<string, number>; weights: Record<string, number>; runway_score: number; coverage_ratio: number; reason: string }
available_liquidity is cash plus liquid investments plus the committed facility, less near-term obligations and the minimum operating balance. monthly_burn is the average net outflow over the last six months, floored at zero, and prior_three_month_burn and latest_three_month_burn split that window in half; burn_ratio is latest over prior, falling back to 0 when both are zero and 2 when only the prior half is zero. runway_months is available liquidity divided by monthly burn, or null when burn is zero, in which case the runway component scores 100. obligation_coverage divides gross liquidity by near-term obligations and revenue_to_burn divides average recent monthly revenue by the latest burn; each is 10 when its divisor is zero. component_scores holds four band scores on a 0-100 scale and runway_score is their weighted sum. state is negative-available-liquidity when available liquidity is below zero, nonburning-observation when runway is null, funding-window-under-12-months when runway is under 12, otherwise the band of the score: strong-review-band at 75 or more, mixed-review-band at 50 or more, weak-review-band below that. method is early-stage-runway-score-v1 and coverage_ratio is 1.
Errors#
- When data is not a plain object — throws TypeError
- When framework is not a nonempty string, or a cash-flow entry is not a finite number — throws TypeError
- When framework is not early-stage-liquidity-teaching-v1 — throws RangeError
- When monthly_net_cash_flows is not an array of at least 6 observations — throws RangeError
- When monthly_revenue is not an array of the same length as monthly_net_cash_flows — throws RangeError
- When weights does not hold exactly the four component names, or its values do not sum to 1 within 1e-9 — throws RangeError
- When a balance required to be nonnegative is negative, including any monthly revenue entry — throws RangeError
Complexity: time O(n),
space O(n).
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#
{
"framework": "early-stage-liquidity-teaching-v1",
"unrestricted_cash": 48,
"liquid_investments": 12,
"unconditionally_committed_facility": 10,
"near_term_obligations": 8,
"minimum_operating_cash": 6,
"monthly_net_cash_flows": [-3.8, -3.7, -3.5, -3.2, -3, -2.8],
"monthly_revenue": [1.8, 2, 2.2, 2.5, 2.8, 3.1],
"weights": {
"runway": 0.42,
"burn_trend": 0.22,
"obligation_cover": 0.18,
"revenue_cover": 0.18
}
}Call#
earlyStageLiquidityAndRunwayScore(data)Returns#
object with 15 fields: state, method, available_liquidity, monthly_burn, prior_three_month_burn, latest_three_month_burn, burn_ratio, runway_months, …
{
"state": "strong-review-band",
"method": "early-stage-runway-score-v1",
"available_liquidity": 56,
"monthly_burn": 3.3333333333333335,
"prior_three_month_burn": 3.6666666666666665,
"latest_three_month_burn": 3,
"burn_ratio": 0.8181818181818182,
"runway_months": 16.8,
"obligation_coverage": 8.75,
"revenue_to_burn": 0.9333333333333335,
"component_scores": {
"runway": 60,
"burn_trend": 86.36363636363636,
"obligation_cover": 100,
"revenue_cover": 93.33333333333334
},
"weights": {
"runway": 0.42,
"burn_trend": 0.22,
"obligation_cover": 0.18,
"revenue_cover": 0.18
},
"runway_score": 79,
"coverage_ratio": 1
}Showing 14 of 15 fields.
Other exports#
This module also exports
calculate, bankFundamentalScore, insuranceFundamentalScore, reitFundamentalScore, utilityFundamentalScore, cyclicalAndCommodityCycleNormalization, holdingCompanyLookThroughScore, sectorSpecificWeightCalibration, unsupportedScopeAndCoverageDecision. 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#
- Financial Reporting Manual — Management's Discussion and Analysis — U.S. Securities and Exchange Commission
- Disclosure considerations regarding operations, liquidity, and capital resources — U.S. Securities and Exchange Commission, Division of Corporation Finance
- Presentation of Financial Statements—Going Concern — Financial Accounting Standards Board
- Evidence boundary