fiscafacile / CryptoFiscaFacile

Outil (en ligne de commande pour l'instant) vous permettant de rassembler toutes les transactions de vos différents échanges et wallets afin de constituer votre portefeuille global et ainsi vous aider à la déclaration fiscale française.
MIT License
60 stars 11 forks source link
crypto crytpocurrency fiscalization

CryptoFiscaFacile v2

Ce projet a évolué, une version 2 est disponible en ligne et le code source est sur Gitlab. Dans la version 2 vous aurez :

Ce projet sur Github reste ici pour archive de l'historique, mais vous êtes tous invités à venir utiliser la v2 bien plus ergonomique !

CryptoFiscaFacile v1

made-with-Go MIT license Open Source? Yes! PRs Welcome Telegram CryptoFiscaFacile Discord CryptoFiscaFacile

Cet outil veut vous aider à déclarer vos cryptos aux impôts !

Attention néanmoins : les développeurs de CryptoFiscaFacile ne peuvent pas être tenus pour responsables des éventuelles erreurs ou imprécisions qui pourraient survenir dans vos déclarations fiscales suite à d'éventuels bugs de l'outil. En cas d'erreurs, l'entière responsabilité de ces erreurs vous incombe.

Gardez en tête que la loi n'étant pas encore définie sur tous les points, cet outil peut différer de votre point de vue, c'est pour cela qu'il est en open-source : à vous de modifier (ou faire modifier) à vos besoins.

Gardez aussi en tête le fait qu'il ne supporte pas toutes les plateformes existantes, mais un guide vous est fourni pour vous aider à développer votre propre module.

Tout pull request est le bienvenu, j'essayerai de les intégrer le plus vite possible.

Enfin, le code actuel est en constante évolution, il se peut donc que la documentation ci dessous ne soit pas précise, mais elle vous fournira une bonne base pour utiliser cet outil.

Installation / Mise à jour

Vous aurez besoin de Go dont voici la doc officelle d'installation.

Une fois Go installé sur votre système, ouvrez un terminal (cmd.exe/PowerShell sous Windows, Terminal sous MacOS, un shell sous Linux) et tappez cette commande :

$ go install github.com/fiscafacile/CryptoFiscaFacile

Le binaire de l'outil sera généré sur votre PC, vous pourrez le lancer en ligne de commande (donc dans un terminal) avec les Options nécessaires à vos besoins.

$ CryptoFiscaFacile --help

Pour mettre à jour, il suffit de relancer la commande (pas trop sur de cela) :

$ go get -u github.com/fiscafacile/CryptoFiscaFacile

Utilisation

Principe de fonctionnement

Cet outil a besoin de "Sources" pour établir une liste de transactions qui constituent votre protefeuille global.

Ces "Sources" peuvent être :

Toutes les APIs utilisées par cet outil sont mis en cache dans des fichiers JSON rangés dans le répertoire Cache créé à côté de l'exécutable. Vous pouvez donc vérifier/exporter/modifier ces informations pour rendre votre utilisation cohérente. Pensez aussi à supprimer/déplacer/renommer les fichiers de cache si vous voulez récupérer les dernières informations de la plateforme.

Chaque transaction est composée d'une Date, d'une Note (donnant des informations pour la comprendre), optionellement d'une liste de frais Fee, optionellement d'une liste de sources From et optionellement d'une liste de destinations To.

Les Fee, From et To sont des "Actifs" composés d'un Code et d'un montant Amount.

Tous les montants dans l'outil sont des chiffres décimaux avec précision arbitraire : aucun arrondi n'est fait dans les calculs, seulement à l'affichage à la fin pour plus de clareté.

Une fois toutes les transactions récupérées de toutes les "Sources" que vous avez fournies à l'outil, il va essayer de catégoriser ces TXs.

Catégories de TXs relatives à une "Source"

Catégories manuelles et semi-automatiques

Vous pourrez fournir une Source particulière pour rediriger certaines TXs dans des catégories manuelles comme des "Dons" Gifts et autres AirDrops.

Vous pourrez aussi activer la détection de Forks sur certaines cryptos.

Catégories spécifiques à certaines plateformes

Sur certaines plateformes comme Crypto.com il existe aussi des CommercialRebates (cashback de carte, remboursement Netflix, Pay Checkout Reward et Gift Card Reward), Interests (intérêts du programme Earn, intérêts de "Stacking") et autres Referrals. Certaines TXs sont directement catégorisées en CashOut comme les paiements en crypto.

Catégories spécifiques ETH

Pour les sources ETH, il y a d'autres catégories spécifiques : Burns, Claims, Selfs et Swaps.

Catégories de TXs relatives au portefeuille global

Une fois toutes les TXs rangées dans des catégories, l'outil va essayer de rapprocher des TXs de différentes "Sources" pour synthétiser et recatégoriser au niveau du portefeuille global :

Configuration

Vous pouvez utiliser le fichier de configuration config.exemple.yaml, copiez le en config.yaml puis mofidiez le a votre guise. Il sera utilisé pour vos options par défaut (c'est à dire que si vous spécifiez une autre valeur d'une option dans la ligne de commande, elle sera prioritaire sur les valeurs du fichier de configuration).

Options de base

Help

  --help
        Display all available arguments

Permet d'afficher toutes les options possibles.

Native Currency

  --native
        Native Currency for consolidation (default "EUR")

Choix de la Fiat pour consolidation. Si vous voulez déclarer aux impôts français, il faut laisser "EUR".

Location

  --location
        Date Filter Location (default "Europe/Paris")

Permet de choisir le fuseau horaire pour calculer les dates. Si vous voulez déclarer aux impôts français, il faut laisser "Europe/Paris".

Date

  --date
        Date Filter (default "2021-01-01T00:00:00")

Permet d'afficher votre protefeuille global valorisé en Fiat à une date donnée. Utile pour vérifier l'état du stock et estimer s'il manque des sources.

Options d'aide à l'établissement d'un portefeuille global cohérent

Stats

  --stats
        Display accounts stats

Permet d'afficher le nombre de transactions par catégorie (toutes cryptos confondues).

Check

  --check
        Check and Display consistency

Lance des vérifications d'intégrité sur les TXs du portefeuille globale et affiche les TXs KO. Les vérifications sont :

Display

  --txs-display
        Display Transactions By Catergory : Exchanges|Deposits|Withdrawals|CashIn|CashOut|etc
  --currency-filter
        Currencies to be filtered in Transactions Display (comma separated list)

Affiche toutes les TXs d'une Catégorie (attention ceci peut être très long...).

Vous pouvez afficher toutes les Catégories avec --txs-display Alls.

Vous pouvez aussi afficher que les TXs concernant certaines cryptos, par exemple pour n'afficher que le BTC et le BCH : --currency-filter BTC,BCH.

Options de "Sources"

Pour chaque Source, je vous indique le taux de support fourni par l'outil (l'exactitude de l'analyse pour cette Source). Si ce taux de support n'est pas bon, c'est sûrement parce que je n'ai pas assez d'exemples de transactions pour bien les analyser. Vous pouvez ouvrir un Ticket Github pour ajouter votre cas qui ne fontionne pas, j'essayerai de faire évoluer l'outil pour le rendre compatible.

Catégorisation Manuelle Support manuel

  --txs-categ
        Transactions Categories CSV file

Il faut fournir un CSV à faire manuellement contenant toutes les transactions que vous voulez catégoriser manuellement (attention les champs dans le CSV doivent être séparés par des virgules, pas des points virgules comme le fait Excel en Français, le plus simple est de le faire dans un editeur de texte simple comme Notepad). Un CSV d'exemple est disponible, essayez --txs-categ Inputs/TXS_Categ_exemple.csv --btc-address Inputs/BTC_Addresses_exemple.csv.

Ce CSV identifie une TX par son TxID (identifiant dans la blockchain BTC, ETH, ou autre) et donne un Type. Les différents Type supportés sont :

Les colones du CSV doivent être : TxID,Type,Description,Value,Currency

Binance Support léger

Par API :

  --binance-api-key
        Binance API key
  --binance-api-secret
        Binance API secret

Par CSV :

  --binance
        Binance CSV file
  --binance-extended
        Use Binance CSV file extended format

Il faut fournir le fichier CSV récupéré dans Binance (https://www.binance.com/fr/my/wallet/history puis "Générer un relevé complet"). Vous pouvez modifier ce fichier CSV pour ajouter une colone Fee entre Change et Remark, et donc reseigner la part de frais dans les Withdraw qui ont un Remark avec Withdraw fee is included, cela permet de bien fusioner ce Withdrawals avec un autre Deposits pour en faire un Transfers lors de l'analyse des TXs. Dans ce cas, n'oubliez pas de rajouter l'option --binance-extended. Ces frais seront automatiquement déduits du montant du retrait, veuillez donc ne pas toucher à la valeur Change.

Les colones du CSV d'origine doivent être : UTC_Time,Account,Operation,Coin,Change,Remark Les colones du CSV étendu doivent être : UTC_Time,Account,Operation,Coin,Change,Fee,Remark

Bitfinex Support bon

  --bitfinex
        Bitfinex CSV file

Il faut fournir le fichier CSV récupéré dans Bitfinex (https://report.bitfinex.com/ledgers puis choisissez les dates et "Export", choisissez Date Format : DD-MM-YY).

Les colones du CSV d'origine doivent être : #,DESCRIPTION,CURRENCY,AMOUNT,BALANCE,DATE,WALLET

Bitstamp Support bon

  --bitstamp
        Bitstamp CSV file
  --bitstamp-api-key
        Bitstamp API key
  --bitstamp-api-secret
        Bitstamp API secret

Il faut fournir les fichiers CSV récupérés dans Bitstamp.

Les colones du CSV d'origine doivent être : Type,Datetime,Account,Amount,Value,Rate,Fee,Sub Type

Bittrex Support bon

  --bittrex
        Bittrex CSV file
  --bittrex-api-key
        Bittrex API key
  --bittrex-api-secret
        Bittrex API secret

Il faut fournir les fichiers CSV récupérés dans Bittrex (https://global.bittrex.com/history puis "Download Order History").

Les colones du CSV d'origine doivent être : Uuid,Exchange,TimeStamp,OrderType,Limit,Quantity,QuantityRemaining,Commission,Price,PricePerUnit,IsConditional,Condition,ConditionTarget,ImmediateOrCancel,Closed,TimeInForceTypeId,TimeInForce

Il est nécessaire de fournir l'API et le CSV car chaque support a son défaut :

BTC Support avancé

  --btc-address
        Bitcoin Address
  --btc-addresses-csv
        Bitcoin Addresses CSV file
  --bcd
        Detect Bitcoin Diamond Fork
  --bch
        Detect Bitcoin Cash Fork
  --btg
        Detect Bitcoin Gold Fork
  --lbtc
        Detect Lightning Bitcoin Fork

Il faut fournir :

L'outil se chargera de récupérer la liste des transactions associées sur Blockstream (pas besoin de API Key).

Vous pouvez aussi demander la detection d'un des Fork de BTC, l'outil vous dira dans quel wallet vous avez un montant dû au Fork et intègrera ces montants à votre portefeuille global.

Les colones du CSV doivent être : Address,Description

BTG Support manuel

  --btg-txs
        Bitcoin Gold Transactions JSON file

Expériemental.

Crypto.com Support avancé

Les colones du CSV du portefeuille Crypto de l'APP doivent être : Timestamp (UTC),Transaction Description,Currency,Amount,To Currency,To Amount,Native Currency,Native Amount,Native Amount (in USD),Transaction Kind

Cette méthode vous permet de récupérer les Deposits et Withdrawals, les Interests du Staking de CRO et Soft Staking, les CommercialRebates du bonus d'inscription et des Syndicates, les Referrals du programme de parainage, les Minings des Superchargers.

Préférez la methode JS+JSON ci dessus, elle est plus complète.

Les colones du CSV de l'Exchange Spot Trade doivent être : account_type,order_id,trade_id,create_time_utc,symbol,side,liquditiy_indicator,traded_price,traded_quantity,fee,fee_currency

Les colones du CSV de l'Exchange Transfer doivent être : create_time_utc,currency,amount,fee,address,status

Il faut activer le droit de "Withdrawal" (si disponible pour vous) si vous voulez récupérer les Withdrawals et Deposits (je ne l'ai pas donc je n'ai pas pu tester). Dans le cas contraire, le CSV Transfers ou le JSON permet de les mettre dans l'outil sans l'API.

Par contre les Exchanges sur le Spot Market seront bien récupérés sans droit particulier (attention tout de même c'est assez long, on ne peut faire qu'une requête par seconde pour récupérer les Trades d'une seule journée, il faut donc de nombreuses requêtes pour remonter au jour du lancement de l'Exchange le 14 Nov 2019).

Coinbase Support bon

  --coinbase
        Coinbase CSV file

Il faut fournir le CSV récupéré sur Coinbase.

Le CSV contient une entête qui sera ignorée par l'outil.

Pour les "Transaction Type" "Send" du CSV, les frais ne sont pas renseignés, l'outil ne pourra donc pas agréger ce Withdrawals avec le Deposits d'une autre Source. Vous pouvez l'y aider en retrouvant le Depostis correspondant à la main et calculant les frais (la différence entre les deux montants) puis en le rajoutant dans la colone EUR Fees de ce CSV.

Les colones du CSV doivent être : Timestamp,Transaction Type,Asset,Quantity Transacted,EUR Spot Price at Transaction,EUR Subtotal,EUR Total (inclusive of fees),EUR Fees,Notes

Coinbase Pro Support bon

  --coinbase-pro-account
        Coinbase Pro Account CSV file
  --coinbase-pro-fills
        Coinbase Pro Fills CSV file

Il faut fournir les CSV récupérés sur Coinbase.

Les colones du CSV Account doivent être : portfolio,type,time,amount,balance,amount/balance unit,transfer id,trade id,order id

Les colones du CSV Fills doivent être : portfolio,trade id,product,side,created at,size,size unit,price,fee,total,price/fee/total unit

ETH Support avancé

  --eth-address
        Ethereum Address
  --eth-addresses-csv
        Ethereum Addresses CSV file

Il faut fournir :

L'outil se chargera de récupérer la liste des transactions associées sur Etherscan.io (à une vitesse limitée de 5 requêtes par secondes si vous ne fournissez pas une API Key).

Il détectera aussi les Token ERC20 et ERC721 (NFT) associés.

Les colones du CSV doivent être : Address,Description

HitBTC Support bon

La clé API doit avoir les droits :

Le CSV Transactions ne fournit pas les infos de Fee, il vaut donc mieux utiliser l'API.

Les colones du CSV Trades doivent être : Email,Date (UTC),Instrument,Trade ID,Order ID,Side,Quantity,Price,Volume,Fee,Rebate,Total,Taker

Les colones du CSV Transactions doivent être : Email,Date (UTC),Operation id,Type,Amount,Transaction hash,Main account balance,Currency

Kraken Support bon

Les colones du CSV d'origine doivent être : txid,refid,time,type,subtype,aclass,asset,amount,fee,balance

Local Bitcoin Support bon

  --lb-trade
        Local Bitcoin Trade CSV file
  --lb-transfer
        Local Bitcoin Transfer CSV file

Les colones du CSV de Trade doivent être : id,created_at,buyer,seller,trade_type,btc_amount,btc_traded,fee_btc,btc_amount_less_fee,btc_final,fiat_amount,fiat_fee,fiat_per_btc,currency,exchange_rate,transaction_released_at,online_provider,reference

Les colones du CSV de Transfer doivent être : TXID, Created, Received, Sent, TXtype, TXdesc, TXNotes

Ledger Live Support bon

  --ledgerlive
        LedgerLive CSV file

Les colones du CSV doivent être : Operation Date,Currency Ticker,Operation Type,Operation Amount,Operation Fees,Operation Hash,Account Name,Account xpub

Monero Wallet Support bon

  --monero
        Monero Wallet CSV file

Les colones du CSV doivent être : blockHeight,epoch,date,direction,amount,atomicAmount,fee,txid,label,subaddrAccount,paymentId

MyCelium Support déprécié

Vous devriez exporter les clés publiques de votre wallet et utiliser la "Source" BTC.

  --mycelium
        MyCelium CSV file

Les colones du CSV doivent être : Account,Transaction ID,Destination Address,Timestamp,Value,Currency,Transaction Label

Poloniex Support bon

  --poloniex-trades
        Poloniex Trades CSV file
  --poloniex-deposits
        Poloniex Deposits CSV file
  --poloniex-withdrawals
        Poloniex Withdrawals CSV file
  --poloniex-distributions
        Poloniex Distributions CSV file

Les colones du CSV de Trades doivent être : Date,Market,Category,Type,Price,Amount,Total,Fee,Order Number,Base Total Less Fee,Quote Total Less Fee,Fee Currency,Fee Total

Les colones du CSV de Deposits doivent être : Date,Currency,Amount,Address,Status

Les colones du CSV de Withdrawals doivent être : Date,Currency,Amount,Fee Deducted,Amount - Fee,Address,Status

Les colones du CSV de Distributions doivent être : date,currency,amount,wallet

Revolut Support bon

  --revolut
        Revolut CSV file

Les colones du CSV doivent être : Completed Date,Description,Paid Out (BTC),Paid In (BTC),Exchange Out, Exchange In, Balance (BTC), Category, Notes

Uphold Support bon

  --uphold
        Uphold CSV file

Les colones du CSV doivent être : Date,Destination,Destination Amount,Destination Currency,Fee Amount,Fee Currency,Id,Origin,Origin Amount,Origin Currency,Status,Type

Options de "Providers"

Cet outil utilise plusieurs APIs de plateformes pour récupérer soit des taux de changes (CoinGecko, CoinLayer et CoinAPI), soit des transactions sur une blockchain particulière (Blockstream pour BTC et Etherscan pour ETH). Certaines de ces APIs ont besoins d'une clé.

CoinAPI.io

  --coinapi-key
        CoinAPI Key (https://www.coinapi.io/pricing?apikey)

CoinLayer.com

  --coinlayer-key
        CoinLayer Key (https://coinlayer.com/product)

Etherscan.io

  --etherscan-apikey
        Etherscan API Key (https://etherscan.io/myapikey)

Utilisé pour la Source ETH, si vous ne la fournissez pas les requêtes seront limitées à 5 par secondes.

Options de sortie

  --2086-display
        Display Cerfa 2086
  --2086
        Export Cerfa 2086 in 2086.xlsx
  --cashin-bnc-2019
        Convert AirDrops/CommercialRebates/Interests/Minings/Referrals into CashIn for 2019's Txs in 2086
  --cashin-bnc-2020
        Convert AirDrops/CommercialRebates/Interests/Minings/Referrals into CashIn for 2020's Txs in 2086

Cela vous génère automatiquement le formulaire 2086 !

Il y a deux façons de considérer les AirDrops/CommercialRebates/Interests/Minings/Referrals :

Pour activer la seconde méthode d'intégration, vous pouvez utiliser les options --cashin-bnc-2019 et/ou --cashin-bnc-2020.

En attendant que la loi soit plus claire à ce sujet, nous vous laissons le choix. Vous pouvez venir demander de l'aide à ce sujet sur le groupe Fiscalité crypto FR.

  --3916
        Export Cerfa 3916 in 3916.xlsx

Cela vous génère automatiquement le formulaire 3916 !

  --stock
        Export stock balances in stock.xlsx

Cela vous génère automatiquement une fiche de stock de tous vos coins !

Donation

Si vous voulez faire un don à l'outil (pas à moi), cela permettra d'acheter un nom de domaine et payer un hébergement par exemple :

Donate with Bitcoin

Donate with Ethereum

Donate with Crytpo.org Chain

Donate with Litecoin

Support

Si vous avez un problème d'utilisation ou pour le développement d'un module et que cette doc ne vous apporte pas de réponse, venez me la poser dans les groupes officiels de support sur :

Telegram CryptoFiscaFacile

Contribution

Pour les développeurs de la v2 :

Discord CryptoFiscaFacile

Remerciements

Merci au groupe Fiscalité crypto FR qui est une mine d'or d'informations pour essayer de comprendre comment cela fonctionne.

Copyright & License

Copyright (c) 2021-present FiscaFacile.

Released under the terms of the MIT license. See LICENSE for details.