Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Brzi start

English | Русский | Українська | Srpski | Српски

Automatizovano generisanje poreskih prijava PPDG-3R (kapitalna dobit) i PP OPO (prihodi od kapitala) za korisnike Interactive Brokers u Srbiji.

Aplikacija preuzima vaše transakcije sa Interactive Brokers i kreira gotov XML fajl za ePorezi. Prati ceo lanac kupovina i prodaja za svaku hartiju od vrednosti, izračunava dobitke i gubitke, i konvertuje sve iznose u dinare po zvaničnom kursu NBS na datum svake transakcije — tačno onako kako zahteva prijava.

Instalacija

⚠️ Windows i macOS će blokirati preuzimanje ili pokretanje — aplikacija se distribuira besplatno, a plaćanje ~100 evra godišnje za sertifikat programera nije opcija. Uputstvo za instalaciju objašnjava kako ovo zaobići — pročitajte ga pre preuzimanja.

Uputstvo za instalaciju ↗

Kako koristiti

  1. Otvorite aplikaciju — pokrenuće se sa grafičkim interfejsom.
  2. Kliknite Config i unesite podatke sa Interactive Brokers.
  3. Kliknite Sync now — aplikacija će preuzeti najnovije transakcije i kreirati prijave.
  4. Otpremite kreirani XML fajl na portal ePorezi (sekcija PPDG-3R).

PPDG-3R

💡 Nakon toga, dok je aplikacija otvorena, sama proverava da li ima novih podataka — jednom dnevno, u pozadini, ponavljajući pokušaje do uspeha. Status poslednjeg pokušaja uvek se vidi na vrhu prozora.

ℹ️ Ako imate više od godinu dana istorije transakcija u Interactive Brokers — pre prvog Sync-a potrebno je ručno učitati starije podatke. Kako to uraditi ↗


Detaljna dokumentacija za komandnu liniju i ostale mogućnosti — u sekciji Upotreba ↗.

English | Русский | Українська | Srpski | Српски

Instalacija

Instalater

Preuzmite gotov instalater sa stranice izdanja:

https://github.com/andgineer/ibkr-porez/releases

macOS

Preuzmite najnoviji .pkg fajl. Pošto instalater nije potpisan Apple sertifikatom, macOS će ga blokirati pri otvaranju.

“IBKR Porez” je oštećen i ne može da se otvori. Treba ga premestiti u smeće.

Ne premeštajte u smeće. Umesto toga:

  1. Otvorite System Settings → Privacy & Security
  2. Pri dnu odeljka Security pojaviće se poruka o blokiranoj aplikaciji — kliknite Open Anyway
  3. U sledećem dijalogu potvrdite otvaranje

Možda će biti potrebno da ove korake ponovite dva puta:

  • prvo pri otvaranju preuzetog instalatera (.dmg)
  • a zatim pri prvom pokretanju instalirane aplikacije iz /Applications

Nakon toga aplikacija bi trebalo da se pokreće bez upozorenja.

Windows

Preuzmite najnoviji .msi fajl. Pošto instalater nije digitalno potpisan, Windows može prikazati bezbednosna upozorenja.

Ako pregledač blokira preuzimanje (na primer u Microsoft Edge):

  1. Otvorite panel preuzimanja u pregledaču (Ctrl+J)
  2. Pronađite blokirano .msi preuzimanje
  3. Kliknite KeepShow moreKeep anyway

Pri pokretanju instalatera, Windows može prikazati poruku Windows protected your PC:

  1. Kliknite More info
  2. Kliknite Run anyway

Može se pojaviti i User Account Control dijalog sa porukom Unknown publisher. Ako je fajl preuzet sa zvanične stranice izdanja, kliknite Yes za nastavak.

Nakon instalacije, IBKR Porez će se pojaviti u Start meniju.


Za napredne korisnike

Instalater takođe instalira komandu ibkr-porez za terminal (možda će biti potrebno ponovo pokrenuti terminal nakon instalacije).

