# Inventory Engine

Violet's <mark style="color:purple;">**Inventory Engine**</mark> fuses data between your MES and ERP, ensuring real-time, event-driven synchronization of:

* Purchase Orders, Vendor Bills and Receipts
* Vendors
* Parts
* Work Orders
* Inventory Movements
* True Costs (calculated to include freight, taxes, tariffs, etc., on a unit price basis)

## Overview

This feature syncs data between your MES and your ERP, ensuring accurate, real-time information across your software stack - from your supply chain team to the manufacturing floor.

**What data types are supported?** Violet can sync *any data type* and *any property* (including custom fields) between your source and target tools.

**How frequently is data synced?** Data can be sync-ed on a scheduled basis or on an event-driven basis, as long as webhooks are available for your tools (and most are - for example NetSuite and ION).

**What direction does data flow?** You can control the source of truth and direction of data flow for every data type. For example, you may want to sync NetSuite Vendors to ION Suppliers, and you may want to enable bi-directional data sync between NetSuite and ION Purchase Orders.

## Supported Data Types

When syncing between tools like NetSuite and ION or Manufacturo, the below properties are kept in sync by Violet by default. Any additional properties, including custom attributes, can be synced as well.

<details>

<summary>Purchase Orders</summary>

* PO Number
* Amount
* Promise Date
* Status
* Vendor
* Shipping Address
* Creator
* Created Date
* Last Modified

**PO Line Items**

* Quantity
* Amount
* Status
* Exp. Receipt Date
* Part Name
* Part Number and Revision
* Created Date
* Last Modified

</details>

<details>

<summary>Parts / Items</summary>

* Part Number and Revision
* Part Name
* Quantity Available
* Quantity On Hand
* Tax Schedule
* COGS Account
* Asset Account
* Created Date
* Last Modified

</details>

<details>

<summary>Item Receipts</summary>

* Date Received
* Corresponding Purchase Order ("Created From")
* Vendor
* Quantity
* Location
* Item
* Memo
* Currency
* Exchange Rate
* Posting Period
* Subsidiary
* Created Date
* Last Modified

</details>

<details>

<summary>Vendors</summary>

* Company Name
* Email
* Billing Address
* Shipping Address
* Phone Number
* Contact Names
* Description
* Created Date
* Last Modified

</details>

## Inventory adjustments

Inventory adjustments are made according to your specific configuration settings.

For example, adjustments made to NetSuite will consider the following:

* Advanced Bin/Numbering
  * If enabled, Inventory Details (including Lot name) are required
* Adjustment Account
* Department
* Class
* Adjustment Reason (Consumption or Create Inventory)

## Data flow

Violet intelligently creates and updates (ie. upserts) data in accordance with any information that is pre-existing in the target application.&#x20;

See the diagram below for a visualization of the data flow for Purchase Orders:

<figure><img src="/files/we1Wf9koVq73AXGXnGc9" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.violetlabs.com/features/inventory-engine.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
