# Cash Flow Forecast & Treasury Projection

> Cash flow forecast from open receivables and payables by due date plus manual items, with a running projected balance, pivot and chart.

- **What it is:** Cash flow forecast from open receivables and payables by due date plus manual items, with a running projected balance, pivot and chart.
- **For:** Accounting
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 99 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_cash_forecast
- **Manual:** https://docs.bambooforge.dev/bambooforge_cash_forecast/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_cash_forecast.cash_forecast_action
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_cash_forecast
- **Manual last updated:** 2026-10-15

---
# Cash Flow Forecast & Treasury Projection

See where your cash is heading. This app buckets your **open customer invoices**
and **vendor bills** by due date over a horizon you choose, adds any **manual
known items**, and projects a **running cash balance** — with a chart — so you can
spot a squeeze before it happens.

This page is the complete manual. Follow it top to bottom and you can install,
build a forecast, read the projection and fix the common issues **without
contacting support**.

## Overview

A forecast is built from three sources, period by period:

- **Expected in** — the open (unpaid) amounts on your customer invoices, placed
  in the period of their due date.
- **Expected out** — the open amounts on your vendor bills, by due date.
- **Manual items** — known future movements not yet in Odoo (payroll, rent, a
  loan drawdown), positive for money in, negative for money out.

Starting from your **opening cash**, each period's net (in − out + manual) rolls
forward into a **projected balance**, shown as a table and a line chart.

It honours payment terms: an invoice paid in installments is split across the
periods of each installment's due date.

## Requirements

- Odoo 20.0.
- The **Invoicing/Accounting** app (`account`). Installing this app pulls it
  in automatically.

No Enterprise modules and no external Python libraries are required.

## Installation

1. Copy `bambooforge_cash_forecast` into your addons path.
2. Update the apps list (Apps > Update Apps List).
3. Search for **Cash Forecast** and click *Install*.

A new top-level **Cash Forecast** app appears, and a **Cash Flow Forecast** entry
is added under *Accounting > Reporting*.

## Quick start

1. Open **Cash Forecast > Forecasts** and click *New*.
2. Set the **Start Date**, the **Period** (weekly or monthly) and the **Number of
   Periods** to project.
3. Click **Compute Opening** to pull the current balance of your bank and cash
   accounts (or type an opening figure).
4. Optionally add **Manual Items** on the second tab.
5. Click **Compute**.

The forecast switches to *Computed*. The **Projection** tab shows each period's
opening, expected in/out, manual, net and projected balance; the **Projection
Chart** button plots the balance over time.

## Reading the projection

Each period row shows:

- **Opening** — the projected balance carried in from the previous period.
- **Expected In / Out** — open receivables and payables due in the period.
- **Manual** — your manual items for the period.
- **Net** — In − Out + Manual.
- **Projected Balance** — Opening + Net, carried forward.

A negative projected balance is highlighted, and the chart makes a coming squeeze
obvious at a glance.

## Opening balance

**Compute Opening** sums the balance of your liquidity (bank and cash) accounts up
to the start date. You can override the figure if you want to forecast from a
different starting position.

## Overdue amounts

With **Include Overdue** on (the default), amounts already past due are lumped
into the first period — they are cash you still expect to collect or pay. Turn it
off to forecast only amounts coming due from the start date onward.

## Manual items

On the **Manual Items** tab, add a date, a description and a signed amount for any
known future movement that is not yet an invoice or bill — payroll, rent, tax
payments, a planned loan drawdown. Positive amounts are inflows, negative are
outflows. They are bucketed by date like everything else.

## Automating refreshes

A scheduled action **Cash Forecast: Recompute Latest** ships **disabled**. Enable
it under *Settings > Technical > Scheduled Actions* to roll the most recent
forecast forward to today and recompute on a schedule (weekly by default).

## Frequently asked questions

****Amounts are split across several periods.****

That is the payment terms at work: an invoice paid in installments contributes
to the period of each installment's due date. This is the realistic behaviour.

****Items beyond my horizon don't appear.****

Correct — only amounts due within the projected periods are shown. Increase the
number of periods to look further ahead.

****The opening balance looks wrong.****

Compute Opening uses your bank and cash accounts. If you keep cash elsewhere,
type the opening figure manually.

****Does it forecast in foreign currency?****

Figures are presented in your company currency, summed from the company-currency
amounts of each entry.

****Does it work with multiple companies?****

Yes. Each forecast is scoped to one company's receivables, payables and cash.

## How we make sure it works

Before every release, **14 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- Bands may not overlap.
- No list column hidden with invisible.
- An empty contact falls back to odoo 20's company timezone.
- The rolling forecast starts on the company's day.
- Bucketing is date against date in any timezone.

The complete list is in the source you receive.

## Support

Questions or ideas: **support@bambooforge.dev**.

## Usage

This section walks through the day-to-day treasury routine: how a controller
builds a forecast on Monday morning, reads it, keeps it honest through the week,
and re-uses it every period. It assumes the app is installed and that you have
the *Billing* access right (`account.group_account_invoice`), which the menu
requires.

### Where to find it

Two menu paths open the same list of forecasts:

- **Cash Forecast > Forecasts** — the dedicated top-level app.
- **Accounting > Reporting > Cash Flow Forecast** — for accountants who live in
  the Accounting app.

