Tok rada: Provizija prodajnog agenta
Uključeni moduli: Fakture · Plaćanja · Provizija (Polisa · Primenjivo osoblje · Hijerarhija · Priznanica) · Prodajni agent · Ciljevi · DataPulse
Ko ga koristi: Menadžer prodaje · Prodajni agenti · Administrator finansija
Tipično trajanje: Trenutno po plaćanju fakture (automatski okidač) + mesečni ciklus za isplatu provizije
Pregled
Modul Provizija automatski izračunava proviziju koja se duguje prodajnom agentu u trenutku kada je faktura plaćena. Nikakva manuelna akcija nije potrebna za samo izračunavanje — sve se pokreće okidačem after_payment_added. Kompletan tok rada pokriva: konfiguraciju polise provizije, dodeljivanje agenata politikama, automatsko izračunavanje pri plaćanju, pregled akumuliranih provizija i stvarnu isplatu putem izdavanja Priznanice o proviziji.
Napomena: Provizija se izračunava samo na standardnim CRM fakturama (
tblinvoices). Fakture iz modula Prodajnog agenta (sa_sale_invoices) ne pokreću proviziju.
Dijagram toka
[KONFIGURACIJA — samo jednom]
│
├── Polisa provizije (tip 1–5, vremenski okvir, procenat/skala)
├── Primenjivo osoblje → dodeljivanje agenta polisi
├── Hijerarhija (opciono) → koordinator prima % agentove provizije
└── Opšte opcije → calculate_after_days · payment_trigger_mode
│
↓
[FAKTURISANJE]
│
├── Faktura kreirana → sale_agent postavljen na fakturi (ili na klijentu/grupi)
└── Status fakture: Nacrt → Poslata
│
↓
[PLAĆANJE FAKTURE — automatski okidač]
│
├── Plaćanje evidentirano → okidač after_payment_added se aktivira
├── Sistem proverava: starost fakture ≥ calculate_after_days?
├── Sistem proverava: payment_trigger_mode?
│ 'partial_allowed' (podrazumevano) → svako plaćanje > 0 generiše proviziju
│ 'full_only' → provizija samo ako zbir plaćanja = ukupan iznos fakture
├── Sistem proverava: faktura prihvatljiva? (nije poništena, važeći status)
└── Sistem razrešava agenta: sale_agent na fakturi → customer_admin klijenta
→ commission_salesadmin_group (grupa klijenata → agent)
│
↓
[PROVIZIJA GENERISANA]
│
├── Red kreiran u tblcommission: staffid, invoice_id, amount, paid=0
├── Tipovi 1–4: izračunato odmah po fakturi
└── Tip 5 (mesečni/marža): izračunato cronom na commission_month_close_day
│
↓
[ODOBRAVANJE / PREGLED]
│
├── Menadžer → /admin/commission → vidi provizije sa paid=0
├── Agent → vidi svoje provizije (dozvola commission_manage → view)
└── Izveštaji: commission_chart · staff_monthly_dashboard
│
↓
[ISPLATA PROVIZIJE]
│
├── Menadžer kreira Priznanicu o proviziji: bira neplaćene provizije
├── Priznanica može biti konvertovana u Trošak (za računovodstvenu evidenciju)
└── Izabrane provizije → paid=1 u tblcommission
│
↓
[PROVIZIJA PLAĆENA ✓]
Korak po korak
1. Inicijalna konfiguracija (admin)
1a. Polisa provizije
Gde: /admin/commission → Polisa provizije → Nova polisa
Postoji 5 tipova polise (commission_policy_type):
| Tip | Naziv | Kako funkcioniše |
|---|---|---|
1 |
Eskalonajući — ukupan iznos fakture | Različiti procenti po nivoima vrednosti ukupne fakture |
2 |
Ravni procenat | Fiksni procenat primenjen na ukupan iznos fakture (ili profit, ako je amount_to_calculate=1) |
3 |
Po Proizvodu sa nivoima količina | Različiti procenti po proizvodu na osnovu količine |
4 |
Eskalonajući po Proizvodu | Skala na vrednostima pojedinačnih proizvoda |
5 |
Mesečna marža (mesečno osoblje) | Izračunava se krajem meseca na osnovu neto marže; zahteva staff_margin_settings JSON |
Obavezna polja pri kreiranju:
| Polje | Obavezno | Napomene |
|---|---|---|
name |
Da | Opisni naziv polise |
policy_scope |
Da | vendor (za dobavljače/klijente) ili staff (za zaposlene) |
from_date / to_date |
Da | Period važenja polise |
commission_type |
Da | percentage ili fiksni iznos |
payment_trigger_mode |
Da | partial_allowed (podrazumevano) ili full_only |
calculate_after_days |
Ne | Dani čekanja posle plaćanja pre izračunavanja provizije (0 = odmah) |
amount_to_calculate |
Ne | 0 = ukupan iznos fakture, 1 = profit (razlika od troška proizvoda) |
commission_tax_mode |
Ne | without_tax (podrazumevano) ili with_tax |
Važno: Ako je
calculate_after_daysnegativan, sistem automatski koristi 14 dana.
1b. Dodeljivanje agenta polisi
Gde: /admin/commission → Primenjivo osoblje → Dodaj
Povezuje zaposlenog (staffid) sa polisom (commission_policy_id) kroz tabelu tblcommission_applicable_staff. Agent može biti dodeljen višestrukim polisama sa različitim datumima.
Za provizije tipa dobavljač/klijent: Primenjivi klijent (postaviti is_client=1 i commission_receiver_vendor_id na kartici klijenta).
1c. Hijerarhija provizija (opciono)
Gde: /admin/commission → Podešavanja → Hijerarhija
Omogućava koordinatoru da prima procenat provizije agenta pod njegovim nadzorom:
| Polje | Opis |
|---|---|
salesman |
staffid prodajnog agenta |
coordinator |
staffid koordinatora/menadžera |
percent |
% agentove provizije koju prima koordinator |
1d. Opšte opcije
Gde: /admin/commission → Podešavanja → Opšte provizije
| Opcija | Podrazumevana vrednost | Opis |
|---|---|---|
commission_payment_trigger_mode |
partial_allowed |
Globalno (može se prepisati po polisi) |
commission_calculate_after_days |
0 |
Globalni dani čekanja |
commission_cron_interval_minutes |
1440 (24h) |
Rezervni cron za propuštene provizije od okidača |
commission_month_close_day |
1 |
Dan u mesecu na koji se izračunava tip-5 (za prethodni mesec) |
2. Razrešavanje agenta na fakturi
Kada je faktura plaćena, sistem određuje agenta u sledećem redosledu:
invoices.sale_agent— agent postavljen direktno na fakturitblcustomer_admins.staff_id— administrativni nalog klijenta (ako jesale_agentprazan)tblcommission_salesadmin_group— mapiranje grupe klijenata → agent (ako su prve dve prazne)
Napomena: Ako nijedan od tri nije konfigurisan, provizija se ne generiše i nema upozorenja. Uvek proveravati da fakture imaju postavljen
sale_agentili da klijenti imaju administrativni nalog klijenta.
3. Automatsko izračunavanje pri plaćanju
Kada se plaćanje evidentira (/admin/invoices/:id → Dodaj Plaćanje ili putem API-ja), okidač after_payment_added poziva Commission_model::add_commission($payment_id).
Sistemske provere (ako neka ne prođe, provizija se NE generiše):
| Provera | Detalji |
|---|---|
| Starost fakture | Datum fakture + calculate_after_days ≤ danas |
| Status fakture | Status NE SME biti u [5=otkazana, 6=nacrt, 7=kreditno pismo, 8=interna] |
| Poništavanje | Faktura nema pridruženo kreditno pismo |
| Mod okidača | Ako je full_only: zbir svih plaćanja = ukupan iznos fakture |
Rezervni cron: Svakih commission_cron_interval_minutes minuta, zadatak proverava fakture sa plaćanjima koja su propustila okidač i generiše nedostajuće provizije.
Manuelna regeneracija (admin):
- Na fakturi: dugme Regeneriši Proviziju
- Masovno:
/admin/commission→ Ponovo izračunaj (zahteva dozvolucommission → create)
4. Provizije tipa 5 — Mesečna marža
Razlika od tipova 1–4: izračunavanje se ne vrši po plaćanju, već mesečno putem crona.
Na dan commission_month_close_day u mesecu (podrazumevano dan 1), run_staff_monthly_commissions() izračunava za prethodni mesec:
- Agregira sve plaćene fakture tog meseca po agentu
- Izračunava neto maržu (
sales_net,avg_margin,avg_discount) - Primenjuje nivoe iz
staff_margin_settingsJSON-a - Upisuje u
tblcommission_staff_monthly(status:draft) - Upisuje detalje po fakturi u
tblcommission_staff_monthly_detail
5. Pregled i odobravanje provizija
Gde: /admin/commission
| Sekcija | Ko vidi | Šta prikazuje |
|---|---|---|
| Lista provizija | Admin + commission_manage → view |
Sve provizije sa paid=0 |
| Mesečna kontrolna tabla osoblja | Admin + commission_manage → view |
Mesečni rezime po agentu, status draft |
| Grafikon provizija | Admin + commission_manage → view |
Grafikoni trenda provizija |
| Agent (sopstvene) | Osoblje sa commission_manage → view |
Samo sopstvene provizije |
6. Isplata provizije
Gde: /admin/commission → Priznanice o proviziji → Nova priznanica
Koraci:
- Izabrati neplaćene provizije (
paid=0) za uključivanje u isplatu - Popuniti:
amount,paymentmode,date,note,transactionid - Sačuvati → sistem označava sve izabrane unose u
tblcommissionsapaid=1 - Opciono: označiti Konvertuj u Trošak za automatsko generisanje troška u modulu Troškovi (za računovodstvenu evidenciju)
Potrebne dozvole: commission_receipt → create + commission_receipt → view
Potrebne dozvole
| Uloga / Dozvola | Pristup |
|---|---|
| Admin | Potpuni pristup svim funkcijama |
commission_manage → view |
Pregled provizija, grafikona, mesečnih izveštaja |
commission → create |
Masovno ponovo izračunavanje |
commission → view_setting |
Pristup Podešavanjima |
commission_receipt → view/create/edit/delete |
Upravljanje priznanicama o plaćanju |
commission_applicable_client → view/create/delete |
Upravljanje primenljivim klijentima |
Česti problemi
| Problem | Uzrok | Rešenje |
|---|---|---|
| Provizija nije generisana po plaćanju | sale_agent nedostaje na fakturi, istekla polisa ili calculate_after_days nije ispunjen |
Proveriti polje sale_agent na fakturi + datume polise + podešavanje after_days |
full_only ne generiše na delimično plaćanje |
Ispravno ponašanje — provizija se pojavljuje samo pri punom plaćanju | Prebaciti na partial_allowed ako želite proviziju na svakoj rati |
| Provizija generisana duplikat | I cron i okidač su se izvršili | Sistem proverava postojeći red u tblcommission po invoice_id+staffid pre umetanja — duplikat je blokiran |
| Agent se ne pojavljuje u padajućem meniju Primenljivog osoblja | Korisnik nema aktivnu ulogu Osoblja | Proveriti da je korisnik aktivan član Osoblja u sistemu |
| Tip-5 nije izračunat | commission_month_close_day nije prošao ili cron nije pokrenut |
Proveriti podešavanje dana i verifikovati da je CRM cron aktivan (/admin/misc/cron_jobs) |