What is Asset Tracking?
Asset Tracking in R12 (formerly known as Enterprise Installed Base), provides the functionality of operational and financial tracking of assets that are deployed in the feild as well as that are in inventory.
Assets in Procure to Pay
Traditionally we  have been creating assets in Fixed Assets using the Procure to Pay business flow. These POs have destination type as expense and not as inventory. Once the PO is matched to Invoice, Mass Additions Create Program sends assets to Mass Additions interface.
On the other hand Asset Tracking can create assets that are purchased into Inventory. While still being in Inventory, assets are created in fixed assets and depreciated. Operationally these assets are tracked in this application using the Installed Base’s current location. It uses Installed Base functionality as backbone to track the location of the assets.
Features of Asset Tracking
Asset Tracking is all about two kinds of items : Depreciable Items and Non-depreciable items. Depreciable items are those that depreciate while still being in Inventory. Non-Depreciable items are those that are still tracked as assets and depreciated while being “deployed” in the field (issued to field location or a project).
Foremost requirement for tracking an asset in this application is that the item is Intalled Base trackable. This is an attribute maintained in the item master. Using the integration between Inventory and Installed Base, all depreciable items, are created as assets as soon they are received into inventory.
All transactions coming from inventory and deployment transactions of Asset Tracking are tracked in Installed Base against the instance of this asset. Also Instance is linked to the financial asset in the installed base.
This application tracks the asset life cycle. When a depreciable item is received into inventory, asset gets created, but when it is sold or issued out the asset gets retired. On the otherside non-depreciable items are created as assets only when they are deployed not when they are in Inventory.
Alternatively assets can be created in the Fixed Assets first and then created in Asset Tracking, which automatically ties the asset and instance in Installed Base.
Integration of Asset Tracking
Integration of Asset TrackingAsset Tracking inherits all the integration that is out there for the Installed Base with other products. Asset Tracking integrates the operational aspects of the installed base with financial aspects of assets.
Here is the code snippet for creating items using API (traditionally we are used to use item open interface) in the Product Life Cycle Management process. While this does not replace loading items using open interface, this API can be used to manage the lifecycle of the item on a dialy basis.

Over a period time, companies conceptualize products, design them, build them, manage them and finally, retire them.

Here in the article I am introducing the API first. In the subsequent articles, we will manage the “lifecycle” of the product using the same API.

These code snippets are tested in 12.0.4.

CREATE OR REPLACE PACKAGE xx_create_item
IS
   g_miss_num    CONSTANT NUMBER       := 9.99e125;
   g_miss_char   CONSTANT VARCHAR2 (1) := CHR (0);
   g_miss_date   CONSTANT DATE         := TO_DATE (‘1’, ‘j’);
   g_false       CONSTANT VARCHAR2 (1) := fnd_api.g_false;                                                               
   g_true        CONSTANT VARCHAR2 (1) := fnd_api.g_true;

   PROCEDURE create_item (
      p_item_number         IN       VARCHAR2
    , p_description         IN       VARCHAR2
    , p_organization_id     IN       NUMBER
    , p_item_type           IN       VARCHAR2
    , x_inventory_item_id   OUT      NUMBER
    , x_organization_id     OUT      NUMBER
    , x_return_status       OUT      VARCHAR2
    , x_msg_count           OUT      NUMBER
    , x_msg_data            OUT      VARCHAR2
   );

   PROCEDURE create_item1 (
      p_item_number         IN       VARCHAR2
    , p_description         IN       VARCHAR2
    , p_organization_id     IN       NUMBER
    , p_item_type           IN       VARCHAR2
    , x_inventory_item_id   OUT      NUMBER
    , x_organization_id     OUT      NUMBER
    , x_return_status       OUT      VARCHAR2
    , x_msg_count           OUT      NUMBER
    , x_msg_data            OUT      VARCHAR2
   );
END xx_create_item;
/

