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

[PART-1] Add transaction tax report #380

Merged

Conversation

ZIMkaRU
Copy link
Member

@ZIMkaRU ZIMkaRU commented May 21, 2024

This PR adds the main structure for Transaction Tax Report


It's a 1-part of the feature, the main idea taken from these PRs: #373, #378, #379

  • separates into small parts
  • improves and speeds up the currency conversion approach (in the future PRs)

Basic changes:

  • adds getTransactionTaxReport endpoint
  • adds getTransactionTaxReportFile endpoint
  • adds makeTrxTaxReportInBackground endpoint

  • 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"
}

Copy link
Contributor

@ezewer ezewer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

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.

3 participants