Preuzimanje gotovog binarnog fajla

Takođe možete preuzeti binarne fajlove za vašu platformu sa stranice izdanja:

https://github.com/andgineer/ibkr-porez/releases

Arhiva sadrži oba binarna fajla: ibkr-porez (CLI) i ibkr-porez-gui (GUI). Raspakujte arhivu i stavite fajlove negde u vaš PATH.

Instalacija iz izvornog koda

Ako imate instaliran Rust:

cargo install ibkr-porez

English | Русский | Українська | Srpski | Српски

Upotreba

Brzi start

Ako želite brzo da kreirate konkretnu prijavu:

  1. Podesite podatke (config) ↗ — jednom pri prvom pokretanju
  2. Preuzmite najnovije podatke (fetch) ↗
  3. Kreirajte izveštaj (report) ↗
  4. Otpremite kreirani XML na portal ePorezi (sekcija PPDG-3R)

Za automatsko dobijanje svih prijava i praćenje njihovih statusa — koristite sync umesto koraka 2–3.


Konfiguracija (config)

ibkr-porez config

Kreiranje ili izmena ličnih podataka i podešavanja pristupa IBKR-u.

Biće vam zatraženo:

  • IBKR Flex Token: Preuzimanje tokena ↗
  • IBKR Query ID: Kreiranje Flex Query-a ↗
  • Personal ID: JMBG / EBS
  • Full Name: Ime i Prezime
  • Address: Adresa prebivališta
  • City Code: Trocefrni kod opštine. Primer: 223 (Novi Sad). Kod možete naći u šifarniku (videti kolonu “Šifra”). Takođe dostupan u padajućem meniju na portalu ePorezi.
  • Phone: Telefon
  • Email: Email
  • Data Directory: Apsolutna putanja do foldera sa fajlovima podataka (transactions.json, declarations.json, rates.json, itd.). Podrazumevano: ibkr-porez-data u folderu aplikacije.
  • Output Folder: Apsolutna putanja do foldera za čuvanje fajlova iz komandi sync, export, export-flex, report. Podrazumevano: folder Downloads vašeg sistema.

Preuzimanje podataka (fetch)

ibkr-porez fetch

Preuzima najnovije podatke sa IBKR i sinhronizuje kurseve sa NBS (Narodna banka Srbije).

Čuva ih u lokalno skladište.

Uvoz istorijskih podataka (import)

ibkr-porez import /path/to/activity_statement.csv

Učitavanje istorije transakcija starije od 365 dana, koja se ne može preuzeti putem Flex Query-a (fetch).

Da biste kreirali fajl sa transakcijama na portalu Interactive Brokers pogledajte Izvoz pune istorije ↗

⚠️ Ne zaboravite da pokrenete fetch nakon import kako bi aplikacija dodala maksimum detalja bar za poslednju godinu u manje detaljne podatke učitane iz CSV-a.

Logika sinhronizacije (import + fetch)

Pri učitavanju podataka iz CSV-a (import) i Flex Query-a (fetch), sistem daje prioritet potpunijim Flex Query podacima:

  • Podaci Flex Query-a (fetch) su izvor istine. Oni prepisuju CSV podatke za bilo koje podudarne datume.
  • Ako se zapis Flex Query-a semantički poklapa sa CSV zapisom (Datum, Tiker, Cena, Količina), to se računa kao ažuriranje (zamena zvaničnim ID-em).
  • Ako se struktura podataka razlikuje (npr. split nalozi u Flex Query-u protiv “spojenog” zapisa u CSV-u), stari CSV zapis se uklanja, a novi Flex Query zapisi se dodaju.
  • Potpuno identični zapisi se preskaču.

Sinhronizacija podataka i kreiranje prijava (sync)

ibkr-porez sync

Radi sve isto što i fetch:

  • Preuzima najnovije transakcije sa IBKR putem Flex Query-a
  • Sinhronizuje kurseve valuta sa NBS

