Cash Flow Statement Calculator

Calculate your operating cash flow by combining net income, depreciation, and changes in working capital in one transparent model.

Operating Cash Flow Inputs

Enter positive values for increases and negative for decreases.

How to Use This Calculator

This tool translates the three core operating components—net income, depreciation, and changes in working capital—into a single operating cash flow figure so you can assess liquidity performance quickly.

Enter values using the same currency and reporting period (monthly, quarterly, or annual). Click Calculate to refresh results, or edit any field and wait 100 ms for the automatic recalculation. Reset will restore the sample inputs shown here.

Methodology

Operating cash flow is derived by adding depreciation (a non-cash expense) and the net change in working capital to net income. This mirrors the operating section of a cash flow statement.

All arithmetic is exact and defensively rounded to two decimal places to ensure deterministic output without NaN or Infinity.

Data Source

Calculations align with standard accounting principles and reference Financial Accounting Standards Board (FASB) guidance to stay consistent with audited reporting practices.

The Formula Explained

The operating cash flow formula sums the three input components so you can trace each driver.

\[ \text{Operating Cash Flow} = \text{Net Income} + \text{Depreciation} + \text{Changes in Working Capital} \]

Glossary of Terms

  • Net Income: Revenue minus expenses, taxes, and other costs.
  • Depreciation: Non-cash write-down of long-lived assets.
  • Changes in Working Capital: Movement in current assets minus current liabilities.
  • Operating Cash Flow: Cash generated from normal business operations.

Example Calculation

Assume $100,000 net income, $10,000 depreciation, and $5,000 increase in working capital. The operating cash flow equals:

\[ \text{Operating Cash Flow} = 100,000 + 10,000 + 5,000 = 115,000 \]

Frequently Asked Questions (FAQ)

What is a Cash Flow Statement?

A cash flow statement aggregates every cash inflow and outflow to show how cash actually moves through the business.

Why is Cash Flow Important?

Cash flow reveals whether a company can meet obligations, fund growth, and cover unexpected costs.

How often should I calculate cash flow?

Calculate cash flow monthly or quarterly to keep liquidity forecasts accurate.

What affects cash flow?

Revenue, expenses, and changes in accounts receivable/payable all impact cash flow.

Is cash flow the same as profit?

No; profit includes non-cash items, while cash flow tracks actual money received and paid.

Formulas

Operating Cash Flow: Sum of operating components.

\(OCF = NI + D + ΔWC\)

  • NI: Net income (profit after expenses).
  • D: Depreciation (non-cash expense).
  • ΔWC: Net change in working capital.
Citations

Financial Accounting Standards Board (FASB) — fasb.org (Accessed 2026-01-19)

Changelog
  • 0.1.0-draft — 2026-01-19: Initial audit spec draft generated from HTML extraction (review required).
  • Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
  • Confirm sources are authoritative and relevant to the calculator methodology.
Verified by Ugo Candido Last Updated: 2026-01-19 Version 0.1.0-draft
Version 1.5.0
+ round2(safe).toFixed(2); } }; const defaults = { netIncome: 100000, depreciation: 10000, changesInWorkingCapital: 5000 }; const fieldLabels = { netIncome: 'Net income', depreciation: 'Depreciation', changesInWorkingCapital: 'Changes in working capital' }; const els = { netIncome: document.getElementById('netIncome'), depreciation: document.getElementById('depreciation'), changesInWorkingCapital: document.getElementById('changesInWorkingCapital'), operatingCashFlow: document.getElementById('operatingCashFlow'), netIncomeResult: document.getElementById('netIncomeResult'), depreciationResult: document.getElementById('depreciationResult'), workingCapitalResult: document.getElementById('workingCapitalResult'), errorBox: document.getElementById('errorBox'), calcBtn: document.getElementById('calcBtn'), resetBtn: document.getElementById('resetBtn') }; function parseInputs() { return { netIncome: parseFloat(els.netIncome.value), depreciation: parseFloat(els.depreciation.value), changesInWorkingCapital: parseFloat(els.changesInWorkingCapital.value) }; } function validate(inputs) { const errors = []; Object.entries(inputs).forEach(([key, value]) => { if (!Number.isFinite(value)) { errors.push(`${fieldLabels[key]} must be a valid number.`); } }); return { ok: errors.length === 0, errors }; } function compute(inputs) { const total = inputs.netIncome + inputs.depreciation + inputs.changesInWorkingCapital; if (!Number.isFinite(total)) return null; return { operatingCashFlow: round2(total) }; } function format(outputs) { return { operatingCashFlow: fmtCurrency(outputs.operatingCashFlow) }; } function render(formatted, errors, inputs) { if (errors && errors.length > 0) { els.errorBox.style.display = 'block'; els.errorBox.textContent = errors.join(' '); return; } els.errorBox.style.display = 'none'; els.errorBox.textContent = ''; if (!formatted || !inputs) return; els.operatingCashFlow.textContent = formatted.operatingCashFlow; els.netIncomeResult.textContent = fmtCurrency(inputs.netIncome); els.depreciationResult.textContent = fmtCurrency(inputs.depreciation); els.workingCapitalResult.textContent = fmtCurrency(inputs.changesInWorkingCapital); } function update() { const inputs = parseInputs(); const validation = validate(inputs); if (!validation.ok) { render(null, validation.errors); return; } const outputs = compute(inputs); if (!outputs) { render(null, ['Unable to compute cash flow for the current inputs.']); return; } const formatted = format(outputs); render(formatted, [], inputs); } function applyDefaults() { Object.entries(defaults).forEach(([key, value]) => { if (els[key]) { els[key].value = value; } }); } el.addEventListener('change', debouncedUpdate); }); els.calcBtn.addEventListener('click', update); els.resetBtn.addEventListener('click', () => { applyDefaults(); const debouncedUpdate = debounce(update, 100); document.querySelectorAll('#inputsCard input, #inputsCard select, #inputsCard textarea') .forEach((el) => { el.addEventListener('input', debouncedUpdate); el.addEventListener('change', debouncedUpdate); }); update(); }); applyDefaults(); update(); })();