Daily Capacity Management

Carrier selection and allocation is a critical step in the shipping process. Ensuring that you select your preferred logistics providers at the right times, whilst at the same time ensuring that you do not over-allocate to them, is a constant daily challenge.

Some carriers have started implementing punitive capacity-driven pricing, and, on occasion, are even refusing to take any parcels that are over capacity. This means that the need for daily, capacity-driven allocation has become even more important.

This article shows you how, by adding some basic rules to Delivery Manager's allocation engine, you can:

  • Prioritise your preferred carrier services, while de-prioritising others.

  • Cap the daily numbers of parcels allocated to each of your services.

  • Phase allocation to services over the course of the day.

What you need to do before creating any rules

Contract Check

Before creating any rules, ensure that you have verified your carrier contracts and know what the current allocation limits and penalties are for each carrier service.

Allocation Data Setup

The key to capacity management is setting the despatch date correctly. For example, if you use a booking code, then you need to set it as in the following example:

@STANDARD/2021-02-01/00:00-23:59

Caution

If you omit the collection dates and times, then, once carrier limits have been reached, allocations will simply continue on the next day, using the standard allocation filter (e.g. cheapest first).

Avoid appending /LATEST at the end of a booking code, which forces Delivery Manager to prioritise the service with the latest despatch time (refer to Introduction to Booking Codes). This could conflict with any rules that you set up to prioritise carriers based on capacity.

If you use the allocation filter instead of a booking code (e.g. when using despatchConsignment instead of despatchConsignmentWithBookingCode), then you need to set the earliest and latest collection date attributes. For more information, refer to Booking Codes and the Allocation Filter and Filtering and Sorting.

You need to be aware that this use of a collection window in the booking code or allocation filter means that Delivery Manager will only try and find services that fall within that window. This might cause an issue with cut-offs, which we can illustrate via the use of a booking code:

  • @STANDARD/2021-02-01/00:00-23:59 will work until the carrier cut-off times are reached. For example, if service 1 has a cut-off of 20:00, and service 2 has a cut off of 21:00, this means that, from 21:00-23:59, all allocation requests with this booking code will fail to allocate as there are no available services to despatch on this date.

  • You could then amend your booking code to @STANDARD/2021-02-01/00:00-20:59. However, if service 2 had a limit imposed and that limit was reached by 20:00, then you would still have an hour 20:00-20:59 where all the allocations would fail.

You therefore need to be careful how your setup deals with cut-off times. One thing that you should avoid is amending all your service cut-offs in Delivery Manager to be the same - e.g. 23:59, because this could have an adverse impact on other parts of your integration and other rules that you might have set up.

Carrier 'Service Group' Maintenance

Ensure that each of your carrier services is associated with the appropriate carrier service group.

Caution

Each rule that applies to a carrier service will apply to the service in every 'service group' in which it appears. You should therefore keep the duplication of services across 'service groups' to a minimum to prevent carrier services becoming unexpectedly unavailable.

System Configuration Setup

If you are going to use the UI to configure rules that use scoring, as with both the prioritisation example and de-prioritisation example below, you need to ensure that the following system property is set to true for either the retailer or specific warehouse:

  • operation.mode.scoring.advanced

Before you start using any of custom the rules that use scoring, as with the rules used to phase allocation throughout the day, you need to ensure that the following system property is set to true for either the retailer or specific warehouse:

  • operation.mode.scoring

Prioritising a carrier/service