Nakon toga kreira sve potrebne prijave za poslednjih 45 dana (ako već nisu kreirane).

💡 Ako veza sa IBKR-om ne uspe, sync i dalje kreira prijave iz već lokalno sačuvanih transakcija i ispisuje upozorenje; komanda se završava uspešno, a u GUI-ju se ponovni pokušaji za svežim podacima nastavljaju automatski u sledećem ciklusu.

Zatim možete Upravljati kreiranim prijavama.

💡 Ako ste pokrenuli sync prvi put i ona je kreirala prijave koje ste već podali pre početka korišćenja aplikacije, možete brzo da ih sve označite kao plaćene i uklonite iz izlaza list:

ibkr-porez list --status submitted -1 | ibkr-porez pay

Sinhronizacija iz preuzetog XML fajla (sync --file)

Ako IBKR API privremeno nije dostupan, možete ručno preuzeti Flex Query XML sa IBKR sajta i koristiti ga:

ibkr-porez sync --file /path/to/report.xml

Radi sve isto što i sync — čuva transakcije, kreira sve potrebne prijave — ali čita podatke iz lokalnog fajla umesto pozivanja IBKR API-ja.

Pogledajte kako preuzeti Flex Query XML ↗.

U GUI-u, ista opcija dostupna je u meniju kao Sync from Flex Query XML….

Prikaz statistike (stat)

ibkr-porez stat --year 2025
ibkr-porez stat --ticker AAPL
ibkr-porez stat --month 2025-01

Prikazuje:

  • Primljene dividende (u RSD)
  • Broj prodaja (poreski događaji)
  • Procenu realizovanog P/L (Kapitalna dobit) (u RSD)
  • Detaljnu podelu po tikerima ili mesecima (pri korišćenju filtera)

Generisanje poreskog izveštaja (report)

ibkr-porez report

Ako ne navedete tip izveštaja i period, podrazumevano se generiše PPDG-3R za poslednje puno polugodište

  • Kreira ppdg3r_XXXX_HY.xml u Output Folder
  • Uvezite ovaj fajl na portal Poreske uprave Srbije (ePorezi)
  • Ručno otpremite fajl iz Dokument potvrde u Tačku 8

Da biste izabrali drugi tip prijave ili vremenski period pogledajte dokumentaciju

ibkr-porez report --help

Upravljanje prijavama

Nakon kreiranja prijava putem komande sync možete ih pregledati, menjati status i izvoziti za otpremanje na poreski portal.

Spisak prijava (list)

Prikazuje spisak svih prijava sa mogućnošću filtriranja po statusu.

# Prikaži aktivne prijave (podrazumevano):
# draft + submitted + pending
ibkr-porez list

# Prikaži sve prijave
ibkr-porez list --all

# Filter po statusu
ibkr-porez list --status draft
ibkr-porez list --status submitted
ibkr-porez list --status pending
ibkr-porez list --status finalized

# Samo ID prijava (za korišćenje u cevima)
ibkr-porez list --ids-only
ibkr-porez list --status draft -1

Primer korišćenja u linux-stilu:

# Podneti sve nacrte
ibkr-porez list --status draft -1 | ibkr-porez submit

Pregled detalja prijave (show)

Prikazuje detaljne informacije o određenoj prijavi.

ibkr-porez show <declaration_id>

Prikazuje:

  • Tip prijave (PPDG-3R ili PP OPO)
  • Period prijave
  • Status (nacrt, podneta, na čekanju, završena)
  • Detalje transakcija i proračuna
  • Za PPDG-3R: dobitak/gubitak priznat od strane poreske uprave pored izračunatih vrednosti, iskorišćeni prenos kapitalnih gubitaka (početno/ iskorišćeno/korigovano/krajnje stanje) i iz kojih “tranši” je iskorišćen
  • Priložene fajlove

Podnošenje prijave (submit)

ibkr-porez submit <id> [<id> ...]

Označava prijavu kao podnetu (uvezenu na poreski portal).

