Proposal Summary
This proposal is to integrate Shopify with NetSuite, and develop the sync between Item and Cash Sale Returns sync.
Requirement
Kelley’s Kookies requires to integrate the following features from Shopify to NetSuite and NetSuite to Shopify:
- Orders from Shopify to NetSuite
- Products Sync from NetSuite to Shopify
- Inventory levels from NetSuite to Shopify
- Returns from Shopify to NetSuite
We assume that the data will be imported into the NetSuite from Shopify if there is any historical data migration required for the following records:
- Item records
Scope of the Integration
Prerequisites:
- The Shopify website should be set up by the client. All the outlets and initial set-up should be completed to start the development.
- Provide a sandbox/staging site for the Shopify website if possible
Field Customizations
The Item and Cash Sale need to be customised, and we need to add a checkbox field and a text field for each record. These fields will display under a custom subtab called “Shopify Sync”
- When a sync between NetSuite and Shopify occurs, we will check the check box in the corresponding record in NetSuite.
- Text field for storing the unique ID of each record in Shopify in their corresponding records in NetSuite.
Custom Record for API Information
We will create a custom record to store the API details in NetSuite. We will be storing the domain URL, authorisation and permission type in the custom record which will be helpful for the NetSuite user to edit the details such as update in authorisation token through a custom record in NetSuite.
Auth 1.0
We will be using the auth 1.0 code authorisation for the authorisation to Shopify website. The client credentials and access token will be saved in the custom record
Master Data Integration
Item Sync
Item Sync from Shopify to NetSuite:
Custom record Set Up:
Shopify Parent Item custom record
We will be creating a parent item custom record called “ Shopify Parent item”. The Shopify parent items does not exist in the NetSuite Item records. So we planned to handle the Shopify parent items using custom records in NetSuite.
The custom record will contain the following fields:
- Name of the Parent
- Shopify Parent ID
Custom tab will be added to see all the variant’s custom record from the parent custom record.
Shopify Variant Item custom record
We will be creating custom record called “Shopify variant item” to handle the variants and this will come as child record of Shopify Variant item custom record.
The variant of the Shopify items will be the KIT/Assembly/inventory items in NetSuite. So we will add those items to the corresponding parent custom record as a child record.
The child custom record will contain the following fields:
- Item record
- Shopify variant ID
- Shopify Parent ID
We recommend the parent item record with variants always create in the NetSuite custom record.
We will deploy one scheduled script once a day to get parent item details from NetSuite custom record and create parent item and variants in Shopify.
Item Sync from NetSuite to Shopify
Inventory / KIT / Assembly Item Create / Update / Delete:
We will add new checkbox “Shopify variant item” in item record. This checkbox will be used to identify the item is shopify variant item or not.
Whenever an item is created/ updated /deleted in NetSuite, and the “Shopify variant item” is not checked, that item will be reflected in Shopify. We will be considering the SKU as the unique key for the item sync. SKU in the Shopify website will be mapped to the Item Name field in the item record in NetSuite.
Item creation conditions:
The parent item record with variants should always create in the NetSuite as custom record “Shopify parent record”.
The parent item should not be added in NetSuite as an item record and variants in Shopify will be created as item record in NetSuite.
Matrix Item Create/Update:
When a parent matrix item is created, that will be reflected in the Shopify website as the parent item having variants. When a child matrix item is created/updated in NetSuite, then the SYNC will happen as a scheduled one.
The item record has three customized fields:
- ShopifyHandle (Parent item and child item have in common)
- ShopifyID (Unique Shopifyproduct Id)
- ShopifyVariant ID (Child item Id)
We will be referring to the above-mentioned custom fields to sync the details of matrix and child items from NetSuite to Shopify.
We will be sending the matrix item details as a scheduled script for creating the details from NetSuite to Shopify.
Pricing:
We assume that there will be a base price level which will be synced to Shopify from NetSuite. Also, we will not be considering quantity level pricing for each item.
Note
- The creation or addition of variants in NetSuite can be reflected in the Shopify but not the deletion of variants/parent record
- We will not be considering the tax schedule in the item record for sending the online price to Shopify
- The components of Kit item or Assembly item will not be entered in shopify product details.
Outbound Processes Integration
Order sync
Order Sync from Shopify to NetSuite
The Sync will be a scheduled integration from Shopify to NetSuite.
We will be creating a common customer record in NetSuite for all customers in the Shopify as “Shopify Customer”.
Create a cash sale record
Order with paid status
We will create the cash sale records from Shopify to NetSuite by scheduling and fetching all orders from Shopify with the common customer record in NetSuite with the response details.
Only the variants of parent item will add to the cash sale, the Shopify parent item will not add to the cash sale record.
Item records will be available in the NetSuite and if any item is not available, we will be throwing an error in the custom record when order creation.
We will be fetching all orders with paid status modified in the Shopify in one day and create in NetSuite.
For paid statuses order with payment done, we will create a cash sale in NetSuite.
For the retail orders, the payment type can be Cash, card, or cheque. So, we will set the payment method accordingly. If the payment method is credit, then we must set any of the credit card types in cash sales like VISA, MasterCard etc.
Note:
- If the payment method is “gift card”, we will be adding a discount item(hardcode Shopify discount) as a line item in the sales order in NetSuite. We assume that the discount item record for the gift card will be created in the NetSuite.
- The Sync of images is not considered
- Shipping methods are not considered
- If there is shipping cost in the Shopify, we will be adding it in the shipping cost field in the NetSuite cash sale record irrespective of the shipping method
- No tax calculations are considered
- Payment methods in Shopify need to be created in NetSuite
- Any update or creation of Shopify order details in NetSuite will not be reflected in the Shopify Website.
- When there is payment is succesful and the order is completely fulfilled from Shopify side, then only we will create any cash sales in the NetSuite.
Return Authorization Sync from Shopify to NetSuite
Returning a sale will be possible from Shopify to NetSuite which will be a one-way sync only.
When the user returns a “fulfilled” Sales order which is synced with Shopify, a return authorization record will be created in NetSuite. The return can be received by creating an item receipt. Upon creating a item receipt, we will be creating a credit memo record from the return authorization, the corresponding item will be refunded from the NetSuite side.
It is possible to create multiple returns against a single sale. We will be scheduling this return process and will be reflected in NetSuite account.
Note
- The deletion of the customer refund and credit memo will not be considered.
- If a credit memo is created from return authorization, then refund the credit memo by clicking the refund button cannot be completed by user in Netsuite side.
- Sales that are voided at Shopify website will not be reflected in NetSuite.
- We assume the cash refund will not occur from the NetSuite side as the customer refund record will be creating from invoices.
- Any refund amounts payments made to customers will be reflected in Shopify and need to handle on the NetSuite side
- User should not alter the fields in credit memo manually including application to invoices.
Error Handling
To handle errors, a custom record will be created for every order. Any error that occurs while creating a cash sale will be recorded in the order sync custom record fields.
- For every order there will be creating an instance containing the details. If there is no error occurs during creation and there will be no value appear in the custom record error handling field.
- Using this custom record, errors related to orders, Item and Refund syncs are handled. If any errors occur during any sync, they will be recorded in related fields of the custom record.
- These custom records will be attached in a custom subtab of cash sale
- An email will send to specific employees if there is an error occur during other order creation.
Technical Summary
Item Sync:
- Inventory item: Real time sync from NetSuite to Shopify(Create/update)
- Assembly item: Real time sync from NetSuite to Shopify(Create/update)
- Kit/package item: Scheduled sync from Shopify to NetSuite (Create/Update)
- Matrix item: Scheduled sync from Shopify to NetSuite (Create/Update)
- Parent Shopify item: Scheduled sync from Shopify to NetSuite custom record(Create/Update)
Cash Sale Sync:
- Scheduled sync from Shopify to NetSuite (Create/Update)
Return a sale:
- Real time sync from NetSuite to Shopify(Create)
Note: Inventory level sync is not considered in the scope of the proposal
Assumptions
- Field mapping should be defined in the initial stage of development
- The integration will be active for new records created in NetSuite or updates that happen in NetSuite.
- We assume that the data will be imported in the Shopify and NetSuite already if there is any historical data migration required
- It is possible to have a real-time integration from NetSuite to Shopify for most cases, but the integration from Shopify to NetSuite side will be a scheduled one
- We will not consider tracking details for item fulfilment records from Shopify to NetSuite and NetSuite to Shopify.
- Applicable only to inventory, Assembly, matrix and Kit items in NetSuite. Not applicable to special orders, drop ship, service, item group, other charges items
- Not applicable for a lot or serialized items
- Expired or damaged items stock quantity should be updated accurately in the NetSuite as we will be considering Items in good condition.
- The tax is not used in Shopify, so no tax details will be considered while creating the sales order. The tax details should be automatically sourced by NetSuite, and we won’t override any Tax information.
- The deletion of the cash refund, credit memo and customer deposit will not be considered.
- We will create a common shipping method in NetSuite named “Shopify shipping method’ and set this shipping method in all cash sale records created for Shopify.
- Payment types will be predefined in Shopify website and the corresponding payment methods and their accounts will be already set up in both systems
- Phone field format will not be considered and in NetSuite, the phone field value should have at least five digits and we expect a minimum of five digits in the phone field value entered in the Shopify website .
- There are limits for the fields like a city with a maximum word length of 50 characters in NetSuite and this will be limited while sending data from NetSuite to Shopify website
- Class or department classifications in transactions are out of the scope of this development
- We assume that while receiving items of the purchase order or transfer order, the receiving quantity will not be more than the quantity specified in the purchase or transfer order
- We assume that while fulfilling a sales order, the fulfilled quantity will be always less than or equal to the quantity in the sales order.
- No more additional line items can be received or fulfilled in Shopify or NetSuite system while receiving a purchase order or fulfilling a sales order
- Sending any emails from the script are out of the scope of this development. For example, if the send email to customers after fulfillment feature is enabled in the NetSuite account, the emails will be sent from NetSuite.
- Warehouse’s locations will not include any bin management
- Single master data can only be sent at a time
- We are not considering the exchange rate of transactions in NetSuite
- We are not considering the unit of measure specified in any records
- We will not be considering multiple currencies and assume that there is only one base currency
- Date format of the data sent to Shopify API Should be UTC format and the date format in NetSuite will be followed according to the global preference set up in the account
- Intercompany transactions are out of the scope of this development
- If there is an approval (standard approval) in NetSuite, only the approved transactions will be sent to Shopify website
- Inbound shipment records are out of the scope of this development
- The performance of the integrations has dependence on the number of processors in the account. The scheduled actions will be processed based on the processing queues. So even if the script can be execute as scheduled, it may get even more delay if there is no available queue to process. So please let us know the processor’s availability in the account. Or we can check the same once the account is available
- Automatic application of customer deposit to invoice with fulfilled orders will take place in NetSuite
- The integration will consider only one Shopify integration instance and one location in the Shopify
- Price levels in customer records in NetSuite are not reflected in the Shopify and price list for items are not considered. And will consider only the base price of item to Shopify.
Fulfillment process is done on the Shopify.
- No shipping label integration have been done in the Shopify.
- Refund process is not considered in NetSuite and Shopify
- Assembly item is built only in house.
- Item creation happening in NetSuite side.
- We are not considering the customer sync and will create a common customer record in NetSuite for all customers in Shopify as “Shopify Customer”.
- The transfer order is not using Shopify.
- The script will be scheduled every 2 hours.
- We are not considering the cancellation/close of orders in Shopify.
- Gift certificate is not considered in the scope of development
Risk
We have checked the possibility of stock-level sync from NetSuite to Shopify. Currently, the variants in Shopify are configured as a Kit item in NetSuite.
We have highlighted the difference between the Shopify and NetSuite item configurations below:
A variant on Shopify means our product comes in more than one type. For instance, one variant of our product could be a red-colored product only available in small and medium; there would be no large product in red. This means valid existing combinations of different options are the variants of your product. Matrix type is a similar functionality in NetSuite for variants in Shopify. The difference is matrix sub-item will not repeat on another matrix item with the same SKU.
Kit/Package Items, on the other hand, is essentially a collection of member items, combined together and sold as one item and they can easily be assembled in NetSuite and sold via the website or to customers directly. These members can be repeated in another Kit item and can be individually sold as well.
It is hard to update the stock level accurately with the differences in the configurations in NetSuite and Shopify. There will be inaccuracy in the sync of stock level from NetSuite. The variant of the Shopify parent item is stored in NetSuite as the KIT /Assembly item. If we calculate the stock level of the KIT item, we have to check the stock of KIT components. There is a chance of the component of KIT may be the component of other KIT items. So, if the component is purchased for one KIT item, the stock level of all parent KIT items needs to be updated. In that case, we can’t set the stock level in Shopify accurately. Also, we can only set the stock levels on the scheduled process, not in real time.
We have checked the stock level of Shopify items in NetSuite using the location mapping that you have provided. The stock level of items in Shopify seems to be different from NetSuite.
With the existing item configuration between NetSuite and Shopify, we foresee some issues will arise in the future specifically to inventory which will indirectly cause inaccuracy in financial data/reports as well.
- Some of the API endpoints will be deprecated/version/authentication updates can take place in the future.
- If there are any null values in any fields in NetSuite or Shopify, we will be updating the null value itself in the corresponding fields
- Some API will infer some mandatory fields while sending data to Shopify website and which will not be a mandatory field in NetSuite, and we might need to make it a mandatory field in NetSuite
- Invoice created in NetSuite will not be reflected in Shopify
- While we are deleting the records in Shopify, if there are any dependent records, the deletion of a record in Shopify will not take place.
- Observed Behaviour:
- If the tax calculation apps in the Shopify and Netsuite are different, there may be chance that the there is a small difference in total amount as the tax amount are not set by our script
Project Execution Process
- As the proposal is accepted, the client will share the NetSuite access.
- A Project lead and Team lead will be introduced to the client who will be the point of contact for the client throughout the SDLC.
- The project manager will schedule a kick-off call to discuss the entire project scope and get clarification on all the queries.
- Soon after the kick-off call within a working day time, the project manager will revert to the project plan. We will be following the Agile methodology for development.
- We as the company use Jira as the project management tool. In case, the client would like to use any equivalent tool then we are open to that.
- Regular meetings will be scheduled with the client and keep the client updated with the project progress.
- The client will be provided with the test release as per the project plan and expect to revert with the feedback so that it can be incorporated in the upcoming sprint.
The post Go live support
- Jobin and Jismi will provide 1-month post-implementation support for NetSuite – Shopify Integration from the date of project Go-live.
- 1-month free support for critical bugs from the date of project deployment on production.
Issues reporting after 1 months of project deployment on production are billable.
Time
Estimate and Effort: 300 hr