Skip to content

Releases: ryanduguid/australian-accounting

solomons-sword/v0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 17:29
Immutable release. Only release title and notes can be modified.
solomons-sword/v0.2.0
1302654

v0.2.0

  • Require Python 3.11 or later. CPython 3.10 reached end of life on 1 October 2026; 0.1.10 remains the last release that installs on Python 3.10 (#351).
  • s99b-check reports arithmetic that overflows, or a figure too large to write out (1E+1000000 or more), with one error: line and exit 2. It used to end in a decimal.Overflow traceback or write the figure in full: 1.33 MB of digits at 1e1000000 (#344).
  • s100a-check refuses an amount of 1E+1000000 or more with one error: line and exit 2 instead of printing it in full (#344). The README states the supported amount range.

v0.1.10

  • The four public trust calculation and validation functions accept only True, False or None (unknown) for each boolean fact, and raise a ValueError naming the field for anything else. In 0.1.9, is_signed_by_trustee="False" or default_beneficiary_clause_exists=0 could produce a valid resolution, a textual circular-flow flag could produce GREEN, and textual residency flags could produce allocations or assessments. Unknown facts are handled as before (#326).

v0.1.9

  • Breaking: TrustResolutionSchedule gains 2 required facts. uses_specific_streaming says whether the resolution streams capital gains or franked distributions; missing streaming powers are now a defect only when it does, so an ordinary proportionate resolution under a deed without streaming powers validates. deed_resolution_deadline is the deed's own deadline, or 30 June where the deed sets none; a resolution after an earlier deed date is late, and a later deed date does not extend 30 June. Either fact passed as None is reported as not established where the answer turns on it.
  • Breaking: calculate_proportionate_share refuses a positive trust-level net_capital_gains or franked_dividends, streamed or not, because Division 6E applies to them either way and is not implemented. Franking credits supplied without franked dividends are still allocated in proportion.
  • Section 100A zones follow PCG 2022/2's own scenarios. A corporate unpaid entitlement without a Division 7A loan and a parent retaining an adult child's entitlement no longer return RED on their own; each now blocks GREEN and leaves the arrangement unzoned. Red zone scenario 1 (an adult child's entitlement applied to expenses from before they turned 18) gains its own fact. GREEN needs receipt within 2 years, the rest of scenario 3A or 3B for a retained loan and no paragraph 32 exclusion; the s100a-check command gains a flag for each new fact.
  • Migration: construct TrustResolutionSchedule with uses_specific_streaming and deed_resolution_deadline (30 June where the deed sets no earlier date). A Section 100A call now needs all 11 facts, not 7, to reach GREEN or OUTSIDE_GREEN. Unlike 0.1.8, results for fully supplied inputs can change: the 2 former RED triggers now leave an arrangement unzoned, and a trust with net capital gains or franked dividends is refused.
  • calculate_proportionate_share refuses a non-finite net_capital_gains or franked_dividends with a ValueError.
  • These changes arrived in #300, which holds the review record. The first two solomons-sword/v0.1.9 tags stopped at the release gate before building: the first pointed at a commit behind main, and the second at a main commit whose push-triggered CI had skipped this package. Nothing was published from either.

v0.1.8

  • Breaking input requirements: every Section 100A fact, both Division 6 beneficiary status facts and the 3 trust resolution deed facts are now stated as True or False, or reported as not established. BeneficiaryEntitlement.is_resident and ForeignTrustReceipt.beneficiary_was_resident_during_year have no default at all, so a construction that omits either raises TypeError; pass them explicitly. beneficiary_was_resident_during_year also moves ahead of the optional exemption amounts, so a call that passed 3 or more positional arguments to ForeignTrustReceipt needs updating. is_under_legal_disability, the Section 100A facts and the resolution facts default to None, which the engine refuses or reports rather than reading as False.
  • Migration: state the facts. BeneficiaryEntitlement(name, is_resident=True, is_under_legal_disability=False, ...) reproduces the old defaults where the operator has established them; a Section 100A call needs all 7 facts to reach GREEN or OUTSIDE_GREEN, and the command line gains a --no- form for each one; validate_trust_resolution now returns bool | None, where None means a deed fact was never established. Results for fully supplied inputs are unchanged.
  • Section 99B keeps its nil exemption defaults, which give the largest assessable amount, and the result carries one caveat naming every exemption amount that arrived as nil, together with a nil s 99B(2)(a) corpus add-back, which runs the other way and leaves the whole corpus exempt. The s99b-check command gains --resident-during-year and --not-resident-during-year, and a run that states neither is refused instead of assessed on an assumed residency.
  • On a Windows console or redirected output, a beneficiary name outside the active code page no longer ends a finished run with a UnicodeEncodeError. The command line reconfigures standard output and standard error with backslashreplace, so such a character prints as an escape; report lines are otherwise unchanged.
  • README.md and DISCLAIMER.md state that Ryan Duguid is not a registered tax agent or BAS agent, and limit project support to software issues reproduced with fabricated data.
  • The build backend pin moves from hatchling 1.32.0 to 1.32.3.

v0.1.7

  • Foot the reported trust-income entitlement column to the income of the trust estate: the
    rounding residual now falls on percentage shares only, and a fixed entitlement is reported
    exactly as supplied.
  • Refuse a fixed entitlement that is not stated in whole cents rather than round it.
  • Add seeded property tests that every allocated column foots to its pool.

Previous release

v0.1.6

  • Leave ordinary family dealing undetermined for red-zone results and explain the compliance-review consequence.
  • Correct the documented release pointer.

v0.1.5

  • Use the checked release workflow reference. The v0.1.4 tag stopped before
    building or publishing because GitHub could not load its historical workflow.
  • Include the calculation corrections listed under v0.1.4.

v0.1.4

  • Reconcile allocated franking credits to the available credit pool.
  • Distribute section 95 rounding adjustments across available shares so a
    positive income pool cannot give a beneficiary a negative taxable share.
    Four equal beneficiaries now share a 2-cent pool without a negative amount.

v0.1.3

This is the first PyPI release of solomons-sword.
The monorepo's filtered GitHub Releases page
is the canonical release history.

  • Move the maintained source to packages/solomons-sword in the
    australian-accounting monorepo.
  • Publish through release-solomons-sword.yml, using the monorepo's
    namespaced, attested release workflow.
  • Preserve the v0.1.2 Division 6, Section 100A and Section 99B behaviour.

v0.1.2

Releases through v0.1.2 are recorded on the standalone repository's
GitHub Releases page.
A separate changelog is intentionally not maintained.

Prepared 0.1.2 notes. No PyPI distribution has been published; this source-only
project currently installs from a clone. The statutory corrections below came
from an audit whose claims were checked against the ITAA 1936 compilation in
force from 1 July 2026 and the High Court's own citation of Bamford:

  • Division 6 franking credits were allocated on 2 overlapping bases when dividends were streamed, distributing 150% of the credit pool in the audited case. Streaming is now refused outright, because the Division 6E carve-out with Subdivisions 115-C and 207-B is not implemented and a proportionate answer would be wrong.
  • The franking credit gross-up is no longer added on top of the s 95 net income share: s 207-35 ITAA 1997 already includes it in the trust's net income, so adding it counted the credits twice. It is reported separately for the s 207-45 offset.
  • Allocation now carries unrounded ratios into the s 95 pool and assigns the rounding residual, so allocated shares reconcile to the net income exactly. Three equal thirds of $100,000 previously lost $10.
  • Cases the model does not compute now fail closed instead of returning an empty list or a mislabelled section: no presently entitled beneficiary and nil income of the trust estate (s 99 or s 99A trustee assessment), and non-resident beneficiaries (s 98(2A) or s 98(3)).
  • Entitlements outside 0 to 100% are refused; a 150% and negative 50% pair previously allocated a negative assessable share.
  • s 99B now models the s 99B(1) residency precondition, the s 99B(2)(a) proviso for corpus attributable to amounts that would have been assessable to a resident, and the s 99B(2)(b) limb; negative inputs and exemptions exceeding the receipt are refused.
  • The PCG 2022/2 green zone no longer claims the s 100A(13) ordinary family dealing exception. The guideline is a compliance-resourcing stance, not a determination, and the ordinary-family-dealing field is undetermined for that zone.
  • Bamford is cited correctly as Commissioner of Taxation v Bamford [2010] HCA 10; (2010) 240 CLR 481, and the streaming reference reads Subdivisions 115-C and 207-B.

Also: one version source, project URLs, mypy enforced i...

Read more

div7a-loan-review/v0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 17:29
Immutable release. Only release title and notes can be modified.
div7a-loan-review/v0.2.0
1302654

v0.2.0

  • Require Python 3.11 or later. CPython 3.10 reached end of life on 1 October 2026; 0.1.6 remains the last release that installs on Python 3.10 (#351).
  • Read the loan register as UTF-8. A register in another encoding, or with a field longer than the CSV module's field size limit, ends gate, myr and review with one error: line and exit 1 instead of a traceback (#344).
  • Finish a review whose remaining term is astronomically large, such as 1e999999999 years. The s 109E(6) calculation raises the discount factor to the already whole Decimal term instead of first converting it to an integer, so the minimum yearly repayment reaches the interest-only limit instead of the command hanging (#344).

v0.1.6

  • Refuse malformed or conflicting review modes before reading input: both Python entry points take only literal booleans for the mode flags and refuse gate_only=True with myr_only=True. In 0.1.5 that pair produced a reviewed row with neither result and no attention flag, even when the normal review reported a shortfall, and a textual "false" silently selected a restricted mode. The three valid modes and the command line commands behave as before (#329).
  • The README compares the engine with the Division 7A worksheet in Xero Workpapers Plus (#325).

v0.1.5

  • Refuse a fractional bare remaining term in the minimum yearly repayment: remaining_term must be a whole number of years, and a part year goes through statutory_remaining_term first.
  • Accept an amount written with trailing zeros past the cent, such as 25000.000 from a ledger or payroll export, while still refusing a real sub-cent amount.
  • Refuse a rate override that gives a year or rate as a JSON number with a message asking for a quoted string, instead of ending in a traceback.
  • Record each benchmark rate's RBA workbook cell, the value read there and the date the row was compared, in the new workbook_cell, workbook_value and row_verified_on columns. No rate value changed, but the table's SHA-256 in every result manifest did.
  • Cite the 1 July 2026 compilation of the Income Tax Assessment Act 1936 instead of the moving latest version, in the README, the evaluation and the workbook.
  • Workbook: the benchmark-year selector reads the Rates table through the RateYears name, so a year added to the table can be chosen.
  • Ship the NOTICE file in the distribution, and state in the README and DISCLAIMER.md that the author is not a registered tax or BAS agent.

v0.1.4

  • Name the primary source behind every benchmark rate: each rate-table manifest now carries primary_url, the RBA F5 historical workbook it was read from, retrieved_on, the date that workbook was downloaded, and snapshot_sha256, the digest of those bytes. verify_at stays a convenience link for a human rather than the source of the figure, and an operator's override carries no such claim. A table whose rows do not all make the same claim names none, instead of attributing every row to the last one read.
  • Record the read that produced those columns in docs/primary-source-review-2026-09-20.md, which checked all 8 reviewed years against the RBA workbook. No rate value changed.

v0.1.3

  • Name the rate table behind every figure: each JSON result carries a manifest whose rate_table_uris list the frozen benchmark table with its SHA-256, produced by the lookup that read it, and any reviewed override as override:<file name>. An UNKNOWN rate still names the table it was looked for in.
  • Carry reason_codes beside reasons on every REFUSED and UNKNOWN result, one stable token per reason in the same order, so a caller can branch on REFUSED_* (outside s 109E) separately from *_UNKNOWN (a fact the operator can still establish). A result built with a reason and no code fails at construction.
  • Resolve the rate table once per register review instead of once per row.
  • Workbook: refused repayment rows drive REVIEW; duplicate benchmark-year labels, and blank, text, negative or above-one rates, block the workbook; dates are read as whole calendar days, money is compared in cents, and placeholder dates and out-of-range amounts are refused; the unresolved interest-floor interpretation is stated beside the result.

v0.1.2

  • Reject padded required headers, duplicate override years and gates from another loan year.
  • Withhold minimum-yearly-repayment figures when the loan year is missing and retain gate caveats in every result.
  • Align the workbook formulas and cached values with the reviewed year checks.

Correction to the v0.1.1 note

The v0.1.1 release note said that release preserved the v0.1.0 review
calculations and refusal boundaries. The calculations and the s 109N gate were
preserved, but the refusal boundaries were not: v0.1.1 added the two-decimal
place limit and the $1 trillion maximum in div7aloan/money.py, and it began
preserving quoted newlines when reading the register so a malformed numeric
cell is refused instead of being joined into a different amount. Version 0.1.0
accepts a principal of 100000.001, a repayment of 25556.001, a principal of
1000000000000.01 and a repayment split across a quoted newline; v0.1.1
refuses each of them. Those safeguards stay in force in this release.

aus-accounting-mcp/v0.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 18:02
Immutable release. Only release title and notes can be modified.
aus-accounting-mcp/v0.3.0
dd64c54

v0.3.0

  • Breaking: requires Python 3.11 or later. CPython 3.10 reached end of life on 1 October 2026; 0.2.12 remains the last release that installs on Python 3.10 (#351).
  • Pin div7a-loan-review 0.2.0; payday-super-checker 0.1.9, ato-benchmark-compare 0.1.11 and
    australian-tax-calculators 0.1.8 are unchanged.
  • Through the new pin: review_div7a_loan with an astronomically large remaining_term_years, such as
    1e999999999, returns its result instead of hanging, because the engine no longer converts the term to an
    integer before the s 109E(6) calculation (#344). Results report engine_version 0.2.0.
  • The supplementary tool-selection scorer rejects duplicate JSON keys and non-finite numbers and compares
    decoded types exactly (#352); the server and its tools are unchanged.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.3.0.

v0.2.12

  • Pin payday-super-checker 0.1.9 and div7a-loan-review 0.1.6;
    ato-benchmark-compare 0.1.11 and australian-tax-calculators 0.1.8 are
    unchanged.
  • Through the new pins: the payday checker's nine control arguments and the
    Division 7A engine's mode flags accept only literal booleans, and the
    Division 7A engine refuses conflicting modes. The tools already took strict
    booleans and set no Division 7A mode flag, so tool behaviour is unchanged;
    results report engine_version 0.1.9 (payday) and 0.1.6 (Division 7A). The
    payday checker's report invariant checks also hold under python -O.
  • Raise the declared mcp requirement to >=2.2.0,<3 (#331). The lock
    records mcp and mcp-types 2.2.0, pyjwt 2.14.0 and urllib3 2.8.0.
  • Align the release, citation, compatibility and MCP Registry metadata to
    0.2.12.

v0.2.11

  • Pin ato-benchmark-compare 0.1.11 and australian-tax-calculators 0.1.8;
    payday-super-checker 0.1.8 and div7a-loan-review 0.1.5 are unchanged.
  • Through the new pins: get_ato_benchmarks compares labour, rent and motor
    vehicle expenses, and cost of sales where it is not the key range, against
    the ranges the ATO publishes on each industry's page. Each ratio row's
    benchmark_source and the result's industry_page_source say where a range
    came from; these ranges never set the key ratio. calculate_tax_worksheet
    adds the study_loan_repayment worksheet for 2025-26 and 2026-27.
  • Add search_ato_rulings and read_ato_ruling, which serve ATO ruling
    paragraphs from a configured local folder of rulings runs, bringing the
    server to 18 tools.
  • Declare benchmark_source and industry_page_source in the
    get_ato_benchmarks output schema.
  • Share one page builder between the legislation corpus and accounting
    library tools.
  • Lock the build backend in the dev extra.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.11.

v0.2.10

  • Pin payday-super-checker 0.1.8, ato-benchmark-compare 0.1.10,
    div7a-loan-review 0.1.5 and australian-tax-calculators 0.1.7, the engine
    versions the workspace already tested. 0.2.9's own pins could not reproduce
    its quick proof: the published div7a-loan-review 0.1.4 carries an older
    benchmark table digest.
  • calc_payday_super_deadline and review_payday_super_contributions report
    notional earnings, both SG-charge estimates and every uplift scenario to the
    cent, built the way the checker's report builds them, so they match the
    evidence pack's report.csv. They carried up to 27 decimal places, and
    rounding their sum could land a cent away from the report.
  • Through the new pins: Division 7A results record each benchmark rate's RBA
    workbook cell and accept amounts written with trailing zeros past the cent;
    the fbt worksheet adds FBT return items 14A to 16; a report-style P&L with
    amounts in more than one column is refused when a column left of the fullest
    also holds amounts; and Payday Super evidence packs write caveat and note
    cells that start like a formula as text.
  • The release workflow installs the built wheel outside the workspace, so its
    pins resolve from PyPI, and stops before publishing unless its demo matches
    docs/quick-proof.txt.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.10.

v0.2.9

  • Pin australian-tax-calculators 0.1.6 and add its contribution_caps and
    pension_minimum worksheets to calculate_tax_worksheet, for 2024-25 to
    2026-27: cap room, excess and bring-forward for one person's classified
    contributions, and the SISR Schedule 7 minimum for one account-based
    pension. Retain the ato-benchmark-compare 0.1.9, payday-super-checker
    0.1.7 and div7a-loan-review 0.1.4 pins.
  • Count nine worksheets in the server instructions, scope resource, README,
    reference and registry descriptions, and narrow the unsupported SMSF and
    contribution-cap topics to what the worksheets leave out.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.9.

v0.2.8

  • search_tax_legislation and search_tax_rates return the best match first
    instead of in corpus file order: the query as a phrase in a heading, then every
    word in a heading, then the phrase in the text, then the words anywhere, with the
    principal tax Acts first within each tier. On a 946-title corpus "small business
    entity" previously led with Excise Act 1901 s 4 and "general deductions" did not
    reach ITAA 1997 s 8-1 in the first five results. Ranking reads the whole corpus
    on each search: about 0.5 seconds on that corpus, up to about 1.6 seconds for
    a word nearly every provision holds.
  • define_tax_term puts the principal tax Acts first within exact and partial
    matches, and its 20-entry partial cap keeps the best-ranked entries rather than
    the first ones the scan meets.
  • read_tax_legislation_section takes start and returns start and
    next_start, so a provision longer than 12000 characters can be read in parts.
    165 of 21,916 rows in that corpus were cut off with no way to read further,
    including ITAA 1997 s 995-1.
  • A search with no match adds a notice suggesting statutory wording.
  • A missing or invalid retrieval folder error tells the caller to ask the user
    rather than retry, and the scope resource reports whether each retrieval folder
    is configured, without its path.
  • aus-accounting-mcp --version and --help print and exit instead of starting
    the server; an unknown argument is refused.
  • Two evaluation cases cover ranking and reading a long provision in parts.
  • Retain the ato-benchmark-compare 0.1.9, payday-super-checker 0.1.7,
    div7a-loan-review 0.1.4 and australian-tax-calculators 0.1.5 pins.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.8.

v0.2.7

  • Pin australian-tax-calculators 0.1.5 and add its payg_withholding
    worksheet to calculate_tax_worksheet: one regular weekly, fortnightly or
    monthly pay from 1 July 2026 on Schedule 1 scale 1, 2, 3, 5 or 6. Retain the
    ato-benchmark-compare 0.1.9, payday-super-checker 0.1.7 and
    div7a-loan-review 0.1.4 pins.
  • Resolve each worksheet's engine function when it is called, so a kind the
    installed engine lacks is refused with a message and the other kinds keep
    working.
  • Put the missing space back in eight input descriptions for
    get_ato_benchmarks, calc_payday_super_deadline and review_div7a_loan,
    which reached clients as run-together words such as "ratiodenominator".
  • State in the scope resource, README and disclaimer that the author is not a
    registered tax or BAS agent, and limit support to software issues reproduced
    with fabricated data.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.7.

v0.2.6

  • Pin ato-benchmark-compare 0.1.9 and australian-tax-calculators 0.1.4.
    The benchmark release refuses a neutral CSV whose header names account,
    amount or section more than once instead of reading the first such column
    silently. The calculator release computes every worksheet in its own decimal
    context, so a caller's precision no longer changes a result. Retain the
    payday-super-checker 0.1.7 and div7a-loan-review 0.1.4 pins.
  • Serve the richer worksheet catalogue from the pinned published engine. An
    installation on an older calculator keeps the legacy discovery entries.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.6.

v0.2.5

  • Pin payday-super-checker 0.1.7. A timely receipt date without either amount field remains UNKNOWN; a late receipt without an amount remains LATE without the unsupported shortfall reduction. Retain the other 3 published engine pins.
  • Update the tool descriptions, server instructions and package description for the receipt-amount rule. Require its regression tests in standalone installations as well as workspace tests.
  • Include the merged evidence semantics and explicit scope qualifications. The optional richer worksheet catalogue still depends on an unreleased worksheet engine; the pinned published engine retains its existing scope data.
  • Include the synthetic group-review example, which indexes separate engine evidence without combining conclusions or transferring outputs between engines.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.5.

v0.2.4

  • A corpus line that spells a solidus as the JSON escape \/ is parsed rather than prefiltered, so a row_id such as 5/10 that search returned can be read back without asking for neighbours.
  • define_tax_term keeps the lettered conditions of a definition, such as (a) and (b) paragraphs, with the definition they complete; only a numbered subsection label such as (2) closes the dictionary.
  • Pin payday-super-checker 0.1.6 and div7a-loan-review 0.1.4; `ato-benchmark-com...
Read more

the-wip-tally/v0.1.3

Choose a tag to compare

@github-actions github-actions released this 30 Sep 11:11
Immutable release. Only release title and notes can be modified.
the-wip-tally/v0.1.3
9deaed9

v0.1.3

  • The public WIP calculation API applies the ratio contract the CSV reader already enforced: each active ratio must be a finite Decimal from 0 to 1. In 0.1.2 a direct caller could pass a constraint ratio of 2 for an unapproved estimate of 100 and receive included consideration of 200 and excluded consideration of -100, and a NaN GST ratio could reach the returned amount. Formulas, output diagnostics and CSV and command line behaviour are unchanged (#318).
  • Tests now pin two money-path boundaries that one-operator mutants survived: a nil cost to complete recognises the full contract price, and nil gross profit carries no onerous or negative-margin flag (#307). No calculation changed.

v0.1.2

Breaking: outcome_reasonably_measurable is required on every contract row.

  • A blank cell, or a missing column, used to read as yes and book full
    percentage-of-completion revenue. It is now the not-stated state, and the
    contract is refused by row number, the way a blank retention_classification
    falls to review rather than to receivable. AASB 15 paras 44-45 decide
    between percentage-of-completion revenue and revenue limited to recoverable
    cost, so the engine states neither until the row answers the question.
  • Migration: add outcome_reasonably_measurable to the contract CSV with yes
    or no on every row, or map an existing column to it with --mapping-file.
    Explicit yes and no values, and every figure they produce, are unchanged.
  • ContractInput.outcome_reasonably_measurable is now bool | None for
    callers using the engine directly; None raises ScheduleError from
    measure whichever progress_method the row uses.

Other changes:

  • review-pack rebuilds the schedule for the as_at date the schedule
    records when --as-at is omitted, and uses today only when the schedule
    records none. A schedule made without --as-at could not previously be
    reviewed on a later day. An explicit --as-at still wins, and an empty
    --as-at "" is refused.
  • measure refuses an output_percent outside 0 to 1, or one that is not
    finite, with ScheduleError. CSV input already refused these; a direct
    caller could reach revenue above the transaction price or below zero.
  • A contract file with more than 20 unreadable rows now ends its error list
    with ... and more. Collection previously stopped at exactly 20, so the
    suffix never appeared.
  • examples/JOB-TO-CASH.md and examples/job_to_cash.py trace WIP evidence
    into dated project cash assumptions.
  • README.md and DISCLAIMER.md state that Ryan Duguid is not a registered
    tax agent or BAS agent, and limit project support to software issues
    reproduced with fabricated data.
  • The build backend pin moves from hatchling 1.32.0 to 1.32.3.

v0.1.1

  • Reject malformed numeric grouping and conflicting signs.
  • Parse and hash the same captured source bytes for each review pack.
  • Preserve separate contract assets and liabilities in schedule checks.

Previous release

v0.1.0

This is the first PyPI release of the-wip-tally.
The monorepo's filtered GitHub Releases page
is the canonical release history.

  • Move the maintained source to packages/the-wip-tally in the
    australian-accounting monorepo.
  • Publish through release-the-wip-tally.yml, using the monorepo's namespaced,
    attested release workflow.
  • Preserve the imported v0.1.0 AASB 15 schedule behaviour and CLI contract.

solomons-sword/v0.1.10

Choose a tag to compare

@github-actions github-actions released this 30 Sep 11:10
Immutable release. Only release title and notes can be modified.
solomons-sword/v0.1.10
9deaed9

v0.1.10

  • The four public trust calculation and validation functions accept only True, False or None (unknown) for each boolean fact, and raise a ValueError naming the field for anything else. In 0.1.9, is_signed_by_trustee="False" or default_beneficiary_clause_exists=0 could produce a valid resolution, a textual circular-flow flag could produce GREEN, and textual residency flags could produce allocations or assessments. Unknown facts are handled as before (#326).

v0.1.9

  • Breaking: TrustResolutionSchedule gains 2 required facts. uses_specific_streaming says whether the resolution streams capital gains or franked distributions; missing streaming powers are now a defect only when it does, so an ordinary proportionate resolution under a deed without streaming powers validates. deed_resolution_deadline is the deed's own deadline, or 30 June where the deed sets none; a resolution after an earlier deed date is late, and a later deed date does not extend 30 June. Either fact passed as None is reported as not established where the answer turns on it.
  • Breaking: calculate_proportionate_share refuses a positive trust-level net_capital_gains or franked_dividends, streamed or not, because Division 6E applies to them either way and is not implemented. Franking credits supplied without franked dividends are still allocated in proportion.
  • Section 100A zones follow PCG 2022/2's own scenarios. A corporate unpaid entitlement without a Division 7A loan and a parent retaining an adult child's entitlement no longer return RED on their own; each now blocks GREEN and leaves the arrangement unzoned. Red zone scenario 1 (an adult child's entitlement applied to expenses from before they turned 18) gains its own fact. GREEN needs receipt within 2 years, the rest of scenario 3A or 3B for a retained loan and no paragraph 32 exclusion; the s100a-check command gains a flag for each new fact.
  • Migration: construct TrustResolutionSchedule with uses_specific_streaming and deed_resolution_deadline (30 June where the deed sets no earlier date). A Section 100A call now needs all 11 facts, not 7, to reach GREEN or OUTSIDE_GREEN. Unlike 0.1.8, results for fully supplied inputs can change: the 2 former RED triggers now leave an arrangement unzoned, and a trust with net capital gains or franked dividends is refused.
  • calculate_proportionate_share refuses a non-finite net_capital_gains or franked_dividends with a ValueError.
  • These changes arrived in #300, which holds the review record. The first two solomons-sword/v0.1.9 tags stopped at the release gate before building: the first pointed at a commit behind main, and the second at a main commit whose push-triggered CI had skipped this package. Nothing was published from either.

v0.1.8

  • Breaking input requirements: every Section 100A fact, both Division 6 beneficiary status facts and the 3 trust resolution deed facts are now stated as True or False, or reported as not established. BeneficiaryEntitlement.is_resident and ForeignTrustReceipt.beneficiary_was_resident_during_year have no default at all, so a construction that omits either raises TypeError; pass them explicitly. beneficiary_was_resident_during_year also moves ahead of the optional exemption amounts, so a call that passed 3 or more positional arguments to ForeignTrustReceipt needs updating. is_under_legal_disability, the Section 100A facts and the resolution facts default to None, which the engine refuses or reports rather than reading as False.
  • Migration: state the facts. BeneficiaryEntitlement(name, is_resident=True, is_under_legal_disability=False, ...) reproduces the old defaults where the operator has established them; a Section 100A call needs all 7 facts to reach GREEN or OUTSIDE_GREEN, and the command line gains a --no- form for each one; validate_trust_resolution now returns bool | None, where None means a deed fact was never established. Results for fully supplied inputs are unchanged.
  • Section 99B keeps its nil exemption defaults, which give the largest assessable amount, and the result carries one caveat naming every exemption amount that arrived as nil, together with a nil s 99B(2)(a) corpus add-back, which runs the other way and leaves the whole corpus exempt. The s99b-check command gains --resident-during-year and --not-resident-during-year, and a run that states neither is refused instead of assessed on an assumed residency.
  • On a Windows console or redirected output, a beneficiary name outside the active code page no longer ends a finished run with a UnicodeEncodeError. The command line reconfigures standard output and standard error with backslashreplace, so such a character prints as an escape; report lines are otherwise unchanged.
  • README.md and DISCLAIMER.md state that Ryan Duguid is not a registered tax agent or BAS agent, and limit project support to software issues reproduced with fabricated data.
  • The build backend pin moves from hatchling 1.32.0 to 1.32.3.

v0.1.7

  • Foot the reported trust-income entitlement column to the income of the trust estate: the
    rounding residual now falls on percentage shares only, and a fixed entitlement is reported
    exactly as supplied.
  • Refuse a fixed entitlement that is not stated in whole cents rather than round it.
  • Add seeded property tests that every allocated column foots to its pool.

Previous release

v0.1.6

  • Leave ordinary family dealing undetermined for red-zone results and explain the compliance-review consequence.
  • Correct the documented release pointer.

v0.1.5

  • Use the checked release workflow reference. The v0.1.4 tag stopped before
    building or publishing because GitHub could not load its historical workflow.
  • Include the calculation corrections listed under v0.1.4.

v0.1.4

  • Reconcile allocated franking credits to the available credit pool.
  • Distribute section 95 rounding adjustments across available shares so a
    positive income pool cannot give a beneficiary a negative taxable share.
    Four equal beneficiaries now share a 2-cent pool without a negative amount.

v0.1.3

This is the first PyPI release of solomons-sword.
The monorepo's filtered GitHub Releases page
is the canonical release history.

  • Move the maintained source to packages/solomons-sword in the
    australian-accounting monorepo.
  • Publish through release-solomons-sword.yml, using the monorepo's
    namespaced, attested release workflow.
  • Preserve the v0.1.2 Division 6, Section 100A and Section 99B behaviour.

v0.1.2

Releases through v0.1.2 are recorded on the standalone repository's
GitHub Releases page.
A separate changelog is intentionally not maintained.

Prepared 0.1.2 notes. No PyPI distribution has been published; this source-only
project currently installs from a clone. The statutory corrections below came
from an audit whose claims were checked against the ITAA 1936 compilation in
force from 1 July 2026 and the High Court's own citation of Bamford:

  • Division 6 franking credits were allocated on 2 overlapping bases when dividends were streamed, distributing 150% of the credit pool in the audited case. Streaming is now refused outright, because the Division 6E carve-out with Subdivisions 115-C and 207-B is not implemented and a proportionate answer would be wrong.
  • The franking credit gross-up is no longer added on top of the s 95 net income share: s 207-35 ITAA 1997 already includes it in the trust's net income, so adding it counted the credits twice. It is reported separately for the s 207-45 offset.
  • Allocation now carries unrounded ratios into the s 95 pool and assigns the rounding residual, so allocated shares reconcile to the net income exactly. Three equal thirds of $100,000 previously lost $10.
  • Cases the model does not compute now fail closed instead of returning an empty list or a mislabelled section: no presently entitled beneficiary and nil income of the trust estate (s 99 or s 99A trustee assessment), and non-resident beneficiaries (s 98(2A) or s 98(3)).
  • Entitlements outside 0 to 100% are refused; a 150% and negative 50% pair previously allocated a negative assessable share.
  • s 99B now models the s 99B(1) residency precondition, the s 99B(2)(a) proviso for corpus attributable to amounts that would have been assessable to a resident, and the s 99B(2)(b) limb; negative inputs and exemptions exceeding the receipt are refused.
  • The PCG 2022/2 green zone no longer claims the s 100A(13) ordinary family dealing exception. The guideline is a compliance-resourcing stance, not a determination, and the ordinary-family-dealing field is undetermined for that zone.
  • Bamford is cited correctly as Commissioner of Taxation v Bamford [2010] HCA 10; (2010) 240 CLR 481, and the streaming reference reads Subdivisions 115-C and 207-B.

Also: one version source, project URLs, mypy enforced in CI (5 real errors
fixed) with Python 3.11 and 3.13 added, CodeQL, deduplicated Dependabot config,
a not-advice boundary in the README, module docstrings and CLI output. The
package release workflow is intentionally absent until publication has a named
user, a fresh index-name availability check and an explicit compatibility
contract.

Not advice. Outputs are review aids for a qualified professional, not determinations.

payday-super-checker/v0.1.9

Choose a tag to compare

@github-actions github-actions released this 30 Sep 11:11
Immutable release. Only release title and notes can be modified.
payday-super-checker/v0.1.9
9deaed9

v0.1.9

  • The nine public control arguments (the confirmation, stale-rate and identifier-output options) accept only literal booleans. Version 0.1.8 treated a string such as "false" as permission, which could suppress review warnings or include identifiers. Strings, numbers, None and containers now raise an error naming the argument; valid booleans, defaults and command line switches behave as before (#328).
  • Three report invariant checks also hold under python -O: missing exposure data raises the same AssertionError instead of producing monetary output or a different exception (#330).

v0.1.8

  • report.csv and the evidence pack guard the caveats and notes cells against spreadsheet formulas, as they already guarded the employee id: a cell starting with =, +, - or @ is written as text.
  • An evidence pack no longer fails on a missing or malformed rates.json: the reference rates load only for ordinary console output, while GIC validation and the GIC-only evidence manifest are unchanged.
  • Vendor imports read amounts through the same CSV amount parser as the canonical file, with the same cent rounding and empty-field diagnostics.
  • A timestamp in the Payday Super ISO shape must carry minutes, so one file cannot parse on one Python version and fail on another, and each entry point reconfigures stderr as well as stdout so a name outside the console code page no longer ends the run.
  • The business-day definition cites the ATO page Payment deadlines for Payday Super; the newsroom article cited before has moved.
  • paydaysuper.report.rounded_figures is public, so the MCP server reports the same cents as the checker's own report.
  • New documentation: a receipt-amount evaluation and a quarterly SG working paper example run through the checker.

v0.1.7

Version 0.1.7 corrects receipt-amount handling and incomplete workbook estimates.
The changes below are not present in 0.1.6.

  • The Excel Summary displays Not assessed for total notional earnings and both charge estimates when any line extends past the GIC table. It no longer sums withheld row estimates as zero or presents the assessed subset as a complete total. The final shortfall total remains available.
  • Breaking for hand-built files. A fund_received_date on a row with neither matched_amount nor remitted_amount no longer reads as a receipt of the whole sg_amount. The date evidences timing only, so where it could be on time the row is left UNKNOWN between ON_TIME and the partial-receipt outcome (UNPAID, NOT_YET_DUE or LATE), the run exits 2, and the caveat names the amount the row needs. A late receipt with no amount stays LATE, but the s 18D reduction of the final shortfall is not applied and the notional earnings run to the as-at date as a maximum. Files written by import already carry matched_amount and are unaffected.
  • Migration: add remitted_amount and matched_amount columns and fill matched_amount with the amount the fund received for each row that has a fund_received_date; a full receipt states the whole sg_amount. The shipped examples and evaluation fixtures now do so. Older report CSVs, exit codes, column names and the canonical column order are unchanged.
  • The Excel workbook now withholds notional earnings and charge estimates beyond the shipped GIC table, while retaining verdicts, days late and shortfalls. The formula changes are in the workbook source; the workbook has no stale-rate opt-in.
  • The Excel workbook applies the same rule (branch codes U1 to U3, lateness basis "as-at date (fund receipt amount not evidenced)") and was rebuilt through desktop Excel.

v0.1.6

  • Withhold the notional earnings, administrative uplift and SG-charge exposure for a row whose period runs past the last quarter in gic_rates.json, and say so in a caveat naming the day, the last quarter on record and the file to update. The verdict, days late and shortfall are still reported. --allow-stale-gic restores the estimate at the last known rate, and the report then says it did.
  • Name the financial year a rates.json lookup is missing or unreadable for, so a stale rates file is told apart from a run that never needed the year.
  • Carry a caveat on a row that has a fund-receipt date but no matched or remitted amount, naming the whole-liability reading the checker applies to it.

v0.1.5

  • Carry the join's structural matching warnings into the canonical CSV's new join_caveats column, so they travel through the checker into the report's caveats column and the evidence pack instead of being console-only.
  • Keep genuine ambiguous joins refused: identical competing paydays still stop the import with no file written.
  • The canonical format gains one optional trailing column; files from earlier releases parse unchanged.

v0.1.4

  • Keep payments awaiting clearance pending, with a warning and no remitted or received date.
  • Match duplicate payroll rows only when the payment covers all competing unmet balances.
  • Retain refusal for insufficient payments and align evidence-pack documentation.

div7a-loan-review/v0.1.6

Choose a tag to compare

@github-actions github-actions released this 30 Sep 11:11
Immutable release. Only release title and notes can be modified.
div7a-loan-review/v0.1.6
9deaed9

v0.1.6

  • Refuse malformed or conflicting review modes before reading input: both Python entry points take only literal booleans for the mode flags and refuse gate_only=True with myr_only=True. In 0.1.5 that pair produced a reviewed row with neither result and no attention flag, even when the normal review reported a shortfall, and a textual "false" silently selected a restricted mode. The three valid modes and the command line commands behave as before (#329).
  • The README compares the engine with the Division 7A worksheet in Xero Workpapers Plus (#325).

v0.1.5

  • Refuse a fractional bare remaining term in the minimum yearly repayment: remaining_term must be a whole number of years, and a part year goes through statutory_remaining_term first.
  • Accept an amount written with trailing zeros past the cent, such as 25000.000 from a ledger or payroll export, while still refusing a real sub-cent amount.
  • Refuse a rate override that gives a year or rate as a JSON number with a message asking for a quoted string, instead of ending in a traceback.
  • Record each benchmark rate's RBA workbook cell, the value read there and the date the row was compared, in the new workbook_cell, workbook_value and row_verified_on columns. No rate value changed, but the table's SHA-256 in every result manifest did.
  • Cite the 1 July 2026 compilation of the Income Tax Assessment Act 1936 instead of the moving latest version, in the README, the evaluation and the workbook.
  • Workbook: the benchmark-year selector reads the Rates table through the RateYears name, so a year added to the table can be chosen.
  • Ship the NOTICE file in the distribution, and state in the README and DISCLAIMER.md that the author is not a registered tax or BAS agent.

v0.1.4

  • Name the primary source behind every benchmark rate: each rate-table manifest now carries primary_url, the RBA F5 historical workbook it was read from, retrieved_on, the date that workbook was downloaded, and snapshot_sha256, the digest of those bytes. verify_at stays a convenience link for a human rather than the source of the figure, and an operator's override carries no such claim. A table whose rows do not all make the same claim names none, instead of attributing every row to the last one read.
  • Record the read that produced those columns in docs/primary-source-review-2026-09-20.md, which checked all 8 reviewed years against the RBA workbook. No rate value changed.

v0.1.3

  • Name the rate table behind every figure: each JSON result carries a manifest whose rate_table_uris list the frozen benchmark table with its SHA-256, produced by the lookup that read it, and any reviewed override as override:<file name>. An UNKNOWN rate still names the table it was looked for in.
  • Carry reason_codes beside reasons on every REFUSED and UNKNOWN result, one stable token per reason in the same order, so a caller can branch on REFUSED_* (outside s 109E) separately from *_UNKNOWN (a fact the operator can still establish). A result built with a reason and no code fails at construction.
  • Resolve the rate table once per register review instead of once per row.
  • Workbook: refused repayment rows drive REVIEW; duplicate benchmark-year labels, and blank, text, negative or above-one rates, block the workbook; dates are read as whole calendar days, money is compared in cents, and placeholder dates and out-of-range amounts are refused; the unresolved interest-floor interpretation is stated beside the result.

v0.1.2

  • Reject padded required headers, duplicate override years and gates from another loan year.
  • Withhold minimum-yearly-repayment figures when the loan year is missing and retain gate caveats in every result.
  • Align the workbook formulas and cached values with the reviewed year checks.

Correction to the v0.1.1 note

The v0.1.1 release note said that release preserved the v0.1.0 review
calculations and refusal boundaries. The calculations and the s 109N gate were
preserved, but the refusal boundaries were not: v0.1.1 added the two-decimal
place limit and the $1 trillion maximum in div7aloan/money.py, and it began
preserving quoted newlines when reading the register so a malformed numeric
cell is refused instead of being joined into a different amount. Version 0.1.0
accepts a principal of 100000.001, a repayment of 25556.001, a principal of
1000000000000.01 and a repayment split across a quoted newline; v0.1.1
refuses each of them. Those safeguards stay in force in this release.

aus-accounting-mcp/v0.2.12

Choose a tag to compare

@github-actions github-actions released this 30 Sep 19:31
Immutable release. Only release title and notes can be modified.
aus-accounting-mcp/v0.2.12
f01cb7e

v0.2.12

  • Pin payday-super-checker 0.1.9 and div7a-loan-review 0.1.6;
    ato-benchmark-compare 0.1.11 and australian-tax-calculators 0.1.8 are
    unchanged.
  • Through the new pins: the payday checker's nine control arguments and the
    Division 7A engine's mode flags accept only literal booleans, and the
    Division 7A engine refuses conflicting modes. The tools already took strict
    booleans and set no Division 7A mode flag, so tool behaviour is unchanged;
    results report engine_version 0.1.9 (payday) and 0.1.6 (Division 7A). The
    payday checker's report invariant checks also hold under python -O.
  • Raise the declared mcp requirement to >=2.2.0,<3 (#331). The lock
    records mcp and mcp-types 2.2.0, pyjwt 2.14.0 and urllib3 2.8.0.
  • Align the release, citation, compatibility and MCP Registry metadata to
    0.2.12.

v0.2.11

  • Pin ato-benchmark-compare 0.1.11 and australian-tax-calculators 0.1.8;
    payday-super-checker 0.1.8 and div7a-loan-review 0.1.5 are unchanged.
  • Through the new pins: get_ato_benchmarks compares labour, rent and motor
    vehicle expenses, and cost of sales where it is not the key range, against
    the ranges the ATO publishes on each industry's page. Each ratio row's
    benchmark_source and the result's industry_page_source say where a range
    came from; these ranges never set the key ratio. calculate_tax_worksheet
    adds the study_loan_repayment worksheet for 2025-26 and 2026-27.
  • Add search_ato_rulings and read_ato_ruling, which serve ATO ruling
    paragraphs from a configured local folder of rulings runs, bringing the
    server to 18 tools.
  • Declare benchmark_source and industry_page_source in the
    get_ato_benchmarks output schema.
  • Share one page builder between the legislation corpus and accounting
    library tools.
  • Lock the build backend in the dev extra.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.11.

v0.2.10

  • Pin payday-super-checker 0.1.8, ato-benchmark-compare 0.1.10,
    div7a-loan-review 0.1.5 and australian-tax-calculators 0.1.7, the engine
    versions the workspace already tested. 0.2.9's own pins could not reproduce
    its quick proof: the published div7a-loan-review 0.1.4 carries an older
    benchmark table digest.
  • calc_payday_super_deadline and review_payday_super_contributions report
    notional earnings, both SG-charge estimates and every uplift scenario to the
    cent, built the way the checker's report builds them, so they match the
    evidence pack's report.csv. They carried up to 27 decimal places, and
    rounding their sum could land a cent away from the report.
  • Through the new pins: Division 7A results record each benchmark rate's RBA
    workbook cell and accept amounts written with trailing zeros past the cent;
    the fbt worksheet adds FBT return items 14A to 16; a report-style P&L with
    amounts in more than one column is refused when a column left of the fullest
    also holds amounts; and Payday Super evidence packs write caveat and note
    cells that start like a formula as text.
  • The release workflow installs the built wheel outside the workspace, so its
    pins resolve from PyPI, and stops before publishing unless its demo matches
    docs/quick-proof.txt.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.10.

v0.2.9

  • Pin australian-tax-calculators 0.1.6 and add its contribution_caps and
    pension_minimum worksheets to calculate_tax_worksheet, for 2024-25 to
    2026-27: cap room, excess and bring-forward for one person's classified
    contributions, and the SISR Schedule 7 minimum for one account-based
    pension. Retain the ato-benchmark-compare 0.1.9, payday-super-checker
    0.1.7 and div7a-loan-review 0.1.4 pins.
  • Count nine worksheets in the server instructions, scope resource, README,
    reference and registry descriptions, and narrow the unsupported SMSF and
    contribution-cap topics to what the worksheets leave out.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.9.

v0.2.8

  • search_tax_legislation and search_tax_rates return the best match first
    instead of in corpus file order: the query as a phrase in a heading, then every
    word in a heading, then the phrase in the text, then the words anywhere, with the
    principal tax Acts first within each tier. On a 946-title corpus "small business
    entity" previously led with Excise Act 1901 s 4 and "general deductions" did not
    reach ITAA 1997 s 8-1 in the first five results. Ranking reads the whole corpus
    on each search: about 0.5 seconds on that corpus, up to about 1.6 seconds for
    a word nearly every provision holds.
  • define_tax_term puts the principal tax Acts first within exact and partial
    matches, and its 20-entry partial cap keeps the best-ranked entries rather than
    the first ones the scan meets.
  • read_tax_legislation_section takes start and returns start and
    next_start, so a provision longer than 12000 characters can be read in parts.
    165 of 21,916 rows in that corpus were cut off with no way to read further,
    including ITAA 1997 s 995-1.
  • A search with no match adds a notice suggesting statutory wording.
  • A missing or invalid retrieval folder error tells the caller to ask the user
    rather than retry, and the scope resource reports whether each retrieval folder
    is configured, without its path.
  • aus-accounting-mcp --version and --help print and exit instead of starting
    the server; an unknown argument is refused.
  • Two evaluation cases cover ranking and reading a long provision in parts.
  • Retain the ato-benchmark-compare 0.1.9, payday-super-checker 0.1.7,
    div7a-loan-review 0.1.4 and australian-tax-calculators 0.1.5 pins.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.8.

v0.2.7

  • Pin australian-tax-calculators 0.1.5 and add its payg_withholding
    worksheet to calculate_tax_worksheet: one regular weekly, fortnightly or
    monthly pay from 1 July 2026 on Schedule 1 scale 1, 2, 3, 5 or 6. Retain the
    ato-benchmark-compare 0.1.9, payday-super-checker 0.1.7 and
    div7a-loan-review 0.1.4 pins.
  • Resolve each worksheet's engine function when it is called, so a kind the
    installed engine lacks is refused with a message and the other kinds keep
    working.
  • Put the missing space back in eight input descriptions for
    get_ato_benchmarks, calc_payday_super_deadline and review_div7a_loan,
    which reached clients as run-together words such as "ratiodenominator".
  • State in the scope resource, README and disclaimer that the author is not a
    registered tax or BAS agent, and limit support to software issues reproduced
    with fabricated data.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.7.

v0.2.6

  • Pin ato-benchmark-compare 0.1.9 and australian-tax-calculators 0.1.4.
    The benchmark release refuses a neutral CSV whose header names account,
    amount or section more than once instead of reading the first such column
    silently. The calculator release computes every worksheet in its own decimal
    context, so a caller's precision no longer changes a result. Retain the
    payday-super-checker 0.1.7 and div7a-loan-review 0.1.4 pins.
  • Serve the richer worksheet catalogue from the pinned published engine. An
    installation on an older calculator keeps the legacy discovery entries.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.6.

v0.2.5

  • Pin payday-super-checker 0.1.7. A timely receipt date without either amount field remains UNKNOWN; a late receipt without an amount remains LATE without the unsupported shortfall reduction. Retain the other 3 published engine pins.
  • Update the tool descriptions, server instructions and package description for the receipt-amount rule. Require its regression tests in standalone installations as well as workspace tests.
  • Include the merged evidence semantics and explicit scope qualifications. The optional richer worksheet catalogue still depends on an unreleased worksheet engine; the pinned published engine retains its existing scope data.
  • Include the synthetic group-review example, which indexes separate engine evidence without combining conclusions or transferring outputs between engines.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.5.

v0.2.4

  • A corpus line that spells a solidus as the JSON escape \/ is parsed rather than prefiltered, so a row_id such as 5/10 that search returned can be read back without asking for neighbours.
  • define_tax_term keeps the lettered conditions of a definition, such as (a) and (b) paragraphs, with the definition they complete; only a numbered subsection label such as (2) closes the dictionary.
  • Pin payday-super-checker 0.1.6 and div7a-loan-review 0.1.4; ato-benchmark-compare 0.1.8 and australian-tax-calculators 0.1.3 are retained.
  • Division 7A 0.1.4 names the primary source behind every benchmark rate, so a rate result and the checked demo transcript carry primary_url, retrieved_on and snapshot_sha256 beside verify_at. No rate value changed.
  • Checker 0.1.6 withholds a row's notional earnings, administrative uplift and SG-charge exposure when its period runs past the last GIC quarter on record, and says so in a caveat that names the day, the quarter and the file to update. The server has no equivalent of the checker's --allow-stale-gic, so a result it returns never carries an extrapolated rate. The checker also names the financial year a rates.json lookup is missing for, and caveats a fund-receipt row that carries no matched or remitted amount.
  • Trim about 4.5 KB (10 percent) from the published tool descriptions and input schemas: the money rule ("AUD decimal string such as "1000.00": finite, at most 2 decimal places, at most 1000000000000.00; omit or null means not supplied, "0.00" only for an established zero"...
Read more

australian-tax-calculators/v0.1.8

Choose a tag to compare

@github-actions github-actions released this 29 Sep 03:44
Immutable release. Only release title and notes can be modified.
australian-tax-calculators/v0.1.8
a07d8b0

v0.1.8

  • Add a tenth worksheet, study_loan_repayment: the compulsory study and
    training support loan repayment for 2025-26 and 2026-27, the lesser of the
    marginal amount and 10% of repayment income, with the thresholds, the 17%
    band base and the figures as the ATO prints them. worksheet_catalogue()
    lists it.
  • Lock the build backend in the dev extra.

v0.1.7

  • Add the FBT return figures to fbt results, following the FBT return 2026
    instructions: return_item_14a and return_item_14b, the type 1 and type 2
    grossed-up amounts rounded to the nearest dollar as the ATO's worked example
    does, return_item_15, their sum, and return_item_16, item 15 at 47%. The
    unrounded fbt_estimate and grossed-up amounts are unchanged.
  • List the FBT return 2026 instructions after the per-rule source in fbt
    results, and give every worksheet in worksheet_catalogue() a sources list
    beside its source.
  • Build with hatchling 1.32.3.

v0.1.6

  • Add contribution_caps for 2024-25 to 2026-27. It tests one year's
    classified contributions against the concessional cap, with unused cap
    carried forward below a $500,000 total super balance at the previous
    30 June, and the non-concessional cap: 4 times the concessional cap, nil at
    or above the general transfer balance cap, otherwise 1, 2 or 3 annual caps
    by the ITAA 1997 s 292-85(5) balance bands. Bring-forward needs the person
    to be under 75 at any time in the year. A period started in an earlier year
    is out of scope.
  • Add pension_minimum for the same years. It applies SISR Schedule 7 to one
    account-based pension: the age factor on the 1 July or commencement-day
    balance, pro-rated in the first year, nil from 1 June, and rounded once to
    the nearest $10 with an exact $5 rounding up.
  • Check every bring-forward band a cent either side of the ATO's published
    tables, and freeze Library example 7-278 as evidence.

v0.1.5

  • Add payg_withholding, a Schedule 1 (NAT 1004) worksheet for one regular
    weekly, fortnightly or monthly pay from 1 July 2026 on scales 1, 2, 3, 5 or
    6. It applies the published coefficients to the whole-dollar weekly
    equivalent plus 99 cents and rounds to the dollar as the schedule directs.
    It reproduces all 720 amounts in the ATO's sample data published on
    17 June 2026. Scale 4, tax offsets, Medicare levy adjustments, study and
    training support loans, 53 and 27 pay years and quarterly pays are refused
    or out of scope.
  • State in the README and disclaimer that the author is not a registered tax
    or BAS agent, and limit support to software issues reproduced with
    fabricated data.

v0.1.4

  • Compute every worksheet in its own decimal context. A caller's context no
    longer changes a result: at precision 4, resident tax on $200,000 returned
    $56,140.00 rather than $56,138.00, and the $16,500 type 1 FBT example
    returned $21,450.00 rather than $21,452.73. The caller's own context is
    left as it was found.
  • Add austaxcalc.calculations.worksheet_catalogue(). It returns the supported
    periods with inclusive dates, required inputs and units, available methods,
    scope exclusions and a fabricated example for each worksheet, with money as
    decimal strings. The example's scope_confirmed value is fabricated with the
    rest of the example; for real facts it is the operator's own confirmation of
    the scope conditions.
  • Hold the resident tax scale as dated data. metadata.RESIDENT_TAX_SCALES
    carries one scale per income year and SUPPORTED_PERIODS["resident_tax"] is
    derived from its keys, so an unlisted year is refused rather than borrowing
    another year's first-bracket rate. resident_tax reports the marginal rates
    it applied in its rates field, which was previously empty.
  • Cite Library document ids in the calculation evidence, so the citations
    survive the Library chapter reorganisation of 19 September 2026.

v0.1.3

  • Calculate FBT using the ATO's prescribed gross-up factors. A $1,000 type 1
    taxable value produces $977.69 FBT.

v0.1.2

  • Bind the release workflow to the checked current Release Policy main commit.
    Both historical pins are rejected by GitHub Actions despite remaining readable
    through the commit API. Versions 0.1.0 and 0.1.1 produced no release artefacts.
    Calculation behaviour is unchanged.

v0.1.1

  • Use the Release Policy commit already verified by the MCP release workflow.
    GitHub could not resolve the earlier policy reference, so 0.1.0 never built or
    published. Calculation behaviour is unchanged.

v0.1.0

  • Add 6 bounded calculation worksheets with official sources, explicit periods
    and scope confirmation.
  • Refuse unsupported periods and malformed amounts. Keep reference retrieval and
    MCP transport outside the calculation engine.

aus-accounting-mcp/v0.2.11

Choose a tag to compare

@github-actions github-actions released this 29 Sep 04:08
Immutable release. Only release title and notes can be modified.
aus-accounting-mcp/v0.2.11
6d456b2

v0.2.11

  • Pin ato-benchmark-compare 0.1.11 and australian-tax-calculators 0.1.8;
    payday-super-checker 0.1.8 and div7a-loan-review 0.1.5 are unchanged.
  • Through the new pins: get_ato_benchmarks compares labour, rent and motor
    vehicle expenses, and cost of sales where it is not the key range, against
    the ranges the ATO publishes on each industry's page. Each ratio row's
    benchmark_source and the result's industry_page_source say where a range
    came from; these ranges never set the key ratio. calculate_tax_worksheet
    adds the study_loan_repayment worksheet for 2025-26 and 2026-27.
  • Add search_ato_rulings and read_ato_ruling, which serve ATO ruling
    paragraphs from a configured local folder of rulings runs, bringing the
    server to 18 tools.
  • Declare benchmark_source and industry_page_source in the
    get_ato_benchmarks output schema.
  • Share one page builder between the legislation corpus and accounting
    library tools.
  • Lock the build backend in the dev extra.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.11.

v0.2.10

  • Pin payday-super-checker 0.1.8, ato-benchmark-compare 0.1.10,
    div7a-loan-review 0.1.5 and australian-tax-calculators 0.1.7, the engine
    versions the workspace already tested. 0.2.9's own pins could not reproduce
    its quick proof: the published div7a-loan-review 0.1.4 carries an older
    benchmark table digest.
  • calc_payday_super_deadline and review_payday_super_contributions report
    notional earnings, both SG-charge estimates and every uplift scenario to the
    cent, built the way the checker's report builds them, so they match the
    evidence pack's report.csv. They carried up to 27 decimal places, and
    rounding their sum could land a cent away from the report.
  • Through the new pins: Division 7A results record each benchmark rate's RBA
    workbook cell and accept amounts written with trailing zeros past the cent;
    the fbt worksheet adds FBT return items 14A to 16; a report-style P&L with
    amounts in more than one column is refused when a column left of the fullest
    also holds amounts; and Payday Super evidence packs write caveat and note
    cells that start like a formula as text.
  • The release workflow installs the built wheel outside the workspace, so its
    pins resolve from PyPI, and stops before publishing unless its demo matches
    docs/quick-proof.txt.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.10.

v0.2.9

  • Pin australian-tax-calculators 0.1.6 and add its contribution_caps and
    pension_minimum worksheets to calculate_tax_worksheet, for 2024-25 to
    2026-27: cap room, excess and bring-forward for one person's classified
    contributions, and the SISR Schedule 7 minimum for one account-based
    pension. Retain the ato-benchmark-compare 0.1.9, payday-super-checker
    0.1.7 and div7a-loan-review 0.1.4 pins.
  • Count nine worksheets in the server instructions, scope resource, README,
    reference and registry descriptions, and narrow the unsupported SMSF and
    contribution-cap topics to what the worksheets leave out.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.9.

v0.2.8

  • search_tax_legislation and search_tax_rates return the best match first
    instead of in corpus file order: the query as a phrase in a heading, then every
    word in a heading, then the phrase in the text, then the words anywhere, with the
    principal tax Acts first within each tier. On a 946-title corpus "small business
    entity" previously led with Excise Act 1901 s 4 and "general deductions" did not
    reach ITAA 1997 s 8-1 in the first five results. Ranking reads the whole corpus
    on each search: about 0.5 seconds on that corpus, up to about 1.6 seconds for
    a word nearly every provision holds.
  • define_tax_term puts the principal tax Acts first within exact and partial
    matches, and its 20-entry partial cap keeps the best-ranked entries rather than
    the first ones the scan meets.
  • read_tax_legislation_section takes start and returns start and
    next_start, so a provision longer than 12000 characters can be read in parts.
    165 of 21,916 rows in that corpus were cut off with no way to read further,
    including ITAA 1997 s 995-1.
  • A search with no match adds a notice suggesting statutory wording.
  • A missing or invalid retrieval folder error tells the caller to ask the user
    rather than retry, and the scope resource reports whether each retrieval folder
    is configured, without its path.
  • aus-accounting-mcp --version and --help print and exit instead of starting
    the server; an unknown argument is refused.
  • Two evaluation cases cover ranking and reading a long provision in parts.
  • Retain the ato-benchmark-compare 0.1.9, payday-super-checker 0.1.7,
    div7a-loan-review 0.1.4 and australian-tax-calculators 0.1.5 pins.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.8.

v0.2.7

  • Pin australian-tax-calculators 0.1.5 and add its payg_withholding
    worksheet to calculate_tax_worksheet: one regular weekly, fortnightly or
    monthly pay from 1 July 2026 on Schedule 1 scale 1, 2, 3, 5 or 6. Retain the
    ato-benchmark-compare 0.1.9, payday-super-checker 0.1.7 and
    div7a-loan-review 0.1.4 pins.
  • Resolve each worksheet's engine function when it is called, so a kind the
    installed engine lacks is refused with a message and the other kinds keep
    working.
  • Put the missing space back in eight input descriptions for
    get_ato_benchmarks, calc_payday_super_deadline and review_div7a_loan,
    which reached clients as run-together words such as "ratiodenominator".
  • State in the scope resource, README and disclaimer that the author is not a
    registered tax or BAS agent, and limit support to software issues reproduced
    with fabricated data.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.7.

v0.2.6

  • Pin ato-benchmark-compare 0.1.9 and australian-tax-calculators 0.1.4.
    The benchmark release refuses a neutral CSV whose header names account,
    amount or section more than once instead of reading the first such column
    silently. The calculator release computes every worksheet in its own decimal
    context, so a caller's precision no longer changes a result. Retain the
    payday-super-checker 0.1.7 and div7a-loan-review 0.1.4 pins.
  • Serve the richer worksheet catalogue from the pinned published engine. An
    installation on an older calculator keeps the legacy discovery entries.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.6.

v0.2.5

  • Pin payday-super-checker 0.1.7. A timely receipt date without either amount field remains UNKNOWN; a late receipt without an amount remains LATE without the unsupported shortfall reduction. Retain the other 3 published engine pins.
  • Update the tool descriptions, server instructions and package description for the receipt-amount rule. Require its regression tests in standalone installations as well as workspace tests.
  • Include the merged evidence semantics and explicit scope qualifications. The optional richer worksheet catalogue still depends on an unreleased worksheet engine; the pinned published engine retains its existing scope data.
  • Include the synthetic group-review example, which indexes separate engine evidence without combining conclusions or transferring outputs between engines.
  • Align the release, citation, compatibility and MCP Registry metadata to 0.2.5.

v0.2.4

  • A corpus line that spells a solidus as the JSON escape \/ is parsed rather than prefiltered, so a row_id such as 5/10 that search returned can be read back without asking for neighbours.

  • define_tax_term keeps the lettered conditions of a definition, such as (a) and (b) paragraphs, with the definition they complete; only a numbered subsection label such as (2) closes the dictionary.

  • Pin payday-super-checker 0.1.6 and div7a-loan-review 0.1.4; ato-benchmark-compare 0.1.8 and australian-tax-calculators 0.1.3 are retained.

  • Division 7A 0.1.4 names the primary source behind every benchmark rate, so a rate result and the checked demo transcript carry primary_url, retrieved_on and snapshot_sha256 beside verify_at. No rate value changed.

  • Checker 0.1.6 withholds a row's notional earnings, administrative uplift and SG-charge exposure when its period runs past the last GIC quarter on record, and says so in a caveat that names the day, the quarter and the file to update. The server has no equivalent of the checker's --allow-stale-gic, so a result it returns never carries an extrapolated rate. The checker also names the financial year a rates.json lookup is missing for, and caveats a fund-receipt row that carries no matched or remitted amount.

  • Trim about 4.5 KB (10 percent) from the published tool descriptions and input schemas: the money rule ("AUD decimal string such as "1000.00": finite, at most 2 decimal places, at most 1000000000000.00; omit or null means not supplied, "0.00" only for an established zero") is now stated once in each tool's description instead of once per money field, and the worksheet scope rule once instead of six times. The server instructions carry one retrieval policy paragraph instead of two. No input, bound or behaviour changed.

  • refuse_div7a publishes no inputs. The five legacy fields it accepted and ignored are removed, so a schema can no longer invite a borrower, lender or principal to reach a refusal. A call that still passes them is rejected as unknown arguments.

  • Three adversarial evaluation cases: a corpus provision carrying an instruction, an undefined term, and a stored rate row that must be reported at its compilation date rather than as the current figure.

  • Add define_tax_term, which finds an expression's statutory definitions in the configured corpus's dictionary, definitions and interpretation se...

Read more