If you want a carrier service to be prioritised for selection to meet a contractual requirement, then you can use Delivery Manager's scoring as follows:

  1. After selecting Configure Allocation Rules on the Delivery Manager Setup menu, go down to Add Scoring Rules(s).

  2. Select Weighting by <number field> (weights & measures as the Rule type:

    Weighting_Rule_Encourage.png
  3. If you want the rule to take effect from now, leave From blank - otherwise, specify the date on which it is to start. If you want the rule to run indefinitely, leave To blank - otherwise, specify the date on which it is to stop.

  4. Select one of the following from the drop-down under Exclude:

    1. Softly encourage (score 0.9)

    2. Encourage (score 0.5)

    3. Strongly encourage (score 0.1)

    4. Attempt to force (score 0).

    Note

    The closer to zero a score is, the more likely the associated carrier service is to be used for allocation. You can specify your own exact score for a carrier service if you use the Rule Examples 'Custom' rule type.

  5. In the adjacent field, specify the carrier or service to which the rule applies.

  6. After 'for', specify the name of the warehouse to which the rule applies (or any warehouse if the rule is to apply across your entire shipping operation).

  7. After 'if the', specify parcel count from the drop-down.

  8. Then specify 'more than' followed by the number of parcels above which the carrier is to be prioritised for selection.

  9. Click Add rule(s).

  10. The rule appears at the top of the page, e.g.

    Weighting_Rule_Encourage_Created.png
  11. When you export the rule to a CSV file, you will see that it has been constructed as follows for the particular carrier service:

    Test Expression:
    (consignment.warehousecode==10080) && (consignment.parcelcount<100)
    Score Expression
    (score * 0.1)
    

    This will cause the service to be prioritised for selection once more than 100 parcels have been created.

De-prioritising a carrier/service

If you only want a carrier service to be selected when there are no other ones available, because it is nearing capacity, then you can use Delivery Manager's scoring as follows.

  1. After selecting Configure Allocation Rules on the Delivery Manager Setup menu, go down to Add Scoring Rules(s).

  2. Select Weighting by <number field> (weights & measures as the Rule type:

    Weighting_Rule.png
  3. If you want the rule to take effect from now, leave From blank - otherwise, specify the date on which it is to start. If you want the rule to run indefinitely, leave To blank - otherwise, specify the date on which it is to stop.

  4. Select one of the following from the drop-down under Exclude:

    1. Strongly Discourage (score 10)

    2. Discourage (score 2)

    3. Softly discourage (score 1.1)

    Note

    The further from zero a score is, the less likely the associated carrier service is to be used for allocation. You can specify your own exact score for a carrier service if you use custom rules.

  5. In the adjacent field, specify the carrier or service to which the rule applies.

  6. After 'for', specify the name of the warehouse to which the rule applies (or any warehouse if the rule is to apply across your entire shipping operation).

  7. After 'if the', specify parcel count from the drop-down.

  8. Then specify 'more than' followed by the number of parcels above which the carrier is to be de-prioritised for selection.

  9. Click Add rule(s).

  10. The rule appears at the top of the page, e.g.

    Weighting_Rule_Created.png
  11. When you export the rule to a CSV file, you will see that it has been constructed as follows for the particular carrier service:

    Test Expression:
    (consignment.warehousecode==10080) && (consignment.parcelcount>100)
    Score Expression
    (score * 10)

    This will cause the service to be de-prioritised for selection once more than 100 parcels have been created.

Rules that cap carriers/services

For each carrier/service that you wish to make unavailable for selection once the contracted amount of parcels have been allocated to it, proceed as follows:

  1. After selecting Configure Allocation Rules on the Delivery Manager Setup menu, go down to Add Scoring Rules(s).

  2. Select Despatch limits for services <by number> as the Rule type:

    Despatch_limits.png
  3. If you want the rule to take effect from now, leave From blank - otherwise, specify the date on which it is to start. If you want the rule to run indefinitely, leave To blank - otherwise, specify the date on which it is to stop.

  4. In the first Limit field, specify the name of the service or carrier to which the rule applies.

  5. In the second Limit field, specify service or carrier as required.

  6. In the third Limit field, specify the name of the warehouse to which the rule applies (or any warehouse if the rule is to apply across your entire shipping operation).

  7. In the remaining fields, specify the number of 'parcels per day' that can be allocated to the carrier/service before it is is made unavailable for selection.

  8. Click Add rule(s).

  9. The rule appears at the top of the page, e.g.

    Despatch_limits_Rule.png
  10. When you export the rule to a CSV file, you will see that it has been constructed as follows for the particular carrier service:

    Test Expression:
    (consignment.warehousecode==10080)
    Score Expression:
    iif( stat("svc_p_count",option.collection.from,consignment.warehousecode) + consignment.parcelcount <= 500 , score , -1 )

    This will cause the service to no longer be available on the collection day once 500 parcels have been allocated to it.

Avoid capping all your carriers and carrier services at their contractual levels. Otherwise, you may run out of services to which to allocate parcels. For example, if we go back to:

@STANDARD/2021-02-01/00:00-23:59

Delivery Manager will keep trying to allocate parcels to available services within the STANDARD service group based on the standard allocation filter. Once a service is no longer available, it moves onto the next one, etc., until there are no services left to which to allocate any balance of parcels. You just need to be sure that each service group contains sufficient capacity. Incurring fees on rare occasions is probably preferable to letting down your consumers.

Using custom rules to phase the capping of limits

There is a risk that the rules set up to cap carriers/services will leave you unable to cope with a last minute rush of pre-cut-off orders that you need to despatch.

You can avoid this this by using custom rules to phase limits throughout the day, e.g.

Test Expression:
(carrier.code=="APG" && (consignment.warehousecode==10080) && (formatdate(now(),"HH:mm")<"06:30")
Score Expression:
if( stat("svc_p_count",today(),consignment.warehousecode) + consignment.parcelcount <= 250 , score, score *10 )

Test Expression:
(carrier.code=="APG" && (consignment.warehousecode==10080) && (formatdate(now(),"HH:mm")<"12:30")
Score Expression:
if( stat("svc_p_count",today(),consignment.warehousecode) + consignment.parcelcount <= 500 , score, score *10 )

Test Expression:
(carrier.code=="APG" && (consignment.warehousecode==10080) && (formatdate(now(),"HH:mm")<"16:30")
Score Expression:
if( stat("svc_p_count",today(),consignment.warehousecode) + consignment.parcelcount <= 750 , score, score *10 )

etc.

Caution

You must always test your custom rules before using them in production.

Proportional allocation

Although Metapack also allows you to use rules to configure Delivery Manager to set up proportional allocation - i.e. so that set percentages of numbers of parcels are allocated to different carriers - it is beyond the scope of this article.

This is because such a solution needs to be tailored to the seller's individual needs, e.g. depending on whether or not you wish to incorporate a 'round robin' allocation on a second-by-second basis. Each individual solution needs to be constructed by a Metapack Solutions Architect, and then thoroughly tested to ensure that carrier availability is maintained throughout the day.

Note

Please create a ticket with Metapack Customer Support if you wish to explore proportional allocation.