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"