Coder Social home page Coder Social logo

megaassignment1's Introduction

Crypto Tax Report

A javascript library for creating configurable tax reports. Supports generic transaction types as well as specific protocol support (such as Compound Finance).

Note: This library is currently in alpha and subject to breaking changes. Please install with a pin to a version tag or commit.

Licensing

Licensing is AGPL v3.0 by default but an MIT license is available for purchase. Reach out at [email protected] to purchase a license for commercial use.

Installation

npm install git://github.com/CryptoTaxTools/crypto-tax-report.git#v0.0.4

Example Use

Here is an example of importing and using the library. If you'd like more examples of using the library, please reference the tests.

import createReport from 'crypto-tax-report';

const report = createReport({
  config: {
    local_currency: 'USD',
    price_method: 'BASE',
    cost_basis_method: 'FIFO',
    decimal_places: 2,
    allow_lot_overlap: true,
  },
  transactions: [
    {
      tx_id: '1',
      tx_type: 'DEPOSIT',
      timestamp: '2020-09-09T01:00:00Z',
      deposit_code: 'USD',
      deposit_amount: '99'
    },
    {
      tx_id: '2',
      tx_type: 'TRADE',
      timestamp: '2020-09-10T01:00:00Z',
      side: 'BUY',
      base_code: 'BTC',
      base_amount: '1',
      quote_code: 'USD',
      quote_amount: '100'
    },
    {
      tx_id: '3',
      tx_type: 'TRADE',
      timestamp: '2020-09-11T01:00:00Z',
      side: 'BUY',
      base_code: 'USD',
      base_amount: '200',
      quote_code: 'BTC',
      quote_amount: '1'
    }
  ],
  prices: [
    {
      tx_id: '2',
      timestamp: '2020-09-10T01:00:00Z',
      base_code: 'BTC',
      quote_code: 'USD',
      price: '100'
    },
    {
      tx_id: '3',
      timestamp: '2020-09-11T01:00:00Z',
      base_code: 'BTC',
      quote_code: 'USD',
      price: '200'
    }
  ]
});

// Example report output
{
  "report": {
    "2020": {
      "income": [],
      "long": [],
      "short": [
        {
          "asset": "BTC",
          "proceeds": "200",
          "date_sold": "2020-09-11T01:00:00Z",
          "cost_basis": "100",
          "asset_amount": "1",
          "date_acquired": "2020-09-10T01:00:00Z",
          "tx_id_sale": "3",
          "tx_id_lot": "2",
        }
      ],
      "unmatched": [
        {
          "asset": "USD",
          "proceeds": "1",
          "date_sold": "2020-09-10T01:00:00Z",
          "cost_basis": "0",
          "asset_amount": "1",
          "date_acquired": "2020-09-10T01:00:00Z",
          "tx_id_sale": "2"
        }
      ],
      "lost": [],
      "interest_income": [],
      "assets": {
        "USD": {
          "increase": "299",
          "decrease": "100",
          "holdings": "199"
        },
        "BTC": {
          "increase": "1",
          "decrease": "1",
          "holdings": "0"
        }
      }
    }
  },
  "config": {
    "local_currency": "USD",
    "price_method": "BASE",
    "cost_basis_method": "FIFO",
    "decimal_places": 2,
    "allow_lot_overlap": true,
  }
}

Input Specs

The createReport function accepts a single object as it's first and only parameter. This object has three properties: config, transactions, and prices.

Report Input Property Required Data Type
config Yes Object
transactions Yes Array
prices Yes Array

Config

The config object sets the local currency to use for asset prices, the price method, the accounting method, and the number of decimal places to use for report outputs.

Config Property Default Value Allowed Value Required Data Type
local_currency 'USD' Any String No String
price_method 'BASE' 'BASE', 'QUOTE' No String
cost_basis_method 'FIFO' 'FIFO', 'HIFO', 'LIFO' No String
decimal_places 2 Any Number No Number
allow_lot_overlap true true, false No Boolean

local_currency: A local currency must be specified in order to determine which price record to use. For example, if your trade is between BTC and LTC, and you specify GBP as your local currency, then the report code will look for price records that include GBP as the quote code.

price_method: The price method determines which code in a transaction to use for determining cost basis. For a trade between BTC and LTC where BTC is the base and LTC is the quote, if the price method is BASE, the tax code will use a BTC price record for determining the cost basis for the resulting tax lot from the trade.

cost_basis_method: Your options for cost basis accounting are FIFO (first-in, first-out), LIFO (last-in, first-out), and HIFO (highest-in, first-out).

decimal_places: The number of decimals places to use for figures in report output.

allow_lot_overlap: If lot overlap is allowed, two transactions with exactly the same timestamp will be able to reference each others tax lot values when calculating sales. For example, instead of creating an unmatched sale, if another transaction increases the asset holdings at the same timestamp, that sale will use the available funds as the matched tax lot.

Transactions

Transactions are an array of objects. At least 1 transaction is required, otherwise an exception is thrown. Please reference types.ts for a full list of transaction types. There are generic types, which apply to any protocol, and there are protocol-specific transaction types, like the ones modeled after Compound Finance activity. Please see fees.md for some notes on fee treatment.

Specific Protocol Transaction Types

Generic Transaction Types

Trade
Property Data Type Allowed Value Required
tx_id String Any String Yes
tx_type String 'TRADE' Yes
timestamp String ISO 8601 DateTime String Yes
side String BUY, SELL, NONE Yes
base_code String Any String Yes
base_amount String Any String Yes
quote_code String Any String Yes
quote_amount String Any String Yes
fee_tx_ids Array Array of Strings No
Deposit
Property Data Type Allowed Value Required
tx_id String Any String Yes
tx_type String 'DEPOSIT' Yes
timestamp String ISO 8601 DateTime String Yes
deposit_code String Any String Yes
deposit_amount String Any String Yes
fee_tx_ids Array Array of Strings No
Withdrawal
Property Data Type Allowed Value Required
tx_id String Any String Yes
tx_type String 'WITHDRAWAL' Yes
timestamp String ISO 8601 DateTime String Yes
withdrawal_code String Any String Yes
withdrawal_amount String Any String Yes
fee_tx_ids Array Array of Strings No
Income
Property Data Type Allowed Value Required
tx_id String Any String Yes
tx_type String 'INCOME' Yes
timestamp String ISO 8601 DateTime String Yes
income_code String Any String Yes
income_amount String Any String Yes
fee_tx_ids Array Array of Strings No
Lost
Property Data Type Allowed Value Required
tx_id String Any String Yes
tx_type String 'LOST' Yes
timestamp String ISO 8601 DateTime String Yes
lost_code String Any String Yes
lost_amount String Any String Yes
fee_tx_ids Array Array of Strings No

Prices

Prices are required for transactions that use any asset other than the localCurrency. Please reference types.ts for the Price object type definition.

Property Data Type Allowed Value Required
tx_id String Any String Yes
timestamp String ISO 8601 DateTime String Yes
base_code String Any String Yes
quote_code String Any String Yes
price String Any String Yes

megaassignment1's People

Contributors

ai2k2 avatar

Stargazers

Software Engineering Educator avatar 涂娜娜 avatar GEMMA Xing avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.