CREATE OR REPLACE PACKAGE BODY xx_create_item
IS
   PROCEDURE create_item (
      p_item_number         IN       VARCHAR2
    , p_description         IN       VARCHAR2
    , p_organization_id     IN       NUMBER
    , p_item_type           IN       VARCHAR2
    , x_inventory_item_id   OUT      NUMBER
    , x_organization_id     OUT      NUMBER
    , x_return_status       OUT      VARCHAR2
    , x_msg_count           OUT      NUMBER
    , x_msg_data            OUT      VARCHAR2
   )
   IS
      l_template_id       NUMBER;
      x_item_id           NUMBER;
      x_org_id            NUMBER;
      l_item_number       VARCHAR2 (100);
      l_description       VARCHAR2 (4000);
      l_organization_id   NUMBER;
      v_msg_index_out     NUMBER;
      v_message           VARCHAR2 (100);
   BEGIN
      SELECT template_id
        INTO l_template_id
        FROM mtl_item_templates_b
       WHERE template_name = p_item_type;                                                                    

      l_item_number := p_item_number;
      l_description := p_description;
      l_organization_id := l_organization_id;
      ego_item_pub.process_item (p_api_version                 => 1.0
                               , p_transaction_type            => ‘CREATE’
                               , p_language_code               => ‘US’
                               , p_template_id               => 207
                               , p_organization_id             => 204
                               , p_master_organization_id      => 204
                               , p_description                 => ‘TEST113’
                               , p_long_description            => ‘TEST113’
                               , p_item_number                 => ‘TEST113’
                               , p_segment1                    => ‘TEST113’
                               , x_inventory_item_id           => x_inventory_item_id
                               , x_organization_id             => x_organization_id
                               , x_return_status               => x_return_status
                               , x_msg_count                   => x_msg_count
                               , x_msg_data                    => x_msg_data
                                );

      IF x_msg_count > 0
      THEN
         FOR v_index IN 1 .. x_msg_count
         LOOP
            fnd_msg_pub.get (p_msg_index => v_index, p_encoded => ‘F’, p_data => x_msg_data, p_msg_index_out => v_msg_index_out);
            v_message := SUBSTR (x_msg_data, 1, 200);
            DBMS_OUTPUT.put_line (x_msg_data);
            DBMS_OUTPUT.put_line (‘============================================================’);
         END LOOP;

         DBMS_OUTPUT.put_line (SUBSTR (v_message, 1, 2000));
         DBMS_OUTPUT.put_line (‘============================================================’);
      END IF;
   END;

   PROCEDURE create_item1 (
      p_item_number         IN       VARCHAR2
    , p_description         IN       VARCHAR2
    , p_organization_id     IN       NUMBER
    , p_item_type           IN       VARCHAR2
    , x_inventory_item_id   OUT      NUMBER
    , x_organization_id     OUT      NUMBER
    , x_return_status       OUT      VARCHAR2
    , x_msg_count           OUT      NUMBER
    , x_msg_data            OUT      VARCHAR2
   )
   IS
      l_template_id       NUMBER;
      l_item_number       VARCHAR2 (100);
      l_description       VARCHAR2 (4000);
      l_organization_id   NUMBER;
      v_msg_index_out     NUMBER;
      v_message           VARCHAR2 (100);
   BEGIN
      l_item_number := p_item_number;
      l_description := p_description;
      l_organization_id := p_organization_id;
      ego_item_pub.process_item (p_api_version            => 1.0
                               , p_transaction_type       => ‘CREATE’
                               , p_language_code          => ‘US’
                               , p_template_name          => p_item_type
                               , p_item_number            => l_item_number
                               , p_segment1               => l_item_number
                               , p_organization_id        => l_organization_id
                               , p_description            => l_item_number
                               , p_long_description       => l_item_number
                               , x_inventory_item_id      => x_inventory_item_id
                               , x_organization_id        => x_organization_id
                               , x_return_status          => x_return_status
                               , x_msg_count              => x_msg_count
                                );
   END;
END xx_create_item;
/

SHOW errors
/
DECLARE
   v_msg_index_out   NUMBER;
   x_item_id         NUMBER;
   x_org_id          NUMBER;
   x_return_status   VARCHAR2 (1);
   x_msg_count       NUMBER;
   x_msg_data        VARCHAR2 (4000);
   v_message         VARCHAR2 (4000);
