In Coupa there are two ways to define a Chart of Account: Static (full account strings are loaded) or Dynamic (each segment is created individually, Coupa dynamically builds account strings based on selections).
- Inclusive parent/child relationships can be set amongst segments to filter valid options and only allow the selection of appropriate 'child' accounts.
- Exclusive Account Validation Rules (AVRs) can be used in conjunction with dynamic accounting to prevent users from building invalid account strings.
AVRs are a recommended approach for billing string validation once you get into more complex segment dependencies with 3+ segments that can create many possible combinations to maintain in database tables and impact optimal user performance. We have also seen that these relationships remain fairly static in customer instances allowing an administrator to maintain directly in Coupa via AVRs without need for integration development.
Account Validation Rules consist of a set of disallowed account combinations. These are built on a per COA (chart of account) basis as the segment structure may be different for each COA. These include customizable error messages which should be used to inform users what needs to be fixed.
If all conditions defined in a rule are met by the user's selection an error will be thrown and they will not be allowed to proceed with their current selection. (click on images to view full size)
Setup > Financial Setup > Account Validation Rules ( [customerinstance].coupahost.com/account_validation_rules )
Information in the rule includes, the name (must be unique), the error message which will be displayed to end users if the rule is triggered, a description (optional), active/inactive flag, and the chart of accounts.
The rule is then defined by the conditions set on each segment based on the options below:
- Range - define the range of disallowed options, ex: 1000-1200 (for a single value put the same value in the Min and Max fields).
- Any Values - segment is populated
- Blank Value - segment is left blank
Each rule is triggered only if the combination of conditions is met.
One thing to be cautious of if creating or editing AVRs manually in the UI is that condition (range, any or blank) is a required field for all segments, therefore multiple rules may need to be created to accommodate a single scenario.
For example let's take a simple COA with three segments. Our rule is only regarding the first two segments, the value in the third segment does not matter. If creating through the UI, you actually need to create two different rules to make sure all scenarios are covered - ie. if the third segment is left blank OR if the third segment is populated.
However these same restrictions are not applied through the CSV loader or integration. Segments that are irrelevant to the rule can be left completely blank (with no condition) and will be ignored. In this way a single rule can be made to take care of both scenarios.
In this example there are only 3 segments which resulted in the need for 2 rules instead of 1, as you can imagine this can get exponentially more complex with COAs that have more segments. Therefore it is generally recommended to always use the CSV loader or integration when creating/editing AVRs to avoid this situation.