lemma 0.8.21

A pure, declarative language for business rules.
Documentation
spec rules_and_unless

data is_premium   : yes
data base_price   : number -> minimum 0
data customer_age : number -> minimum 0 -> maximum 120
data quantity          : number -> minimum 0

rule total_before_discount:
  base_price * quantity

rule discount_percentage:
  0%
  unless quantity >= 10 then 10%
  unless quantity >= 20 then 15%
  unless is_premium then 20%

rule discount_amount:
  total_before_discount * discount_percentage

rule total_after_discount:
  total_before_discount - discount_amount

rule shipping_cost:
  15
  unless total_after_discount >= 100 then 10
  unless total_after_discount >= 200 then 0

rule final_total:
  total_after_discount + shipping_cost

rule age_validation:
  true
  unless customer_age < 18
    then veto "Customer must be 18 or older"
  unless customer_age > 120 then veto "Invalid age"

rule can_process:
  yes
  unless customer_age < 18 then no

rule priority_processing:
  no
  unless total_after_discount > 500 then yes
  unless is_premium then yes

rule message:
  "Standard order"
  unless final_total > 1_000
    then "High-value order - manager approval required"
  unless is_premium
    then "Premium order - expedited processing"