Last updated 2026-04-25

Sales & commissions

OtiumWork tracks two flavors of revenue per salesperson — services and consulting — with tiered commission plans that reflect annual quotas. All amounts are in USD; convert at booking-day rate before entering.

Data model

Entity Holds
Sale One signed deal: salesperson, customer, type, USD value, signed date, status (open/closed/canceled), optional linked project, locked commission %, tier breakdown
Sale payment Each cash-in event against a sale (one or many). Commission auto-accrues at the sale's locked rate × payment amount
Commission plan Per (salesperson, sale_type, year): JSON list of tier brackets (up_to_usd, rate_pct)
Commission payout One row per payroll cycle per salesperson: rolls up unpaid sale_payments, status = pending → paid (or reversed)

Workflow

  1. Plan setup (once per salesperson per year): /finance/commissions/plans. Add brackets like:

$0 – $500K → 5% $500K – $1M → 7% above $1M → 10%

Empty "up to" = unlimited (use for the last bracket).

  1. Record a sale (when a deal closes): /finance/sales/new. System looks up the salesperson's YTD bookings + their plan, computes the blended rate spanning whatever tiers this sale crosses, and freezes that rate on the sale row. Tier math is saved in the breakdown JSON for audit.

  2. Record payments as customers pay: open the sale → "Record payment" form. Each payment auto-accrues amount × locked_rate of commission. A sale paid in 3 installments creates 3 commission accruals at the same rate.

  3. Generate payout twice a month (or whatever your payroll cadence): /finance/commissions shows per-salesperson outstanding commission. Click Generate with the payroll date — system rolls all unpaid sale_payments into a pending payout.

  4. Mark paid once payroll runs. Reverse if needed (frees rolled-in payments back to outstanding).

Why blended rate at signing

If we recomputed at payment time, late payments by customers would change a salesperson's effective rate after the fact — unfair when the deal's already done. Freezing at signing matches how comp is actually negotiated.

Refunds

Enter a negative sale_payment amount. Commission accrual goes negative too, offsetting in the next payout.

Setting fallback rates

Each employee has commission_rate_services_pct and commission_rate_consulting_pct on their record. Used when no commission_plan row exists for that (salesperson, sale_type, year). Defaults to 0 — explicit setup encouraged.

What's not in V1

  • Splits between multiple salespeople on one deal (one salesperson per sale today)
  • Multi-currency — everything in USD
  • Draws against future commissions
  • Auto-sync with QuickBooks / Stripe payments (manual entry today)
  • Tier definitions changing mid-year — edit the plan, but already-signed sales keep their locked rate

See something wrong or outdated in this article? Report it →