Skip to main content

Trust distribution checks

Ryan Duguid is not a registered tax agent or BAS agent. Project support is limited to software issues reproduced with fabricated data. Do not send taxpayer information or request advice, return preparation, tax-treatment confirmation, or lodgement.

Install distribution Python import Command
solomons-sword louisgoldberg solomons-sword

Python tests PyPI License: MIT ITAA 1936

Project name Solomon's Sword. Distribution solomons-sword, import package louisgoldberg, command solomons-sword.

Trust distribution allocation, Section 100A / 99B risk evaluation, and Division 6 ITAA 1936 review helpers for Australian trusts.

Package lifecycle: published. Install solomons-sword from PyPI.

The australian-accounting repository contains the maintained source. The solomons-sword distribution and command match the project identity. The louisgoldberg import package remains unchanged, so internal Python imports do not need a rename.

In-repo version: 0.1.8; see release notes.

Named for the judgement of Solomon, where the threat of dividing the child in proportion is what reveals who the true claimant is. Division 6 allocates trust income by proportionate entitlement following Bamford; Section 100A asks who actually ended up with the benefit. The name is a tribute only.

Not advice

Nothing this engine produces is tax, legal or financial advice, an assessment or a determination. Outputs are review aids: confirm every allocation, zone and exemption against the current law, the trust deed and the entity's facts before acting, and leave lodgement decisions with a registered practitioner. Where the model does not implement a rule it refuses the input rather than returning a number it cannot stand behind.

Command output carries the beneficiary name you supply, because a workpaper line item is unusable without it. Treat that output as client data: write it to the firm's approved secure location, never to a path inside a repository.

Full boundary statement: DISCLAIMER.md.


What it checks

  • Division 6 Proportionate Allocation (Commissioner of Taxation v Bamford [2010] HCA 10): Calculates present entitlement proportions and allocates s 95(1) ITAA 1936 taxable net income and the franking credits that ride with it. Specifically streamed capital gains and franked dividends are refused, not allocated: the Division 6E carve-out with Subdivision 115-C (including s 115-220) and Subdivision 207-B is not implemented, so a proportionate answer would be wrong. Non-resident beneficiaries (s 98(2A)/(3)), nil income of the trust estate and no presently entitled beneficiary (s 99 / s 99A) are refused for the same reason. Each beneficiary's residency is a required input and their legal disability is stated as True or False: those 2 facts select the refused paths, so an unstated one is refused rather than defaulted.
  • Section 100A Reimbursement Agreement Matrix: Classifies supplied facts against ATO PCG 2022/2 as Green, Red, or outside those zones. The final guideline has white, green and red; the draft blue zone did not survive. White zone (income years ending before 1 July 2014) is out of scope because the function does not take an income year. Every fact is True, False or unstated, and the green zone turns on all 7 of them: while any is unstated the result is FACTS_NOT_ESTABLISHED, naming the facts that are missing, because an arrangement nobody has described is not one the ATO has said it will leave alone. An established red-zone trigger still returns RED.
  • Section 99B Foreign Trust Receipt Assessment: Computes assessable amounts under s 99B(1) after corpus exemptions (s 99B(2)(a)) and prior-taxed income. Residency during the year of income is a required input, stated with --resident-during-year or --not-resident-during-year, because s 99B(1) turns on it: an unstated residency is refused and a non-resident receipt is refused rather than assessed. The 3 exemption amounts default to nil, which gives the largest assessable amount, and the s 99B(2)(a) corpus add-back defaults to nil in the other direction, leaving the whole corpus exempt. The result carries one caveat naming each nil it relied on, in both directions, because a nil default cannot be told apart from a figure nobody supplied.
  • Trust Resolution 30 June Schedule Verifier: Checks timing, deed-power and percentage-completeness facts the caller supplies. The 3 deed and execution facts are True, False or unstated; an unstated one returns None for validity, naming the fact, rather than reporting compliance or a breach.

Quickstart

Installation

pip install solomons-sword

CLI usage

# Evaluate Section 100A risk zone
solomons-sword s100a-check --beneficiary "Adult Child" --amount 40000 --adult-child --retained-by-parents

# Every fact stated, which is what a green zone needs. Each fact has a
# --no- form, and a fact left out is reported as not established.
solomons-sword s100a-check --beneficiary "Adult Child" --amount 40000 \
  --no-adult-child --no-retained-by-parents --no-circular --no-corporate-upe \
  --received-funds --no-direct-benefit --no-commercial-loan

# Assess Section 99B receipt from foreign trust with corpus deduction
solomons-sword s99b-check --beneficiary "Jane Doe" --gross 150000 --corpus 50000 --resident-during-year

Statutory sources and tests

All allocation and threshold algorithms use exact decimal.Decimal calculations to prevent rounding discrepancies in trust tax schedules.

Statutory Domain Primary Authority What the code actually does
Proportionate Entitlement ITAA 1936 s 95, s 97 (Commissioner of Taxation v Bamford [2010] HCA 10) Beneficiary Share = (Accounting Entitlement / Total Accounting Income) * s95 Net Income.
Section 100A Risk Matrix ITAA 1936 s 100A, ATO PCG 2022/2 Returns GREEN, RED, OUTSIDE_GREEN, or FACTS_NOT_ESTABLISHED where a fact the zone turns on was not stated. It does not decide the white zone.
Foreign Trust Distributions ITAA 1936 s 99B(1), s 99B(2)(a) Subtracts settled corpus and previously taxed income before assessable inclusion. Requires a stated residency and caveats every nil exemption.
Trust Resolution Timing Caller-supplied deed and execution facts Refuses incomplete percentages, reports stated deed defects, and returns not-established where a deed fact was never stated. This is not a substitute for current ATO guidance.

Automated test suite

  • Run the suite: pytest tests/
  • The suite covers proportionate streaming, Section 100A zones the engine implements, Section 99B corpus deductions, and resolution gates. Do not treat a badge as a live coverage certificate.

Licence

MIT License. Created by Ryan Duguid.

Metadata

Release files for solomons-sword 0.1.8

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

Source distribution (sdist)

Source distribution for solomons-sword 0.1.8
File Size Uploaded
solomons_sword-0.1.8.tar.gz 87.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for solomons-sword 0.1.8
File Interpreter ABI Platform
solomons_sword-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 108.8 kB

Release files / solomons_sword-0.1.8.tar.gz

Download URL solomons_sword-0.1.8.tar.gz
Size 87.8 kB
Tags Source
SHA-256 checksum
How to use checksums
2fd1b635f1ebb54b04ee5739e4025d8ce4f01e06ffa659eca3cfe463cfa1b828
BLAKE2b-256 checksum
How to use checksums
8cdd97475425c321ed85f4ad85e21b23f08ad00c20772293843da3cd7b0768e1
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 26, 2026.

Transparency log

Release files / solomons_sword-0.1.8-py3-none-any.whl

Download URL solomons_sword-0.1.8-py3-none-any.whl
Size 21.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
471f5aa2893626ef6aaedc62787950e07e707023ea5c740f7136993d4d89bee4
BLAKE2b-256 checksum
How to use checksums
545843e93b0433f758fd66d0a3781a02e98e5eada37d461dc883b1167459c87d
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 26, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

0.1.10

2 release files

0.1.9

2 release files

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.3

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