Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add transaction tax report #373

Closed

Conversation

ZIMkaRU
Copy link
Member

@ZIMkaRU ZIMkaRU commented Apr 26, 2024

This PR adds the Transaction Tax Report


Adds two strategies to calculate the user's trades FIFO and LIFO.
FIFO (first-in-first-out) and LIFO (last-in-first-out) are two accounting methods used to calculate cryptocurrency gains and losses, see this article
For conversion currencies are used the Public Trades endpoint of the BFX api_v2: https://docs.bitfinex.com/reference/rest-public-trades


Basic changes:

  • adds getTransactionTaxReport endpoint
  • adds getTransactionTaxReportFile endpoint
  • adds makeTrxTaxReportInBackground endpoint
  • adds corresponding test coverage

  • getTransactionTaxReport request example
{
  "auth": {
    "token": "user_token"
  },
  "method": "getTransactionTaxReport",
  "params": {
    "start": 1706861968714,
    "end": 1712042359302,
    "strategy": "LIFO" // or "FIFO"
  }
}
  • getTransactionTaxReport response example
{
  "jsonrpc": "2.0",
  "result": [
    {
      "asset": "LTC",
      "amount": 1.43796106,
      "mtsAcquired": 1712042016000,
      "mtsSold": 1712042359302,
      "proceeds": 142.64861307412,
      "cost": 142.41853930451998,
      "gainOrLoss": 0.23007376960001125
    },
    {
      "asset": "BTC",
      "amount": 0.001342,
      "mtsAcquired": 1649771737942,
      "mtsSold": 1709584808125,
      "proceeds": 90.838638,
      "cost": 54.303808778059306,
      "gainOrLoss": 36.5348292219407
    },
    {
      "asset": "LTC",
      "amount": 1e-8,
      "mtsAcquired": 1706858241000,
      "mtsSold": 1706861968714,
      "proceeds": 6.7707e-7,
      "cost": 6.7876e-7,
      "gainOrLoss": -1.6900000000000634e-9
    }
  ],
  "id": null
}

  • getTransactionTaxReportFile request example
{
  "auth": {
    "token": "user_token"
  },
  "method": "getTransactionTaxReportFile",
  "params": {
    "start": 1706861968714,
    "end": 1712042359302,
    "strategy": "LIFO"
  }
}
  • getTransactionTaxReportFile response example
{
  "jsonrpc": "2.0",
  "result": {
    "isSaveLocaly": true,
    "localReportFolderPath": "/home/user/docs/bitfinex/report-files",
    "remoteReportUrn": null,
    "localCsvFolderPath": "/home/user/docs/bitfinex/report-files",
    "remoteCsvUrn": null
  },
  "id": null
}

  • makeTrxTaxReportInBackground request example
{
  "auth": {
    "token": "user_token"
  },
  "method": "makeTrxTaxReportInBackground",
  "params": {
    "start": 1706861968714,
    "end": 1712042359302,
    "strategy": "LIFO"
  }
}
  • makeTrxTaxReportInBackground response example
{
  "jsonrpc": "2.0",
  "result": true,
  "id": null
}

The idea of the makeTrxTaxReportInBackground endpoint is the following:

  • the big users may have a lot of trades for a certain year

  • to convert currencies to USD are used the public trades endpoint of the BFX API with 15reqs/min rate limit

  • it can lead to significant time in report generation

  • to fight HTTP timeout for this case, it is necessary to send makeTrxTaxReportInBackground HTTP request to schedule generation

  • and when the report generation is successful the data of the tax report will be responded via WebSocket

  • emitTrxTaxReportGenerationInBackgroundToOne WS event example:

{
  "jsonrpc": "2.0",
  "result": [
    {
      "asset": "LTC",
      "amount": 1.43796106,
      "mtsAcquired": 1712042016000,
      "mtsSold": 1712042359302,
      "proceeds": 142.64861307412,
      "cost": 142.41853930451998,
      "gainOrLoss": 0.23007376960001125
    },
    {
      "asset": "BTC",
      "amount": 0.001342,
      "mtsAcquired": 1649771737942,
      "mtsSold": 1709584808125,
      "proceeds": 90.838638,
      "cost": 54.303808778059306,
      "gainOrLoss": 36.5348292219407
    },
    {
      "asset": "LTC",
      "amount": 1e-8,
      "mtsAcquired": 1706858241000,
      "mtsSold": 1706861968714,
      "proceeds": 6.7707e-7,
      "cost": 6.7876e-7,
      "gainOrLoss": -1.6900000000000634e-9
    }
  ],
  "id": null,
  "action": "emitTrxTaxReportGenerationInBackgroundToOne"
}
  • emitTrxTaxReportGenerationInBackgroundToOne WS event example in case an error
{
  "jsonrpc": "2.0",
  "error": {
    "code": 500,
    "message": "Internal Server Error",
    "data": null
  },
  "id": null,
  "action": "emitTrxTaxReportGenerationInBackgroundToOne"
}

Depends on this PR:

ZIMkaRU added 30 commits April 26, 2024 09:10
@ZIMkaRU ZIMkaRU force-pushed the feature/add-transaction-tax-report branch from 0e5be86 to 43e2756 Compare May 6, 2024 11:05
@ZIMkaRU
Copy link
Member Author

ZIMkaRU commented Jun 25, 2024

done in small separated PRs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant