Skip to main content

householdplan

ci pypi python license checked with mypy ruff

Generate a written household financial plan: policies by domain, an action register, an assumptions table where every value carries a rationale and a revisit trigger, and the scaffolding to keep the plan current after it is written.

A household plan records what you do when something happens, so the decision gets made once, in advance, rather than under pressure. Most plans go stale because nothing forces the assumptions to be revisited and nothing records why a number was chosen. This tool generates both parts: the document, and the review structure around it.

Thirty policy rules across eleven domains, two dependencies, no language model, and no network access. The same inputs always produce the same document, because policy text comes from a YAML corpus rather than from generated prose.

Educational. Not legal, tax, or investment advice.

Install

pip install householdplan

Python 3.11+. Two dependencies (pydantic, pyyaml). No network access, no telemetry, no language model: policy text comes from a YAML corpus, so the same inputs always produce the same document.

Use

householdplan draft examples/couple.yaml -o plan.md   # the plan document
householdplan validate plan.md                        # structural checks
householdplan scaffold -o planrepo/                   # appendices + review template
householdplan export-rules -o rules.json              # the corpus, for other runtimes

What it generates

draft emits a seven-section document:

  1. Why we manage money this way
  2. Goals, in priority order
  3. Policies, grouped by domain
  4. Action register
  5. Assumptions
  6. Review and change policy
  7. Appendices to write next

scaffold emits the layer that keeps it alive: eleven numbered appendix skeletons (00 Summary through 10 References) with their table headers in place, a quarterly review template whose sections map one-to-one onto those appendices, and a review log.

Policy domains

Cash flow, liquidity, debt, investing, taxes, equity compensation, insurance, goals, retirement, estate and handoff, governance.

Each rule declares which households it applies to, so a solo household without equity compensation never sees rules written for a couple with vesting stock. A rule you switch off is recorded as a deliberate omission rather than dropped silently, which keeps a later review from relitigating a decision that was already made.

Rules are data

The corpus lives in YAML, one file per domain:

- id: reserve-floor
  domain: Liquidity
  label: Cash reserve floor and what happens if it breaks
  relevant: always
  default_on: true
  inputs:
    - {key: months, label: Reserve floor, kind: num, suffix: months of essential spending}
  assumption_keys: [months]
  variants:
    - when: always
      text: "{We} hold at least {n:months} months of essential spending in {t:accounts}.
             If reserves fall below that floor, optional taxable investing pauses until
             the floor is restored."

relevant and when are boolean expressions over six household flags (couple, dependents, both_retirement_plans, equity_comp, taxable, near_retirement) combined with and, or, not, and parentheses. A recursive-descent parser handles them, so a corpus file cannot execute anything and an unknown flag name fails at load.

Because the corpus is data rather than code, export-rules emits it as JSON for other runtimes to render, and a single edit to a policy sentence reaches every consumer.

Validation

validate runs ten structural checks: every enabled rule's inputs are bound, every assumption has a rationale and a revisit trigger, every action has an owner and a due date, goals are uniquely ranked, the disclaimer is present, no individualized securities advice, no overstated certainty, every number in the prose traces to a bound input, an effective date is set, and switched-off domains are recorded rather than dropped.

Scope

This generates a policy document from inputs you supply. It does not run projections, pick investments, or give individualized advice. Numbers you put in come back out with their rationale attached; it does no arithmetic of its own.

Related

The plan document pairs with projection tools rather than replacing them. A projection tells you whether the numbers work; this records what you will do when they stop working. planner-lab consumes this package as an optional extra and can build a plan straight from a typed case file, so the policy figures and the memo figures come from the same source.

License

MIT


#personal-finance #financial-planning #investment-policy-statement #household-budget #retirement-planning #financial-independence #document-generation #markdown #python #pydantic #deterministic #no-llm #open-source-finance #money-management #financial-literacy

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

householdplan-0.1.0.tar.gz (94.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

householdplan-0.1.0-py3-none-any.whl (43.3 kB view details)

Uploaded Python 3

File details

Details for the file householdplan-0.1.0.tar.gz.

File metadata

  • Download URL: householdplan-0.1.0.tar.gz
  • Upload date:
  • Size: 94.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for householdplan-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b8c063e6405d5e24c61339410e4719c838fc6af077c54b07d221c25ea0e2ea98
MD5 a5585f9d9dc9ca2781f01b2939d3f4d7
BLAKE2b-256 9ab4390c6e0ba9a3a87f78edd55768ae48080c845690a16148f3b26062a18fa6

See more details on using hashes here.

Provenance

The following attestation bundles were made for householdplan-0.1.0.tar.gz:

Publisher: release.yml on engineerinvestor/householdplan

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file householdplan-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: householdplan-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 43.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for householdplan-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ab6723d2da3ed0a002621eeee84516ddc1a4f629f8905e0624fdc551b79b2be6
MD5 4c5cb3c6fbaff3065a484175afd30c2c
BLAKE2b-256 32605f8ecc0e548c10c100fb2450ab456e4fe1db8f7069a1e5787c9d124fbbef

See more details on using hashes here.

Provenance

The following attestation bundles were made for householdplan-0.1.0-py3-none-any.whl:

Publisher: release.yml on engineerinvestor/householdplan

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page