PRELUDE / KONTEXT (optional, Guide siehe unten):
-
Die meisten Leute haben wohl nicht viele Transaktionen und spielen einfach die ganzen Börsen und Wallets halt bei Blockpit nochmal ein und gut ist es.
Ich habe mich aber so ein halbes Jahr herumgeplagt meine ganzen Börsen und Wallets und Transaktionen (‚was hab ich da im jahr 2015 gemacht als ich 113eur in btc an adresse x geschickt habe?‘ – haufen Dedektivarbeit) irgendwie in Ordnung zu kriegen. Da gabs zb Api’s die fehlerhaft waren (ich musste das herausfinden und händisch korrigierne), Api’s die für manche Zeiträume keine Daten geliefert haben (musste ich mit csv download ausfüllen), Daten von Börsen die hopps und untergegangen sind (also könnte ich an die Daten garnicht mehr von den Börsen direkt kommen). Also das jetzt Alles nochmal machen wäre die totale Hölle gewesen, darum die untere Methode (auch Hölle, aber kleinere). -
Ich habe bis zum letzten Drücker jetzt gewartet ob
-
Koinly vielleicht doch die neue österreichische Rechtslage wieder unterstützt. (sie haben vor 6 Monaten gesagt sie arbeiten daran, dann gesagt dass es schwieriger ist als gedacht)
-
Andere Leute (alle Österreicher die auf Koinly sind hätten starken logischen Grund auf Blockpit umzuziehen, weil Koinly die neue österreichische Rechtslage nicht unterstützt) dass ausarbeiten und bald die Foren voll sind von Austausch darüber wie man es macht, bzw Steuersoftware-firmen einfach ein Makro programmieren und anbieten, oder Blockpit selber einfach eine one-click Integration anbietet (hätt vielleicht auch wirtschaftliche Logik wenn ein Konkurrent ein komplettes Land nicht mehr unterstützt und ein Haufen Leute zur gleichen Zeit eine neue Steuersoftware suchen)
- Ich habe das für mich selber geschrieben, als Privatperson, also keinerlei Garantien oder so. Ich habe eine spezialisierte Firma zu Crypto-Steuersoftwares zuerst angefragt, sie haben mir Preisvorschlag von 2000euro gemacht. Ich wollte nur für deren Schritt für Schritt Anleitung zahlen, dann haben Sie mir gesagt dass sie es auch einfach händisch machen. Probleme gabs viele, habe sie aber selber gelöst weil die Firma so 170eur pro Stunde verrechnet hätte für Fragen.
Ich habe auf fivver einen Argentinier für 13euro engagiert der mir einen Makro programmiert hat den ich im Punkt 8 verwende. Ich habe etwa 25 Stunden gebraucht um meine 10 Jahre reinzuspielen, die Haupt-Zeit war natürlich Fehlerbehandlung und rausfinden wie das ganze ordentlich funktioniert, das waren vielleicht 15 Stunden.
Von KOINLY auf BLOCKPIT UMZIEH-GUIDE
(mit jährlichen Transaktionshistorien von Koinly):
- Jährlichen Transaktionshistorien von Koinly runterladen
Gehe auf Koinly webseite koinly.io
Gehe auf ‘Tax reports’
Gehe die Seite runter und bei select auf ‘transaction history’
dann auf ‘Download Report’
dass für alle Jahre machen
(du musst wohl die Jahre gekauft haben um die Transaktionshistorien zu kriegen)
(auch gut ist die Transaktionshistorien mal garnicht zu öffnen sondern in einem Ordner zu sichern und zb mit ‘original’ zu beschriften, dann alles zu kopieren und nur mit den Kopien zu arbeiten)
- Gehe auf
Speichere das Dokument (blockpit manual import template) ab als excel file
- Öffne ein Jahresdokument von Koinly (zb 2013)
Achtung!
Man muss es mit Gebietsschema ‘English (Großbritannien)’ öffnen.
Sonst stimmen die Zahlen evtl nicht (bei mir hat er zb aus 0,004 btc einfach 4btc gemacht, weil ich es mit Gebietsschema Österreich aufgemacht habe)
Öffne blockpit manual import template und speichere es als neue Arbeitsdatei zb ‘Jahr xxxx umgewandelt in blockpit format’
Lösche die Daten in diesem Beispiel-Dokument, behalte die Überschriften
LibreOffice calc ist gratis, mit dem habe ich angefangen. Dann später auf excel umgestiegen weil ich einen Makro für Excel hab machen lassen (der kannte sich bei libreoffice macros nicht aus). Excel hatte ich noch wo eine alte excel 2010 Installation, ohne Registrierung konnte ich das auch 30 Tage nutzen.
- ‚Date‘ von Koinly hat ganz anderes Format als Blockpit. Also müssen wir die Datumseingaben mal umformatieren.
a. Neue excel tabelle aufmachen als hilfstabelle
b. Daten datums von koinly datei kopieren (nur die Datums kopieren, rein ins neue Dokument, so dass das erste Datum ganz links oben in Feld ‘A1’ steht)
c. Dann daten folgendermaßen in form wie blockpit es will umwandeln:
Anleitung für libre office calc:
Die datumsspalte von koinly markieren und rechtsklick ‚zellen formatieren‘ und dann typ ‚text‘ einstellen
Dann in erstem feld neben dem ersten Datum (also B1) dies reinkopieren:
=TEIL(A1;9;2)&„.“&TEIL(A1;6;2)&„.“&TEIL(A1;1;4)&" "&TEIL(A1;12;8)
Also das erste datum muss dazu in Zelle A1 1A stehen
Dann das so runterziehen für die gesamte Spalte
Dann sollten neben den koinly datums nun im blockpit format stehen
2013-12-26 19:52:00 UTC → 26.12.2013 19:52:00
Diese Hilfsdatei kann man behalten und etwas wiederverwenden wenn man noch weitere Jahr zum umwandeln hat
Nun die gesamte Spalte mit den neuen Datums kopieren strg+c,
und dann diese Spaltein das Zieldokument (zb ‚Jahr 2020 von koinly in blockpit umgewandelt.xlsx‘) einfügen, unter der Datums-spalte (rechtsklick → ‚inhalte einfügen‘ → ‚als Text‘ – weil wenn man es einfach normal einfügt gibt es fehler mit ‚#REF!‘)
Dann hat man mal die erste Spalte (Date UTC) erledigt
Diese Sachen kann man mal kopieren, von koinly datei in blockpit datei
Feld in Koinly → Feld in Blockpit:
Sent currency → outgoing asset
Sent amount → outgoing amount
Received currency → incoming asset
Received amount → incoming amount
Fee currency → fee asset
Fee amount → fee amount
TxHash → Trx. ID
Description → Comment
(TxSrc = senderadresse und TxDestTxHash = empfängeradresse einfach mal in koinly dokument lassen, es gibt kein feld in blockpit dafür)
Sending Wallet → Integration Name: das stimmt nicht 100%, das müssen wir nachher nochmal händisch korrigieren, aber derweil einfach mal die Einträge von ‚sending wallet‘ in koinly ins Feld von Blockpit ‚Integration name‘ reinspielen
Und Hilfs-Spalte ‚hilfstabelle receiving wallet‘ anlegen (wie du es nennst ist nicht wichtig):
Hier die werte von koinly ‚receiving wallet‘ einfügen, die brauchen wir später und da ist es superpraktisch wenn man es gleich direkt im Dokument hat
(oder umgekehrt:
Feld in blockpit → feld in koinly:
Outgoing asset → sent currency
Outgoing amount → sent amount
Incoming asset → received currency
Incoming amount → received amount
Fee asset → fee currency
Fee amount → fee amount
Comment → TxSrc (sender wallet adresse) TxDest TxHash (Empfänger wallet adresse) Description
Trx. ID → TxHash
Integration name → sending wallet meistens)
Ergebnis zb etwa:
Speichere das Koinly dokument als neues Dokument ab (damit das original mal sicher gesichert ist)
und dann erstelle ein neues Excel dokument für folgende Hilfstabelle:
Kopiere die ersten 3 Spalten (Date, Type und Tag) in die neue Hilfstabelle
(das sind die ersten 3 Spalten…)
Dann ersetze diese Types von Koinly auf die Labels von Blockpit mit der ‚suchen und ersetzen‘ funktion
Zb das erste: bei libreOffice calc unter ‚bearbeiten‘ → ‚suchen und ersetzen‘ (oder: strg+alt+f), da ‚buy‘ in suchen und ‚Trade‘ in ersetzen feld geben
‚Types‘ auf Koinly → ‚Label‘ auf blockpit
Buy → Trade
Sell → Trade
Exchange → Trade
crypto_withdrawal + tag ‚cost‘ → Payment – ok, da bin ich mir nicht sicher… payment ist wenn man für ein produkt oder so crypto ausgegeben hat
(hier muss man händisch schauen, die kombination crypto_withdrawal in spalte ‚type‘ und ‚cost‘ in spalte ‚tag‘ ergibt ‚Payment‘ für Blockpit)
[[crypto_withdrawal + cost → hmm… dass waren bei mir in wahrheit voll oft Fees, also → Fee
crypto_deposit + tag ‚Airdrop‘ → Airdrop
crypto_deposit + tag ‚Lending interest‘ → wohl ‚Interest‘
fiat_deposit → Non-Taxable In
fiat_withdrawal → Non-Taxable Out
Transfer → Das ist das komplizierteste, wir kommen später darauf zurück. In diesem Schritt jetzt mal als ‚Transfer‘ stehen lassen.
transfer + tag ‚to pool‘ → Koinly hat die Funktion ‚to pool‘, das ist praktisch wenn man was native staked – man ‚sendet‘ es praktisch wohin, aber man besitzt es noch. Koinly sendet es praktisch ‚an eigene adresse‘. Bei Blockpit geht das nicht - Bei Blockpit mache ich es so dass ich als ziel, zb wenn ich eth stake, dann einfach ‚eth pool‘ oder ‚eth gestaked‘ angebe. Also für Blockpit ist es dann einfach eine weitere wallet.
Aber: hier schreibe ich mal statt ‚transfer‘ dann ‚pool‘ in die zelle → das ist kompliziert, wird aber später klar, grundsätzlich will ich diese Zellen markieren, damit ich weiß dass es keine normalen Transfers sind
Bei Buy, sell, exchange, fiat_deposit, fiat_withdrawal ist es leicht mit der suchen+ersetzen funktion.
Bei dem anderen zeug wo die zweite spalte ‚tag‘ auch wichtig ist, ist es schwieriger. Da suche+ersetze ich die tags (zb lending interest zu interest, cost zu fee) und kopiere dann händisch diese Tags in erste spalte (auch ‚to pool‘).
(Ergebnis: in diesem Fall wurden buy und sell beide zu ‚Trade‘)
Dann diese nun für Blockpit konformen Bezeichnungen unter ‚Type‘ kopieren und unter ‚Label‘ spalte in deiner ‚Jahr xxxx von koinly in blockpit format umgewandelt.xlsx‘ Datei kopieren
Resultat:
Bei manchen Labels muss man Einträge von Spalte ‚hilfstabelle received‘ in ‚Integration name‘ (dass in dem Fall leer ist) kopieren
Zb bei Labels:
Airdrop
Non-Taxable In
Interest
→ überall wo das ‚Integration Name‘ Feld leer ist
Nachher:
Transfer
In koinly ist ein Transfer nur eine zeile
In blockpit sind es 2 zeilen – ein deposit und ein withdrawal
Also händisch rangehen:
a. Schau händisch (oder nutze die Suche) für ersten Eintrag mit Label ‘transfer’
b. Ganze zeile kopieren und darunter nochmal einfügen, dass der Eintrag doppelt ist
(rechtsklick in die ausgefüllte zeile unter dem Transfer, ‘zellen oberhalb einfügen’ damit mal eine leere Zeile unter der transfer zeile steht, dann strg+c die transfer zeile in die leere Zeile nochmal hinkopieren)
c. In obere Zeil mal ‘Withdrawal’ als ‘label’ eingeben,
(und
sending wallet als integration name steht eh schon dort von Schritt 5 vorher),
und
Werte in ‘incoming asset’ und in ‘incoming amount’ löschen
d. In untere Zeile von den zweien:
Als label ‘Deposit’ angeben und receiving wallet von Koinly als integration (das muss man in koinly original datei nachschlagen was das war → ok, müssen wir nicht mehr, das haben wir ja schon direkt danebenstehen in ‘hilfstabelle receiving’ die wir in Schritt 5 angelegt haben),
und
Werte in ‘outgoing asset’ und in ‘outgoing amount’ löschen
e. Falls fees angefallen sind dann diese fees (fee asset und fee amount) in der deposit zeile löschen (in der withdrawal zeile stehen lassen)
Resultat zb:
Vorher:
Nachher:
Das für alle Transfer Einträge machen
Dann wenn alles fertig ist die Spalte ‚hilfstabelle receiving‘ löschen
Ok, ich habe von einem Inder auf Fivver einen Macro machen lassen für 13euro.
Er konnte nur Excel, darum:
a. Tabelle einfach in excel reinkopieren (2010er excel reicht auch)
b. In Excel Alt+F11 drücken um den Macro Editor zu öffnen
c. Rechtslick auf das project (heißt zb ‘VBAProject (irgendwas)’) und ‘einfügen’ → ‘modul’
d. Auf Modul draufklicken und rechts im Fenster diesen Text reinkopieren:
Sub add_row()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
’ Set activesheet
Set ws = ActiveSheet
’ find the last row from column A
lastRow = ws.Cells(ws.Rows.Count, „A“).End(xlUp).Row
msjIni = MsgBox(„The adjustment process is initiated. Please wait to receive confirmation that the process has been completed.“, vbInformation, „Start Process“)
'Start i
i = 2
’ Loop on rows
Do While i <= lastRow
If ws.Cells(i, 4).Value = „transfer“ Then
'First Step
’ Copy the entire row
ws.Rows(i).Copy
’ Paste row next to the original
ws.Rows(i + 1).Insert Shift:=xlDown
'Second step
'#A# col 3 row 1 to col 2 row 2
ws.Cells(i + 1, 2).Value = ws.Cells(i, 3).Value
'#B# clear col 3 of bow rows
ws.Cells(i, 3).Value = „“
ws.Cells(i + 1, 3).Value = „“
'#C# Set col 4 as „deposit“ and „withdrawal“
ws.Cells(i, 4).Value = „Withdrawal“
ws.Cells(i + 1, 4).Value = „Deposit“
'#D# Clear col 5 and 6 of second row and copy on col 6 the values of the first
ws.Range(Cells(i + 1, 5), Cells(i + 1, 6)).Clear
ws.Range(Cells(i, 5), Cells(i, 6)).Copy
ws.Range(Cells(i + 1, 7), Cells(i + 1, 8)).PasteSpecial (xlPasteAll)
'#E# Clear col 7 and 8 of first row
ws.Range(Cells(i, 7), Cells(i, 8)).Clear
'#F# Clear col 9 and 10 of second row
ws.Range(Cells(i + 1, 9), Cells(i + 1, 10)).Clear
’ Update the last row because we add a row
lastRow = ws.Cells(ws.Rows.Count, „A“).End(xlUp).Row
'Add 2 two two the loop because of the new row added
i = i + 2
Else
'Increment i
i = i + 1
End If
Loop
msjFin = MsgBox(„Process completed successfully.“, vbInformation, „End Process“)
End Sub
e. Zurück auf excel, die datei speichern als .xlsm (excel datei mit makros)
f. Dann im excel ALT+F8 drücken → man kommt auf Makros, dort soll im Makronamen ‘add_row’ stehen, dann auf ‘ausführen’ klicken
Dann kann man dem Makro zuschauen wie er arbeitet
g. Falls man transfers hatte die ‘to pool’ waren in koinly (wie im Schritt 6 beschrieben), dann muss man hier noch etwas ändern → also die ganzen Pool einträge händisch den Transfer in withdrawal + deposit umwandeln, und als deposit-wallet dann zb einen passenden neuen wallet-namen angeben, zb ‘hex pool’ wenn ich hex in einen pool geschickt habe
h. Dann die hilfsspalte ‘hilfstabelle received’ löschen
i. Dann die Datei in excel als ‘xlsx’ Datei speichern, ohne makros → weil xlsm datei kann blockpit nicht importieren
- Auf blockpit.io gehen
→ ‚integration‘ → ‚excel importieren‘ → die erstellte datei einfügen
- Mögliche Fehler
Meistens gottseidank gibt Blockpit an ‚fehler in zeile 123‘ zb, also dann weiß man die Zeile und dann ist es einfach zu korrigieren
Arg lange habe ich für diesen Fehler gebraucht: ‚Fehler beim importieren‘
Wenn er nur sagt ‚Fehler beim importieren‘ und keine weiteren Infos:
Das war mir 2x wegen diesem Fehler: im Integration Name hat sich in der Mega-Liste ein fehlender Eintrag eingeschlichen.
- Mögliche Verbesserungen vom Prozess:
-
Macro libreoffice calc programmieren dass es die ganzen Typen+Tags in richtige Label Bezeichnungen umwandelt
-
Macro machen der Schritt 7 macht → wenn ‚Integration Name‘ leer ist, dann das von nächster Spalte (hilfstabelle receiv) reinkopieren
[- Macro auch in libreoffice calc programmieren dass es das mit den transfers automatisch macht]