Ponašanje zavisi od tipa prijave:

  • PPDG-3R nakon submit prelazi u status pending (čeka rešenje poreske uprave o iznosu poreza).
  • PP OPO nakon submit:
    • prelazi u submitted ako postoji porez za plaćanje;
    • prelazi direktno u finalized ako je porez 0.

Plaćanje prijave (pay)

ibkr-porez pay <id> [<id> ...]
ibkr-porez pay <id> --tax 1234.56

Označava prijavu kao završenu (finalized) i čuva datum plaćanja.

Opcija --tax omogućava da odmah zabeležite iznos poreza tokom plaćanja, bez posebnog koraka assess.

Nakon toga će nestati sa spiska prikazanog list (bez --all)

Evidencija iznosa po rešenju poreske (assess)

# Zabeleži zvaničan iznos poreza iz rešenja
ibkr-porez assess <declaration_id> --tax 1234.56

# Zabeleži iznos i odmah označi kao već plaćeno
ibkr-porez assess <declaration_id> --tax 1234.56 --paid

# Zabeleži gubitak priznat od strane poreske uprave (samo za PPDG-3R)
ibkr-porez assess <declaration_id> --loss 50000.00 \
    --reference "RES-123/2025" --date 2025-09-01

# Zabeleži dobitak priznat od strane poreske uprave (samo za PPDG-3R)
ibkr-porez assess <declaration_id> --gain 12000.00

Komanda je najvažnija za PPDG-3R, gde iznos poreza, kao i priznati kapitalni dobitak/gubitak, određuje poreska uprava nakon podnošenja prijave.

Šta komanda radi:

  • upisuje zvaničan iznos poreza u metapodatke prijave (--tax);
  • sa --paid odmah prebacuje prijavu u finalized;
  • bez --paid:
    • ako je iznos veći od nule, prijava ostaje aktivna (submitted) za naknadno plaćanje;
    • ako je iznos nula, prijava prelazi u finalized.

Mora biti navedena bar jedna od opcija: --tax, --gain, --loss.

--gain i --loss su dostupni samo za PPDG-3R i upisuju kapitalni dobitak/gubitak priznat od strane poreske uprave — čuvaju se pored izračunatih vrednosti aplikacije i mogu se razlikovati od njih (zbog CPI korekcija ili metodologije poreske uprave). Jedno rešenje ne može istovremeno priznati i dobitak i gubitak.

--reference, --date i --notes su podaci o rešenju (broj, datum, napomene). Prikazuju se u show, a za priznati gubitak broj i datum rešenja se dodatno upisuju u deo 7 budućih PPDG-3R prijava (vidi prenos kapitalnih gubitaka), pa ih vredi evidentirati.

Ako rešenje priznaje gubitak (--loss veći od nule), kreira se (ili ažurira) zapis u registru prenosa kapitalnih gubitaka. Prenos se uvek zasniva na gubitku priznatom od strane poreske uprave, a ne na izračunatom.

⚠️ Nakon što je preneti gubitak makar delimično iskorišćen u jednoj od narednih prijava, priznati gubitak se više ne može menjati putem assess — komanda će vratiti grešku.

Prenos kapitalnih gubitaka (carryforward)

ibkr-porez carryforward

Prikazuje listu svih “tranši” (vintages) kapitalnih gubitaka priznatih od strane poreske uprave, dostupnih za prenos u buduće periode:

  • prijavu-izvor i period za koji je gubitak priznat;
  • priznat i preostali (neiskorišćeni) iznos;
  • poresku godinu nakon koje prenos ističe (gubitak se može preneti najviše 5 godina unapred);
  • status: Active (može se koristiti), Exhausted (potpuno iskorišćen), Expired (istekao rok).

Ista lista je dostupna u GUI-ju u meniju Capital loss carryforward….

