ofbiz-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Swapnil Shah (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OFBIZ-7356) OFBIZ-6964: Document finalized design to support replenishment planning through any inter-company facility
Date Sun, 20 Aug 2017 12:54:02 GMT

    [ https://issues.apache.org/jira/browse/OFBIZ-7356?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16134415#comment-16134415
] 

Swapnil Shah commented on OFBIZ-7356:
-------------------------------------

The initial rational for keeping RMEI at ProductStoreFacilty level was basically to allow
the system to set the replenishment policy at store level in coherence with real time business
practices. Many a times its possible that multiple stores are served by same primary facility
 (which can be defined using ProductStore) and possibly setting RMEI at ProductFacility would
implicitly end up apply the same replenishment policy for all linked stores. 

One such typical scenarios that could be pretty common is that replenishment for certain Product
are part of DSD arrangement at certain store whereas it could be replenished via intra company
transfers for other stores due to different logistical & other factors. 

The purpose of introducing PFA (ProductFacilityAssoc) was to support multiple bill of distributions
eventually (and as of now business can live by just setting and limiting it for the products
that are eligible for intra-company transfers) as most of the design and algorithm revolves
around it. Any kind of data delinquency might lead to inaccurate planning. 

> OFBIZ-6964: Document finalized design to support replenishment planning through any inter-company
facility
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: OFBIZ-7356
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-7356
>             Project: OFBiz
>          Issue Type: Sub-task
>          Components: manufacturing, order, product
>            Reporter: Swapnil Shah
>            Assignee: Swapnil Shah
>
> Here are high level design notes to based on the requirement specified under OFBIZ-7355
to support the product level replenishment from any inter-company facility before raising
the ordering from an outside vendor.
> * We could extend the MRP logic (MrpEvent,Requirenent) to honor these new types and create
corresponding event & requirement for Stock transfer between facilities.
> * Introduce two new entities ProductFacilityAssoc & FacilityAssocType and use them
in conjunction with MrpEventType and corresponding RequirementType to serve the requirement
for replenishing the store's via Inter-facility transfers mode.  The data model & UI could
be extended as follows:
> {code}
> <!-- New Entity ProductFacilityAssoc (Product-wise associations between facilities
to define from what all facilities a given product can be replenished)-->
> <entity entity-name="ProductFacilityAssoc"
> title="Define associations between Product facilities">
> <field name="productId" type="id-ne"/>
> <field name="facilityId" type="id-ne"/>
> <field name="facilityIdTo" type="id-ne"/>
> <field name="facilityAssocTypeId" type="id-ne"/>
> <field name="fromDate" type="date-time"/>
> <field name="thruDate" type="date-time"/>
> <field name="sequenceNum" type="numeric"/> 
> <prim-key field="productId"/>
> <prim-key field="facilityId"/>
> <prim-key field="facilityIdTo"/>
> <prim-key field="facilityAssocTypeId"/>
> <prim-key field="fromDate"/>
> <relation type="one" fk-name="PRFACASSOC_PRO" rel-entity-name="Product">
> <key-map field-name="productId"/>
> </relation>
> <relation type="one" fk-name="PRFACASSOC_FAC" title="From" rel-entity-name="Facility">
> <key-map field-name="facilityId"/>
> </relation>
> <relation type="one" fk-name="PRFACASSOC_FACTO" title="To" rel-entity-name="Facility">
> <key-map field-name="facilityIdTo" rel-field-name="facilityId"/>
> </relation>
> <relation type="one" fk-name="PRFACASSOC_TYPE" rel-entity-name="FacilityAssocType">
> <key-map field-name="facilityAssocTypeId"/>
> </relation>
> </entity>
> <!-- New Entity FacilityAssocType (type of associations between facilities)-->
> <entity entity-name="FacilityAssocType"
> title="Define associations between facilities">
> <field name="FacilityAssocType" type="id-ne"/>
> <field name="description" type="description"/>
> <prim-key field="facilityAssocTypeId"/> 
> </entity>
> <!-- Extend Entity MrpEvent (for destination facility)-->
> <entity entity-name="MrpEvent"
> <field name="facilityIdTo" type="id-ne"/>
> </entity>
> <!-- Extend Entity Requirement (for destination facility)-->
> <entity entity-name="Requirement"
> <field name="facilityIdTo" type="id-ne"/>
> </entity>
> <!-- New FacilityAssocType (type of association between facilities)-->
> <ProductFacilityAssocType productFacilityAssocTypeId="BACKUP_WAREHOUSE" description="Facility
that serves another facility in terms of inventory"/>
> <!-- New ProductFacilityAssoc (Association between facilities)-->
> <ProductFacilityAssoc productId="GZ-8544" facilityId ="RegionalWarehouse_01" facilityIdTo="StoreWarehouse_01"
facilityAssocTypeId="BACKUP_WAREHOUSE" sequenceNum="01" fromDate="2001-01-01 12:00:00"/>
> <ProductFacilityAssoc productId="GZ-8544" facilityId ="RegionalWarehouse_02" facilityIdTo="StoreWarehouse_01"
facilityAssocTypeId="BACKUP_WAREHOUSE" sequenceNum="02" fromDate="2001-01-01 12:00:00"/>
> <ProductFacilityAssoc productId="GZ-8544" facilityId ="CentralWarehouse" facilityIdTo="StoreWarehouse_01"
facilityAssocTypeId="BACKUP_WAREHOUSE" sequenceNum="03" fromDate="2001-01-01 12:00:00"/>
> <ProductFacilityAssoc productId="GZ-8544" facilityId ="CentralWarehouse" facilityIdTo="RegionalWarehouse_01"
facilityAssocTypeId="BACKUP_WAREHOUSE" sequenceNum="01" fromDate="2001-01-01 12:00:00"/>
> <ProductFacilityAssoc productId="GZ-8544" facilityId ="CentralWarehouse" facilityIdTo="RegionalWarehouse_02"
facilityAssocTypeId="BACKUP_WAREHOUSE" sequenceNum="01" fromDate="2001-01-01 12:00:00"/>
> <!-- New MRPEventType (apart from existing ones in Ofbiz)-->
> <MrpEventType description="Initial ATP" mrpEventTypeId="INITIAL_ATP"/>
> <MrpEventType description="Proposed stock transfer if ATP is less than minimum quantity"
mrpEventTypeId="PROP_ATP_STOCK_TRANSFER"/>
> <!-- New RequirementType (apart from existing ones in Ofbiz)-->
> <RequirementType description="Inter-facility Transfer Requirement" requirementTypeId="TRANSFER_REQUIREMENT"/>
> <!-- New Enumeration for Product Store Facility's requirementhMethodEnumId to be used
to trigger inter-facility transfer -->
> <Enumeration description="When ATP Reaches Minimum Stock for Product-Store-Facility"
enumCode="XFER_STOCK_ATP" enumId="XFERRQM_STOCK_ATP" enumTypeId="PROD_REQ_METHOD"/>
> <!-- Existing ProductStore for setting primary facility for each store -->
> <ProductStore productStoreId="9100" inventoryFacilityId="StoreWarehouse_01" checkInventory="N"
oneInventoryFacility="N" requireInventory="N" reserveInventory="Y" reserveOrderEnumId="INVRO_FIFO_REC"
/> 
> <!-- Extended ProductStoreFacility for setting RMEI)-->
> <ProductStoreFacility productStoreId="9100" facilityId=="StoreWarehouse_01" requirementMethodEnumId="XFERRQM_STOCK_ATP"
fromDate="2001-04-13 12:00:00"/>
> <!-- Existing ProductFacility (with Minimum Stock and ATP) -->
> <ProductFacility facilityId="StoreWarehouse_01" lastInventoryCount="20.000000" minimumStock="100.000000"
productId="GZ-8544"/>
> <ProductFacility facilityId="RegionalWarehouse_01" lastInventoryCount="40.000000"
minimumStock="200.000000" productId="GZ-8544"/>
> <ProductFacility facilityId="RegionalWarehouse_02" lastInventoryCount="60.000000"
minimumStock="200.000000" productId="GZ-8544"/>
> <ProductFacility facilityId="CentralWarehouse" lastInventoryCount="200.000000" minimumStock="300.000000"
productId="GZ-8544"/>
> {code}
> MRP engine would start creating event beginning with store's primary facility based on
set RMEI under ProductStoreFacility e.g, XFERRQM_STOCK_ATP for StoreWarehouse_01, In other
words if MinStock < ATP , then MRP algorithm would: 
> # Look up and consume the respective ATP from all the eligible "facilityIdTo" (based
on ProductFacilityAssoc), from where given product is transferable. Based on their priorities
start allocating ATP unless it meet the (MinStock-ATP) requirement for a given store e.g.,
'StoreWarehouse_01' .
> # Create new MRP Event with Event type "PROP_ATP_STOCK_TRANSFER" with Proposed Quantity
= MINIMUM STOCK - ATP from the facility (with highest priority i.e.,RegionalWarehouse_01)
to the destination facility.
> ## If demand for (MinStock-ATP) is still not fully met by any facility with higher priority
then repeat step#1 for all the associated facilities in descending order of priority unless
ATP from all eligible facilities is exhausted.
> # Based on above MRP Event Type and proposed quantity, In turn create the new Requirement
with type TRANSFER_REQUIREMENT between originating and destination facility.
> # Over Requirement screen (UI) we can provide the "Transfer" button against all the requirement
with type TRANSFER_REQUIREMENT
> # On hitting the "Transfer" button, The new 'Stock Transfer' requests could be created
for a product between eligible facilities based on above step. 
> # The created Stock Transfer request can be completed by shipping and receiving given
product from originating facility and destination facility respectively.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message