There is a new feature branch which supports IRS tax rules for US users here.
This is a proof of concept, it only has support for US, not UK. The plan is to merge this into the existing UK version, as well as adding support for potentially other countries at a later stage.
Install via the ZIP archive:
pip install https://github.com/BittyTax/BittyTax/archive/refs/heads/features/usa-tax-rules.zip
Alternatively, if you have git
installed, install using:
pip install git+https://github.com/BittyTax/BittyTax@features/usa-tax-rules
Check the new version has been installed successfully. It should show version v0.5.3.dev3.
pip show BittyTax
bittytax --version
If you get problems you can try uninstalling first:
pip uninstall BittyTax
The US version has/requires the config below which is different to the defaults used by the UK version.
The local currency should be set to USD.
local_currency: 'USD'
The local timezone is used when calculating the tax year end, as well as the short-term/long-term holding period. The local timezone defaults to US/Eastern.
local_timezone: 'America/New_York'
It is also important for the Conversion Tool, the following Wallets/Explorers export data with a local timestamp, this will be converted to UTC time.
- Electrum
- Qt Wallet
- Trezor Suite
- Volt
- Zerion
Other US timezones can be configured:
Region | Timezone Identifier |
---|---|
US/Alaska | 'America/Anchorage' |
US/Aleutian | 'America/Adak' |
US/Arizona | 'America/Phoenix' |
US/Central | 'America/Chicago' |
US/East-Indiana | 'America/Indiana/Indianapolis' |
US/Eastern | 'America/New_York' (default) |
US/Hawaii | 'Pacific/Honolulu' |
US/Indiana-Starke | 'America/Indiana/Knox' |
US/Michigan | 'America/Detroit' |
US/Mountain | 'America/Denver' |
US/Pacific | 'America/Los_Angeles' |
This parameter is used by the Conversion Tool when parsing dates which are in a localised format. For the US it needs to be set to False.
date_is_day_first: False
It is used by the following parsers:
- Bitfinex
- CoinTracking
- Trezor Suite
- Volt
For US this should be set to 0, so the fee is attributed to only the buy asset for crypto-to-crypto trades. See here.
- 0 = Buy asset
- 1 = Sell asset
- 2 = Split evenly between the buy and sell asset
trade_allowable_cost_type: 0
Lost buyback is not required for the US. See here.
lost_buyback: False
Income received in fiat currency should be included along with crypto in the income report. See here.
fiat_income: True
This is a new config parameter. It lets you set the default tax rules for the Accounting Tool. This is something more for the future, as this version only supports US Individuals.
default_tax_rules: 'US_INDIVIDUAL'
This is a new config parameter. When set to True
BittyTax will automatically add an acquisition (Buy) with a cost basis of zero, for any disposal (Sell) amount where a matching Buy is missing from your transaction records.
When this happens the integrity check will fail since more tokens have been created than originally accounted for. The difference should be the total amount of the tokens created at zero cost.
A new option has been added to let you continue if the intergiry check fails without having to re-run the Accounting tool.
The default for this parameter is False
.
The table below summarises how each transaction type will be taxed according to the IRS tax rules.
Transaction Type | Capital Gains | Income |
---|---|---|
Deposit |
||
Mining |
✅ | |
Staking |
✅ | |
Interest |
✅ | |
Dividend |
✅ | |
Income |
✅ | |
Gift-Received |
||
Fork |
✅ | |
Airdrop |
✅ | |
Referral |
✅ | |
Cashback |
✅ | |
Fee-Rebate |
✅ | |
Trade |
✅ | |
Withdrawal |
||
Spend |
✅ | |
Gift-Sent |
✳️ | |
Gift-Spouse |
✳️ | |
Charity-Sent |
✳️ | |
Lost |
✳️ These are not liable for capital gains tax (within limitations), they will appear in the "Other Disposals" section of your tax report.
Only trading fees are included as an allowed cost.
Capital Gains disposals are categorised as either Short-Term or Long-Term depending on how long you have held the asset. Short-term means you have held the asset for less that 1 year.
You can see an example of the BittyTax US PDF report here.
The only method currently implemented for matching disposals to acquisitions is FIFO (First-In, First-Out). If you would like additional methods implemented, please get in touch.
If no matching acquisition can be found for a disposal, a warning will be produced and the Accounting Tool will exit with an error. That is unless the config parameter cost_basis_zero_if_missing has been used.
A new command argument has been added --format
, this lets you choose the output format of your tax report.
The following options are available:
Format | Description | Default Filename |
---|---|---|
PDF |
BittyTax tax report in PDF format (default) | BittyTax_Report.pdf |
IRS |
IRS Form 8949 | BittyTax_IRS-<year>.pdf |
TURBOTAX_CSV |
TurboTax Online "Other (Gain/Loss)" CSV format | BittyTax_TurboTax.csv |
TURBOTAX_TXF |
TurboTax Desktop TXF format | BittyTax_TurboTax.txf |
TAXACT |
TaxAct "1099-B CSV import" format | BittyTax_TaxAct.csv |
For example:
bittytax BittyTax_Records.xlsx --format TURBOTAX_CSV
TurboTax may or may not recognise an acquisition date of "VARIOUS", i.e. when there are multiple purchase dates.
To help you categorise this disposal correctly, BittyTax will use "VARIOUS" in uppercase for a long-term disposal, and lowercase "various" for short-term.