Skip to contents

Measures days of operating coverage using liquid and investment assets, net of fixed property obligations.

Formula:

doci = investable_assets / daily_expenses

investable_assets = unrestricted_net_assets + investments
                    - ( land_buildings_equipment + mortgages_payable )
daily_expenses    = ( total_expenses - depreciation ) / 365

Definitional Range

Unbounded in both directions. Negative values occur when unrestricted net assets are negative (accumulated deficits exceed equity) or when fixed assets net of debt exceed liquid resources. Values above 365 indicate more than one year of coverage.

Benchmarks and rules of thumb

  • 180-365 days: Considered a solid reserve position for endowed organizations.

  • A large gap between this metric and get_days_cash_operations() indicates liquidity concentrated in investments rather than accessible cash.

Calculated For: 990 + 990EZ filers.

Usage

get_days_cash_investments( df,
  net_assets        = "F9_10_NAFB_UNRESTRICT_EOY",
  investments       = "F9_10_ASSET_INV_SALE_EOY",
  land_buildings    = "F9_10_ASSET_LAND_BLDG_NET_EOY",
  mortgages_payable = "F9_10_LIAB_MTG_NOTE_EOY",
  total_expenses    = "F9_09_EXP_TOT_TOT",
  depreciation      = "F9_09_EXP_DEPREC_TOT",
  numerator = NULL, denominator = NULL, winsorize = 0.98 ,
  range     = "np",
  sanitize  = TRUE,
  summarize = FALSE )

Arguments

df

A data.frame containing the fields required for computing the metric.

net_assets

Unrestricted net assets, EOY.

investments

Investments held for sale or use, EOY.

land_buildings

Net land, buildings, and equipment, EOY.

mortgages_payable

Mortgages and notes payable, EOY.

total_expenses

Total functional expenses.

depreciation

Depreciation, depletion, and amortization.

numerator

Optional. A pre-aggregated column for investable assets. Cannot be combined with the individual component arguments.

denominator

Optional. A pre-aggregated column for annual non-depreciation expenses (the function divides this by 365 internally). Cannot be combined with total_expenses or depreciation.

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 "np". 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). If TRUE, 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 a summary() of the results and plots density curves for all four output columns (raw, winsorized, z-score, percentile). Defaults to FALSE.

Value

Object of class data.frame: the original dataframe appended with four new columns:

- `days_cash_inv`   - days of operating cash and investments (raw)
- `days_cash_inv_w` - winsorized version
- `days_cash_inv_z` - standardized z-score (based on winsorized values)
- `days_cash_inv_p` - percentile rank (1-100)

Details

Primary uses and key insights

Days of cash and investments extends get_days_cash_operations() by incorporating investment assets into the liquidity numerator. It asks: if the organization could liquidate its unrestricted assets (net of fixed property and related debt), how many days of operations could it fund? This broader measure captures organizations that hold significant reserves in investment portfolios rather than bank accounts.

It is most relevant for endowed organizations, foundations, and mature nonprofits that hold investment portfolios. For organizations with minimal investments, get_days_cash_operations() and this metric will be nearly identical.

Formula variations and their sources

The numerator is unrestricted net assets plus investments held for sale, minus net fixed assets (land/buildings/equipment), plus mortgage notes payable. This construction approximates the liquid, unrestricted resource base by starting from unrestricted net assets, adding back investment assets, and removing the illiquid fixed asset component (net of its associated debt). The denominator uses the same daily expense base as get_days_cash_operations(): (total expenses - depreciation) / 365.

This formulation follows Zietlow et al. (2007) and is related to the LUNA measure (get_liquid_assets_months()).

Why this formula was chosen

By netting out fixed assets and their associated mortgage debt, the formula isolates resources that could realistically be accessed in a financial emergency - the organization cannot liquidate its building overnight, but it can liquidate investment securities. This is more operationally meaningful than simply summing all assets.

Canonical citations

  • Zietlow, J., Hankin, J.A. & Seidner, A. (2007). Financial Management for Nonprofit Organizations. Wiley.

  • Calabrese, T.D. (2013). Running on empty: The operating reserves of U.S. nonprofit organizations. Nonprofit Management and Leadership, 23(3), 281-302.

Variables used:

  • F9_10_NAFB_UNRESTRICT_EOY: Unrestricted net assets, EOY (net_assets)

  • F9_10_ASSET_INV_SALE_EOY: Investments held for sale, EOY (investments)

  • F9_10_ASSET_LAND_BLDG_NET_EOY: Net land, buildings, and equipment (land_buildings)

  • F9_10_LIAB_MTG_NOTE_EOY: Mortgages and notes payable (mortgages_payable)

  • F9_09_EXP_TOT_TOT: Total functional expenses (total_expenses)

  • F9_09_EXP_DEPREC_TOT: Depreciation and amortization (depreciation)

Examples

library( fiscal )
data( dat10k )

d <- get_days_cash_investments( df = dat10k )
#>    :: Daily operating expenses equal to zero :: 86 case(s) replaced with NaN
head( d[ , c( "days_cash_inv", "days_cash_inv_w", "days_cash_inv_z", "days_cash_inv_p" ) ] )
#>    days_cash_inv days_cash_inv_w days_cash_inv_z days_cash_inv_p
#>            <num>           <num>           <num>           <int>
#> 1:            NA              NA              NA              NA
#> 2:        0.0000          0.0000      -0.2681201              27
#> 3:      342.7773        342.7773       0.5729522              72
#> 4:            NA              NA              NA              NA
#> 5:   -10160.4642      -9319.4459      -3.7678912               1
#> 6:            NA              NA              NA              NA