Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Types and calculations for capital gains tax (CGT).
This module does not implement the indexation method for cost base reduction. If you have assets acquired before 1999-09-21 11:45:00+1000… file a ticket or send a patch!
The main function you need is assessCGTEvents
.
Synopsis
- data CGTEvent a = CGTEvent {
- assetDesc :: String
- units :: a
- acquisitionDate :: Day
- acquisitionPrice :: Money a
- acquisitionCosts :: Money a
- disposalDate :: Day
- disposalPrice :: Money a
- disposalCosts :: Money a
- capitalCosts :: Money a
- ownershipCosts :: Money a
- assessCGTEvents :: (Fractional a, Ord a, Foldable t) => Money a -> t (CGTEvent a) -> CGTAssessment a
- data CGTAssessment a = CGTAssessment (Money a) (CGTNetGainOrLoss a)
- data CGTNetGainOrLoss a
- = CGTNetGain (Money a)
- | CGTLoss (Money a)
- class HasCapitalLossCarryForward a b where
- capitalLossCarryForward :: Lens' (a b) (Money b)
- cgtNetGainOrLoss :: Lens' (CGTAssessment a) (CGTNetGainOrLoss a)
- cgtNetGain :: Num a => Getter (CGTAssessment a) (Money a)
- class HasCapitalGain a b c where
- capitalGain :: Getter (a b) (Money c)
- capitalLoss :: (Num a, Ord a) => CGTEvent a -> Money a
- isCapitalGain :: (Num a, Ord a) => CGTEvent a -> Bool
- isCapitalLoss :: (Num a, Ord a) => CGTEvent a -> Bool
- discountApplicable :: CGTEvent a -> Bool
- netCapitalGainOrLoss :: (Fractional a, Ord a, Foldable t) => Money a -> t (CGTEvent a) -> CGTNetGainOrLoss a
CGT events
A CGT Event (usually an asset disposal)
CGTEvent | |
|
CGT assessments for tax returns
:: (Fractional a, Ord a, Foldable t) | |
=> Money a | capital loss carried forward |
-> t (CGTEvent a) | |
-> CGTAssessment a |
Assess the total capital gains and net capital gain or loss.
data CGTAssessment a Source #
Total undiscounted gains and net gain/loss for tax assessment
CGTAssessment (Money a) (CGTNetGainOrLoss a) |
Instances
Functor CGTAssessment Source # | |
Defined in Data.Tax.ATO.CGT fmap :: (a -> b) -> CGTAssessment a -> CGTAssessment b # (<$) :: a -> CGTAssessment b -> CGTAssessment a # | |
(Num a, Eq a) => HasCapitalLossCarryForward CGTAssessment a Source # | |
Defined in Data.Tax.ATO.CGT capitalLossCarryForward :: Lens' (CGTAssessment a) (Money a) Source # | |
HasCapitalGain CGTAssessment a a Source # | |
Defined in Data.Tax.ATO.CGT capitalGain :: Getter (CGTAssessment a) (Money a) Source # | |
Show a => Show (CGTAssessment a) Source # | |
Defined in Data.Tax.ATO.CGT showsPrec :: Int -> CGTAssessment a -> ShowS # show :: CGTAssessment a -> String # showList :: [CGTAssessment a] -> ShowS # |
data CGTNetGainOrLoss a Source #
A net (loss offset, discounted) gain, or the loss amount
CGTNetGain (Money a) | |
CGTLoss (Money a) |
Instances
Functor CGTNetGainOrLoss Source # | |
Defined in Data.Tax.ATO.CGT fmap :: (a -> b) -> CGTNetGainOrLoss a -> CGTNetGainOrLoss b # (<$) :: a -> CGTNetGainOrLoss b -> CGTNetGainOrLoss a # | |
(Num a, Eq a) => HasCapitalLossCarryForward CGTNetGainOrLoss a Source # | |
Defined in Data.Tax.ATO.CGT capitalLossCarryForward :: Lens' (CGTNetGainOrLoss a) (Money a) Source # | |
Show a => Show (CGTNetGainOrLoss a) Source # | |
Defined in Data.Tax.ATO.CGT showsPrec :: Int -> CGTNetGainOrLoss a -> ShowS # show :: CGTNetGainOrLoss a -> String # showList :: [CGTNetGainOrLoss a] -> ShowS # |
class HasCapitalLossCarryForward a b where Source #
Types that have a carry-forward capital loss (either as an input or an output).
capitalLossCarryForward :: Lens' (a b) (Money b) Source #
Instances
(Num a, Eq a) => HasCapitalLossCarryForward TaxAssessment a Source # | |
Defined in Data.Tax.ATO capitalLossCarryForward :: Lens' (TaxAssessment a) (Money a) Source # | |
(Num a, Eq a) => HasCapitalLossCarryForward CGTAssessment a Source # | |
Defined in Data.Tax.ATO.CGT capitalLossCarryForward :: Lens' (CGTAssessment a) (Money a) Source # | |
(Num a, Eq a) => HasCapitalLossCarryForward CGTNetGainOrLoss a Source # | |
Defined in Data.Tax.ATO.CGT capitalLossCarryForward :: Lens' (CGTNetGainOrLoss a) (Money a) Source # | |
HasCapitalLossCarryForward (TaxReturnInfo y) a Source # | |
Defined in Data.Tax.ATO capitalLossCarryForward :: Lens' (TaxReturnInfo y a) (Money a) Source # |
cgtNetGainOrLoss :: Lens' (CGTAssessment a) (CGTNetGainOrLoss a) Source #
The CGTNetGainOrLoss
value of the CGTAssessment
cgtNetGain :: Num a => Getter (CGTAssessment a) (Money a) Source #
The net capital gain, or zero if a loss.
CGT computations
class HasCapitalGain a b c where Source #
Types that may have a capital gain. Non-discounted, losses ignored.
capitalGain :: Getter (a b) (Money c) Source #
Instances
HasCapitalGain CGTAssessment a a Source # | |
Defined in Data.Tax.ATO.CGT capitalGain :: Getter (CGTAssessment a) (Money a) Source # | |
(Num a, Ord a) => HasCapitalGain CGTEvent a a Source # | Capital gain as a positive amount. $0 if the event not a gain. |
Defined in Data.Tax.ATO.CGT | |
(Foldable t, HasCapitalGain x a a, Num a) => HasCapitalGain t (x a) a Source # | Sum of capital gains, ignoring losses. Input H at item 18 on tax return. |
Defined in Data.Tax.ATO.CGT capitalGain :: Getter (t (x a)) (Money a) Source # |
capitalLoss :: (Num a, Ord a) => CGTEvent a -> Money a Source #
The capital loss as a non-negative amount. $0 if the event is not a loss.
isCapitalGain :: (Num a, Ord a) => CGTEvent a -> Bool Source #
Whether the CGT event is a capital gain. /Not the opposite
of isCapitalLoss
!/ A CGT event may be neither a loss nor a
gain.
isCapitalLoss :: (Num a, Ord a) => CGTEvent a -> Bool Source #
Whether the CGT event is a capital loss. /Not the opposite
of isCapitalGain
!/ A CGT event may be neither a loss nor a
gain.
discountApplicable :: CGTEvent a -> Bool Source #
Whether the 50% CGT discount is applicable to this event (only with regard to duration of holding; acquisition date ignored).
:: (Fractional a, Ord a, Foldable t) | |
=> Money a | loss carried forward |
-> t (CGTEvent a) | CGT events |
-> CGTNetGainOrLoss a |
Compute the discounted gain or carry-forward loss
Losses are used to offset non-discountable capital gains first, then discountable gains, before the discount is applied to discountable gains.
- Does not implement the indexation method for cost-base reduction!*