Skip to content

Rule & Warning types

In Supplier Data Manager (SDM), rules and warnings control how field values are validated during the Normalisation step. A rule is a hard requirement — a field that fails a rule blocks the job and prevents the user from advancing. A warning is a soft requirement — users can acknowledge the issue and continue. Both rules and warnings share the same set of types described below and are configured per field in the project settings.

General behavior

Info

  • SDM does not execute rules or warnings if the field is empty, except when the requirement level of the field is required, or when the field has a rule of type required, required_with, required_without, or required_on.
  • Rules and warnings are only applied during the Normalisation step.
  • If a field has multiple rules or warnings, they are combined with an AND operator: all rules and all warnings must pass for the field to be valid.

All types

Type Description Example Executed when field is empty Notes
required Makes sure that a value is entered in the field, otherwise an error is displayed. Field A must have a value. YES
required_with Ensures field A is required if certain other fields are completed. If fields B and/or C have values, field A must be completed. YES Options: columns, which (all or any)
required_without Ensures field A is required if certain other fields are empty. If fields B and/or C are empty, field A must be completed. YES Options: columns, which (all or any)
required_on Ensures field A is required if another field matches a specific pattern. Field A is required if field B contains the value "Red". YES Only valid on string fields. Options: column, pattern
regex Ensures the value matches a regular expression pattern. Field A must match the pattern ^[a-zA-Z0-9]+$. ❌ Options: pattern
is_true Ensures the field has a boolean value of true. Field A must be set to true. ❌
unique Ensures the value is unique across all rows. Values in field A must be unique across the file. ❌ Case-sensitive: "Apple" and "apple" are treated as distinct values.
unique_with Ensures the combination of values from multiple fields is unique across all rows. The combination of values in fields A and B must be unique. ❌ Option: column. Case-sensitive: "Apple" and "apple" are treated as distinct values.
unique_on Ensures the value is unique within rows that share a specific condition. Field A must be unique among rows where field B has a specific value (e.g., "Active"). ❌ Option: columns. Case-sensitive: "Apple" and "apple" are treated as distinct values.
isin Ensures the value is within a defined set of acceptable values. Field A must be one of ["Red", "Green", "Blue"]. ❌ Options: values. Commonly used to validate that option values in Select attributes or family codes are within the allowed set.
max_length Ensures the value does not exceed a maximum number of characters. Field A must not exceed 255 characters. ❌ Options: threshold, strict. No type check is performed — this rule can be applied to both string and numeric fields (e.g., for EAN codes with a 13-digit maximum).
max_value Ensures the value does not exceed a maximum number. Field A must be less than or equal to 100. ❌ Options: threshold, strict
min_value Ensures the value meets a minimum number. Field A must be greater than or equal to 10. ❌ Options: threshold, strict
min_date Ensures a date value is on or after a minimum date. Field A must be on or after 2024-01-01. ❌ Options: min_date (ISO 8601 format: YYYY-MM-DD). The field's format property determines how the date string is parsed.
max_date Ensures a date value is on or before a maximum date. Field A must be on or before 2024-12-31. ❌ Options: max_date (ISO 8601 format: YYYY-MM-DD). The field's format property determines how the date string is parsed.
superior_to Ensures the value in field A is greater than the value in field B. Field A must be greater than field B. ❌ Numeric fields only. Options: column, strict
inferior_to Ensures the value in field A is less than the value in field B. Field A must be less than field B. ❌ Numeric fields only. Options: column, strict
uneditable Prevents the field value from being edited after initial entry. Field A cannot be changed once it has been set. ❌
equal_to Ensures the value in field A equals the value in another field. Field A must equal field B. ❌ Option: column
any_of Ensures that at least one of several cases passes. Each case contains conditions that must ALL be satisfied, but ANY case can pass for the rule to succeed. Field A must either be 15 or more characters long, OR contain a premium keyword. ❌ Options: cases (list of validation cases). Each case has a conditions array. Conditions can include an optional field property to apply the condition to a different field.

Examples

unique_with

An error is displayed for row 5 because the value in field A is not unique when combined with field B.

The screenshot above shows a normalisation step with a unique_with rule violation on row 5: the combination of values in fields A and B is duplicated, triggering an error.

any_of

The any_of rule passes if any of its cases succeed. Within each case, all conditions must pass (AND logic). Use this rule to express "either/or" validation requirements.

{
  "name": "any_of",
  "cases": [
    {
      "conditions": [
        {"name": "regex", "pattern": "^.{15,}$"}
      ]
    },
    {
      "conditions": [
        {"name": "regex", "pattern": ".*(PRO|ELITE|PREMIUM|EXPERT).*"}
      ]
    }
  ]
}
  • Case 1: Field must be at least 15 characters long
  • Case 2: Field must contain a premium keyword (PRO, ELITE, PREMIUM, or EXPERT)
  • Result: The rule passes if either case succeeds (OR logic between cases)
  • Within each case: All conditions must pass (AND logic within a case)

To apply a condition to a different field than the one the rule is defined on, add a field property to the condition:

{
  "name": "any_of",
  "cases": [
    {
      "conditions": [
        {"name": "required"},
        {"name": "isin", "field": "category", "values": ["Electronics", "Appliances"]}
      ]
    }
  ]
}

In this example, the case passes only if the current field is filled in AND the category field contains one of the specified values.