# NetSuite Vendor Bill and Purchase Order Approval Workflow Design Template

> Source: https://netray.co/tools/netsuite-approval-workflow-design-template
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

Fill in tier limits and approvers to get a SuiteFlow design document with states, transitions, approval status values, emails and test cases.

## Category

netsuite

## Erp

NetSuite

## Audience

- NetSuite administrator
- AP manager
- Controller
- SuiteFlow designer

## Tool

**Kind:** template

**Output:** document

**Fields:**

#### Record type

**Key:** record_type

**Type:** select

**Options:**

- Vendor Bill
- Purchase Order

**Default:** Vendor Bill

#### Workflow ID

**Key:** workflow_id

**Type:** text

**Default:** customworkflow_vb_approval

#### Standard approval routing preference

**Key:** routing_pref

**Type:** select

**Options:**

- Reviewed: custom SuiteFlow replaces standard routing
- Reviewed: standard routing kept, this workflow adds steps

**Default:** Reviewed: custom SuiteFlow replaces standard routing

#### Tier 1 limit

**Key:** tier1_limit

**Type:** number

**Default:** 5000

#### Tier 2 limit

**Key:** tier2_limit

**Type:** number

**Default:** 25000

#### Tier 1 approver role

**Key:** tier1_role

**Type:** text

**Default:** AP Supervisor

#### Tier 2 approver role

**Key:** tier2_role

**Type:** text

**Default:** Controller

#### Final approver above tier 2

**Key:** final_approver

**Type:** text

**Default:** CFO

#### Release status

**Key:** release_status

**Type:** select

**Options:**

- Testing
- Released

**Default:** Testing

#### Execute as Admin

**Key:** execute_as_admin

**Type:** select

**Options:**

- No
- Yes

**Default:** No

#### Workflow owner

**Key:** owner

**Type:** text

**Default:** NetSuite Administrator

**Blocks:**

#### 1. Workflow header

**Table:**

**Columns:**

- Setting
- Value

**Rows:**

**0:** Record type

**1:** {{record_type}}

**0:** Workflow ID

**1:** {{workflow_id}}

**0:** Owner

**1:** {{owner}}

**0:** Release status

**1:** {{release_status}}

**0:** Execute as Admin

**1:** {{execute_as_admin}}

**0:** Initiation

**1:** Event Based: On Create; event types Create; context types User Interface, CSV Import, Web Services (decide each explicitly)

**0:** Initiation condition

**1:** Approval Status is Pending Approval or empty

**0:** Standard approval routing preference

**1:** {{routing_pref}}

#### 2. States

**Table:**

**Columns:**

- State
- Entry actions
- Buttons
- Transitions
- Trigger

**Rows:**

**0:** Pending Approval

**1:** Set Field Value: Approval Status = Pending Approval (1); Lock Record (Before Record Load) for users not in {{tier1_role}}

**2:** Approve, Reject (Add Button, condition: role is {{tier1_role}})

**3:** Approve and total <= {{tier1_limit}}: Approved; Approve and total > {{tier1_limit}}: Tier 2 Review; Reject: Rejected

**4:** On Entry / Before Record Load

**0:** Tier 2 Review

**1:** Send Email to {{tier2_role}}; Lock Record for other roles

**2:** Approve, Reject (role is {{tier2_role}})

**3:** Approve and total <= {{tier2_limit}}: Approved; Approve and total > {{tier2_limit}}: Final Review; Reject: Rejected

**4:** On Entry / Before Record Load

**0:** Final Review

**1:** Send Email to {{final_approver}}

**2:** Approve, Reject ({{final_approver}} only)

**3:** Approve: Approved; Reject: Rejected

**4:** On Entry / Before Record Load

**0:** Approved

**1:** Set Field Value: Approval Status = Approved (2); Send Email to creator

**2:** None

**3:** On edit of amount: back to Pending Approval

**4:** On Entry

**0:** Rejected

**1:** Set Field Value: Approval Status = Rejected (3); Send Email to creator with reason

**2:** Resubmit (creator)

**3:** Resubmit: Pending Approval

**4:** On Entry

#### 3. Transition rules

**Table:**

**Columns:**

- From
- To
- Condition (formula)
- Execute on button

**Rows:**

**0:** Pending Approval

**1:** Approved

**2:** {total} <= {{tier1_limit}}

**3:** Approve

**0:** Pending Approval

**1:** Tier 2 Review

**2:** {total} > {{tier1_limit}}

**3:** Approve

**0:** Tier 2 Review

**1:** Approved

**2:** {total} <= {{tier2_limit}}

**3:** Approve

**0:** Tier 2 Review

**1:** Final Review

**2:** {total} > {{tier2_limit}}

**3:** Approve

**0:** Any review state

**1:** Rejected

**2:** none

**3:** Reject

**0:** Approved

**1:** Pending Approval

**2:** {total} changed after approval (compare old and new value)

**3:** Before Record Submit

#### 4. Emails and notifications

**Body:** Tier 1 notice: to {{tier1_role}} on entry to Pending Approval, subject includes document number, vendor and amount.
Tier 2 notice: to {{tier2_role}} on entry to Tier 2 Review.
Final notice: to {{final_approver}} on entry to Final Review.
Outcome: to the creator on Approved and Rejected; the rejection email includes the reason field.
Reminder: optional scheduled transition or saved search alert for items pending more than 3 business days.

#### 5. Test cases

**Table:**

**Columns:**

