CRMconnect Azuvio · Docs

Tok rada: Program lojalnosti — Lojalnost kupaca

Uključeni moduli: Lojalnost (Pravila · Transakcije · Iskupljenje · Članstvo · Programi) · Fakture · OmniSales · Klijenti
Ko ga koristi: Marketing · Prodaja · Customer Success
Tipično trajanje: Kontinuirano — poeni se akumuliraju sa svakom uplatom

Pregled

Modul Lojalnost implementira kompletan sistem lojalnosti: automatska akumulacija poena pri uplati fakture, tri tipa nagradnih bonusa (novi nalog, rođendan, ručno), iskupljenje u 4 različita konteksta (admin faktura, portal klijenta, OmniSales, vaučer) i sistem nivoa sa diferenciranim beneficijama po nivou.

Obavezan uslov: Globalni prekidač loyalty_setting mora biti postavljen na 1 u Podešavanja → Marketing → Lojalnost. Bez ovoga, hook after_payment_added ne izvršava nikakvu logiku poena bez obzira na konfigurisana pravila.

Ne postoji automatski istek poena. Poeni se smanjuju samo kroz eksplicitno iskupljenje.


Dijagram toka

[PODEŠAVANJE — admin, jednom]
  │
  ├── Globalna aktivacija: loyalty_setting = 1
  ├── Pravila lojalnosti: tip zarade (card_total / product_category / product)
  │     + nivoi iskupljenja (point_weight po opsegu poena)
  ├── Pravila članstva (Nivoi): Bronza / Srebro / Zlato po opsegu poena
  ├── Programi članstva: popusti po nivou (kartica/kategorija/proizvod)
  └── Kartice lojalnosti: vizuelni šablon (opciono)
  │
  ↓
[AKUMULACIJA POENA — automatski pri uplati]
  │
  ├── Okidač: after_payment_added → status fakture = PLAĆENO (2)
  ├── Sistem traži aktivna pravila za klijenta (po client_id ili grupi klijenata)
  │
  ├── rule_base = 'card_total':
  │     poeni = poin_awarded × floor(ukupno_fakture / vrednost_kupovine)
  │     (npr.: 10 poena na 100 RON potrošenih)
  │
  ├── rule_base = 'product_category':
  │     po stavci fakture: ako je grupa proizvoda = rel_id u rule_detail
  │     → poeni = loyalty_point × količina
  │
  └── rule_base = 'product':
        po stavci fakture: ako je proizvod = rel_id u rule_detail
        → poeni = loyalty_point × količina
  │
  ├── Insert u loy_transation: type='debit', reference='order_debit'
  └── clients.loy_point += zarađeni poeni
  │
  ↓
[NAGRADNI BONUSI]
  │
  ├── Novi nalog (hook after_client_added):
  │     → pravilo sa MAX(create_account_point) aktivnim danas
  │     → type='credit', reference='manual_credit'
  │
  ├── Rođendan (cron hook before_cron_run):
  │     → pronalazi klijente sa prilagođenim poljem 'Birthday' = danas (mesec+dan)
  │     → jednom godišnje (proverava loy_transation.note='bonus_points_for_customers_birthday')
  │     → šalje email šablon 'loyalty-birthday-bonus-point'
  │
  └── Ručno (admin): loyalty/transation_form → type='credit'
  │
  ↓
[NIVO — izračunava se dinamički]
  │
  ├── client_rank() → pronalazi loy_mbs_rule gde loy_point ∈ [loyalty_point_from, loyalty_point_to]
  ├── Dodelje se najviši odgovarajući nivo
  └── client_next_rank() → prikazuje koliko poena je potrebno za sledeći nivo
  │
  ↓
[ISKUPLJENJE — 4 konteksta]
  │
  ├── [A] Admin na fakturi: polje iskupljenja u obrascu fakture
  ├── [B] Klijent u portalu: stranica fakture → iskoristi poene
  ├── [C] OmniSales/POS: polje iskupljenja u korpi narudžbine
  └── [D] Vaučer/Program članstva: kod vaučera ili automatski popust po nivou
  │
  ↓
