Australian financial planning and analysis with openfpa
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.11 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, then use the independent trial guide to record a review. The independent accountant trial remains pending. 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.1.2 is on PyPI as au-fpa-pack and has an immutable GitHub release; a clone stays the way to develop it.
Reproduce and inspect
- Setup
- Lumbridge inputs, method and limits
- Harbour Light inputs, method and limits
- Australian scope and source dates
- Other synthetic and public-data examples
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
- Upstream workbench and company workspace
- Agent CLI reference
- Python kernel
- Contributing and security reporting
MIT licensed. Guiderail's upstream work and Ryan Duguid's additions retain their attribution in LICENSE.
Metadata
Release files for au-fpa-pack 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| au_fpa_pack-0.1.2.tar.gz | 215.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| au_fpa_pack-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 361.7 kB
Release files / au_fpa_pack-0.1.2.tar.gz
| Download URL | au_fpa_pack-0.1.2.tar.gz |
|---|---|
| Size | 215.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c26f3432431d80cdb6c1fbb08912f1b9c4875257a692332cc82129a08502887f
|
|
BLAKE2b-256 checksum How to use checksums |
6b8af9273d1c59819f523990513d650b0595666c24f6d276076488c1130a0d98
|
| 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 Sep 27, 2026.
Transparency logRelease files / au_fpa_pack-0.1.2-py3-none-any.whl
| Download URL | au_fpa_pack-0.1.2-py3-none-any.whl |
|---|---|
| Size | 146.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53b67f044fda28dee0ad0a8820e2ad91e1ea1c616d6c89a1c3287a02a3de1926
|
|
BLAKE2b-256 checksum How to use checksums |
b8d34dd644a90399acb1978990ec33b72f707f1bca1d4af453b005e7c1736e53
|
| 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 Sep 27, 2026.
Transparency log