BEGIN
   fnd_global.apps_initialize (1318, 50583, 401);
   inv_globals.set_org_id (204);
   xx_create_item.create_item1 (p_item_number            => ‘TEST111’
                             , p_description            => ‘TEST111’
                             , p_organization_id        => 204
                             , p_item_type              => ‘Finished Good’
                             , x_inventory_item_id      => x_item_id
                             , x_organization_id        => x_org_id
                             , x_return_status          => x_return_status
                             , x_msg_count              => x_msg_count
                             , x_msg_data               => x_msg_data
                              );
         DBMS_OUTPUT.put_line (‘Return Status is :’||x_return_status);                            
         DBMS_OUTPUT.put_line (‘Message Count is :’||x_msg_count);
         DBMS_OUTPUT.put_line (‘Create Item ID  is :’||x_item_id);
         DBMS_OUTPUT.put_line (‘Created in Organization is :’||x_org_id);

   IF x_msg_count > 0
   THEN
      FOR v_index IN 1 .. x_msg_count
      LOOP
         fnd_msg_pub.get (p_msg_index => v_index, p_encoded => ‘F’, p_data => x_msg_data, p_msg_index_out => v_msg_index_out);
         v_message := SUBSTR (x_msg_data, 1, 200);
         DBMS_OUTPUT.put_line (x_msg_data);
         DBMS_OUTPUT.put_line (‘============================================================’);
      END LOOP;

      DBMS_OUTPUT.put_line (SUBSTR (v_message, 1, 2000));
      DBMS_OUTPUT.put_line (‘============================================================’);
   END IF;
END;
/

DECLARE
   v_msg_index_out   NUMBER;
   x_item_id         NUMBER;
   x_org_id          NUMBER;
   x_return_status   VARCHAR2 (1);
   x_msg_count       NUMBER;
   x_msg_data        VARCHAR2 (4000);
   v_message         VARCHAR2 (4000);
BEGIN
   –fnd_global.apps_initialize (1318, 50583, 401);
   inv_globals.set_org_id (204);
   xx_create_item.create_item1 (p_item_number            => ‘TEST111’
                             , p_description            => ‘TEST111’
                             , p_organization_id        => 204
                             , p_item_type              => ‘Finished Good’
                             , x_inventory_item_id      => x_item_id
                             , x_organization_id        => x_org_id
                             , x_return_status          => x_return_status
                             , x_msg_count              => x_msg_count
                             , x_msg_data               => x_msg_data
                              );
         DBMS_OUTPUT.put_line (‘Return Status is :’||x_return_status);                            
         DBMS_OUTPUT.put_line (‘Message Count is :’||x_msg_count);
         DBMS_OUTPUT.put_line (‘Create Item ID  is :’||x_item_id);
         DBMS_OUTPUT.put_line (‘Created in Organization is :’||x_org_id);

   IF x_msg_count > 0
   THEN
      FOR v_index IN 1 .. x_msg_count
      LOOP
         fnd_msg_pub.get (p_msg_index => v_index, p_encoded => ‘F’, p_data => x_msg_data, p_msg_index_out => v_msg_index_out);
         v_message := SUBSTR (x_msg_data, 1, 200);
         DBMS_OUTPUT.put_line (x_msg_data);
         DBMS_OUTPUT.put_line (‘============================================================’);
      END LOOP;

      DBMS_OUTPUT.put_line (SUBSTR (v_message, 1, 2000));
      DBMS_OUTPUT.put_line (‘============================================================’);
   END IF;
END;

DISCRETE MANUFACTURING
Discrete manufacturing is a manufacturing process in which distinct items/products(which you can easily count, see and touch) are built or manufactured in discrete batches on manufacturing floor. It creates physical products which go directly to business and consumers, and assemblies that are used by other manufacturers. The resulting product is easily identifiable. It is different from process manufacturing where products are undifferentiated (can not tell the difference between one product and another) such as oil, natural gas and salt.

A typical characteristic of discrete manufacturing is the frequent switching from one manufactured product to another. The products are typically manufactured in individually defined lots, the sequence of work centers through production varying for each one of these. Costs are calculated on the basis of orders and individual lots

