packages feed

tax-ato-2026.1: CHANGELOG.md

## Version 2026.1

### CGT overhaul

Capital gains tax (CGT) received a significant overhaul.
Enhancements include:

- Added the a `CGTAsset` data type, which includes `CGTAssetType`
  for tracking different categories of CGT assets.

- Implemented a separate loss carry-forward for collectables.  The
  new `CapitalLossCarryForward` data type has separate fields for
  capital losses on collectables and other capital losses.

- Capital losses on personal use assets (`AssetTypePersonalUse`) are
  disregarded.

- Added the `EntityType` data type.  This ensures the correct CGT
  discount proportion is used depending on whether the taxed entity
  is an `Individual`, `Company`, `Trust` or `SuperFund`.

- The `assessCGTEvents` function now has an `EntityType` argument.

- Capital gains from trusts can now be included in CGT calculations.
  The `CapitalGainsFromTrust` data type represents capital gains
  from trust distributions.  The 'prepTrustCGT' function converts
  `CapitalGainsFromTrust` values into CGT events that represent the
  grossed-up gain, including eligibility for the CGT discount or
  small business concession.

- Added convenience constructors for various kinds of CGT events.

- Added some data types that will support the implementation (in a
  future release) of various CGT exemptions and small business CGT
  concessions.

- The `Data.Tax.ATO.Pretty.summariseCGTSchedule` prints the *CGT
  schedule* for a given `CGTAssessment`.

### Personal services income (PSI)

Added module `Data.Tax.ATO.BPI` (*Business and professional items*),
which provides for declaring personal services income and associated
deductions.

Usage:

```haskell
info =
  newTaxReturnInfoForTables tables
  & set
      ( businessAndProfessionalItems
      . personalServicesIncome
      . psiOther )
      ( Money 18000 )
  & set
      ( businessAndProfessionalItems
      . personalServicesIncome
      . psiTotalAmountOfOtherDeductions
      )
      ( Money  2000 )
```

### "Other income"

Added the `otherIncome` field and the `OtherIncome` data type, which
contains a number of fields for declaring various kinds of income
(including FHSS released amounts).

Example usage:

```haskell
info =
  newTaxReturnInfoForTables tables
  & set (otherIncome . otherIncomeCategory4) [("Airdrop", Money 5000)]
```

### Other features and enhancements

- Add `FY2026` module.  Apart from the usual Medicare levy and
  private health insurance rebate adjustments, study loan repayments
  changed to a marginal tax (previously a threshold tax).

- Add preliminary `FY2027` module.  Values are not final.  The
  new *$1,000 instant deduction* is not yet implemented.

### Bug fixes

- FY2020+ now calculate study and training loan repayment correctly
  where individual has both HELP and SFSS balances.

- Pretty-printers updated to omit various line items when zero.


## Version 2025.1

### Features and enhancements

- Overhauled payment summaries.  More comprehensive data types and
  optics are provided in module `Data.Tax.ATO.PaymentSummary`.

  The old `PaymentSummary` constructor persists as a (deprecated)
  pattern synonym, for backwards compatibility.  It will be removed
  in a future release.

- Implemented **reportable fringe benefits**. .  Use the
  `fringeBenefitsEmployerNotExempt` or
  `fringeBenefitsEmployerExempt` constructors, along with the
  `reportableFringeBenefits` lens to add it to the payment summary.
  The amount is properly included in the surcharge and student loan
  repayment income calculations.

- Implemented **allowances**.  A list of allowances can be added to
  a payment summary via the `allowances` lens.  Construct allowance
  values with `allowance :: String -> Money a -> Allowance a`.

- Implemented **non-super lump sum A, B, D and E** payments.

- Implemented additional payment summary types:
  - Foreign Employment
  - Business and personal services income
  - Withholding where ABN not quoted

- New module `Data.Tax.ATO.Depreciation` provides types and
  functions for calculating decline in value (for deductions).
  Use the `DepreciatingAsset` data type to define depreciating
  assets, and the `declineInValue` function for calculating the
  decline in value in a given financial year.