- #
- Scenario
- Expected result
- Pass

**Rows:**

**0:** 1

**1:** {{record_type}} for {{tier1_limit}} exactly

**2:** Approved after one approval

**0:** 2

**1:** Amount just over {{tier1_limit}}

**2:** Moves to Tier 2 Review

**0:** 3

**1:** Amount just over {{tier2_limit}}

**2:** Moves to Final Review

**0:** 4

**1:** Reject at Tier 2

**2:** Approval Status Rejected (3), creator emailed

**0:** 5

**1:** Edit amount after approval

**2:** Returns to Pending Approval

**0:** 6

**1:** Create through CSV import

**2:** Workflow initiates or not, per context types chosen

**0:** 7

**1:** Non-approver opens record

**2:** Record locked, no Approve button

**0:** 8

**1:** Approver is also the creator

**2:** Segregation rule applied as designed

#### 6. Sign-off

**Signatures:**

- Workflow owner
- AP manager
- Controller

**Notes:** Approval Status internal ids on transactions are 1 Pending Approval, 2 Approved, 3 Rejected. Check Setup > Accounting > Accounting Preferences > Approval Routing (Vendor Bill Approval Routing, Purchase Order Approval Routing) in a sandbox before release, so that only one approval mechanism acts on the record. Document the decision in the header.

## Content

**Intro:** This template produces a SuiteFlow design document for a tiered vendor bill or purchase order approval workflow in NetSuite: header settings, states, buttons, transition formulas, emails and test cases. Fill in your limits and roles, review it with AP and finance, then build it in Customization, Workflow, Workflows.

**Sections:**

#### How to use it

**Body:** Choose the record type, enter the workflow ID you will use, the two tier limits and the role or person at each tier, then decide release status and Execute as Admin. The document fills every state and transition with your values. Walk through the states table with the AP manager and controller before anyone opens the workflow editor: most rework in approval workflows comes from undecided edge cases such as edits after approval, CSV imports and approvers who created the bill. Keep the release status at Testing in sandbox, where only the owner triggers it, and switch to Released after the test cases pass.

#### Where this lives in NetSuite

**Body:** Workflows are built at Customization, Workflow, Workflows, New. The Approval Status field (approvalstatus) on vendor bills and purchase orders uses internal ids 1 Pending Approval, 2 Approved and 3 Rejected, which is what Set Field Value actions and saved search criteria reference. The accounting preferences for approval routing sit at Setup, Accounting, Accounting Preferences, Approval Routing subtab, with separate checkboxes for vendor bills and purchase orders. Review those preferences before building: if standard routing and a custom workflow both act on the same record, approvers see conflicting buttons and statuses. Oracle also offers the SuiteApprovals SuiteApp if you prefer configured rules over a hand-built workflow.

**Bullets:**

- Lock Record and Add Button actions use Before Record Load triggers.
- Use formula conditions such as {total} > 25000 on transitions with Execute on Button set.

#### Design decisions to make explicitly

**Body:** Decide which context types initiate the workflow: user interface only, or also CSV import, web services and scripts. Imported bills that skip approval are a frequent audit finding. Decide whether an amount change after approval sends the record back, and whether foreign currency bills compare {total} in transaction currency or a converted value. Decide whether Execute as Admin is needed; it lets actions run with full permissions, which hides role problems during testing. Finally, decide who can approve their own bills: a condition comparing the current user to the creator enforces segregation of duties.

#### How to check it in the system

**Body:** After each test case, open the record's System Information, Workflow History subtab to see each state entered and action executed, and the System Notes for the Approval Status changes. A saved search on the record type with criteria Approval Status is Pending Approval and a column for the current workflow state gives AP a queue view, and the same search with date created older than three days is a ready reminder alert.

**Cta:** If you want AP and controllers to ask NetSuite which bills are waiting on whom, and why, in plain English with answers drawn from workflow history, we can set that up on your own infrastructure.

**Faq:**

#### How do I create a vendor bill approval workflow in NetSuite?

**Answer:** Go to Customization, Workflow, Workflows, New, set the record type to Vendor Bill, initiation On Create, then add states for pending, each review tier, approved and rejected. Use Add Button for Approve and Reject, transitions with Execute on Button and formula conditions on {total}, and Set Field Value actions on Approval Status. Test in sandbox before release.

#### What are the Approval Status values in NetSuite?

**Answer:** On transactions such as vendor bills and purchase orders, Approval Status internal ids are 1 for Pending Approval, 2 for Approved and 3 for Rejected. Workflows set them with Set Field Value actions, and saved searches and SuiteQL filter on them, for example approvalstatus = 1 for the pending queue.

#### Should I use standard approval routing or a custom workflow?

**Answer:** Standard routing and SuiteApprovals cover common limit-based approvals with configuration only. A custom SuiteFlow workflow is worth it when you need extra tiers, department or subsidiary rules, custom emails or locking. Whichever you choose, review the Approval Routing preferences so only one mechanism controls the record.

#### How do I approve purchase orders in NetSuite with limits?

**Answer:** Employee records carry purchase and approval limits used by standard routing, while a custom workflow compares {total} against tier limits on its transitions. This template uses fixed tier limits in transition formulas; if limits vary per approver, read them from the employee record in a condition or a workflow action script.

## Search terms

netsuite vendor bill approval workflow, netsuite approval workflow, approval workflow in netsuite, netsuite purchase order approval, netsuite erp workflow design, suiteflow approval workflow template, netsuite approval status

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
