repo spec_composition
spec base_config
"""
Base Pricing Configuration
Foundation pricing rules that can be referenced and customized.
"""
data standard_discount : 5%
data tax_rate : 21%
data base_price : number -> minimum 0 -> default 100
rule price_with_tax:
base_price * (1 + tax_rate)
rule discounted_price:
base_price * (1 - standard_discount)
rule final_price:
base_price * (1 - standard_discount) * (1 + tax_rate)
spec wholesale
"""
Wholesale Pricing
Standalone wholesale pricing with its own defaults.
"""
data base_price : 75
data standard_discount : 15%
data tax_rate : 21%
rule price_with_tax:
base_price * (1 + tax_rate)
rule discounted_price:
base_price * (1 - standard_discount)
rule final_price:
base_price * (1 - standard_discount) * (1 + tax_rate)
rule wholesale_final:
final_price
rule margin_savings:
100 - base_price
spec retail
"""
Retail Pricing
Standalone retail pricing with its own defaults.
"""
data base_price : 120
data standard_discount : 0%
data tax_rate : 21%
rule price_with_tax:
base_price * (1 + tax_rate)
rule discounted_price:
base_price * (1 - standard_discount)
rule final_price:
base_price * (1 - standard_discount) * (1 + tax_rate)
rule retail_final:
final_price
rule premium_multiplier:
base_price / 100
spec line_item
"""
Order Line Item
Combines pricing with quantity calculations.
Demonstrates nested spec references and multi-level data access.
"""
data quantity : number -> minimum 0 -> default 10
uses pricing: base_config
rule line_total:
pricing.final_price * quantity
rule has_discount:
pricing.standard_discount > 0%
spec simple_order
"""
Simple Order
References an order line item and overrides its literal data.
Demonstrates literal bindings through nested spec references.
"""
uses line: line_item
with line.quantity : 100
rule order_total:
line.line_total
rule effective_unit_price:
order_total / line.quantity
spec multi_reference
"""
Multiple Page References
Shows multiple independent spec references in a single spec.
Demonstrates mixing different base specs for complex scenarios.
"""
uses base_config
uses retail
uses wholesale
rule avg_discount:
(wholesale.standard_discount
+ retail.standard_discount
+ base_config.standard_discount)
/ 3
rule price_range:
retail.retail_final
- wholesale.wholesale_final
rule all_configs_loaded:
wholesale.wholesale_final > 0 and retail.retail_final > 0 and base_config.final_price > 0