Skip to content
SyncMyShop

Notes

Required fields the source never sends: subsidiary, department, class and posting groups

An ERP order needs fields a store order does not have: a subsidiary, a department, a class, a location, a discount item, posting groups. The store has no such fields, so the integration derives each one from something the store does send, or sets a default, and writes down which rule produced which value.

Updated

Fields that exist only on the ERP side

A store order describes a sale: a customer, lines, a shipping address, a payment. An ERP order also describes where the sale lands in the books. That second part has fields the store has never heard of.

Shopify's order has no subsidiary, no department, no class and no posting group. It does have sourceName ("web", "pos"), discountCodes, a shippingLine, a poNumber for business customers and a customer that is null for a guest checkout. Everything the ERP needs beyond that has to be derived.

What the two most common US mid-market ERPs ask for, read from NetSuite's Records Browser and Microsoft's Business Central reference on October 3, 2026:

ERP field System What the store sends How the integration fills it
entity, required NetSuite customer, null on a guest checkout match on email, create, or one guest customer
subsidiary NetSuite OneWorld nothing from the store, the country or the currency
department, class, location NetSuite nothing from channel, product type, fulfillment location
custbody_ fields set to mandatory NetSuite nothing a default per field
discountitem NetSuite discountCodes and amounts one discount item, or a line per discount
shipmethod NetSuite shippingLine title lookup table from title to shipping item
otherrefnum (PO #) NetSuite poNumber on B2B orders direct
Customer Posting Group, Gen. Bus. Posting Group Business Central nothing set in Business Central, not in the API
Gen. Prod. Posting Group, Inventory Posting Group Business Central item nothing set on the item in Business Central

In NetSuite's schema department, class and location are optional. In many accounts they are not: the accounting preferences Make Departments Mandatory, Make Classes Mandatory and Make Locations Mandatory turn them into required fields for every transaction, and custom segments have their own Mandatory option. Oracle's documentation names the consequence for other processes too, such as a currency revaluation that fails when a source transaction lacks a required segment. An integration that worked in a sandbox without those preferences starts failing on the first production order.

Worked example: one order, six derived values

Order 1052 comes from the online store, ships to Ohio and is assigned to the Reno warehouse. It has 3 lines with a subtotal of 480.00, discount code SPRING10 for 10% and an automatic discount of 15.00.

Where the NetSuite fields come from that a Shopify order does not carry Six values on a NetSuite sales order are derived from Shopify fields through rules: the subsidiary from the shipping country, the department from the order source, the location from the assigned fulfillment location, the item from the item map and the discount item from the discount code. Class has no source and gets a default. Shopify order 1052 NetSuite sales order shippingAddress.countryCode US sourceName web assignedLocation.name Reno DC lineItems.variant.id 44718302511 discountCodes SPRING10 subsidiary Northgate Supply Inc. rule: country to subsidiary department E-commerce rule: source to department location Reno DC location table item internal ID 2213 item map discountitem Shopify discount one item for all codes class Wholesale no source: default lookup lookup lookup item map
Five of six NetSuite values come from a lookup on a Shopify field; class has no source and gets a default.

The rules for this account:

NetSuite field Rule Value for order 1052
subsidiary shipping country US to the US subsidiary Northgate Supply Inc.
department sourceName web to E-commerce, pos to Retail E-commerce
location assigned location of the fulfillment order, by name Reno DC
class no source in the order; default Wholesale
item item map from Shopify variant ID to NetSuite internal ID 2213
discountitem one item for all store discounts Shopify discount

The discount needs arithmetic. 10% of 480.00 is 48.00. With the automatic 15.00 that is 48.00 + 15.00 = 63.00 in total, and the order total before tax and shipping is 480.00 - 63.00 = 417.00. The sales order header holds one discountitem and one discountrate. Written as one header discount of -63.00, the total is right and the information which code gave what is lost. Written as two discount lines, each below the lines it applies to, both survive, and so does the split per line that revenue reports by class or department need.

The item map and the items no product has

The store knows a product by its variant ID and SKU, NetSuite by an internal ID. The item map is the table between them, and it has to be kept: a new variant in Shopify has no row until someone or something adds it. An order line for a variant without a row has no item, and the order cannot be saved.

Standard connectors and iPaaS platforms document a second gap. Their item map covers products that exist in the store, and transaction-only items are not created by it: discount items, shipping items and refund adjustment items have to be created in NetSuite and mapped by hand. The same guidance warns that an item without a map record is skipped by the inventory sync without an error.

Store concept NetSuite record it needs Exists in the store as a product
Product variant inventory, non-inventory or kit item yes
Discount code or automatic discount discount item no
Shipping rate "Standard" shipping item no
Gift card non-inventory or other charge item yes, without stock
Refund adjustment other charge item no

Posting groups in Business Central

Business Central decides the G/L accounts of a sale through posting groups. The customer carries a Customer Posting Group for the receivables account and a Gen. Bus. Posting Group that, combined with the item's Gen. Prod. Posting Group, picks the sales account. For US sales tax the customer has a Tax Area Code and Tax Liable, and the item a Tax Group Code.

The standard API v2.0 customer resource exposes taxLiable, taxAreaId, paymentTermsId, shipmentMethodId and paymentMethodId, and no posting group. A customer created through it gets its posting groups from setup inside Business Central. If that setup is missing, the order is saved and the invoice cannot be posted, which is found days later by whoever runs the posting. So the integration checks before go-live that every customer it creates ends up with a posting group, and the dry run posts a test invoice for each customer type.

Defaults that hide errors

A default is the right answer for a field with no source. It is also the easiest way to make a wrong value invisible: every order lands, and the department report is wrong for a quarter.

Three rules keep defaults honest:

  • A default is used only for a field that has no source at all. A field with a source but no matching row in the lookup table, such as a new sales channel or a new warehouse, goes to the review list instead of to the default.
  • Every derived value is logged with the rule that produced it, so a report can be traced back to the order.
  • A change in the ERP's preferences, such as a newly mandatory class, shows up as a failed dry run before it shows up as failed orders.

Standard connector guidance names the same risk on the customer side: when the subsidiary on a customer does not match the expected value, the import fails or creates a duplicate customer. How duplicates come about is covered in duplicate customers and duplicate orders.

What this means for your integration

We list every field your ERP requires, including the ones your accounting preferences made mandatory, and write a rule for each: derived from a store field, looked up in a table, or a default for fields with no source. New channels, warehouses and products that have no row yet go to the review list instead of to a default, and every order in the log shows which rule set which value.

Required fields are one part of the field mapping of an order. The order flow is on orders, customers and shipping and the NetSuite side on the NetSuite integration page. Send us an export of a few orders and your ERP's required fields, and we show which values the store can give and which need a rule.

Frequently asked questions

Why does NetSuite reject an order for a missing department?

Because the account has the accounting preference Make Departments Mandatory turned on, and the order arrived without one. The same holds for classes and locations, and for custom segments set to mandatory. The store never sends these values, so the integration needs a rule per field: from the sales channel, the product, the fulfillment location, or a fixed default.

What happens to a guest checkout when the ERP requires a customer?

Shopify returns customer as null for an order placed without a customer login, and a NetSuite sales order cannot be saved without entity. The integration either matches or creates a customer from the order email, or books guest orders on one agreed customer record. Which one depends on how your accounts receivable team works.

Can posting groups be sent through the Business Central API?

Not through the standard API v2.0 customer resource: it has fields for tax area, payment terms, shipment method and payment method, and none for posting groups. The posting groups have to be set up in Business Central, for example through a customer template, before the integration creates customers.

How are discount codes mapped to NetSuite?

With a discount item. The sales order header has one discountitem with one rate, so two discounts on one order are either added together into one amount or written as discount lines below the items they apply to. Standard connectors document that discount items are not created by their item map and have to be set up by hand.

Where do we see which default was used?

In the per-run log of the integration, next to each order: which rule set the subsidiary, department, class and location, and whether a default was used because the source had nothing. That is what an accountant asks for when a report by department does not add up.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com