Design such a framework with the following constrains:
- Have one unified interface for all couriers.
- The minimal feature set of every courier should be: creating a waybill, print waybill label, tracking shipment status, and mapping statuses to equivalent statuses in the system.
- Optional cancellation functionality for some couriers.