- Added the "cents-per-kilometre" method for car expense deductions.
  Usage: `applyCentsPerKilometreMethod @FY kms`.  ([#13])

- Added home office expense deduction methods ([#7]).  Usage

  ```
  applyFixedRateMethod @FY hours
  applyShortcutMethod @FY hours
  applyFixedRateMethodPre2023 @FY hours
  ```

- Implement Medicare levy low income family thresholds, including
  increase based on number of dependents.  Senior and pensioners
  individual and family thresholds remain unimplemented.

- CGT assessment types were overhauled and now contain more
  information about total capital gain and applied / unapplied
  losses.  This is step toward a more complete CGT implementation.
  Remaining gaps include foreign withholding credits and separate
  treatment of collectables.

- Multiple ESS statements can now be added to a tax return.  Also,
  the `essEmployeeDetails` field has been added, and
  `newESSStatement` was updated to take a `PayerDetails`.  This is a
  breaking change.  ([#16])

- Added `division293Income` which calculates the income component of
  Division 293 tax calculations.  Some elements are not included
  because the relevant feature is not yet implemented (e.g. rental
  losses or FHSS releases).  ([#12])

- Added `paygInstalmentIncome`, which calculates the PAYG instalment
  income.  Some elements are not included because the relevant
  features are not yet implement (e.g. rent, partnership and trust
  income, PSI).

- Added the `Data.Tax.ATO.ABN` and `Data.Tax.ATO.TFN` modules, which
  have more representative data types, conversion functions, and
  proper validation.  `IsString` instances are provided for
  compatibility with existing code.

- `TaxReturnInfo` pretty printing now includes more detailed ESS and
  CGT data, to help with preparation of tax returns.

- `TaxAssessment` pretty printing now separately reports Medicare
  levy, Medicare levy surcharge, and the various non-refundable and
  refundable tax offsets.  The formatting closely resembles the ATO
  *notice of assessment* layout.

- Add `FY2025` module.  All rates and thresholds are up to date.

- Added some new helper functions to the `Data.Tax.ATO.FY` module:
  - `fromProxy :: (FinancialYear y) => Proxy y -> Year`
  - `daysInYear :: Year -> Integer`
  - `daysInYearFromProxy :: FinancialYear y => Proxy y -> Integer`

### Bug fixes

- Non-refundable offsets now cannot reduce liability below $0, and
  the order of application of the various liabilities, offsets and
  credits has been fixed.

- Employee share scheme TFN amounts withheld are now included in
  assessment calculations ([#8]).

- Fix FY2024 private health insurance rebate tier thresholds.

[#7]: https://github.com/frasertweedale/hs-tax-ato/issues/7
[#8]: https://github.com/frasertweedale/hs-tax-ato/issues/8
[#12]: https://github.com/frasertweedale/hs-tax-ato/issues/12
[#13]: https://github.com/frasertweedale/hs-tax-ato/issues/13
[#16]: https://github.com/frasertweedale/hs-tax-ato/issues/16


## Version 2024.1

- The minimum supported version of GHC is now 9.2, due to a
  dependency on more recent versions of the *time* library.

- Update the `Dividend` type to use store gross payment amount and
  tax withheld, rather than net amount, franking portion and (other)
  tax withheld.  Add new helper functions for construction:
  - `dividendFromGross` takes gross amount and tax withheld
  - `dividendFromNet` takes net amount and tax withheld
  - `dividendFromNetFranked` takes net amount, franked proportion and
    applicable corporate tax rate for working out the franking credit.
  - `dividendFromNetFranked30` is a shortcut that uses the standard
    corporate tax rate of 30%.

- Change the type of `dividendDate` field from `String` to
  `Data.Time.Day`.

- Rename the `HasIncome` class to `HasTaxableIncome`, and its
  member function `income` to `taxableIncome`.

- Add functions for getting the `Day` range of a financial year,
  and a function for getting the financial year of a given day.

- Move the `Data.Tax.ATO.Days` module to `Data.Tax.ATO.FY` and
  rename the `DaysInYear` type synonym to `FinancialYear`, to
  reflect the additional behaviour.

- Each `FY.<YYYY>` module now exports an `FY` type synonym for its
  type-level `Nat` representing the financial year, and the `fyProxy
  :: Proxy FY` value.

- Add `Functor` instance for `CGTEvent`.

- Add `FY2024` module.

- Add `Data.Tax.ATO.Pretty` module, which provides pretty printers
  for `TaxReturnInfo`, `TaxAssessment`, and other data types.


## Version 2023.2

- Add support for PAYG Instalments, which are specified in aggregate
  as a refundable tax offset via the `paygInstalments` field.

- Add the `Deductions` type, which expresses the various deduction
  types, as well as the (aggregate) amount of deductions related to
  foreign income.

- Implement the Foreign Income Tax Offset Limit.  The limit will be
  calculated and the `foreignTaxOffset` field in the `TaxReturnInfo`
  will be clamped to it.

## Older versions

See Git commit history