Proposal summary
The proposal summarizes the integration between Papier and Netsuite for item, order, customer deposit, item fulfillment and RMA.
Requirement
Implement the Papier-netsuite interaction . Papier is integration into the client’s website.
Prerequisites
- API JSON structure from Papier
- Access to Netsuite
- Test data
Our Solution
We are developing the Restlet APIs for the Papier – Netsuite integration requirement for sending details from Papier to Netsuite. Papier can initiate the Restlets URL (API) from your end with necessary details, which will invoke the Restlet script in Netsuite and return the necessary details as a response in JSON format.
For authentication between Netsuite and the Papier we are using the TBA(OAUth 1.0) authentication. Detailed explanation for the authentication details including how to create the signature are added in the document below.
Signature Construction – TBA using OAuth 1.0 – Papier
1)Items
Whenever the item is created/updated/deleted in Netsuite and if it needs to sync with website (there will be a flag to mark whether this item is for the website or not), we will send item details to the Papier. Papier should provide us with the APIs to post the details from Netsuite.
Item types, need integration are as follows.
- Assembly
- Inventory
- Discounts
- Other Charges
Note: Shipping item is not scriptable. So we cannot integrate this using script.
2)Orders
Papier will send the order details in the JSON format to the Netsuite using the Restlet API. Instead of real time Restlet invocation(whenever the order is created in papier), the order details can be sent as batches in some specific intervals to avoid the concurrency issue. Once the Restlet API with order details is invoked, then we will fetch the details and we create a sales order and customer deposit in Netsuite. In order to create the customer deposit using the script from the sales order, we will be using the form “Standard Sales Order – Invoice” for sales order.
We will maintain a custom record in Netsuite to store the order data that we received from Papier. In case of any failure, we will store the failed data with reason in this custom record.
We will provide the field mapping with mandatory fields for creating orders and customer deposits in Netsuite. Which will include the following specification and requires some inputs , confirmation from papier as well.
Sales order:
- One dummy customer per store/website us used
- Users will Manually update tax nexus in case of any additional changes.
- UK – prices inclusive of tax and US – prices exclusive. This will be calculated on the website and will be passed to Netsuite upon the order creation API call.
- Capture the original order number in a custom field
- Standard discount functionality will be used – header/line
- Shipping is calculated on the website and passed to Netsuite – either a shipping item or other charge line
- As a response we will be sending the created SO and customer deposit Ids
Customer deposit:
The customer deposit will be auto linked with the sales orders. And we will set the reference number of the payment into the Netsuite field P/N REF.
- Payment Methods can be Stripe, Paypal Store or Credit(Gift Card). We are assuming that payment method validation for these methods will be handled from the Papier side, but not from the Netsuite side.
Work order and invoice will be created manually using standard functionality. Whenever the user creates the invoice manually, customer deposit will be automatically applied with the invoice.
3)Cancel order
For canceling the work order we have to create the “Work order close” record. But this record is not scriptable and thus we cannot automate this using script. So the user may have to manually close the work order in the following ways before closing the sales order.
- Using close button in the work order
- Transactions > Manufacturing > Close Work Orders.
4)Item fulfillment
Papier will send the fulfillment details in the JSON format to the Netsuite using the Restlet API. Instead of real time Restlet invocation(whenever the shipping initiated in papier), the fulfillment details can be sent as batches in some specific intervals to avoid the concurrency issue. Once the Restlet API with fulfillment details is invoked, then we will fetch the details and we create a fulfillment record in Netsuite. We will be creating the fulfillment with status shipped. We assume that there can be partial(multiple) shipments. fulfillment should contain a unique identifier to link with the sales order.
We will maintain a custom record in Netsuite to store the fulfillment data that we received from Papier. In case of any failure, we will store the failed data with reason in this custom record.
We will provide the field mapping with mandatory fields for creating item fulfillment in Netsuite. Which will include the following specification and requires some inputs , confirmation from papier.
- We will update inventory detail in item fulfillment during creation
- Papier to check if tracking numbers need to be captured in Netsuite
Note: In the normal business process, if we are maintaining inventory in the Netsuite end, then the item fulfillment will be created from Netsuite, and which will change the status in the website accordingly. But in the proposed solution as per the proposal, the item fulfillment is created in Netsuite based on the request from Papier only.
5)Refund
Papier will send the refund details in the JSON format to the Netsuite using the Restlet API. Instead of real time Restlet invocation(whenever the refund is initiated in papier), the refund details can be sent as batches in some specific intervals to avoid the concurrency issue. Once the Restlet API with refund details is invoked, then we will fetch the details and we create a return authorization (RMA) record in Netsuite. We are assuming that there can be full and partial refunds. So we are creating the RMA for the given items in the Papier request. We assume that we are not restocking the item back into Netsuite.
We will maintain a custom record in Netsuite to store the refund data that we received from Papier. In case of any failure, we will store the failed data with reason in this custom record.
We will provide the field mapping with mandatory fields for creating RMA in Netsuite.
Assumptions
- All the Input and output requests through the Restlet API should be in JSON format.
- We assumed that payment method validation for Stripe, Paypal Store or Credit(Gift Card) will be handled from the paper side, but not from the Netsuite side.
- In case of any serial or lot number inventory item, the inventory details in the Papier request should match with the inventory details in the Netsuite for the successful creation of the item fulfillment.
- The request from Papier to create the sales order, customer deposit,item fulfillment, RMA in Netsuite should contain the Mandatory field in the request based on the Netsuite mandatory fields.
Out of scope
- Customer sync- Creation, updation, deletion
- Sales order – updation, deletion (Scope includes creation only)
- Customer deposit – updation, deletion (Scope includes creation only)
- Item fulfillment – updation, deletion (Scope includes creation only)
- RMA – updation, deletion (Scope includes creation only)
- Inventory sync of the item
Risks
- In case of any failure for the record to be created in Netsuite(due to invalid details, missing mandatory fields etc), we will store the failed data with reason in the custom records. We will not consider the failed requests again for re-processing.
Time
100-110 hours