jamsix / ib-edavki

Skripta, ki prevede XML poročilo trgovalnih poslov v platformi InteractiveBrokers v XML format primeren za uvoz v obrazce Doh-KDVP, D-IFI, Doh-Div in Doh-Obr v eDavkih Finančne uprave.
MIT License
173 stars 57 forks source link

Združevanje dividend z enako časovno značko #42

Closed urbanskalar closed 2 years ago

urbanskalar commented 2 years ago

Zdravo

Danes sem od fursa prejel naslednji mail:

Dne 12.01.2022 ste preko eDavkov oddali napoved za odmero dohodnine od dividend, doseženih v letu 2021. Pri pregledu napovedi je bilo glede na priložena dokazila ugotovljeno, da ste nepravilno napovedali znesek dividend in znesek odtegnjenega davka za izplačila BARRICK GOLD CORP.

Na isti dan sta bili dve izplačili, pri enem je bil odtegnjen davek, pri drugem pa ne. Vi ste obe izplačili sešteli in od seštevka uveljavljali celoten plačani davek. V napoved je potrebno vpisati toliko izplačil, kot jih je na dokazilu. Seštevanje ni dovoljeno, ker je posledično izračunana obveznost za plačilo ni pravilna.

Predvidevam da bi se temu izognili če bi odstanili nasledji del kode.

""" Merge multiple dividends or payments in lieu of dividents on the same day from the same company into a single entry """
    mergedDividends = []
    for dividend in dividends:
        merged = False
        for mergedDividend in mergedDividends:
            if dividend["dateTime"][0:8] == mergedDividend["dateTime"][0:8] and (
                dividend["securityID"] == mergedDividend["securityID"]
                or dividend["symbol"] == mergedDividend["symbol"]
            ):
                mergedDividend["amountEUR"] = (
                    mergedDividend["amountEUR"] + dividend["amountEUR"]
                )
                mergedDividend["taxEUR"] = mergedDividend["taxEUR"] + dividend["taxEUR"]
                merged = True
                break
        if merged == False:
            mergedDividends.append(dividend)
    dividends = mergedDividends

Morda pa obstaja razlog da imamo to v kodi?

jamsix commented 2 years ago

Združevanje dividend na isti dan je eleganten način "hendlanja" dividend reversalov, tako da ta delček kode ni za odmet, bo pa potrebno naredit to malo pametneje, z direktnim matchanje reversala z ustrezno dividendo.

urbanskalar commented 2 years ago

Uff, sedaj sem se malo poglobil in se strinjam, ta del kode res ni za odmet. Ampak bo pa kar zalogaj najti nek način matchanja reversal-ov. Poleg tega, glede na to da v mojem primeru niso povsod trgali davka, bi bilo na nek način potrebno matchati tudi witholding tax z pravo dividendo. Na žalost pa v poročilu res ne vidim nikakršnih skupnih imenovalcev, ki bi jih lahko uporabili pri matchanju.

jamsix commented 2 years ago

Urban, nimam pri roki IB reporta, ki bi imel dividende + reversale + že odvedene davke v istem XMLju. Imaš mogoče ti?

urbanskalar commented 2 years ago

Imam, a ti lahko nekam na privat pošljem? Nebi ravno tu objavljal.

urbanskalar commented 2 years ago

Sem ustvaril privat repozitorij z reportom in te dodal za collaboratorja.

jamsix commented 2 years ago

Hvala, vidim. Zadeva je kar zoprna. Trenutna ideja: za dividende in za davke posebej poiščeš vnose z negativnimi vrednostmi in pobiješ z enakimi pozitivnimi vrednostmi na isti dan. Ostalo enako kot sedaj. Bom skodiral in preizkusimo.

urbanskalar commented 2 years ago

Ampak a so reversal vedno obratne pozitivnim? Ubistvu ne razumem čemu reversal sploh služi in zakaj jih sploh imamo na IB, če je na koncu vsota z pozitivno vrednostjo enaka 0?

jamsix commented 2 years ago

@urbanskalar poizkusi https://github.com/jamsix/ib-edavki/pull/43 in sporoči če dela OK na tvojih podatkih.

urbanskalar commented 2 years ago

Ne deluje še popolno. Vse mi je izračunalo pravilno razen te:

<Dividend>
    <Date>2021-06-15</Date>
    <PayerIdentificationNumber>980161470</PayerIdentificationNumber>
    <PayerName>BARRICK GOLD CORP.</PayerName>
    <PayerAddress>161 Bay Street, Toronto, Ontario M5J 2S1</PayerAddress>
    <PayerCountry>CA</PayerCountry>
    <Type>1</Type>
    <Value>17.53</Value>
    <ForeignTax>-4.38</ForeignTax>
    <SourceCountry>CA</SourceCountry>
    <ReliefStatement>6/01, 2b odstavek 10. člena</ReliefStatement>
</Dividend>

Pri tej dividendi bi vrednost ForeignTax morala biti 0. Spodnja tabela mi je bila poslana s strani fursa in prikazuje vrednosti ki sem jih oddal v napovedi ter pravilne vrednosti.

Screenshot from 2022-02-04 19-41-25

jamsix commented 2 years ago

OK, vidim. Težava je, da sta na isti dan dve dividendi (Ordinary Dividend in Return of Capital), pri čemer je obdavčena samo Ordinary Dividend. Prav tako je na ta dan samo en vnos za davek, ki pa nima nobene reference na to na katero od dveh dividend se nanaša.

Takole na pogled je edina varianta, da se matcha prvi del stringa description parametra:

description="GOLD(CA0679011084) CASH DIVIDEND USD 0.09 PER SHARE - CA TAX"
description="GOLD(CA0679011084) CASH DIVIDEND USD 0.140505 PER SHARE (Return of Capital)"
description="GOLD(CA0679011084) CASH DIVIDEND USD 0.09 PER SHARE (Ordinary Dividend)"

... ni najbolj elegantno, pa spet ugibamo, da je prvi del stringa pri dividendi in pri davki vedno enak.

jamsix commented 2 years ago

@urbanskalar lahko poskusiš z https://github.com/jamsix/ib-edavki/blob/div-tax-fix/ib_edavki.py

urbanskalar commented 2 years ago

Sedaj dobim pravilne rezultate.

jamsix commented 2 years ago

Fixed in https://github.com/jamsix/ib-edavki/pull/45