AggregateFunction | Aggregate Function | PickList | | Sum produces exactly one claim line per group whose unit price accumulates the amount field across every source row (with quantity fixed at 1); Per Record produces one claim line per source row, mapped individually. The netting leg only ever adjusts the first line, so it is meaningful for Sum setups. Values: Sum, Per Record. |
AmountFieldName | Amount Field | Text | | The numeric field on the source row that is summed into the claim's value when AggregateFunction is Sum; the run fails outright if Sum is configured without it. Navigation paths are allowed and the field is eagerly included in the source query. |
AmountFormula | Amount Formula | MultiLineText | | An optional expression evaluated per source row before accumulation, with the raw amount available as the variable amount and the source row own fields in scope — so a claimable percentage on the related scheme can scale each contribution. Leave it blank to accumulate the amount field unchanged. |
AutoSubmitForApproval | Auto Submit For Approval | Boolean | Yes | When on, each newly written claim is submitted into its approval process straight after the run — and for target-entity setups it submits the target document type instead. Submission failures (no process configured, already pending) are logged into the run summary and never fail the generation run, and it is skipped entirely in simulate mode. |
BatchSize | Batch Size | Number | Yes | How many source rows the job pulls per page while streaming the query; it is clamped between 1 and 5000 at run time regardless of what is stored. Groups accumulate across pages, so this affects memory and progress reporting, not the shape of the result. |
BranchPath | Branch Path | Text | | Where on the source row to read the branch for the generated claim, defaulting to a direct BranchId when blank. |
ClaimType | Claim Type | PickList | Yes | The type stamped onto every claim this setup produces, unless ClaimTypeSource overrides it per source row. Its picklist is the engine's own vocabulary of coded scheme and incentive types, which does not overlap the Claim entity's own ClaimType picklist — so generated claims carry values that the Claim picklist does not offer. Values: Trade Schemes(CLT-04), CLT-04R, QPS Scheme (CLT-04), Cashback(CLT-04), Provision (CLT-04), Structural Rate Difference Contract Pricing, PSR Incentive (CLT6,7), PSR Salary (CG 1,2), Training Claim, Damage, Shortage, Rate Difference, Reimbursment, Warranty Repairs. |
ClaimTypeSource | Claim Type Source | Text | | Leave blank or set to Config to stamp the setup's own ClaimType; set it to 'SourceField:' followed by a field path to have each claim inherit that value from its source row instead. If the path resolves to null the setup's ClaimType is used as the fallback, and the run fails if neither is set. |
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created Date | DateAndTime | Yes | |
DateFieldName | Date Field | Text | | Which date on the source row the window is measured against; navigation paths are allowed, so a line-level source can be windowed by its parent's document date. It only has an effect when DateWindow is set to something other than None. |
DateWindow | Date Window | PickList | | Restricts the source query to a rolling period resolved in UTC: last calendar month, the current calendar month, or the last N days ending today (inclusive of today). None disables date filtering altogether, whatever DateFieldName says. Values: None, Last Month, This Month, Last N Days. |
DateWindowDays | Date Window Days | Number | | The N used only when DateWindow is the last-N-days option; negative values are clamped to zero, which reduces the window to today alone. |
FilterExpression | Filter Expression | MultiLineText | | A dynamic-LINQ predicate applied to the source query, intended as the developer escape hatch alongside the admin-friendly rule rows. When both are present the rule rows and this expression are ANDed together; it is compiled and executed with a single-row dry run every time the setup is saved. |
GroupingFields | Grouping Fields | Text | Yes | A comma-separated list of field paths whose values, joined together, form each claim's group key — one claim per distinct combination. It is mandatory: a run with this blank fails immediately. The same key is what merges partial results as the source query is streamed in chunks, and it becomes part of the claim's GenerationKey. |
HeaderMapping | Header Mapping | MultiLineText | | JSON object mapping claim header field names to source paths or the same token set as LineMapping. It is evaluated once, from the first source row that opens each group, so it should only carry values that are constant within the group key. |
IsActive | Active | Boolean | Yes | |
LineMapping | Line Mapping | MultiLineText | | JSON object mapping claim-line field names to source field paths or tokens. Tokens available: an item lookup by name, a literal constant, the aggregated amount, the parent header id, and a format template that interpolates source paths into a string. Anything not starting with a token prefix is treated as a navigation path on the source row; unknown field names fall through into the record's custom-fields bag rather than erroring. |
Modified By | Modified By | Lookup → UserAccount | Yes | |
Name | Document Number | Text | Yes | |
NettingAmountField | Netting Amount Field | Text | | The field summed on the netting source and subtracted from the claim amount. It is mandatory once a netting source is set — the run throws rather than netting zero if it is left blank. |
NettingBranchPath | Netting Branch Path | Text | | |
NettingDateFieldName | Netting Date Field | Text | | |
NettingDateWindow | Netting Date Window | PickList | | Values: None, Last Month, This Month, Last N Days. |
NettingFilterExpression | Netting Filter Expression | MultiLineText | | Dynamic-LINQ predicate narrowing the netting source before summing. It is dry-run validated on save alongside the main query, so a bad expression here fails at save time. |
NettingPartnerPath | Netting Partner Path | Text | | |
NettingSourceEntity | Netting Source Entity | Text | | Enables the netting leg: after collection, the engine sums a second source per group and subtracts it from the aggregated claim amount, which is how contract-rate differences and credit-note payouts already given are deducted. Candidates whose amount falls to zero or below after netting are dropped and no claim is written for them. |
OwnerId | Owner | Lookup → UserAccount | Yes | |
OwnerResolution | Owner Resolution | PickList | | How the generated claim's owner is chosen: Resource User assigns the user behind the active PSR/DSR resource matching the claim's partner and branch, Branch Owner assigns the branch record's owner, None leaves the owner as the job's default. Unmatched candidates simply get no owner rather than failing. Values: None, Resource User, Branch Owner. |
PartnerAccountPath | Partner Account Path | Text | | Where on the source row to read the partner account for the generated claim; it defaults to a direct PartnerAccountId on the row when left blank. The same value is used to match rows on the netting leg unless a separate netting partner path is given. |
ProcessedFlagField | Processed Flag Field | Text | | The boolean on the source row that marks it as already claimed; it is both a filter (the query only takes rows where it is null or false) and a write-back (successfully claimed rows are flagged in the same transaction as the claim). Navigation paths are supported so a parent-level flag can be used. Leaving it blank means sources are re-read every run, which is correct only for regenerate-each-period types such as salary. |
RuleSuccessCriteria | Rule Success Criteria | PickList | | How the child rule rows combine when no custom logic formula is given: OR joins them with logical or, anything else (including the default) joins them with logical and. It is ignored entirely once RuleSuccessCustomLogic is filled in. Values: AND, OR. |
RuleSuccessCustomLogic | Rule Custom Logic | Text | | A boolean formula over the child rules' sequence numbers, such as '(1 AND 2) OR 3', supporting AND, OR, NOT and parentheses. |
RunOrder | Run Order | Number | Yes | Sequencing within a scheduled run: when the job is triggered for a schedule group it executes that group's active setups in ascending order of this number. It is ignored when a single setup is triggered directly. |
ScheduleGroup | Schedule Group | PickList | | Names the cron-driven batch this setup belongs to; a job schedule row per group carries the actual cron expression, and the scheduled run picks up every active setup with a matching group. A setup with this blank can still be run manually but will never run on a schedule. Values: Nightly, Monthly (Day 1), Weekly. |
SimulateMode | Simulate Mode | Boolean | Yes | Defaults to on. In simulate mode the run computes candidates and reports what it would have created to the jobs ledger but writes no claims and flags no source rows — safe for parallel running against an existing process. A manual trigger can override it per run; leaving it on is the usual reason a correctly configured setup appears to create nothing. |
SourceEntity | Source Entity | Text | Yes | The entity name whose rows are scanned for claimable value — resolved against the live model by name, so any first-party or tenant entity works (SchemeLedger, InvoiceLine, CreditNote and Resource are the typical ones). Tenant and soft-delete filters are applied automatically, and every navigation the setup's paths walk is eagerly included. |
StrategyKey | Strategy Key | Text | | Selects an alternative collection strategy from the registered catalog for behaviour that genuinely cannot be expressed as configuration. Leave it blank for the standard config-driven pipeline, which is what every shipped scenario uses. |
SupplierAccountId | Supplier Account | Lookup → Account | | The supplier or principal stamped onto every claim this setup generates — a fixed account per setup rather than something read from the source row. |
TargetEntity | Target Entity | Text | | Redirects the engine's output away from Claim to another document type (a No-Dues certificate, for example), written through the metadata-driven data service so tenant custom entities work. This mode has no GenerationKey duplicate guard, so ProcessedFlagField becomes mandatory — the setup is refused on save without it. Header, lines and source flags are also not one transaction in this mode, so a mid-run failure can leave a header with unflagged sources. |
TargetLineEntity | Target Line Entity | Text | | The line entity written under TargetEntity; each candidate line becomes one row, with the parent token resolving to the created header's id. Leave blank for header-only target documents. |
UpdatedDateTime | Modified Date | DateAndTime | Yes | |