[POPUST PRIMENJEN]
  │
  ├── Poeni konvertovani u valutu putem point_weight (npr.: 1 poen = 0,05 RON)
  ├── redeemp_type='full': svi poeni, vrednost se izračunava automatski
  ├── redeemp_type='partial': klijent bira koliko poena želi iskoristiti
  ├── Insert u loy_redeem_log: old_point, new_point, redeep_from, redeep_to
  └── clients.loy_point -= iskorišćeni poeni

[LOJALNI KLIJENT ✓ · POENI AKUMULIRANI ✓]

Korak po korak

1. Aktivacija i globalna konfiguracija (admin)

Gde: /admin/loyalty → Podešavanja → Opšta podešavanja

Obavezna aktivacija: loyalty_setting = 1

Bez ovoga, hook after_payment_added se registruje, ali se odmah vraća bez ikakvih izračunavanja.


2. Pravila lojalnosti — pravila zarade i iskupljenja

Gde: /admin/loyalty → Pravila lojalnosti → Novo pravilo

Jedno pravilo definiše i zaradu i iskupljenje.

2a. Polja pravila

Polje Obavezno Opis
subject Da Naziv pravila
enable Da 1 = aktivno
start_date / end_date Da Period važenja
rule_base Da card_total / product_category / product
client_group Ne Ciljna grupa klijenata (0 = svi)
client Ne Specifični ID-ovi klijenata (CSV)
minium_purchase Ne Minimalna vrednost narudžbine za zaradu poena
max_amount_received Ne Maksimalni limit poena zarađenih po transakciji

Za card_total:

Polje Opis
poin_awarded Poeni dodeljeni po razredu
purchase_value Vrednost jednog razreda (npr.: 100 RON = 10 poena)

Za product_category i product: dodajte stavke u Detalje pravila — svaka stavka specificira rel_type, rel_id (ID grupe ili proizvoda) i loyalty_point po jedinici.

Posebni bonusi po pravilu:

Polje Opis
create_account_point Bonus poeni pri kreiranju novog naloga klijenta
birthday_point Bonus poeni za rođendan (zahteva prilagođeno polje 'Birthday' na klijentu)

2b. Nivoi iskupljenja

Dodajte barem jedan nivo u odeljku Detalji iskupljenja pravila:

Polje Opis
point_from / point_to Opseg poena za ovaj nivo
point_weight Kurs konverzije: poeni → valuta (npr.: 0,05 = 1 poen = 0,05 RON)
status 'enable' = aktivan nivo
redeem_portal 1 = može se koristiti u portalu klijenta
redeem_pos 1 = može se koristiti u OmniSalesu/POS-u
min_poin_to_redeem Minimalni poeni potrebni za aktiviranje iskupljenja
redeemp_type 'full' = puno iskupljenje · 'partial' = delimično iskupljenje

3. Pravila članstva — nivoi

Gde: /admin/loyalty → Članstvo → Novo pravilo članstva

Definiše nivoe (npr.: Bronza, Srebro, Zlato) na osnovu akumuliranih poena:

Polje Opis
name Naziv nivoa (npr.: "Zlato")
loyalty_point_from / loyalty_point_to Opseg poena za ovaj nivo
client_group Prihvatljiva grupa klijenata (0 = svi)
card FK → loy_card (opcioni vizuelni šablon kartice)

4. Programi članstva — beneficije nivoa

Gde: /admin/loyalty → Programi članstva → Novi program

Program povezuje jedan ili više nivoa sa popustnom beneficijom:

