This proposal is to integrate Vend POS with NetSuite, and develop the sync between Item, Customer, Sales Order, Fulfilment, Payments, Vendor, Purchase order, Fulfilment, and Inventory level sync.
Requirement
The client requires to integrate the following features from Vend to NetSuite and NetSuite to Vend:
- Orders from Vend to NetSuite
- Orders from NetSuite to Vend
- Fulfilments from NetSuite to Vend
- Fulfilments from Vend to NetSuite
- Products from NetSuite to Vend
- Inventory levels from NetSuite to Vend
- Inventory levels from Vend to NetSuite
- Purchase orders from NetSuite to Vend
- Purchase order updates from NetSuite to Vend
- Returns from Vend to NetSuite
- Exchanges from Vend to NetSuite
- Transfer orders from Vend to NetSuite
- Customer creation and updates from Vend to NetSuite
- Customer creation and updates from NetSuite to Vend
We assume that the data will be imported into the Vend if there is any historical data migration required for the following records:
- Customer records
- Vendor records
- Item records
- Brand records
- Any historical open orders (Sales, purchase, transfer) need to be imported to Vend if required
- Any fulfilment records related to historical orders in Vend
Scope of the Integration
Prerequisites:
- The vend system should be set up by the Cycle Hub team. All the outlets and initial set-up should be completed to start the development.
- Provide a sandbox/staging site for the Vend system if possible
- if possible, we prefer to have sandbox access for the NetSuite account for development. Otherwise, please provide a release preview account.
Field Customizations
The Customer, Item, Sales Order, and Vendor records 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 “Vend Sync”[MV1]
- When a sync between NetSuite and Vend occurs, we will check the check box in the corresponding record in NetSuite.
- [GU2] ding records in NetSuite.
- For orders, there will be a Vend Status field in the custom subtab
- For all records in NetSuite, there will be a “Last Sync Date” to show the latest sync date and time.
- We will be creating a “Version” field in the records in NetSuite to store the version number returning from Vend system
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 2.0
We will be using the auth 2.0 code authorisation grant flow for the authorisation to Vend system. The refresh token and access token will be saved in the custom record and a scheduled script will generate the access token every 12 hours.
Note:
- Access token will expire in 86400 seconds or 24 hours.
- The code is a short-lived (10 minutes), single-use value. Based on that assumption, every new authorization request should start from the beginning.
Custom Record for Handling the Vend outlets
We will be creating a custom record to handle the outlet identifiers such as the outlet ID to create orders or details in Vend System or mapping the location record in NetSuite to an outlet in Vend System.
Master Data Integration
Customer Sync
Customer sync from NetSuite to Vend
Note:
- Field mapping will be confirmed in the initial stage of development
- If there are any dependent records are there, the record cannot be deleted in Vend.
- Multiple addresses are allowed in NetSuite and Vend but only the default (yes)address will populate in Vend. We are taking the default shipping address to the Vend account.
- If the lead transforms to a customer in NetSuite, the integration will not work for this scenario. The integration will be triggered if the customer record is created/modified
Brand Sync
Custom record for Brand
We will be creating a custom record for saving the brand details in NetSuite. We assume that there will be a Brand field in the custom record. In the brand field in the item record, we will be sourcing this information. In the brand custom record, we will be storing the name and Vend ID of the Brand.
Brand Sync from NetSuite to Vend
When a brand is created in NetSuite, that will be reflected in Vend. We will be considering the brand ID as the unique key for the item sync.
Brand Sync from Vend to NetSuite: We recommend creating Brands in NetSuite instead of creating brands in Vend.
Item Sync
Item Sync from NetSuite to Vend
Inventory Item Create / Update / Delete:
Whenever an item is created/ updated /deleted in NetSuite, that will be reflected in Vend. We will be considering the SKU as the unique key for the item sync. SKU in the Vend system will be mapped to the Item Name field in the item record.
Matrix Item Create/Update:
When a parent matrix item is created, that will be reflected in the Vend system 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:
- Vend Handle (Parent item and child item have in common)
- Vend Id (Unique Vend product Id)
- Vend Variant ID (Child item Id)
The handle is the main thing that the variant parent and all its children have in common, and the handle is also what allows the user to create new variants.
We will be referring to the above-mentioned custom fields to sync the details of matrix and child items from NetSuite to Vend Software.
We will be sending the matrix item details as a scheduled script for creating the details from NetSuite to Vend.
Item Image sync:
Pricing:
We assume that there will be a custom price level (such as “Vend price”) which will be synced to Vend from NetSuite[MV10] . Also, we will not be considering quantity level pricing for each item. If there is no Vend price defined in the item record, we can consider only one price level for sending the price to vend system.
Note
- The creation or addition of variants in NetSuite can be reflected in the Vend but not the deletion of variants/parent record
- It’s important to remember that variants id, and handle, are read-only attributes. Variants can’t be re-assigned from one parent to another.
- Every product can have up to 200 variants. Attempting to create any more variants will cause an error.
- We will not be considering the tax schedule in the item record for sending the online price to Vend
Vendor sync
This will be a one-way sync from NetSuite to Vend
Vendor Sync from NetSuite to Vend
When we create a vendor in Vend, a vendor record with the same details will be created in NetSuite. For now, vendor sync is only possible in one direction, from NetSuite to Vend.
- If any new vendor records have been created in Vend, we will create the corresponding record in NetSuite.
- Vendor record form is customized with a new checkbox field and will be checked if the vendor sync happens.
- [CF11]
Note:
- Any update or creation of Vendor details in Vend System will not be reflected in the NetSuite
Outbound Processes Integration
Order sync
Order Sync from Vend to NetSuite
The Sync will be a scheduled integration from Vend to NetSuite.
Customer sync from Vend to NetSuite
All customer details in the Vend system can be created or updated in the NetSuite system for the customer corresponding to each order. We will be creating a customer record in NetSuite if it is present in Vend Software and not in NetSuite.
If the Customer record is already existing in NetSuite, we will only update the details. We will be updating the details in the customer record and update will take place by using the Vend ID present in NetSuite for confirming its existence in NetSuite.
Create a sales order
We can create the sales orders from Vend to NetSuite by scheduling and fetching all orders from vend and if a customer[CF12] does not exist in the NetSuite account, we’ll create the customer record in NetSuite with the response details.
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 not consider the following statuses sales order:
- SAVED or Parked Sale
- CLOSED
- ONACCOUNT
- ONACCOUNT_CLOSED
- LAYBY
- LAYBY_CLOSED
- VOIDED
- AWAITING_DISPATCH_CLOSED
- AWAITING_PICKED_UP_CLOSED
Order with AWAITING_DISPACTH and AWAITING_PICKUP status
For AWAITING_DISPACTH or AWAITING_PICKUP statuses order with payment done will create a sales order and customer deposit in NetSuite. When there is payment done and not fulfilled then, it’ll create a customer deposit record and sales order for the same in NetSuite, otherwise, we will create a sales order record only.
For the retail orders, the payment type can be Cash, card, or cheque. So, we will set the payment method accordingly. So, the client must provide the account to be deposited in this case. If the payment method is credit, then we must set any of the credit card types in cash sales like VISA, MasterCard etc.
Note:
- The customer deposit record will be created in NetSuite for all types of payments made in Vend except the gift cards
- If the payment method is “gift card”, we will be adding a discount item 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
- Orders will be created in pending fulfillment status for orders with “AWAITING DISPATCH” status in Vend
- The Sync of images is not considered. The order sync won’t fail even if the customer has no email address/phone number.
- Shipping methods are not considered since no methods are available in the Vend.
- Partial payments are possible in vend system and NetSuite
- Payment methods in vend need to be created in NetSuite
- We will not be defining payment method in sales orders where the invoice needs to be created in NetSuite.
- Editing of sales order in Vend is not considered for order sync.
- Removing a line item from a sales order record while updating a sales order in NetSuite will not be reflected in Vend system
Fulfilment Sync
Fulfilment Sync from NetSuite to Vend
All details in the sales order will be used to create the fulfilment record. It is possible to update fulfilment status from NetSuite to Vend as either “picked up” or “Fulfilled”. In Vend the sales order with statuses as “AWAITING_DISPATCH” and “AWAITING_PICKUP” can only be fulfilled and picked up.
We will be doing a real-time sync for fulfilment sync from NetSuite to Vend, on saving the item fulfilment record in NetSuite with the “Shipped” status.
Note
- For fulfilment sync there is only one-way sync possible, from NetSuite to Vend.
- Partial fulfilment update from NetSuite is not possible on Vend side. In addition to that, we can check from the NetSuite side whether a sale is fulfilled already.
- We cannot update fulfilment status from Vend to NetSuite. It is a one-way sync, only from NetSuite to Vend.
- When the customer comes to the store to collect the order, the item can be marked as picked up using Vend, or you can mark the sale as fulfilled (PICKED_UP), by creating a fulfilment.
- We will not be considering picked, packed statuses of item fulfilments for updating in Vend and we will be updating the fulfilled status in Vend when all the item fulfilment record is created with Shipped status.
- If there are multiple item fulfilment records in NetSuite, we will update the “fulfilled” status in Vend only when all the item fulfilment records are created with the “Shipped” status
Auto Invoicing from fulfilment Record
We will be creating an auto invoice script for creating invoices when an item fulfilment record with shipped status has been created. When there are multiple item fulfilment records in NetSuite, we will create a single invoice for each order in NetSuite when all the item fulfilment records associated with one record are created with the “Shipped” status
Note:
- The invoice will auto generated, and the unit price will be set the o Total amount/ Quantity from the sales order.
- Regarding the Amount field in Invoice, we can’t set the value for more than 2 decimal points.
- As it is a NetSuite Standard functionality, we couldn’t make any change in the precision. It will round to 2 numbers (fractional part) after the decimal point.
Return Authorization Sync
Returning a sale will be possible from Vend to NetSuite which will be a one-way sync only.
When the user returns a “fulfilled” Sales order which is synced with Vend POS, a return authorization record will be created in NetSuite. The return can be received by creating an item receipt. Upon creating an 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.
Partial return in the Sales order
Suppose the case when an order is created in Vend system with sales quantity (10) for amount $100 along with a return quantity (1) and amount $10. We will be creating a sales order record with $100 for quantity (10) first and their customer deposit for the amount paid by the customer ($90). Then we will be creating a return authorization record, item receipt and credit memo record for the return quantity (1) and amount ($10). Note that this return will only take place only if the returned item has corresponding sales order fulfilled in the NetSuite.
We will running a scheduled script to apply the unapplied credit memo to corresponding invoices. For achieving the relations, we will be creating a custom field in the return authorization record, item receipt and credit memo for tracking the sales order number where it need to be applied.
If all items in an order is returned, we will be creating the return authorization record, item receipt and credit memo.
Note
- customer refund and credit memo will not be considered.
- [CF14]
- Sales that are voided at Vend system 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 not be reflected in Vend and need to handle on the NetSuite side
- User should not alter the fields in credit memo manually including application to invoices.
Inbound Processes Integration
Purchase orders sync
Purchase order sync from NetSuite to Vend
Create a purchase order
- The sync will be a scheduled one from NetSuite to Vend system
- Any creation and update of the purchase order in NetSuite can be reflected in the Vend
- If a record already exists in Vend, the script will update the details in the Vend System for each record. For identifying the items that are already existing in the Vend account, we will be checking the purchase order Vend Id.
- When a purchase order is created, we will do a scheduled integration from NetSuite to Vend.
Update a purchase order
- Any editing in the purchase before receiving the order like adding line items to the order can be reflected in the Vend System
- Adding or removing of line items can be updated in Vend System as a real-time integration.
Delete a purchase order
Deleting the purchase order in NetSuite can be reflected in Vend will be possible by a real-time integration from NetSuite to Vend.
- When a purchase order is deleted from NetSuite, the corresponding record will be deleted from Vend by using delete API only if there are no dependent records created in Vend
- The Vend Id of the purchase order will be considered as the unique key for deleting the record.
Purchase order sync from Vend to NetSuite
- Create and update the purchase order from Vend to NetSuite is possible by using API.
- By scheduling, we can reflect the establishment of the purchase order in NetSuite when it happens in Vend. We will check Vend for purchase orders, and using those details, we will create purchase orders in NetSuite. We will use a checkbox field to prevent duplication; anytime the sync occurs, the checkbox will be checked, and the sync from Vend to NetSuite will only occur if the checkbox is empty.
- We will be fetching the orders from Vend with status as OPEN and the type as SUPPLIER
Note
- Deleting purchase orders in Vend cannot be deleted in NetSuite.
- Return of stock for purchase orders from Vend or NetSuite is out of the scope of development
Transfer orders sync
Transfer order sync from NetSuite to Vend
Create a transfer order
- The sync will be a scheduled one from NetSuite to Vend system
- Any creation and update of the transfer order in NetSuite can be reflected in the Vend
- If a record already exists in Vend, the script will update the details in the Vend System for each record. For identifying the items that are already existing in the Vend account, we will be checking the purchase order Vend Id.
- When a transfer order is created, we will do a scheduled integration from NetSuite to Vend.
Update a transfer order
- Any editing in the transfer before receiving the order like adding line items to order can be reflected in the Vend System
- Adding or removing of line items can be updated in Vend System as a real-time integration.
Delete a transfer order
Deleting the transfer order in NetSuite can be reflected in Vend will be possible by a real-time integration from NetSuite to Vend.
- When a transfer order is deleted from NetSuite, the corresponding record will be deleted from Vend by using delete API.
- The Vend Id of the transfer order will be considered as the unique key for deleting the record.
Transfer order sync from Vend to NetSuite
- Create and update the transfer orders from Vend to NetSuite is possible by using API.
- [MV16]
- The Vend ID will be stored in the NetSuite transfer order record
- We will be referring to the Outlet-location mapping custom record to identify the locations
- We will be fetching the orders from Vend with status as OPEN and the type as OUTLET
Note
- Deleting transfer orders in Vend cannot delete transfer orders in NetSuite.
- Return of stock for purchase orders from Vend or NetSuite are out of the scope of development
- Transfer orders will be created between outlets under one subsidiary
Item Receipt Sync
Item Receipt sync from NetSuite to Vend
All details in the purchase order will be used to create the item receipt record. It is possible to update an item received status from NetSuite to Vend as “received”.
We will be doing a real-time sync for item receipt sync from NetSuite to Vend, on saving the item receipt record in NetSuite.
Note
- For item receipt sync there is only one-way sync possible, from NetSuite to Vend.
- We cannot update the item received status from Vend to NetSuite. It is a one-way sync, only from NetSuite to Vend.
- If there are multiple item receipt records in NetSuite for one order, we will update the “received” status in Vend only when all the item receipt records are created for one corresponding order
Inventory Integration
Inventory levels Sync
Inventory Level sync from NetSuite to Vend
A custom field will be available in the item records to indicate that the items will be synced with Vend. If the custom checkbox is checked, then the stock quantity will be updated to the Vend. Otherwise, the item’s availability will not be updated in the Vend.
Create a custom field in the item record to store the Vend ID of the product. Once the value is stored in the field, we will make the field disabled to avoid user error. This field value will be updated while the item integration happens.
A script will be running every hour to check whether all item haves having a custom field checked or not. Once we retrieve the Vend ID, we will be updating the stock quantity for every item in the Vend.[MV17]
For updating the stock quantity, the script will check the ’quantity available’ field in NetSuite corresponding to locations(outlets) in the item record.
We will be implementing a scheduled script to fetch the inventory stock level from NetSuite to Vend system. We will be only considering the one-way sync of inventory stock from NetSuite to Vend system.
Note:
- We assume that the stock take activities will not be conducted in the Vend system
- Purchase orders receiving, transfer orders, sales orders fulfilment actions in vend system reflected in NetSuite and the inventory levels will be the same in NetSuite and Vend
- Any inventory adjustment or write-offs of the products will always be handled on the NetSuite Side
- No updates of stock level from Vend to NetSuite will not take place
Error Handling
Master Data Integration:
- We will be creating a field in a custom subtab in the customer record to keep the error that occurs during customer sync.
- Similarly, we will be creating a field for storing the error that occurs during item sync in the Item record in NetSuite.
- Also, for Vendor records, there is a customized field for error handling which holds the error that occurs while vendor sync.
Outbound processes Integration:
To handle errors, a custom record will be created for every sales order. Any error that occurs while creating a sales order will be recorded in the order sync custom record fields.
- For every sales 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 sales orders, item fulfilment, and customer deposit 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 sales orders
- An email will send to specific employees if there is an error occur during other order creation.
Inbound processes Integration:
To handle errors, a custom record will be created for every purchase/transfer order. Any error that occurs while creating a purchase order will be recorded in the purchase order sync custom record.
- For every purchase order, the script will be creating an instance containing the necessary 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 purchasing orders and, item receipt syncs are handled. If any errors occur during any sync, it will be recorded in related fields of the custom record.
- These custom records will be attached in a custom subtab of purchase/ transfer orders
- An email will send to mentioned employees if there is an error occur during order creation.
Technical Summary
Customer Sync:
- Real time sync from NetSuite to Vend (Create/update/Delete)
- Scheduled sync from Vend to NetSuite (Create/Update)
Vendor Sync:
- Real time sync from NetSuite to Vend (Create/update/Delete)
Brand Sync
- Real time sync from NetSuite to Vend (Create/update/Delete)
Item Sync:
- Inventory item: Real time sync from NetSuite to Vend (Create/update/Delete)
- Matrix item: Scheduled sync from Vend to NetSuite (Create/Update)
Sales Order Sync:
- Scheduled sync from Vend to NetSuite (Create/Update)
- Scheduled sync from NetSuite to Vend (Create/Update)
- Real time sync from NetSuite to Vend (Delete)
Purchase Order Sync:
- Scheduled sync from Vend to NetSuite (Create/Update)
- Scheduled sync from NetSuite to Vend (Create/Update)
- Real time sync from NetSuite to Vend (Delete)
Transfer Order Sync:
- Scheduled sync from Vend to NetSuite (Create/Update)
- Scheduled sync from NetSuite to Vend (Create/Update)
- Real time sync from NetSuite to Vend (Delete)
Return a sale:
- Scheduled sync from Vend to NetSuite (Create)
- Scheduled script for applying the unapplied credit memo to open invoice
Assumptions
- Field mapping should be defined in the initial stage of development
- Integration will be active for new records created in NetSuite or updates happen in NetSuite. The migration of existing/historical data will be out of the scope of this development
- We assume that the data will be imported in the Vend and NetSuite if there is any historical data migration required
- It is possible to have a real-time integration from NetSuite to Vend for most cases, but the integration from vend to NetSuite side will be a scheduled one
- If there is a customer with the given details in the NetSuite but it is inactive, a new customer will not be created before creating the sales order.
- We will not consider tracking details for item fulfilment records [CF20] from Vend to NetSuite and NetSuite to Vend.
- Applicable only to inventory,[CF21] Matrix item in NetSuite. Not applicable to special order, drop ship, kit, 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.
- 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.
- [CF22] .
- Shipping methods are not considered in order sync since no methods are available in the Vend.
- Payment types will be predefined in Vend System 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 Vend System.
- 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 Vend system
- Customer group integration, Promotion code activation integration, and price book integrations are out of scope of this development
- 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 Vend 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.
- We assume that the item fulfillments will be created based on the committed quantities in 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 Vend 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 Vend system
- Inbound shipment records are out of the scope of this development
- We assume that no manufacturing processes involved in business and assembly items are out of the scope of development
- Register open and close functionality in Vend system will be out of the scope of this development
- For Vend API documentation, we referred to in the mentioned URL: List consignments (vendhq.com).
- Return of stock for purchase orders from Vend or NetSuite is out of the scope of development
- The refresh token may have not an expiry time for now. We use the refresh token to renew the access token. On each renewal, we get a new pair of tokens (access and refresh token).
- Automatic application of customer deposit to invoice with fulfilled orders will take place in NetSuite
Risk
- Register sale
We are using this API as we have no similar API in the new version 2.0 of the API.
- If there are any null values in any fields in NetSuite or Vend, we will be updating the null value itself in the corresponding fields
- Some API will infer some mandatory fields while sending data to Vend system 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 Vend and the payments made from credit memo or customer deposit, or customer payment will not be reflected in Vend system
- Creating a cash sale is out of the scope of the integration. Also, the return for the standalone cash sale records will not be considered.
- Creation of items, brands, and vendors in Vend system will not be reflected in NetSuite
- While we are deleting the records in Vend, if there are any dependent records, the deletion of a record in Vend will not take place.
- Inventory stock level update from NetSuite to Vend system will be scheduled after the orders sync. NetSuite will keep the actual stock level records and compared to Vend, there is a delay in updating the stock from NetSuite to Vend
Time
Estimate and Effort: 360 hr