Measures immediate liquidity using only cash and cash equivalents against current liabilities.
Formula:
casr = ( cash + savings ) / current_liabilities
current_liabilities = accounts_payable + grants_payableDefinitional Range
Bounded below at zero and unbounded above. A ratio of 1.0 means cash exactly covers current payables. The empirical range for nonprofits is approximately [0, 20], with most values between 0.1 and 5.0. Very high values are common for grant-making foundations and endowed organizations that carry minimal accounts payable.
Benchmarks and rules of thumb
Below 0.5: Organization cannot cover half of near-term payables from cash alone; reliant on receivables collection or borrowing.
1.0 or above: Full cash coverage of current liabilities.
Because this is a highly conservative measure, values somewhat below 1.0 are normal if receivables are healthy.
Calculated For: 990 + 990EZ filers.
Usage
get_cash_liquidity_ratio( df,
cash = "F9_10_ASSET_CASH_EOY",
savings = "F9_10_ASSET_SAVING_EOY",
accounts_payable = "F9_10_LIAB_ACC_PAYABLE_EOY",
grants_payable = "F9_10_LIAB_GRANT_PAYABLE_EOY",
winsorize = 0.98 ,
range = "zp",
sanitize = TRUE,
summarize = FALSE )Arguments
- df
A
data.framecontaining the fields required for computing the metric.- cash
Cash on hand, EOY.
- savings
Short-term investments (savings), EOY.
- accounts_payable
Accounts payable and accrued expenses, EOY.
- grants_payable
Grants and similar amounts payable, EOY.
- winsorize
The winsorization value (between 0 and 1), defaults to 0.98, which winsorizes at the 1st and 99th percentiles.
- range
Character string specifying the theoretical range of the ratio, used to set winsorization bounds. Default
"zp". Options:"np"(negative to positive),"zp"(zero to positive),"zo"(zero to one),"nz"(negative to zero), or a custom"lo;hi"pair (e.g."0;10").- sanitize
Logical (default
TRUE). IfTRUE, NA values in the financial input columns are imputed to zero before the ratio is computed, respecting form scope: Part X and VIII/IX fields (990 only) are imputed only for 990 filers; Part I summary fields (990 + 990EZ) are imputed for all filers. The returned dataframe always contains the original unmodified input columns.- summarize
Logical. If
TRUE, prints asummary()of the results and plots density curves for all four output columns (raw, winsorized, z-score, percentile). Defaults toFALSE.
Value
Object of class data.frame: the original dataframe appended with four
new columns:
- `cash_liq` - cash ratio (raw)
- `cash_liq_w` - winsorized version
- `cash_liq_z` - standardized z-score (based on winsorized values)
- `cash_liq_p` - percentile rank (1-100)Details
Primary uses and key insights
The cash liquidity ratio is the most conservative liquidity test: it asks whether an organization could cover its most immediate obligations using only cash and savings, without collecting any receivables or selling any investments. It is sometimes called the absolute liquidity ratio or cash coverage ratio. For nonprofits with long or uncertain receivables collection cycles (e.g., government reimbursement contracts, multi-year pledge collections), it provides a pessimistic but useful lower bound on liquidity.
This ratio is stricter than both the quick ratio (get_quick_ratio())
and the current ratio (get_current_ratio()), which both include
receivables in the numerator.
Formula variations and their sources
The commercial equivalent (sometimes called the "super-quick" ratio) uses only cash and marketable securities. The nonprofit version here uses cash (line 1B) plus savings/temporary investments (line 2B) as the numerator, and accounts payable plus grants payable as the denominator. This follows the same liability proxy used across the package (Tuckman & Chang 1991).
Why this formula was chosen
Cash and savings are the two fields on the 990 that most unambiguously represent immediately available funds. The denominator (accounts payable + grants payable) represents the most pressing and legally enforceable near-term obligations. Together this pair provides the most conservative 990-based liquidity measure available.
Canonical citations
Tuckman, H.P. & Chang, C.F. (1991). A methodology for measuring the financial vulnerability of charitable nonprofit organizations. Nonprofit and Voluntary Sector Quarterly, 20(4), 445-460.
Zietlow, J., Hankin, J.A. & Seidner, A. (2007). Financial Management for Nonprofit Organizations. Wiley.
Variables used:
F9_10_ASSET_CASH_EOY: Cash on hand, EOY (cash)F9_10_ASSET_SAVING_EOY: Savings and temporary cash investments, EOY (savings)F9_10_LIAB_ACC_PAYABLE_EOY: Accounts payable and accrued expenses, EOY (accounts_payable)F9_10_LIAB_GRANT_PAYABLE_EOY: Grants and similar amounts payable, EOY (grants_payable)
Examples
library( fiscal )
data( dat10k )
d <- get_cash_liquidity_ratio( df = dat10k )
#> :: Current liabilities equal to zero :: 2,375 case(s) replaced with NaN
head( d[ , c( "cash_liq", "cash_liq_w", "cash_liq_z", "cash_liq_p" ) ] )
#> cash_liq cash_liq_w cash_liq_z cash_liq_p
#> <num> <num> <num> <int>
#> 1: NA NA NA NA
#> 2: NaN NaN NaN NA
#> 3: 17.2128128 17.2128128 0.2779919 59
#> 4: NA NA NA NA
#> 5: 0.0248697 0.0248697 -0.8307282 3
#> 6: NA NA NA NA