Svaka PPDG-3R prijava kreirana putem sync automatski umanjuje izračunatu poresku osnovicu koristeći raspoložive prenose (od starijih ka novijim periodima), dok se osnovica ne svede na nulu ili se prenosi ne iscrpe. Pregled report-a prikazuje iskorišćeni i preostali iznos prenosa nakon toga. Iznos se odbija iz registra samo jednom — prilikom čuvanja prijave; ponovni sync za isti period ga ne odbija ponovo.

Preneti gubici se takođe prijavljuju u samoj prijavi: u PPDG-3R XML-u se popunjava deo 7 („Kapitalni gubici“) — po jedan red za svaki aktivan prenos, sa brojem i datumom rešenja poreske uprave (7.2/7.3) i preostalim iznosom gubitka (7.4). Konačni Osnovica i PorezZaUplatu u XML-u takođe uzimaju u obzir primenjeni prenos. Prijavljivanje gubitka u delu 7 je obaveza samog poreskog obveznika — bez toga ga poreska uprava neće primeniti u rešenju.

Broj i datum rešenja se uzimaju iz assess (--reference i --date). Ako nisu evidentirani, polja 7.2/7.3 u XML-u ostaju prazna, a report ispisuje upozorenje — evidentirajte ih kroz assess i ponovo generišite izveštaj, ili popunite ta polja ručno na portalu.

Izvoz prijave (export)

ibkr-porez export <declaration_id>
ibkr-porez export <declaration_id> -o /path/to/output

Kopira XML i sve priložene fajlove (attach) u Output Folder ili u katalog naveden u parametrima.

Povratak statusa prijave (revert)

# Vratiti na nacrt (podrazumevano)
ibkr-porez revert <id> [<id> ...]

# Vratiti na podnetu
ibkr-porez revert <id> [<id> ...] --to submitted

Vraća status prijave.

Brisanje prijave (delete)

# Pregled plana (ništa se ne menja)
ibkr-porez delete <id>

# Obriši prijavu
ibkr-porez delete <id> --yes

# Dozvoli brisanje prijave koja nije nacrt
ibkr-porez delete <id> --yes --force

Briše prijavu i poništava njen uticaj na knjigu prenosa: prenos gubitka koji je iskoristila vraća se izvornim „tranšama”, a njena sopstvena tranša priznatog gubitka (napravljena preko assess) se uklanja. Ako ste je obrisali da biste ispravili grešku, zatim pokrenite sync da ponovo napravite period iz sačuvanih transakcija.

Bez --yes samo ispisuje šta bi bilo obrisano. --force je neophodan za brisanje prijave koja nije nacrt. Može se obrisati samo najnoviji PPDG-3R — brisanje starijeg ostavilo bi „viseći” prenos kod kasnijih prijava; PP OPO prijave se mogu brisati u bilo kom trenutku.

Tako se ispravlja i priznati gubitak prethodne prijave koji je kasnija već iskoristila: obrišite kasniju prijavu (oslobađajući prenos), ponovo pokrenite assess na ranijoj, pa sync za ponovno pravljenje.

U GUI-ju je ista radnja dostupna dugmetom Delete u redu prijave: otvara dijalog za potvrdu (umesto --yes) sa poljem Force za prijave koje nisu nacrt.

Priložavanje fajla uz prijavu (attach)

# Priložiti fajl
ibkr-porez attach <declaration_id> /path/to/file.pdf

# Obrisati priloženi fajl
ibkr-porez attach <declaration_id> <file_id> --delete
ibkr-porez attach <declaration_id> --delete --file-id <file_id>

Priložava fajl uz prijavu ili uklanja priloženi fajl iz skladišta prijava.

Za čuvanje u skladištu prijava koristi se samo ime fajla (putanja se odbacuje), tako da imena moraju biti jedinstvena - inače će fajl sa istim imenom prepisati ranije učitan fajl sa istim imenom čak i iz druge putanje

💡 Priloženi fajlovi se kopiraju zajedno sa XML prijave tokom izvoza (export)

Izvoz Flex Query (export-flex)

