Skip to main content

Australian financial planning and analysis with openfpa

tests CodeQL PyPI licence: MIT python

An Australian extension of openfpa, by Guiderail: 30 June financial years, Xero AU account mapping, GST and BAS cash timing and payroll on-costs. It builds monthly, weekly and daily cash forecasts and a management briefing from a company's own records, for an accountant or analyst doing forecasting and month-end work. Every assumption is declared in a file you can read, and the funding decision stays with a person.

Start here: the worked Lumbridge case · setup · Australian scope and source dates · the case explained on the web

Source examples also cover refreshing the cash forecast from actuals, passing the opening balances to close controls, tracing WIP into project cash and separating restricted cash.

Continue with the three-month close simulation, supplier payment plans and grant-to-cash handoff.

Synthetic example. Forecasting aid, not tax advice; a human approves the assumptions and funding decision.

Input: Lumbridge Services' fabricated records, NSW payroll assumptions and dated customer receipts and payments for October to December 2026.

Lumbridge Services is a fictional Newcastle maintenance business. Its Varrock and Falador service lines are Old School RuneScape references; no game knowledge is needed. All amounts are AUD.

Try it without Python: download the Excel workbook, or get the sample pack with its source files. Use desktop Excel with automatic calculation. Read the case and compare both scenarios in your browser before opening the file.

To reproduce it from a clone, use Python 3.12 and the locked development environment:

uv sync --locked --extra dev
uv run --locked --extra dev python examples/lumbridge-services/models/generated/lumbridge.py

Output: briefing.md, lumbridge.xlsx, monthly and cash schedules in examples/lumbridge-services/output/.

The briefing, the monthly and cash schedules and the JSON summary from that run are committed under examples/lumbridge-services/output/, so the result can be read without installing anything; the workbook is rebuilt locally. A rendered chart of the 13-week cash line with the 45-day delay, exported from the workbook in Excel, is on the site at https://duguid.com.au/assets/examples/lumbridge/cash-preview.png with its capture record.

Forecast measure Receipt on time Receipt 45 days late
Quarter revenue $180,000.00 $180,000.00
Quarter profit before income tax $35,957.55 $35,957.55
October closing cash $32,040.00 ($11,960.00)
Lowest daily closing cash $16,800.00 ($25,160.00)
December closing cash $67,320.00 $67,320.00

Human decision: Can the business meet its next payments if a customer pays late, and should the owner defer discretionary equipment spending?

In desktop Excel, change Assumptions!B2 from 0 to 45. This delays one $44,000 receipt and creates a $25,160 cash shortfall on 6 November without changing profit. Restore 0 after use. The workbook supports only whole-day receipt delays from 0 to 120; CSVs and briefing text are fixed exports.

Read the assumptions and limits before using the example. This synthetic case does not establish client outcomes or forecast accuracy.

Harbour Light provides a separate Victorian wholesale example with FY2027 reporting and quarterly BAS cash timing.

Setup, Australian scope, skills, kernel packages, upstream workbench and reference

What this repository adds

An Australian extension of openfpa, by Guiderail: 30 June years, Xero AU mapping, GST/BAS cash timing and payroll on-cost assumptions.

Package lifecycle: published. The distribution is au-fpa-pack, the import is pyfpa, and the command is openfpa. Version 0.2.0 is on PyPI as au-fpa-pack and has an immutable GitHub release; a clone stays the way to develop it.

Reproduce and inspect

The command above creates files; it does not establish native Excel recalculation or forecast accuracy.

Skills

skills/ holds 17 skills. Sixteen are the pack's own, grouped by what they are for:

  • Australian rules: fpa-au-drivers, fpa-au-gst-bas, fpa-au-payroll, fpa-au-xero
  • Onboarding and building: fpa-learn-business, fpa-configure-actuals, fpa-scaffold-model, fpa-excel-model
  • Running the month: fpa-monthly-close, fpa-cash-runway, fpa-board-briefing, fpa-cfo-judgment
  • Learning from outcomes: fpa-capture-correction, fpa-backtest-learn, fpa-research-loop, fpa-portfolio-learn

The seventeenth, skills/generated/sku-profitability, is the worked example of a company-specific skill the workflow writes, not a skill the pack ships for every company.

.claude-plugin/plugin.json declares the repository as the openfpa plugin, version 0.1.0, MIT. That manifest is what a Claude Code marketplace entry pointing at this repository installs.

Kernel packages and how each is reached

Package What it is for How it is reached
pyfpa/memory Company memory on disk: the .fpa/ workspace, intake, sources, mappings, connectors, corrections, experiments, entrypoints and the retrieval index. The openfpa CLI. Every workspace command in the CLI reference goes through it.
pyfpa/research The champion and challenger loop: a company objective, scored epochs, and a model registry that only a recorded human approval changes. openfpa status reads the model registry. The loop itself runs from skills/fpa-research-loop against the Python API.
pyfpa/portfolio Cross-client learning: a portfolio manifest, priors mined and validated across clients, and recurring generated skills promoted into a shared library. Promotion is default-deny: mining and validation propose, and nothing reaches the library without a PromotionApproval the practitioner records for that exact candidate. The Python API only. No CLI command reaches it, and today the one documented route is skills/fpa-portfolio-learn.

Promotion is the one place the pack would move one client's information into another client's work, so it refuses to until you record the decision. The approval is an acknowledgement of a judgement you made, not authentication and not legal proof that the client consented. Running locally means nothing goes out over the network; it does not by itself make that reuse permissible, so read SECURITY.md and the fpa-portfolio-learn guardrails first.

Reference and contribution

MIT licensed. Guiderail's upstream work and Ryan Duguid's additions retain their attribution in LICENSE.

Metadata

Release files for au-fpa-pack 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for au-fpa-pack 0.2.0
File Size Uploaded
au_fpa_pack-0.2.0.tar.gz 268.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for au-fpa-pack 0.2.0
File Interpreter ABI Platform
au_fpa_pack-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 436.0 kB

Release files / au_fpa_pack-0.2.0.tar.gz

Download URL au_fpa_pack-0.2.0.tar.gz
Size 268.4 kB
Tags Source
SHA-256 checksum
How to use checksums
274cb3f8cd42fdf324859fc1bdcf30fe5776def589cd7550dba7f7a39d987bcb
BLAKE2b-256 checksum
How to use checksums
66722739eed0d9d0a33a6b35f1ec7c6af7fba0ef4ba916fae38576f597a8d111
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / au_fpa_pack-0.2.0-py3-none-any.whl

Download URL au_fpa_pack-0.2.0-py3-none-any.whl
Size 167.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2353c1e6e3cd7d932c901504b150ad20aa019ee1f85c2e1b48a76bb0e0ce9429
BLAKE2b-256 checksum
How to use checksums
09790e4e75dc43a47c8d463a7ad956495cbf57c6be480b1f54959c118a31ed28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page