Skip to main content

Rejection Rules

Conditional rules to automatically reject documents based on various criteria

The Rejections page on the Trading party specific tab: the expanded PO 2 rule group shows the information icon next to its title because only one of its two rules is enabled, and the PO group below it is fully disabled and shown in grey text

Rejection Rules are conditional guardrails that automatically block documents from progressing through the approval workflow when they violate defined criteria. They form the third layer of Docupath's business rules system - operating after Instruction Builds (which guide extraction) and Transformations (which reshape data).

Rejection Rules are deterministic: if a condition evaluates to true, the document is rejected with a logged reason. They do not correct data or infer intent - they simply enforce compliance boundaries by preventing non-conforming documents from reaching approval.


How It Works

Processing Position

Rejection Rules evaluate documents after AI extraction and after Transformation Rules have been applied. This means rejection conditions are evaluated against the final, transformed values - not the raw extraction output. If a rejection condition is triggered, the document is immediately moved to Rejected status with a required reason, and it exits the approval flow.

Creating a Rejection Rule

To create a rejection rule:

  1. Click the dropdown arrow (▾) next to your user avatar in the top-right corner of the screen to open the main navigation menu

  2. Click "Rejection Rules" in the main menu

  3. Select the appropriate scope tab (Trading Party Specific, Organization Specific, Country Specific, or Global)

  4. Click "+ Add New" to open the creation form

  5. Enter a Title and select a Document Type

  6. Select the relevant scope options (sub-organization, trading parties, or countries - depending on the tab)

  7. Write your rejection logic in plain English in the Rules text area. For example: "If the purchase_order_number field is missing or empty, reject the document"

  8. Optionally, click "Link Supporting File" to attach a supporting file already uploaded to your tenant instance

  9. Click "Refine with AI" (pencil ✏️ icon) to get AI feedback on your instruction

  10. Click "Generate with AI" (lightning ⚡ icon) to have the AI programmatically generate the rejection rule from your plain-English description

  11. Click "Save" to save the rejection rule

Editing a Rejection Rule

  1. On the Rejections page, select the scope tab that contains the rule (Trading party specific, Organization specific, Country specific, or Global).

  2. Click the edit (pencil) icon on the rule's row in the Actions column. The Edit rejection rule screen opens.

  3. Update any of the rule's details, including its Title, Document type, Organization, Party A, Party B, or the rejection logic in the natural-language text area. You can also use Link supporting file, Refine with AI, or Generate with AI, just as when creating a rule.

  4. Click Save to apply your changes, or Cancel to discard them.

Deleting a Rejection Rule

  1. On the Rejections page, select the scope tab that contains the rule.

  2. Click the delete (trash) icon on the rule's row in the Actions column.

  3. A confirmation dialog asks if you are sure you want to delete the rule.

  4. Click Delete to remove it, or Cancel to keep it.

Once deleted, the rule no longer applies to documents processed under that scope.

Enabling and Disabling Rejection Rules

A rejection rule group can be disabled without being deleted, either as a whole or one sub-rule at a time. Only enabled rules are evaluated when a document is processed; a disabled rule stays configured but is skipped entirely, so it cannot reject a document while it is off.

On the Rejections list:

  • Each rule group's row has a switch. It is on when at least one rule in the group is enabled. Turning it off disables every rule in the group; turning it on enables them all

  • A group whose rules are only partly enabled shows an information icon next to its title. Hovering it reveals how many are on, for example "2 of 3 rules currently enabled"

  • A fully disabled group is shown in grey text, making inactive rules easy to spot while scanning the list

  • Expand a group with the dropdown (⌄) to see its individual rules, each with its own switch

The Title column is the first column in the list and can be sorted, so groups can be found by name before toggling them.

Each rule also carries its own switch on the create and edit screens, so a rule can be saved in a disabled state and switched on later once it has been reviewed. This is useful for staging a strict rejection rule before it starts blocking documents.

Switch changes take effect in the interface immediately and are saved after you stop toggling. If a save fails, the group reverts to its last saved state and an error message appears.

Rules created before this capability existed are enabled by default, so existing rejection behavior is unchanged until a rule is explicitly switched off.

Generated Rule Structure

When the AI generates a rejection rule, the output is composed of:

  1. Conditions: Field-value comparisons using supported operators that determine when a document should be rejected

  2. Logic connector: Either AND (all conditions must be true to reject) or OR (any one condition triggers rejection). AND and OR cannot be mixed in a single rule.

  3. Rejection reason: A mandatory message logged against the document explaining why it was rejected

Users do not typically need to edit the generated rules manually, but they can be modified directly if needed.

Condition Operators (in Generated Rules)

Operator

Meaning

Common Use

=

Equal to

country = "ZZ" (invalid country code)

<

Less than

line_count < 1 (no line items)

<=

Less than or equal to

total <= 0 (non-billable amount)

!=

Not equal to