ibkr-porez export-flex 2025-01-15
ibkr-porez export-flex 2025-01-15 -o /path/to/output.xml
ibkr-porez export-flex 2025-01-15 -o -  # Izlaz u stdout (za cevi)

Izvoz XML fajla Flex Query dobijenog tokom fetch ili sync na navedeni datum.

Primer korišćenja u linux-stilu:

ibkr-porez export-flex 2025-01-15 | ibkr-porez sync --file -

English | Русский | Українська | Srpski | Српски

Interactive Brokers (IBKR)

Flex Web Service

  1. Performance & Reports > Flex Queries.
  2. Kliknite na ikonu Settings (zupčanik) u “Flex Web Service Configuration”.
  3. Omogućite Flex Web Service.
  4. Generišite Token (Generate Token).
    • Važno: Odmah kopirajte ovaj token. Nećete moći ponovo da ga vidite u celosti.
    • Postavite rok trajanja (preporučeno max - 1 godina).

Flex Query

  1. Performance & Reports > Flex Queries.
  2. Kliknite + da kreirate novi Activity Flex Query.
  3. Name: npr. ibkr-porez-data.
  4. Delivery Configuration (na dnu stranice):
    • Period: Izaberite Last 365 Calendar Days.
  5. Format: XML.

Sekcije za uključivanje (Sections):

Omogućite sledeće sekcije i označite Select All (Izaberi sve) za kolone.

Ako nikome ne verujete 8-) umesto Select All izaberite bar polja navedena u Obavezne kolone.

Trades - Transakcije

Nalazi se pod Trade Confirmations ili Activity.

Obavezne kolone
  • Symbol
  • Description
  • Currency
  • Quantity
  • TradePrice
  • TradeDate
  • TradeID
  • OrigTradeDate
  • OrigTradePrice
  • AssetClass
  • Buy/Sell

Cash Transactions - Novčane transakcije

Obavezne kolone
  • Type
  • Amount
  • Currency
  • DateTime / Date
  • Symbol
  • Description
  • TransactionID

Sačuvajte i preuzmite Query ID

Zabeležite Query ID (broj koji se obično pojavljuje pored imena upita u listi).

Trebaće vam Token i Query ID za konfiguraciju ibkr-porez.

Dokument potvrde

Za Tačku 8 (Dokazi uz prijavu) poreske prijave PPDG-3R potreban vam je PDF izveštaj od brokera. Mora se ručno priložiti na portalu ePorezi nakon uvoza XML-a.

Kako preuzeti odgovarajući izveštaj:

  1. U IBKR idite na Performance & Reports > Statements > Activity Statement.
  2. Period: Izaberite Custom Date Range.
  3. Navedite datume koji odgovaraju vašem poreskom periodu (npr. 01-01-2024 do 30-06-2024 za prvo polugodište).
  4. Kliknite Download PDF.
  5. Na portalu ePorezi, u sekciji 8. Dokazi uz prijavu, otpremite ovaj fajl.

Preuzimanje Flex Query XML-a (za sync --file)

Ako IBKR API (sync / fetch) privremeno nije dostupan, možete pokrenuti Flex Query ručno sa IBKR sajta:

  1. U IBKR idite na Performance & Reports > Statements > Flex Queries.
  2. Pronađite upit koji ste kreirali za ibkr-porez (npr. ibkr-porez-data).
  3. Kliknite Run (plava strelica desno od naziva upita).
  4. Izaberite format XML i preuzmite fajl.
  5. Koristite fajl sa komandom sync --file ili opcijom Sync from Flex Query XML… u ☰ meniju u GUI-u.

Izvoz pune istorije (za import komandu)

Ako treba da učitate istoriju transakcija za period duži od 1 godine (nedostupno preko Flex Web Service-a), izvezite podatke u CSV:

  1. U IBKR idite na Performance & Reports > Statements > Activity Statement.
  2. Period: Izaberite Custom Date Range i navedite ceo period od otvaranja računa.
  3. Kliknite Download CSV.
  4. Ovaj fajl se može koristiti sa komandom import ↗.