Both open the *Cash Flow Forecasts* list. Computed forecasts show a green
**Computed** badge; a projected ending balance below zero is shown in red so a
looming shortfall is visible before you even open the record.

### Building the weekly forecast

1. Click **New**. The name is assigned automatically from the *Cash Forecast*
   sequence (e.g. `CF/2026/0007`) and is read-only.
2. Under **Scope**, set the **Start Date** (typically today), the **Period**
   (*Weekly* for a rolling 13-week treasury view, or *Monthly* for a longer
   horizon), and the **Number of Periods**. Leave **Include Overdue** on so
   amounts already past due are collected into the first period — they are still
   cash you expect to move.
3. Press **Compute Opening**. This sums the posted balance of your bank and cash
   accounts (account type *Bank and Cash*) dated before the start date and writes
   it into **Opening Balance**. If you hold cash the ledger does not know about,
   type the figure over it.
4. Open the **Manual Items** tab and add any known movement that is not yet an
   invoice or bill — payroll run, quarterly VAT payment, rent, a planned loan
   drawdown. Enter a **Date**, a **Description** and a signed **Amount**
   (positive = money in, negative = money out).
5. Press **Compute**. The record moves to *Computed*, the **Projection** tab
   fills with one row per period, and a chatter note records how many periods
   were projected.

### Reading the result

The **Projection** tab lists, for each period: **Opening**, **Expected In**
(open receivables due in the period), **Expected Out** (open payables),
**Manual**, **Net** (In − Out + Manual) and **Projected Balance** (Opening + Net,
carried into the next row). Any period whose projected balance turns negative is
highlighted in red. The **Position** group at the top summarises **Total Inflow**,
**Total Outflow** and the final **Ending Balance**.

Click the **Projection Chart** stat button to open the same data as a line graph
(with a supporting list view) so the trajectory — and any dip below the line — is
obvious at a glance.

### A worked example

A distributor with **€40,000** opening cash builds a weekly forecast over eight
periods. Open customer invoices total €95,000 spread across their due dates;
open vendor bills total €78,000. On the Manual Items tab the controller adds
`-12,000` on the 28th (monthly payroll) and `+20,000` mid-month (an expected
grant). After **Compute**, week 4 shows Expected In €8,000, Expected Out €22,000
and the €12,000 payroll, giving a Net of −€26,000 and a **Projected Balance** that
dips red. The controller pulls two large customer payments forward and re-runs the
forecast to confirm the dip is cleared.

### Keeping it current

Through the week, edit the Manual Items or change the Scope and press
**Recompute** — the period rows are rebuilt from scratch each time. Use
**Reset to Draft** to clear the projection and start over. To roll your latest
forecast forward automatically, enable the scheduled action **Cash Forecast:
Recompute Latest** under *Settings > Technical > Scheduled Actions*; it re-bases
the most recent computed forecast per company to today and recomputes on its
schedule.

## Upgrading & version compatibility

This build targets **Odoo 20.0**. Each Odoo major series (16.0, 17.0, 18.0, 19.0, 20.0) has its
own dedicated build of this module — always install the build that matches your Odoo
version. Mixing a build with a different Odoo series is not supported.

### Patch upgrades (same series, e.g. 20.0.1.0.0 → later)

1. **Back up** your database and filestore first.
2. Replace the module folder with the newer build.
3. Restart Odoo with the module updated:
   
   ```
   ./odoo-bin -c your.conf -u bambooforge_cash_forecast -d your_db
   ```
4. Odoo applies any schema/data changes automatically. Your existing records and
   configuration are preserved.

### Cross-version migration (moving to a newer Odoo)

Upgrading Odoo itself is a database migration handled by Odoo's standard upgrade
tooling. When you migrate the database to the next Odoo series, install the matching
build of this module for that series. Data created by this module carries over with
the database migration.

After any upgrade the module's scheduled actions resume on their normal cadence —
no manual re-activation is required.

## Uninstallation

You can remove this module at any time from **Apps → (this module) → Uninstall**,
or from the command line. Uninstalling is clean and reversible by reinstalling —
but note what is and is not deleted.

### What is removed

- The module's own tables and every record in them (3 models, prefixed `cash.*`) — this is the data this module created.
- The menus, actions, views and reports this module installed.
- Its scheduled actions (cron jobs) — they stop immediately on uninstall.

### What is preserved

- Your standard Odoo data (partners, products, sales, invoices, inventory moves) is
  **not** deleted — this module only reads and annotates it; the underlying records stay.
- Attachments and chatter messages on standard records are kept.

As always, take a database backup before uninstalling in production.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Invoicing app. No extra Python package.

****Where does it show up?****

Under the **Cash Forecast** menu (Forecasts, Collection Profiles).

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.

## Changelog

### 20.0.1.1.3

- Built for Odoo 20: record rules and access rights rewritten onto Odoo 20's single ir.access model, the screens rebuilt on Owl 3, and every icon moved to the icon set Odoo 20 ships.

### 20.0.1.0.0

Current release for Odoo 20.0. This build includes:

- Project your cash position over the coming weeks or months from open receivables and payables (by due date), plus manual known items.
- With a running projected balance, pivot and chart.

Feature additions and fixes ship as new builds on the Odoo Apps store; this page and
the module's `version` reflect the current published release. Always keep the build
matched to your Odoo series (see *Upgrading & version compatibility*).
