spec rule_references
"""
Rule References
This example demonstrates how to reference other rules by name.
Rule references are resolved by name, looking up data first, then rules.
"""
data age : 25
data has_drivers_license : true
data has_vehicle : true
data license_is_suspended : false
data vehicle_is_insured : true
rule is_of_legal_age:
age >= 18
rule has_valid_license:
has_drivers_license and not license_is_suspended
rule vehicle_is_ready:
has_vehicle and vehicle_is_insured
rule can_drive_legally:
is_of_legal_age and has_valid_license and vehicle_is_ready
rule driving_status:
"Cannot drive"
unless can_drive_legally then "Can drive legally"
spec eligibility_check
"""
Eligibility Check with Rule References
Shows complex rule composition and cross-rule dependencies.
"""
data criminal_record : false
data has_passport : true
data has_visa : false
data passport_valid : true
data debt_amount : number -> minimum 0 -> default 0
data user_age : number -> minimum 0 -> maximum 120 -> default 30
rule is_adult:
user_age >= 18
rule has_valid_passport:
has_passport and passport_valid
rule has_valid_visa:
has_visa
rule travel_documents_valid:
has_valid_passport and has_valid_visa
rule background_check_passed:
not criminal_record
rule financial_standing_good:
debt_amount < 10_000
rule can_travel_internationally:
is_adult and travel_documents_valid and background_check_passed and financial_standing_good
unless not travel_documents_valid
then veto "Valid travel documents required"
rule eligibility_message:
"Not eligible"
unless not has_valid_visa
then "Valid passport but visa required"
unless can_travel_internationally
then "Eligible for international travel"