Documentación
Todo lo que necesita saber para sacar el máximo partido a ChainTaxReport.
1. Crear una cuenta
To create your ChainTaxReport account, go to /app/register.php and fill in your details: name, VAT number (optional), address, email, and a password of at least 6 characters.
After registration, you will receive a unique username (e.g. KBT7293). Save it carefully - you will need it to sign in from any IP that is not explicitly authorized on your account.
By default, no IP restrictions are applied - you can sign in from anywhere. You can add authorized IPs in Settings to restrict access later.
1.2 Iniciar sesión
The login page (/app/login.php) adapts to your situation:
- Recognized IP: A dropdown shows all accounts linked to your IP. Select yours and enter your password.
- Unrecognized IP: Enter your username (e.g. KBT7293) and your password.
- Force manual login: Even from a recognized IP, click "Use company name instead" to switch to username mode - useful if your account has no IPs configured.
1.3 Primera transacción
Before adding your first transaction, set up your wallets and exchanges in Settings. This ensures all your movements are properly categorized.
Then go to Add Transaction and select the transaction type. Fill in the date, the token(s) involved, the amounts, and the EUR value at the time of the transaction.
2. Tipos de transacciones
ChainTaxReport supports five transaction types, each with specific behavior in the FIFO calculation:
| Type | Description | Taxable event? |
|---|---|---|
| Deposit | Purchase of crypto with fiat, or receiving tokens from outside. Creates a new FIFO lot at the EUR value you enter. | No - sets the cost basis |
| Withdraw | Sale of crypto for fiat, or spending tokens. Triggers a FIFO calculation: the oldest lots are consumed first. | Yes - capital gain or loss |
| Transfer | Moving tokens between your own wallets. No gain realized - the FIFO lots follow the tokens to the destination wallet. | No |
| Swap | Exchanging one token for another (e.g. BTC → ETH). The outgoing token triggers a FIFO gain/loss; the incoming token gets a new lot at the EUR value entered. | Yes - on the outgoing token |
| Interest | Tokens received as staking reward, lending income, or any passive yield. Recorded as income at the EUR value at receipt. | Yes - as ordinary income |
2.2 Campos explicados
- Date & Time: The exact moment of the transaction. Precision matters for FIFO ordering.
- Wallet From / To: The source and/or destination wallet.
- Token From / To: The token(s) involved. Must be registered in Settings.
- Amount From / To: The quantity of tokens sent and/or received.
- Fee Token & Amount: Optional. For transfers, fees paid in the transferred token reduce the net amount received.
- Value (€): The EUR value of the transaction at the time it occurred.
- Notes: Optional free-text field for your own reference.
2.3 Valor EUR
The EUR value is the most important field. It represents the fair market value of the transaction at the moment it happened, expressed in euros.
For a Deposit: this becomes the cost basis of the new FIFO lot. For a Withdraw or Swap: this is the proceeds used to calculate the gain or loss. For Interest: this is the income amount.
3. Wallets vs Exchanges
In ChainTaxReport, exchanges are the platforms where you trade (e.g. Binance, Kraken, Coinbase), and wallets are the specific accounts or addresses within those platforms.
A wallet always belongs to an exchange (or to no exchange if it is a self-custody wallet). You can have multiple wallets per exchange - for example a Spot wallet and a Savings wallet on the same exchange.
Organizing your wallets correctly ensures the FIFO calculation reflects how tokens actually move through your portfolio.
3.2 Wallets blackbox
A blackbox wallet is a wallet whose internal movements are unknown or too complex to record individually - for example, a centralised exchange doing internal staking or lending, a DeFi protocol where yield is continuously compounding, or a wallet managed by a third party.
ChainTaxReport handles blackbox wallets in two ways:
- Known movements - deposits into and withdrawals from the blackbox are recorded as normal transactions. The gain/loss is calculated at the time of each exit using FIFO.
- Unrealised gains - before generating your annual tax report, ChainTaxReport asks you to declare the EUR value of each blackbox wallet at 01/01 and 31/12 of the fiscal year. The estimated gain is automatically calculated and included in a dedicated section of your report.
Annual valuation flow
When you click "Generate report" and blackbox wallets are detected, an intermediate page asks you to enter the start and end-of-year values. You only need to declare a start value if the wallet already had assets before the fiscal year - if you only deposited during the year, the start value is automatically set to zero.
4. Cómo funciona el FIFO
FIFO (First-In, First-Out) is the method used to determine which acquisition lot is sold when you dispose of tokens. The oldest tokens you bought are always sold first.
This matters because each acquisition lot has a different cost basis (the price you paid for it). When you sell, the gain or loss is calculated as:
ChainTaxReport maintains a running queue of acquisition lots per token per wallet. Each Deposit or Interest adds a lot; each Withdraw or Swap consumes lots from the front of the queue.
4.2 Ejemplo práctico
4.3 Compensación de pérdidas
Loss carryforward is handled in a dedicated Loss carryforward report, separate from the annual tax report. It keeps one line per fiscal year with the net result of that year: a loss year creates a carryforward balance, a gain year consumes it, oldest losses first, until they expire.
Each line shows the result of the year, the losses offset, the taxable amount and the remaining balance. A loss year also shows how much of it is still usable, how much time is left before it expires, and which years consumed it; a gain year shows which losses it was offset against. Two figures sit at the top: the loss available today, and the next loss at risk of expiring.
Lines come from two sources. When you generate an annual tax report, a banner offers to record its result in the loss carryforward report (with your confirmation, and a choice if a line already exists for that year). You can also enter years manually - for example an opening balance provided by your accountant, entered on its year of origin.
The carryforward period is configured once in your settings (for example 5 years, or 0 for unlimited); it determines when each loss expires. A printable statement summarises balances, deadlines and history for your tax return. The actual offset is made in your declaration, with your advisor.
5. Generar un informe
Go to Tax Report in the navigation. Select the fiscal year you want to report on. If you have a valid licence for that year and have not exceeded your transaction quota, the report button will be active.
Before generating, you can adjust the tax rates for this specific report without affecting your default rates stored in Settings.
5.2 Leer el informe
The report is organized as follows:
- Summary: Total realized gains, total losses, net taxable gain, interest income, and estimated tax.
- Gain detail: Each disposal transaction with the FIFO cost basis and the resulting gain or loss.
- Interest detail: Each interest or staking receipt with its EUR value.
- Full transaction log: Every transaction recorded during the year, with amounts and EUR values.
The report opens in a print-ready HTML format. Use your browser's Print function (Ctrl+P / Cmd+P) to save as PDF.
5.3 Tipos impositivos
Two tax rates are used in the report:
- Capital gain rate: Applied to net realized gains from trading and swaps.
- Interest income rate: Applied to income from staking, lending, and interest payments.
Default rates are set in Settings → Tax rates. They are pre-filled in the report form but can be overridden for any specific report without changing your defaults.
5.4 Países y orientación fiscal
ChainTaxReport ships with tax settings and inline guidance tailored to six countries: Belgium, Luxembourg, the Netherlands, Germany, Spain and Switzerland - and to your taxpayer type (individual or company). Set your country and type in Settings; the relevant rates, exemptions and short explanations then appear automatically across the report options.
All values remain editable: the localized defaults are a starting point, not a constraint. The FIFO engine itself works in any jurisdiction.
5.5 Parámetros avanzados
Beyond the two base rates, the report exposes advanced parameters that adapt to your country and situation:
- Long-term holding exemption: exempt gains on assets held beyond a chosen number of months (e.g. Germany, Luxembourg).
- Annual allowance (franchise): a tax-free amount applied as a deduction or as a threshold, depending on your country.
- Calculation method: a flat rate or progressive brackets.
- Wealth tax: for jurisdictions that tax holdings (e.g. the Netherlands, Switzerland).
- Loss carryforward report: a dedicated year-by-year tracker (balances, expiry, history), fed by annual reports or manual entries; period configurable per country, including unlimited.
Each parameter is pre-filled with a sensible default for your profile and can be overridden per report without changing your saved settings.
6. Licencias & Cuotas
A licence is required to generate tax reports and export data. Licences are per fiscal year - a 2024 licence covers reporting for fiscal year 2024 only.
Each licence type includes a number of transactions. If your transaction count exceeds the included quota, you can purchase one or more additional packages for the same fiscal year. Packages are cumulative.
Licences are assigned by the administrator. Once assigned, a licence remains valid regardless of whether the licence type is later deactivated in the system.
You can see your licences, packages, and current quota usage in Settings → Licence & Quota.
7. Nombre de usuario & contraseña
Your account is identified by a unique username (3 uppercase letters + 4 digits, e.g. KBT7293) generated at registration. It cannot be changed. Keep it safe - it is your primary identifier for manual login.
Your password must be at least 6 characters. You can change it at any time in Settings → Change password. The current password is required to set a new one.
7.2 Restricciones IP
By default, your account is accessible from any IP address. You can restrict access to specific IPs or DNS hostnames in Settings → Authorized IPs / DNS.
When at least one IP is configured:
- Access from a listed IP shows a dropdown of authorized accounts - no username needed.
- Access from any other IP requires the username and password.
7.3 Intentos de inicio de sesión
ChainTaxReport limits failed login attempts to protect your account. After 3 consecutive failures from the same IP address or for the same account within a 24-hour window, further login attempts are blocked until the 24-hour period expires.
This applies to both the IP-based dropdown login and the manual username login.
9. Historical balances
The Balances page normally shows your current portfolio - the live state of all your wallets based on stored balances.
Using the Snapshot feature, you can travel back in time and see exactly what you held at any given date and time. Select a date and optional time, then click "⏱ Snapshot".
How it works
In snapshot mode, ChainTaxReport recalculates everything directly from your transaction history, processing only transactions up to the selected moment. The result is a precise picture of your holdings at that exact point in time.
When to use it
- Verify your portfolio at the start or end of a fiscal year
- Check holdings at a specific date for accounting purposes
- Investigate discrepancies in your portfolio history
10. Buying a licence online
Licences and packages can be purchased directly from your account - no need to contact the administrator.
How to buy
- Go to Settings → Licence & Quota and click 🛒 Buy licence / package.
- Select the fiscal year and choose a licence or package.
- You are redirected to the secure Stripe payment page.
- After payment, your licence is activated instantly and a confirmation email is sent.
11. Idiomas
ChainTaxReport is available in six languages - French, Dutch, German, English, Spanish and Italian. Switch language at any time from the menu; both the interface and the generated tax report follow your choice, which is convenient when sharing the report with an accountant abroad.
8. FAQ
Can I buy a licence online?
Yes. From your account, go to Settings → Licence & Quota and click "🛒 Buy licence / package". You will be redirected to a secure Stripe payment page. Your licence is activated immediately after payment.
Can I use ChainTaxReport for multiple fiscal years?
Yes. You need a separate licence for each fiscal year you want to report on. All your transactions remain accessible regardless of licences - only report generation and export require a valid licence for the selected year.
What happens if I enter the wrong EUR value?
Delete the transaction and re-enter it with the correct value. When you delete or add a transaction, all subsequent FIFO gains and your portfolio balances are automatically recalculated in cascade - no manual step required.
How do I handle tokens received as airdrops?
Record them as a Deposit with the EUR value at the time of receipt. This sets the cost basis for future disposals.
What is the difference between a Transfer and a Swap?
A Transfer moves the same token between your own wallets - no taxable event, the FIFO lots follow the tokens. A Swap exchanges one token for another - the outgoing token triggers a gain/loss calculation, and the incoming token starts a new lot.
Can I export my data?
Yes. From the Search Transactions page, you can export your full transaction history as CSV. When you export, a small dialog lets you choose the decimal separator (point or comma) and the column separator (semicolon or comma) so the file opens perfectly in French/European Excel or any standard CSV tool. From the Tax Report page you can also export the annual report as CSV. Both require a valid licence for the year in question.
My balance is wrong after a correction. What do I do?
Balances and gains are recomputed automatically whenever you add or delete a transaction, so a correction normally fixes everything on its own. If you ever spot a discrepancy on older data, your administrator can run a full recalculation across the account.
What is the 10,000 € annual exemption?
Since 1 January 2026, Belgian individual taxpayers benefit from a 10,000 € annual exemption on capital gains. ChainTaxReport deducts this automatically from your taxable base when generating your report. The exemption field appears in the report options and defaults to 10,000 € - set it to 0 to disable. It applies to individuals only; companies are taxed on their full gain via corporate tax.
Can I correct a transaction after encoding?
Yes. To correct an entry, delete it and re-encode it with the right values. The engine then recalculates every subsequent FIFO gain in cascade - including across blackbox wallets - so your balances and report stay consistent. A transaction dated in the past is inserted at the correct chronological position and the later gains are updated accordingly.
Can I calculate my portfolio value at a specific date?
Yes. On the Historical Balances page, select a date and time to see your token balances at that moment. A valuation section appears below - enter the EUR price of each token and the total portfolio value is calculated instantly. This is particularly useful for the 31/12/2025 reference value required by Belgian tax law for assets held before 2026.
Which tax calculation methods are supported?
When generating a report you can choose a flat rate, a progressive bracket scale, an annual exemption (as a deduction or an all-or-nothing threshold), a long-term holding exemption, and a wealth-tax mode (portfolio value × rate). Each option can be adjusted per report, with sensible country-based defaults.
What is the difference between the global and separate methods?
In the global method, capital losses can offset interest income for the year. In the separate method, capital gains and interest are taxed independently, so a loss on gains cannot reduce the tax on interest. The report can show both side by side for comparison. Always confirm the correct method with your accountant.
How does loss carryforward work?
Losses are tracked in the dedicated loss carryforward report, one line per fiscal year. A loss year creates a carryforward balance; a gain year consumes it, oldest losses first, until expiry (period set in your settings, 0 = unlimited). Each annual tax report offers to record its result there; you can also add years manually, such as a balance provided by your accountant. The annual tax report itself stays focused on its own year and shows the tax before carryforward; the loss carryforward statement shows the effect of the offset.