From tax-bunyip
Accrues a HELD capital asset's CGT cost base from document-sourced components only (acquisition, capital-works, incidentals via document decomposition) and computes NO gain for the assessed financial year when the asset is still HELD. For FY2026 the disposed rental is still held (its disposal is an FY2027 event), so its cost base accrues and no gain is computed. A cost-base component with NO supporting document is refused and flagged (finalization-block) — never accrued from a lumped feed line. Apportions the cost base across co-owners by ownership fraction (exact-sum). Surfaces forward-planning flags WITHOUT asserting eligibility or residency — the 50%/12-month CGT-discount surface and the FRCGW one-clearance-certificate-per-co-owner surface (rates from config). Output is gated under each owning individual; rentals are individually owned. Renders through the assembly substrate. Routes through the tax-bunyip hub. Asserts no final tax number.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tax-bunyip:cgtThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Routes through the **tax-bunyip** foundation hub — read its standing instructions
Routes through the tax-bunyip foundation hub — read its standing instructions
first (skills/tax-bunyip/SKILL.md). This spoke accrues a held capital
asset's CGT cost base and computes no gain for the assessed year
(scripts/spokes/cgt.py). It collates and flags — it asserts no final tax
number. The registered tax agent — or the lodging individual — finalises
every figure; every computed figure is marked [accountant to confirm].
The disposed rental's disposal is an FY2027 event. For FY2026 (the assessed year) that asset is still HELD, so the spoke:
Held-vs-disposed in the assessed FY is decided structurally from the asset's
disposal_financial_year (config, supplied per-asset) against the assessed FY:
Every cost-base component is accrued only via scripts/decompose.py from an
authoritative supplementary document (a settlement statement, a builder's invoice,
a conveyancer's statement, modelled as a per-payment statement_line). A
capital-works (or any cost-base) component with no supporting document is
refused and flagged (finalization-block, never render-block) — it is never
accrued from a lumped feed line, and a gain is never inflated by an inferred
cost-base element.
capital-works is a deductible component in decomposition's view, so an
uncorroborated capital-works split is gated as an accountant question (needs
document-identity corroboration — letterhead/domain allowlist, BSB/account match,
or a second independent source). acquisition and incidentals are cost-base
elements that are not income-year deductions, so they decompose without the
corroboration gate when the per-payment components sum to the cash amount.
A co-owned asset's cost base accrues to each owner by ownership fraction via
scripts.attribution.apportion (largest-remainder, so the per-owner cents sum
exactly to the parent). A 50/50 asset's cost base divides exactly across the
two owners; each owner's share renders on that owner's CGT working paper.
Ownership fractions come from the entity model (model.ownership_fractions), which
enforces that fractions sum to 1.0 and that rentals are owned by individuals
only.
For an asset with a disposal on the horizon (a disposal_fy is set) the spoke
surfaces forward-planning flags routed to the consolidated package, without
asserting a figure or recommending an action:
cgt_discount_rate) and the minimum holding period
(cgt_discount_min_holding_months) come from config/rates.yaml (seeded
pending, so they render provisional). The spoke never asserts the asset is
eligible.frcgw_withholding_rate) and threshold (frcgw_threshold) come from config.
The spoke never asserts residency, that withholding applies, or a withheld
amount.A CGT working paper is produced under each owning individual — the rental node
itself produces nothing (produces: []). An owner whose role's produces
allow-list lacks cgt (the trust, a company) is un-producible:
produce_owner_cgt raises.
Cost-base elements map to CGT-schedule labels in config/ato_labels.sample.yaml
(labels.tax_category_to_label): cgt_cost_base_acquisition,
cgt_cost_base_capital_works, cgt_cost_base_incidentals. Each is a cost-base
element, deductible: false — it accrues to the asset's cost base, it is not an
income-year deduction. The accountant owns the cost-base treatment.
scripts/spokes/cgt.py)Canonical invocation: ${CLAUDE_PLUGIN_ROOT}/scripts/run.sh scripts/spokes/cgt.py
held_disposition(assessed_fy, disposal_fy) → held-accrue-no-gain / disposal-in-assessed-fy (raises on a prior-year disposal)accrue_cost_base_element(element, fy_start=..., fy_end=..., facility=...) → (component, flag) — exactly one non-None; document-sourced onlyaccrue_asset_cost_base(asset, model=..., assessed_fy=..., fy_start=..., fy_end=..., disposal_fy=..., cost_base_elements=...) → AssetCGTResult (held → no gain)cgt_discount_surface_flag(asset) / frcgw_clearance_flag(asset, co_owners) → forward-planning flags (rates from config)produce_owner_cgt(owner, asset_results, fy=..., entity_config=...) → CGTResultwrite_owner_cgt(result, base_dir=...) → atomic Markdown + Excel (0600)CGTResult.gain_computed (always False in v1) / .has_no_document_flag / .has_no_gain_held_flag / .has_frcgw_flag / .summary()npx claudepluginhub reebz/tax-bunyip --plugin tax-bunyipProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.