Discrete manufacturing is also characterized by individual or separate unit production. Units can be produced in low volume with very high complexity or high volumes of low complexity. Low volume/high complexity production results in the need for an extremely flexible manufacturing system that can improve quality and time-to-market speed while cutting costs. High volume/low complexity production puts high premiums on inventory controls, lead times and reducing or limiting materials costs and waste

Discrete manufacturing typically involves the sequence of work centers through which the products can pass during production. This sequence can be varied as per requirement. The order of work centers is determined in routing’s, which can often be very complex. There can be waiting times between the individual work centers. Also, semi-finished products are frequently placed in interim storage prior to further processing

Examples like Transportation equipment, Automobiles, toys, Computer and accessories and electronic products, consumer electronics, furniture, Lego Blocks, Appliances and other house hold items, Industrial and electrical equipment, Medical equipment and supplies, Fabricated metal, furniture, recycling, pencil ,light bulb, telephone, bicycle, Fuel Pump etc…

PROCESS MANUFACTURING
Process manufacturing is different from Discrete manufacturing. Manufacturing is not in discrete batches but is a process of pressing/mixing/chemical processing/heating/boiling liquid/semi liquid/solid and powder or raw materials. Once you manufacture a product by using process manufacturing, the output can not be brought to it’s original basic form

For example orange juice with sugar added cannot be put back in to the Orange and Sugar separately. On the other hand a computer manufactured by a discrete manufacturing process can be disassembled and the parts can be returned to stock to a large extent. Examples of process manufacturing are food products, beverages, paints & coatings, chemicals, specialty chemicals , pharmaceuticals, consumer packaged goods, Bulk drug pharmaceuticals, Nutraceutical, cosmeceutical and biotechnology industries. In Process Manufacturing, there are ingredients and not parts; there are formulas and not bill of materials; and bulk, not Unit of measure Each

FLOW MANUFACTURING

Flow Manufacturing is an innovative manufacturing method which synchronizes production with customer demand

Oracle Flow Manufacturing module supports the entire build-to-order manufacturing process which includes make-to-stock, configure-to-order, discrete-repetitive, assemble-to-order, and engineer-to-order manufacturing strategies and methods. It initiates schedules as soon as customer orders are received, and ensures shipment as soon as build is complete. Flow manufacturing employs pulls material using kanbans planning and back flushes material and costs upon completion. This in turn helps decrease inventories, optimize machine utilization, reduce response time to customer orders, and simplify shop floor activities.

Flow manufacturing production lines are designed to support the inter-mixed production of multiple products within a family on the same line at a constant rate. It can be used in Inventory module to replenish kanbans and in Work in Process to complete assemblies without having to create a job or a schedule (work order less job)

PROJECT MANUFACTURING
Large contracts or projects received by the companies can not be completely fulfilled by process manufacturing or discrete or repetitive manufacturing methods. It requires a separate manufacturing method known as project manufacturing. Project manufacturing meets demand driven production requirements for large contracts or projects. It allows you to plan, schedule, process and cost against a specific contract or a group of contracts or project for a specific customer.

Oracle Project Manufacturing supports companies in the Engineer-To-Order, Make-To-Order manufacturing strategies and Aerospace and Defense industries. These industries plan, track, procure, and cost based on project, contract, or Seiban numbers.

If Oracle Projects is installed and the Project References Enabled and Project Control Level parameters are set in the Organization Parameters window in Inventory module, you can assign project and, if required, task references to planned orders, jobs, purchase orders, sales orders, miscellaneous transaction and other entities within Oracle Manufacturing. If the Project Cost Collection Enabled parameter is also set in inventory organization parameters, you can optionally collect and transfer manufacturing cost to Oracle Projects module. Project costs are tracked by project/task and expenditure type.

CONFIGURE TO ORDER (CTO):
It is a method of manufacturing which allows you, or your customer, to choose a base product at the very moment of ordering and then configure all the variable parameters (features) associated with that product from defined/available options. Based on these selections, configurable items on each quote or order typically generates the unique product configuration and manufacturing routing and/or bill of materials based on various features and options. Vendor/order receiving company subsequently builds that configuration dynamically upon receipt of the order. The ability of the vendor to make and deliver products customized to specific customer needs offers a powerful competitive edge over competitors.