currency != "USD" (for USD-only flows)

IS_NULL

Field missing or empty

po_number IS_NULL (missing PO)

IS_NOT_NULL

Field present and non-empty

test_flag IS_NOT_NULL (test document detected)

CONTAINS

Field contains the value, or any value from a linked supporting file (case-insensitive)

description CONTAINS "TEST" (block test documents)

NOT_CONTAINS

Field does not contain the value, or any value from a linked supporting file - the inverse of CONTAINS

cost_centre NOT_CONTAINS an approved list (reject unlisted values)

Scope Precedence

Rejection Rules can be configured at multiple scopes. When multiple rules could apply, the most specific scope takes precedence:

  1. Trading Party specific (Party A + Party B) - highest priority

  2. Trading Party specific (only Party A or only Party B)

  3. Organization specific

  4. Country specific

  5. Global - lowest priority

Supporting Files

Rejection Rules can reference supporting files (such as CSV lookup tables) to validate field values against approved lists. For example, a rule can reject documents where the cost centre is not found in an approved cost centre list. Supporting files are uploaded to the tenant instance separately and can be linked to a rule during creation by clicking the "Link Supporting File" link. Use the NOT_CONTAINS ("Does not contain") operator for this: it rejects or flags only when the field genuinely does not contain any value from the linked list, while its counterpart CONTAINS matches when the field does contain a listed value.

Deterministic Behaviour

Rejection Rules are strictly deterministic - they evaluate conditions and either reject or pass the document. They do not modify data, infer corrections, or apply partial rejections. This predictability is a design choice that ensures rejection outcomes are auditable and unambiguous.

Rule Titles

Each generated rule shows a short, automatically generated title in its header, next to its position number - for example, Rule 1 : PO Number is empty. The title is derived from the rule's own content, so you can identify a rule at a glance instead of reading it by position alone. It is separate from the Title you enter for the rule group as a whole.

A rejection rule's title is built from its first condition, read as a plain-language phrase (<Field> <operator> <value>) with the operator spelled out in words:

Operator

Reads as

=

is

!=

is not

<

is less than

<=

is at most

>

is greater than

>=

is at least

CONTAINS

contains

NOT_CONTAINS

does not contain

IS_NULL

is empty

IS_NOT_NULL

is not empty

The IS_NULL and IS_NOT_NULL operators take no value, so their titles end at the operator (for example, PO Number is empty). A value that references a supporting-file column reads as column "<Column>", and field paths are shown as plain text (for example, Buyer Name).

When a rule has more than one condition, the title describes the first condition and appends +N more to stand for the rest. If the first condition cannot be phrased, the title falls back to the rule's rejection reason (which is required), so a title is normally always available. The header falls back to just the position number (with no title) only in the rare case of an incomplete rule with neither a usable condition nor a reason.


Supported Configurations and Options

Configuration

Detail

Scope levels

Trading Party specific, Organization specific, Country specific, Global

Logic connectors

AND (all conditions true to reject), OR (any condition triggers rejection) - cannot mix

Condition operators

=, <, <=, !=, IS_NULL, IS_NOT_NULL, CONTAINS, NOT_CONTAINS

CSV reference files

Upload approved/blocked value lists for dynamic validation

Document type scoping

Rules are assigned to a specific document type

Rejection reason

Mandatory text logged with every rejection

Enable/disable

Per rule, or per rule group (cascades to every rule in the group)


Technical Specifications

Parameter

Limit

Maximum rule groups per organization

100

Maximum rules per rule group

500

Maximum rule groups per tenant

1,000

Maximum CSV file size

50 MB

Maximum CSV rows

150,000 (or line items)

Maximum CSV columns

10

Rejection notification

Note: a rule group simply refers to a single Rejection Rule, as a Rejection Rule can be composed of multiple sub-rules.


Notes

  • AND and OR logic cannot be mixed within a single rule

  • Rejection Rules are deterministic - they do not correct data or apply partial actions

  • Overly broad conditions can cause false rejections; scope rules as narrowly as possible

  • CSV reference files must use comma-separated format; other delimiters are not supported

  • If the extraction is inaccurate (e.g., a field is wrongly empty), the rejection rule will still fire - always pair with accurate Instruction Builds

  • Complex multi-field validation logic may be better handled through multiple separate rules rather than compound conditions, for clearer triage

  • Once rejected, documents cannot be re-approved without reprocessing through the full lifecycle

  • Existing rules keep working as before. To use the NOT_CONTAINS ("Does not contain") operator on a rule you built earlier, regenerate the rule so it picks up the operator, then reprocess the affected documents

  • Each rule's header title is generated automatically from the rule's first condition (or its rejection reason as a fallback) and is for identification only. It is not separately editable and reflects the rule's current content

  • Disabling is not the same as deleting. A disabled rule keeps its conditions and actions and can be switched back on at any time

Did this answer your question?