Skip to Content
🚀 Novigem 1.9 is live. Read Changelog

Ledger field reference

Every time a rule matches, Novigem creates a Ledger Entry record. These entries are the source of truth for points, leaderboard rankings, and challenge progress. They cannot be edited or deleted.

Not every entry comes from a rule. Novigem also writes ledger entries for challenge completion bonuses and for streak milestone bonuses. Those are written by the platform itself, so they have no Rule and no source record.

Entry fields

FieldAPI nameTypeDescription
UserUser__cLookup (User)The user who earned the points. Set by the rule’s Actor Mode.
RuleRule__cLookup (Rule__c)The rule that fired. Blank on completion bonus and streak milestone entries, which Novigem writes without a rule.
ChallengeChallenge__cLookup (Challenge__c)The challenge this entry contributes toward. Blank if the rule is not linked to a challenge.
Source Record IdSource_Record_Id__cTextThe ID of the Salesforce record that triggered the rule (the Opportunity, Task, etc.). Blank on completion bonus and streak milestone entries, which have no triggering record.
Source ObjectSource_Object__cTextThe API name of the object that triggered the rule, for example Opportunity or Site_Visit__c. Blank on completion bonus and streak milestone entries.
PointsPoints__cNumberPoints awarded. Matches the value set on the rule, or the bonus amount on completion and streak entries.
Dedup IdentifierDedup_Identifier__cText (Unique)Prevents duplicate awards. See below.
Occurred Date TimeOccurred_Date_Time__cDateTimeWhen the award happened.
Created DateCreatedDateDateTimeStandard Salesforce created date.

Deduplication

Every entry has a unique Dedup Identifier built from:

{userId}_{challengeId}_{ruleId}_{sourceRecordId}

If no challenge is linked, the challenge portion is GENERAL. If no source record is available (for example, a manual adjustment), a timestamp is used instead.

Streak milestone bonuses use a different key shape, because there is no rule and no record to key on:

STREAK-MILESTONE|{userId}|{streakRunStart}|{milestone}

The run start date and the milestone together mean a rep can earn the same milestone again on a later streak run, but never twice within one run.

When the engine processes a batch, it first queries for any existing entries with the same dedup keys, filters them out, and then inserts. A DUPLICATE_VALUE database exception is caught as a second safety net.

The result: the same user triggering the same rule on the same record will only ever earn points once, no matter how many times the record is saved.

Deduplication is automatic. No configuration needed.

Immutability

Ledger entries cannot be edited or deleted through normal usage. If scoring needs to be corrected, adjust the rule going forward. Past entries stay as-is.

This is intentional. The ledger is an audit trail: consistent and trustworthy.

Reporting

Ledger entries are standard Salesforce records, so you can build reports with the built-in reporting tools:

  • Points by user: group by User__c, sum Points__c
  • Points by challenge: group by Challenge__c, sum Points__c
  • Activity over time: group by Occurred_Date_Time__c weekly or monthly
  • Which rules fire most: group by Rule__c, count entries

Building a report that combines ledger data with pipeline metrics is a good way to show the correlation between Novigem activity and business outcomes.

Coaching signals read the ledger

Coaching signals are derived from ledger history. The nightly job compares each rep’s recent entries against their own past entries using fixed thresholds, then writes what it finds to Performance_Signal__c.

A rep with no ledger entries produces no signals. That is the usual explanation for an empty coaching feed or a blank row in Team Pulse: nothing has been awarded to that user yet, so there is no history to compare against.

See also

Last updated on