One rule inside an ExpensePolicy: a ruleType, an optional ExpenseCategory scope (empty = all categories), a numeric threshold, and the action taken on breach (HardBlock, Warn, RequireHigherApproval, AutoDisallow). The evaluation engine currently enforces six rule types: CategoryLimit and GradeHotelLimit (line amount+tax over the threshold), ReceiptMandatoryAbove (over the threshold with no receipt attached), BlockedCategory (any line in the category), LateSubmissionDays (expense date older than the threshold in days at the claim date) and DuplicateDetection (same merchant + invoice number + amount within the claim or on the employee's prior claims). The vocabulary also defines CityClassLimit, ForeignTravelCap and MileageRate, but the engine has no evaluation for them - rules of those types record no violations and enforce nothing. An InactiveCategory violation is raised automatically for lines using a deactivated category, independent of any configured rule.
Fields
| Field | Label | Type | Required | What it does |
Action | Action | Text | | What a breach does: HardBlock marks the evaluation blocked (Block severity), Warn only records the violation, RequireHigherApproval flags the evaluation as needing an extra approval step, AutoDisallow adds the excess to the line's disallowedAmount. All actions record an ExpensePolicyViolation. |
CityClass | City Class | Text | | Intended scoping attribute for city-class caps (metro vs non-metro). |
Country | Country | Text | | Intended scoping attribute for country-specific foreign-travel caps. |
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created Date | DateAndTime | Yes | |
ExpenseCategoryId | Expense Category | Lookup → ExpenseCategory | Yes | Scopes the rule to lines of one ExpenseCategory; empty means the rule checks every line of the claim. |
ExpensePolicyId | Expense Policy | Lookup → ExpensePolicy | | |
GLAccountName | Name | Text, unique | Yes | |
Id | Id | Guid | Yes | |
IsActive | Is Active | Boolean | | |
ModifiedById | Modified By | Lookup → UserAccount | Yes | |
Name | Name | Text | | |
OwnerId | Owner | Lookup → UserAccount | Yes | |
PartnerAccountId | Partner Account | Lookup → Account | | |
RecordTypeId | Record Type | Guid, hidden | | |
RuleType | Rule Type | Text | | Which check the rule performs. Enforced by the evaluation engine: CategoryLimit, GradeHotelLimit, ReceiptMandatoryAbove, BlockedCategory, LateSubmissionDays, DuplicateDetection. InactiveCategory appears on violations raised automatically for deactivated categories rather than being configured as a rule. |
Threshold | Threshold | Currency | | The numeric trigger, interpreted per ruleType: an amount cap for CategoryLimit/GradeHotelLimit (compared to line amount+tax), an amount floor for ReceiptMandatoryAbove, or a day count for LateSubmissionDays. Ignored by BlockedCategory and DuplicateDetection. |
UIProps | UI Props | Text | | |
UpdatedDateTime | Modified Date | DateAndTime | Yes | |
Actions
| Action | Label | Type | What it does |
BulkDelete | Delete | Delete | Delete the selected records. |
Clone | Clone | ServerAction (Clone) | Create a copy of this record |
Delete | Delete | Delete | Delete this ExpensePolicyRule. |
DeleteRecord | Delete | Delete | Delete |
Edit | Edit | Edit | Edit this ExpensePolicyRule. |
EditInLine | Edit | EditInline | EditInLine |
EditRecord | Edit | Edit | Edit |
New | New | New | Create a ExpensePolicyRule. |
NewInLine | New | NewInline | NewInLine |
View | View | View | View this ExpensePolicyRule. |