Material Resources Planning
Material Resources Planning (MRP) is a time-series analysis tool which helps you plan purchasing and production to meet customer demand. It will combine information about your current inventory with outstanding sales, purchases, and production orders to determine both the quantity and timing of additional inventory required. It will then create Requirements to help you order or manufacture more products to meet demand.
To use MRP, you must first set up the following information:
- Set up Bill of Material for products which you sell.
- Set up Product Suppliers for products which you purchase. You should designate a "Main Supplier" for the primary vendor of your products.
- Set up Inventory Stock Levels for all your products, by warehouse.
Then you can use the Run MRP Screen to run material resources planning for your warehouses. After running MRP, you can use the View MRP Screen to look at the results. You can also use the Open Requirements Screen to approve or cancel the requirements created by MRP and thus start the purchasing and production process.
How MRP Works
Imagine drawing a horizontal line across a piece of paper. Now imagine that it is a timeline, and as you move from left to right on the line, you are moving into the future. Pick a product. Now for each sales order you have, mark on the line the date when you must ship the order and the quantity you must ship to your customer. Repeat this for all upcoming receipts of inventory from your suppliers or from manufaturing operations at your company. Now you have a time line of all the "inventory events" for your product. You can then take the starting inventory of your product, move from left to right into the future, and calculate the inventory at different points in the future. Next, whenever the inventory dips below your minimum stock quantity, write down a "requirement" to obtain additional inventory. If this product is purchased from suppliers, then this means you need to purchase and receipt. If the product is manufactured, the requirement means you need to manufacture it.
You have just manually performed MRP for one of your products. A real MRP system is much more complicated and must consider delivery lead times and bills of materials for all of your products, but conceptually it is very similar to the process above.
The opentaps MRP system begins by creating the inventory events timeline for every product which has a minimum stock defined in the warehouse. It will create a negative inventory event when a product is required for a sales order or as the raw material of a production run and a positive inventory event when it is to be received from a purchase order or as the product as a production run. When there are pending production runs, it will also look through the Bill of Material of a product to create inventory events for the dependent parts of a product.
It will then start from products which are at the top of the bill of material and run through all their inventory events. If at any time the inventory events cause BOM to fall below the minimum stock, the system will create a new requirement to purchase or manufacture the product. To determine whether a product will be manufactured or purchased, the system will consider whether it has a Bill Of Material of its own and whether it has any supplier products defined for purchasing. By default, a part is considered manufactured if it has child nodes AND if it also has no unexpired SupplierProducts defined. After completing all the products at one BOM level, it will go down to the next BOM level and repeat the process, until it has either traversed all the BOM levels or it has traversed three levels without finding any products which require any purchases or production.
Since MRP is based on a time line of a product's inventory events, it is extremely sensitive to assumptions about the timing of inventory events. For example, imagine that a sales order must be shipped out at 12 PM (noon) today, and you have a purchase order coming in at 12:01 PM. Should the MRP assume that you can wait until 12:01 to ship out the order, or does it actually need to order additional inventory so that it is in stock in time for the 12 PM order? The "common sense" answer to that question is something which the MRP system needs to simulate. The opentaps MRP makes the following assumptions about the timing of events:
- It will use the stated shipment or production time for inventory events. If those are not available, it will assume the current time, except for the following:
- For sales order shipments, if there is now specified ship time, it will use the "default years offset" parameter to move the sales order shipment X years into the future. By default, this parameter is set to 1 year, so MRP assumes that any sales order which does not have a shipment date set will need to be shipped 1 year in the future.
- It will then use ProductFacility.daysToShip to set the time when a sales order shipment is needed. For example, if a sales order is scheduled to ship on Oct 15, 2007 and the product's daysToShip is 10 days, it will assume that the products on the order must be available in the warehouse on Oct 5, 2007.
- No event will be set into the past: if any inventory event is before the current date/time, MRP will adjust it to the current date/time and mark it as "late."
Note also that at this time, the opentaps MRP is completely deterministic: it does not use any probabilities in calculating inventory events or potential requirements.
To make MRP work, the following must be done:
- The products must have ProductFacility records with minimumStock, reorderQuantity, and, optionally, daysToShip defined for the warehouse that you are running MRP for.
- Products which are manufactured must have their Bill of Material defined and the correct BOM code. There is a service called initLowLevelCode which can be run to set this up for products.
- Products which are purchased from suppliers should have SupplierProduct records defined in the Catalog Manager's Product > Suppliers tab. You should define a Main Supplier.
- If you have multiple warehouses, you should define backup warehouses so that the system will know which warehouses to transfer parts from.