Odoo KPI Sales Trigger
Overview
Modul odoo_kpi_sales_trigger digunakan untuk membuat KPI Value otomatis dari transaksi Sales Order berdasarkan perilaku pembayaran customer.
Fokus utama modul ini adalah memberi score KPI kepada salesperson berdasarkan:
- pembayaran tepat waktu
- keterlambatan pembayaran berdasarkan jumlah hari
- nilai transaksi di atas threshold tertentu
Modul ini terintegrasi dengan:
odoo_kpisale_managementaccountgrt_sales_business_category
Objective
Tujuan modul ini:
- mengukur kualitas penjualan, bukan hanya jumlah transaksi
- memberi reward untuk transaksi yang dibayar tepat waktu
- memberi penalti untuk transaksi yang terlambat dibayar
- memberi bonus untuk transaksi dengan nilai besar
- mengirim hasil perhitungan ke
kpi.valueberdasarkankpi.assignment
Business Logic
Setiap Sales Order yang sudah lunas penuh akan dievaluasi.
Sistem akan:
- mengambil Sales Order
- mengecek apakah semua invoice customer terkait sudah
paid - mengambil tanggal pelunasan terakhir
- mengambil tanggal jatuh tempo invoice
- menghitung
late_days - mencari
KPI Sales Trigger Ruleyang cocok - membuat atau meng-update
kpi.value
Score Formula
Rumus score per Trigger Line:
score = on_time_score - (late_days x late_penalty_per_day)
Kemudian:
- score tidak boleh lebih kecil dari
minimum_score - jika
amount_total >= transaction_amount_threshold, maka score ditambahtransaction_bonus_score
Formula final:
score = max(on_time_score - (late_days x late_penalty_per_day), minimum_score)
if amount_total >= transaction_amount_threshold:
score += transaction_bonus_score
Trigger Event
KPI tidak dibuat saat quotation dibuat atau saat Sales Order dikonfirmasi.
KPI dibuat saat transaksi sudah benar-benar lunas.
Event yang dipantau:
account.payment.action_post()- perubahan
account.move.payment_statemenjadipaid
Ini dipilih agar KPI merepresentasikan realisasi pembayaran, bukan sekadar penjualan.
Data Flow
Flow modul:
Customer Payment Posted
|
v
Invoice becomes Paid
|
v
Find linked Sale Order
|
v
Check Business Category + Salesperson + Assignment Period
|
v
Calculate KPI Score
|
v
Create / Update KPI Value
Rule Structure
Model utama:
kpi.sales.trigger.rulekpi.sales.trigger.rule.line
kpi.sales.trigger.rule
Header rule dipakai untuk:
- nama rule
- sequence
- status active
business_category_id
Rule dibuat per business category agar scoring dapat dibedakan untuk tiap kategori bisnis.
kpi.sales.trigger.rule.line
Setiap line menentukan scoring untuk satu employee dan satu assignment KPI.
Field penting:
employee_idassignment_idon_time_scorelate_penalty_per_dayminimum_scoretransaction_amount_thresholdtransaction_bonus_scoresource_modulenote
Constraint:
employee_idpada line harus sama denganemployee_idpadaassignment_id
Payment and Late Day Calculation
Fully Paid
Sales Order dianggap selesai untuk evaluasi KPI jika:
- memiliki invoice customer (
out_invoice) yang sudahposted - semua invoice customer terkait memiliki
payment_state = paid
Payment Completion Date
Tanggal pelunasan yang dipakai adalah tanggal pelunasan terakhir dari invoice yang terkait dengan Sales Order.
Jika satu Sales Order memiliki beberapa invoice, maka sistem mengambil tanggal pembayaran paling akhir.
Due Date
Tanggal jatuh tempo yang dipakai adalah tanggal jatuh tempo paling akhir dari invoice customer terkait.
Jika invoice_date_due tidak ada, sistem memakai invoice_date.
Late Days
late_days = payment_completion_date - due_date
Jika pembayaran dilakukan sebelum atau sama dengan jatuh tempo, maka late_days = 0.
KPI Output
Output modul ini adalah record di model kpi.value.
Field yang diisi:
assignment_idvaluesource_modulereference_modelreference_id
Modul menggunakan mekanisme upsert:
- jika KPI untuk kombinasi assignment + reference + source sudah ada, maka nilai di-update
- jika belum ada, maka dibuat record baru
Ini mencegah duplikasi KPI saat event pembayaran terpanggil lebih dari sekali.
Example Configuration
Contoh rule untuk salesperson A:
on_time_score:10late_penalty_per_day:1minimum_score:0transaction_amount_threshold:100000000transaction_bonus_score:5
Scenario 1
- nilai transaksi:
80.000.000 - telat:
0hari
Perhitungan:
score = max(10 - (0 x 1), 0) = 10
Hasil:
- score
10
Scenario 2
- nilai transaksi:
80.000.000 - telat:
3hari
Perhitungan:
score = max(10 - (3 x 1), 0) = 7
Hasil:
- score
7
Scenario 3
- nilai transaksi:
120.000.000 - telat:
0hari
Perhitungan:
score = max(10 - (0 x 1), 0) + 5 = 15
Hasil:
- score
15
Scenario 4
- nilai transaksi:
120.000.000 - telat:
20hari
Perhitungan:
score = max(10 - (20 x 1), 0) + 5 = 5
Hasil:
- score
5
Setup in Odoo
Langkah konfigurasi:
- pastikan modul
odoo_kpi,grt_sales_business_category, danodoo_kpi_sales_triggersudah terinstall - buat
KPI Definitionpada modul KPI - buat
KPI Period - buat
KPI Assignmentuntuk employee sales - buka menu
Sales > KPI Sales Triggers - buat rule per
Business Category - tambahkan
Trigger Linesuntuk setiap salesperson - isi parameter score sesuai kebijakan perusahaan
Recommended Master Data Setup
Agar modul berjalan dengan benar, sebaiknya:
- setiap salesperson memiliki relasi
res.userskehr.employee - Sales Order memiliki
business_category_id - invoice berasal dari Sales Order yang sama
- KPI Assignment dibuat untuk periode aktif
- period KPI mencakup tanggal pelunasan transaksi
Assumptions
Asumsi implementasi saat ini:
- score diberikan ke salesperson pada
sale.order.user_id - evaluasi dilakukan saat order lunas penuh
- invoice yang dihitung hanya
out_invoice - refund belum dijadikan trigger KPI terpisah
- bonus nilai transaksi bersifat tambahan di atas score dasar
Limitation
Batasan implementasi saat ini:
- belum ada pembeda rule berdasarkan team sales
- belum ada pembeda rule berdasarkan produk atau product category
- belum ada tier threshold bertingkat dalam satu line
- belum ada wizard simulasi score dari transaksi
- belum ada scheduled recompute untuk data historis
Jika dibutuhkan, pengembangan berikutnya bisa menambahkan:
- multi-threshold bonus
- penalty maksimum
- rule per sales team
- rule per customer segment
- recompute KPI existing transaction
Technical Notes
Hook utama ada di:
models/account_payment.pymodels/account_move.pymodels/sale_order.pymodels/kpi_sales_trigger_rule.py
Logika inti:
- mendeteksi invoice customer yang telah lunas
- menelusuri Sales Order terkait
- menghitung score berdasarkan konfigurasi
- menulis hasil ke
kpi.value
Security
Akses konfigurasi rule diberikan ke:
odoo_kpi.group_kpi_managerodoo_kpi.group_kpi_adminsales_team.group_sale_manager
Upgrade Module
Contoh command upgrade:
c:\odoo14c\python\python.exe C:\odoo14c\server\odoo-bin -c C:\addon14\odoo.conf -d kanjabung_MRP -u odoo_kpi_sales_trigger --stop-after-init
Atau gunakan script:
upgrade_odoo_kpi_sales_trigger.bat
Testing Checklist
Checklist test manual:
- buat KPI assignment untuk salesperson
- buat rule pada business category yang sesuai
- buat Sales Order dengan salesperson tersebut
- konfirmasi Sales Order dan generate invoice
- lakukan pembayaran sebelum due date
- pastikan
kpi.valueterbentuk dengan score sesuai - ulangi dengan pembayaran terlambat
- ulangi dengan nilai transaksi di atas threshold
- pastikan tidak ada duplikasi
kpi.valueuntuk order yang sama
Summary
odoo_kpi_sales_trigger menambahkan mekanisme KPI sales berbasis kualitas pembayaran customer.
Dengan modul ini, KPI sales tidak hanya menghitung volume penjualan, tetapi juga:
- ketepatan pembayaran
- dampak keterlambatan pembayaran
- nilai strategis transaksi