CTO is an environment in which the product or service is assembled or kitted on receipt of the sales order. Oracle EBS supports the Configure to Order environment with a range of features in order entry, demand forecasting, master scheduling, production, shipping, and financial accounting. Configure to Order includes Pick-to-Order (PTO) and Assemble-to-Order (ATO) items, models, and hybrids. It supports building configurations using other configurations as sub-assemblies (multi-level configure-to-order), internal and external sourcing of ATO models at any level in the BOM and supports multi-level PTO/ATO hybrids.
PICK TO ORDER (PTO):
It is a configure-to-order environment where the options and included items in a PTO model (finished good) appear on pick slips after you receive the sales order from customer. Pickers gather the options (based on selection rules), the predefined shippable products parts/components or service from their predefined locations using pick slip and then ship the order. It is assumed that options and components quantity are readily available. It is an alternative to manufacturing the parent item on a work order and then shipping it. There is no additional value added after getting the customer order

Example: Computer System (CPU, Monitor and Printer) A pick to order model can have PTO option class, PTO items, ATO model, ATO Option class and ATO option items. There can not be any PTO model, PTO option class or PTO item under an ATO model. You want to manufacture a promotional laptop computer, you need laptop computer, dikettes, accessories and battery pack. Here, you define PL computer as PTO model, laptop computer as ATO model, battery pack, diskette and accessories as purchase items

ASSEMBLE-TO-ORDER (ATO):

ATO simplifies the process of manufacturing finished goods. These goods are standard products and are often configured by customers from Bills of material, where you can define available options for unique product configurations. Based on forecasting, subassemblies are manufactured prior to receiving the customer order and when the order is received, the stocked subassemblies and components are assembled to make the finished products. It is an environment where you open a final assembly order to assemble items that customers orders. It is manufacturing method/strategy which allows a product to be made or service to be available to meet the needs of a specific customer order (i.e. If i am a customer i can build my own configuration from the available options). While producing finished goods on a large scale, this requires sophisticated planning processes which master schedules ATO models and options and then create work orders to build the unique configuration in WIP module while maintaining control of inventory, planning, cost accounting and Bills of Material. Planning process also anticipates changing demand for external or internal components or accessories and at the same time focuses on product customizations for individual customers

WIP, Order Management and Shipping modules support building and shipping of ATO configurations. A discrete job is created from a configuration. An assemble to order item/assembly then can be linked to a sales order. Assemble-to-order is also an item attribute in Inventory module that you can apply to standard, model, and option class items. In Bills of Material module, a model bill can be either assemble-to-order or pick-to-order and an option class bill can be either assemble-to-order or pick-to-order

Example: Automobiles, computer manufacturing…

MAKE TO STOCK (MTS):

In MTS, stock is created by companies for items without receiving an order from customer. Examples are manufacturing of refrigerators, washing nachines and Television sets. They are manufactured in a shop floor based on master schedule and stocked in finished goods subinventory until they are shipped to a cutomer

Example: You can Purchase certian goods from available vendors and manufacture some of the goods on your shop floor. and finally build a product and store and ship to your customer.

MAKE-TO-ORDER (MTO):
MTO are manufactured after receiving customer order, which means customer is willing to accept longer delivery period. The examples are commercial dish washers and refrigerators for hotels. These items are produced in a shop floor or in job shop depending up on the range of product families produced by the factory. In order to reduce lead time the factory often uses ready components to manufacture a product.

ENGINEER-TO-ORDER (ETO):

ETO item is built on the customer product specifications such as large commercial aircrafts. Such product can not be produces according to existing specifications of the company because some engineering skill is required to incorporate customer specifications in to the design of the final product. Companies using this manufacturing strategy, always quote longer lead time .The engineering and manufacturing costs involved are also high and are tracked for each order separately.

Normally while converting legacy systems to oracle, or implementing a new brand oracle ERP to a company. There are lot of steps and set ups involved for each and every module.

Let us consider for an example we are configuring the PURCHASING system, there are some specific setups which need to be be in place to have the PURCHASING module to work as expected.

Attached is the document which let you know the set up check list for the PURCHASING.