Based on eligible collected sales, excluding VAT.
required before payout
Your monthly sales, collections and commission—clearly connected.
Based on eligible collected sales, excluding VAT.
Policy targets mapped to Odoo users
Orders/invoices: selected company. Collections: all permitted companies. Different date bases.
Full calendar-month eligible collections
Highest achieved rate applies to the entire eligible monthly base.
| Connecting to Odoo… |
| Salesperson / Odoo ID | Target | Orders excl. VAT | Invoices excl. VAT | Eligible collections | Collection achievement | Commission candidate |
|---|
Sum of individual candidate amounts.
—2% / 3% / 4% at 1m / 1.5m / 2m SAR. All permitted companies combined.
—Individuals + GSM. Final approval is not stored in this HTML.
—Exact Odoo fields, date basis, fetched IDs and a manual check for each metric.
Sales → Orders → Orders. Match company, salesperson and confirmation date. Compare Untaxed Amount, Taxes and Total separately. Quotations are excluded.
sale.order state ∈ sale, done date_order (user timezone) amount_untaxed / amount_tax / amount_total
Open quotation → chatter → “Quotation sent”. Includes quotations later confirmed. Unique records, not emails. Value shown is the current saved value; historical send-value snapshots are not available.
mail.message subtype = sale.mt_order_sent date → sale.order via res_id Current values from sale.order
Accounting → Customers → Invoices. State Posted, Type Customer Invoice, matching Invoice Date. Paid is a subset of this cohort; it does not mean cash received in this month.
account.move state = posted; move_type = out_invoice invoice_date; invoice_user_id payment_state; amount_residual
Open invoice → payment / journal items. Trace each receivable reconciliation to a posted receipt. Older invoices paid this month are included. Unallocated payments are excluded.
account.partial.reconcile debit_move_id → invoice receivable credit_move_id.date → receipt period debit_amount_currency → gross allocation
Receipt by agreed maturity date, fully cash-settled invoice, confirmed linked SO and ≥25% margin. Missing or zero order costs are held for review. Known linked credit notes or returns hold the affected sale in full for review.
Invoice line.sale_line_ids → SO line.order_id GP % = order.margin ÷ amount_untaxed × 100 Receipt net = allocation × invoice net ÷ total
Policy targets use explicitly mapped Odoo IDs or unique exact names. No default target for admins or unrelated users. Tiers use eligible collected sales per calendar month, in SAR.
Individual: 200k 2% · 300k 3% · 400k 4% GSM: 1m 2% · 1.5m 3% · 2m 4% Named team target: SAR 1,800,000 / month
25% replaces the PDF’s 30% only by the user’s explicit instruction. Partial/unpaid invoices are held until fully settled by verified cash. Multi-order invoices, adjustments, unknown returns and mismatched invoice/order owners are held. Receipt net uses proportional VAT allocation; mixed-VAT instalments need review. Quotation sent events do not prove email delivery. Policy expires 31 December 2026. No previous policy or future renewal is assumed.
Your monthly sales, collections and commission—clearly connected.
Based on eligible collected sales, excluding VAT.
Policy targets mapped to Odoo users
Orders/invoices: selected company. Collections: all permitted companies. Different date bases.
Full calendar-month eligible collections
Highest achieved rate applies to the entire eligible monthly base.
| Connecting to Odoo… |
| Salesperson / Odoo ID | Target | Orders excl. VAT | Invoices excl. VAT | Eligible collections | Collection achievement | Commission candidate |
|---|
Sum of individual candidate amounts.
—2% / 3% / 4% at 1m / 1.5m / 2m SAR. All permitted companies combined.
—Individuals + GSM. Final approval is not stored in this HTML.
—Exact Odoo fields, date basis, fetched IDs and a manual check for each metric.
Sales → Orders → Orders. Match company, salesperson and confirmation date. Compare Untaxed Amount, Taxes and Total separately. Quotations are excluded.
sale.order state ∈ sale, done date_order (user timezone) amount_untaxed / amount_tax / amount_total
Open quotation → chatter → “Quotation sent”. Includes quotations later confirmed. Unique records, not emails. Value shown is the current saved value; historical send-value snapshots are not available.
mail.message subtype = sale.mt_order_sent date → sale.order via res_id Current values from sale.order
Accounting → Customers → Invoices. State Posted, Type Customer Invoice, matching Invoice Date. Paid is a subset of this cohort; it does not mean cash received in this month.
account.move state = posted; move_type = out_invoice invoice_date; invoice_user_id payment_state; amount_residual
Open invoice → payment / journal items. Trace each receivable reconciliation to a posted receipt. Older invoices paid this month are included. Unallocated payments are excluded.
account.partial.reconcile debit_move_id → invoice receivable credit_move_id.date → receipt period debit_amount_currency → gross allocation
Receipt by agreed maturity date, fully cash-settled invoice, confirmed linked SO and ≥25% margin. Missing or zero order costs are held for review. Known linked credit notes or returns hold the affected sale in full for review.
Invoice line.sale_line_ids → SO line.order_id GP % = order.margin ÷ amount_untaxed × 100 Receipt net = allocation × invoice net ÷ total
Policy targets use explicitly mapped Odoo IDs or unique exact names. No default target for admins or unrelated users. Tiers use eligible collected sales per calendar month, in SAR.
Individual: 200k 2% · 300k 3% · 400k 4% GSM: 1m 2% · 1.5m 3% · 2m 4% Named team target: SAR 1,800,000 / month
25% replaces the PDF’s 30% only by the user’s explicit instruction. Partial/unpaid invoices are held until fully settled by verified cash. Multi-order invoices, adjustments, unknown returns and mismatched invoice/order owners are held. Receipt net uses proportional VAT allocation; mixed-VAT instalments need review. Quotation sent events do not prove email delivery. Policy expires 31 December 2026. No previous policy or future renewal is assumed.