Each rule's job is to grab order items out of the flow and mince them into one or more rates (delivery options). Which items would be captured by a rule is defined by conditions. Items which don't match rule conditions fall-through to a next rule.
So, overall, the system works by iterating over a list of defined rules, checking items against each rule's conditions until all items get captured (or there are no more rules). This looks like a child playing with a shape-sorter bucket: Where a child is the system, a shape is an order and each hole is a rule conditions set.
- For example, you can have rules to handle different order destinations:
- Or lightweight and heavy packages: