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.
Kako koristiti
- Otvorite aplikaciju — pokrenuće se sa grafičkim interfejsom.
- Kliknite Config i unesite podatke sa Interactive Brokers.
- Kliknite Sync now — aplikacija će preuzeti najnovije transakcije i kreirati prijave.
- Otpremite kreirani XML fajl na portal ePorezi (sekcija 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:
- Otvorite System Settings → Privacy & Security
- Pri dnu odeljka Security pojaviće se poruka o blokiranoj aplikaciji — kliknite Open Anyway
- 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):
- Otvorite panel preuzimanja u pregledaču (
Ctrl+J) - Pronađite blokirano
.msipreuzimanje - Kliknite Keep → Show more → Keep anyway
Pri pokretanju instalatera, Windows može prikazati poruku Windows protected your PC:
- Kliknite More info
- 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:
- Podesite podatke (config) ↗ — jednom pri prvom pokretanju
- Preuzmite najnovije podatke (fetch) ↗
- Kreirajte izveštaj (report) ↗
- 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-datau 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
fetchnakonimportkako 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,
synci 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
syncprvi 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.xmlu 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-3Rnakonsubmitprelazi u statuspending(čeka rešenje poreske uprave o iznosu poreza).PP OPOnakonsubmit:- prelazi u
submittedako postoji porez za plaćanje; - prelazi direktno u
finalizedako je porez0.
- prelazi u
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
--paidodmah prebacuje prijavu ufinalized; - 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.
- ako je iznos veći od nule, prijava ostaje aktivna (
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
- Performance & Reports > Flex Queries.
- Kliknite na ikonu Settings (zupčanik) u “Flex Web Service Configuration”.
- Omogućite Flex Web Service.
- 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
- Performance & Reports > Flex Queries.
- Kliknite + da kreirate novi Activity Flex Query.
- Name: npr.
ibkr-porez-data. - Delivery Configuration (na dnu stranice):
- Period: Izaberite Last 365 Calendar Days.
- 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
SymbolDescriptionCurrencyQuantityTradePriceTradeDateTradeIDOrigTradeDateOrigTradePriceAssetClassBuy/Sell
Cash Transactions - Novčane transakcije
Obavezne kolone
TypeAmountCurrencyDateTime/DateSymbolDescriptionTransactionID
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:
- U IBKR idite na Performance & Reports > Statements > Activity Statement.
- Period: Izaberite Custom Date Range.
- Navedite datume koji odgovaraju vašem poreskom periodu (npr.
01-01-2024do30-06-2024za prvo polugodište). - Kliknite Download PDF.
- 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:
- U IBKR idite na Performance & Reports > Statements > Flex Queries.
- Pronađite upit koji ste kreirali za
ibkr-porez(npr.ibkr-porez-data). - Kliknite Run (plava strelica desno od naziva upita).
- Izaberite format XML i preuzmite fajl.
- 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:
- U IBKR idite na Performance & Reports > Statements > Activity Statement.
- Period: Izaberite Custom Date Range i navedite ceo period od otvaranja računa.
- Kliknite Download CSV.
- Ovaj fajl se može koristiti sa komandom import ↗.