Polje Opis
program_name Naziv programa
membership Ciljani ID-ovi nivoa (CSV iz loy_mbs_rule)
discount Tip popusta: card_total / product_category / product
discount_percent Procenat popusta
voucher_code Opcioni kod vaučera (za ručno iskupljenje)
voucher_value Fiksna vrednost vaučera
minium_purchase Minimalna narudžbina za aktivaciju popusta
start_date / end_date Važenje programa

Napomena: Kada se program članstva sa popustom primeni na fakturu, sistem automatski generiše kreditnu notu (add_credit_mbs_program()) i primenjuje je na fakturu. Ova kreditna nota se pojavljuje u modulu Kreditne note.


5. Prilagođeno polje "Birthday" (za bonus za rođendan)

Gde: /admin/clients → zapis klijenta → prilagođeno polje Birthday (date_picker)

Polje se kreira automatski od strane modula sa slug-om customers_birthday. Bonus za rođendan se aktivira kroz cron (before_cron_run) jednom godišnje po klijentu.


6. Iskupljenje poena

6a. Na fakturi (admin)

Pri kreiranju/izmeni fakture, odeljak Iskoristi poene se pojavljuje ako:

  • Klijent ima dovoljno poena (≥ min_poin_to_redeem)
  • Postoji aktivno pravilo sa važećim nivoom iskupljenja

Zaposleni bira poene za iskorišćavanje → popust se izračunava automatski → upisuje se u loy_redeem_log.

6b. Portal klijenta

Prijavljeni klijent vidi dugme Iskoristi poene na stranici fakture (ako je redeem_portal=1 na pravilu i faktura još nije u potpunosti plaćena).

Klijent bira poene → sistem direktno menja invoices.total (smanjuje ukupan iznos) i beleži u loy_voucher_inv_log.

6c. OmniSales / POS

Polje iskupljenja se pojavljuje u OmniSales korpi (ako je redeem_pos=1). Primenjuje se pri kreiranju narudžbine.

6d. Vaučer za članstvo

Pri unosu koda vaučera (filter apply_other_voucher), sistem proverava da li klijent pripada nivou sa aktivnim programom koji ima taj kod. Vraća voucher_value i minium_purchase.


7. Pregled stanja poena klijenta

Gde: /admin/clients/{id} → kolona loy_point u zapisu klijenta

Trenutno stanje se čuva direktno u tblclients.loy_point (DECIMAL). Kompletna istorija transakcija je vidljiva u Lojalnost → Transakcije filtrirano po klijentu.


Potrebne dozvole

Akcija Dozvola
Pregled modula Lojalnost loyalty → view
Konfiguracija pravila, kartica, programa Isključivo is_admin() (require_loyalty_admin)
Portal klijenta (iskupljenje) is_client_logged_in()

Česte greške

Problem Uzrok Rešenje
Poeni nisu dodati nakon uplate loyalty_setting ≠ 1 ili pravilo isteklo Aktivirajte globalni prekidač + proverite start_date/end_date pravila
Klijent nije pokriven pravilom akumulacije Nepodudaranje client ili client_group Proverite da pravilo uključuje tog klijenta ili njegovu grupu
Bonus za rođendan nije dodeljen Polje 'Birthday' nije popunjeno na klijentu ili cron neaktivan Popunite polje + proverite cron posao
Iskupljenje se ne pojavljuje na fakturi min_poin_to_redeem nije dostignut ili pravilo neaktivno Proverite stanje poena u odnosu na min_poin_to_redeem
Popust za članstvo generiše neočekivanu kreditnu notu Ispravno ponašanje — add_credit_mbs_program() Kreditna nota je normalna; pogledajte je u Kreditnim notama
Poeni ne ističu Ne postoji mehanizam isteka Ispravno ponašanje — poeni su trajni; ograničite putem end_date na pravilu

Reference modula

  • Klijenti — stanje loy_point u zapisu klijenta
  • Fakture — iskupljenje na fakturi
  • OmniSales — iskupljenje na POS-u
  • Kreditne note — kreditne note generisane od strane programa članstva