Table of Contents

ATP Algorithm

The current stock holds are added to the unfulfilled store orders chronology. Thus, save for the physical availability, store orders which are not fulfilled, but planned to be on a specific date, are taken into account (the Planned Release Date field indicates this date). Besides physical availability, other already planned stock movements are taken into account.

The calculated quantities for each date from the new chronology are reviewed and the smallest value is selected. This is the ATP quantity for the specified parameters.

We use the smallest value. If on a date when we have the smallest value a greater value is entered as ATP quantity, and this quantity is used for a new issuing operation, it will not be enough for all ordered operations. The minimum quantity in the new chronology actually shows the greatest value we can use for the date specified as a parameter without violating other issuing store processes.

Let’s apply that to the example from available to promise:

After adding the physical availability to the chronology, we have:

Date Physical availability Start quantity Receipt quantity Issue quantity End quantity
2021/10/01 8 3 - - 11
2021/10/03 8 - - 2 9
2021/10/04 8 - 16 4 21
2021/10/07 8 - - 8 13
2021/10/09 8 - - 7 6
2021/10/14 8 - 8 - 14
2021/10/16 8 - 4 9 9
2021/10/19 8 - - 2 7

Here is the graphical chart for the new chronology: Picture1

After reviewing the value column (or following the lowest values in the graphical chart), you can see that the lowest value is 6 pcs. This is the available to promise quantity for 2021/10/01.

Total clculations (for a period)

When calculating the ATP for a whole period (more than one date), the data gathering, as well as the combination of the chronology and the current stock holds, is executed the way we described earlier. After that, for every date in the period greater than or equal to the date specified as a parameter, the ATP is defined as follows:

  1. The minimum quantity value for the whole period is defined - let's call it min1. Then, we pick the last (greatest) date for this value - date1. For every date from the starting to date1 (including), the ATP is min1.

  2. If there are dates in the chronology after date1, the minimum quantity value for the period after date1 is min2. The last date which has this value is date2. From the date after date1 and before date2 (including), the ATP is min2.

  3. This is repeated until all dates in the chronology are covered.

The period we are making calculations for is divided into several sub-periods (at least one, and at most - equal to the number of dates in the chronology). In the first sub-period, there is a minimum value for the ATP. For each subsequent sub-period, the ATP is greater than the ATP for the previous sub-period.

For example, let's have have the following chronology for the period between 01.10 and 06.10, calculated after adding the current physical availability to the data from the unexecuted sore oders.

Date Physical availability Start quantity Receipt quantity Issue quantity End quantity
2021/10/01 12 8 - - 20
2021/10/03 12 - 2 - 22
2021/10/08 12 - 5 - 27
2021/10/09 12 - 2 19 10
2021/10/12 12 - - 7 3
2021/10/15 12 - 28 6 25
2021/10/16 12 - - 7 18
2021/10/20 12 - 6 9 15
2021/10/21 12 - - 3 12
2021/10/24 12 - 24 5 31
2021/10/30 12 - - 6 25
2021/10/31 12 - - 5 20

After reviewing the chronology, we establish that the period from 2021/10/01 to 2021/10/06 is divided to three sub-periods: one from 2021/10/01 to 2021/10/14, another from 2021/10/15 to 2021/10/23 and a third from 2021/10/24 to 2021/11/06. For the first period, the minimum value (hence the ATP) is 3 pcs. For the second period, it is 12 pcs, and for the last period, the ATP is 20 pcs.

These calculations are represented by a graphic:

Picture2

Modifications in the agorithm iplementation

There are some specific changes in the ATP calculation for algorithm implementation. When using the unexecuted store orders chronology instead of starting with an opening balance for a defined period, the definition of the start quantity for the unexecuted stre oders is not really effective. All store movements - the unexecuted by now store orders - are used without limits for date and without calculation for the starting value. These movements calculate the ATP for sub-periods. To calculate the ATP for a specific date, we simply take into account the periods before this date and the minimum value from the last period.

This method is effective enough. However, problems appear when we want to calculate the ATP for a date before all existing unexecuted store orders. There is no sore oders chronology for this date and as the opening balance is not calculated (it would be zero), the previously mentioned principle for ATP calculation cannot be applied.

When the date for which we calculate the ATP is before the earliest unexecuted store orders,the following principle is applied:

  1. All unexecuted store orders after the specified date are taken into account, and the ATP is calculated according to their chronology. This is a value projected available balance.

  2. The current available physical quantity is calculated - value [Current Stock Holds]

  3. If there are future unexecuted store orders, (i.e., if [projected available balance] is not null), then:

[ATP] = min([projected available balance], [Current Stock Holds])

  1. Otherwise, [ATP] = [Current Stock Holds]

For example, if the current physical availability is 10 pcs and there are the following unexecuted Store Orders:

  • 2021/10/09 - 2 pcs, receipt;

  • 2021/10/13 - 7 pcs, issue;

  • 2021/10/16 - 6 pcs, receipt.

the ATP for the dates from 2021/10/09 to 2021/10/15 (including) is 5 pcs. After this date, it is 11 pcs.

If we have the same data from the previous example, but the issue for 2021/10/13 is 1 pcs, then the ATPs would be as follows:

  • before 2021/10/09: 10 pcs (this is the smaller value from the current physical availability and the projected available balance after 2021/10/09);

  • from 2021/10/09 to 2020/10/15 (including): 11 pcs;

  • from 2021/10/16 onward: 17 pcs.