Executing the creditPoints action on a Transaction Journal produces two ledger records:
LoyaltyLedger for the credited points.LoyaltyLedger with Event Type = Expired.The Expired ledger appears at the moment of credit even though a separate expiration process was not run.
The Expired ledger is created when the TransactionJournal.ActivityDate is earlier than the applicable judgment date. The judgment date is chosen as follows:
LoyaltyMemberCurrency.NextResetDate is a past date — NextResetDate becomes the judgment date. Condition: ActivityDate < NextResetDate ≤ today → Expired ledger created.NextResetDate is a future date or is null — LoyaltyMemberCurrency.LastResetDate is the judgment date. Condition: ActivityDate < LastResetDate → Expired ledger created.The Expired ledger itself is written with its ActivityDate set to the LastResetDate used at judgment.
When the Expired ledger is created by creditPoints:
TotalPointsExpired on the Loyalty Member Currency increases.PointsBalance on the Loyalty Member Currency decreases.BalanceBeforeReset is updated because the write-back sets shouldUpdateBalanceBeforeReset(true).The reduction in PointsBalance reflects points that should already have expired at the reset date, not new points being destroyed by creditPoints. In other words, the balance is corrected to its expected post-reset value; creditPoints does not consume newly credited points.
Rank/tier evaluation and other downstream logic consume the standard fields (PointsBalance, TotalPointsExpired), so no custom implementation is required for the reduction to propagate.
The behavior exists to prevent points that were due to be reset on NextResetDate (or points earned before the previous LastResetDate) from being carried, even temporarily, when new points are credited with a back-dated ActivityDate.
The Expired ledger creation is intended standard behavior and cannot be disabled through any supported configuration or setting. Use the following steps to confirm if the temporary expiration at credit time is not desired, adjust ActivityDate or reset-date timing.
LoyaltyMemberCurrency record and record the values of NextResetDate and LastResetDate.TransactionJournal used by the creditPoints action and record the ActivityDate.NextResetDate is a past date and ActivityDate < NextResetDate → Expired ledger is expected.NextResetDate is future or null and ActivityDate < LastResetDate → Expired ledger is expected.ActivityDate to on or after the applicable judgment date:
NextResetDate is in the past → set ActivityDate ≥ NextResetDate (or later than the current date, as appropriate).NextResetDate is future or null → set ActivityDate ≥ LastResetDate.Confirm the actual net movement of PointsBalance and TotalPointsExpired on a live test:
Compare values before and after running creditPoints with a back-dated ActivityDate on a test member.
Re-run the flow containing the creditPoints action for a test member with a TransactionJournal.ActivityDate on or after the applicable reset date. Confirm that:
LoyaltyLedger with Event Type = Expired is created.PointsBalance reflects the credited points as expected and TotalPointsExpired is unchanged.Then repeat with ActivityDate set earlier than the applicable reset date and confirm the Expired ledger appears, TotalPointsExpired increases, and PointsBalance decreases by the same amount.
005389133

We use three kinds of cookies on our websites: required, functional, and advertising. You can choose whether functional and advertising cookies apply. Click on the different cookie categories to find out more about each category and to change the default settings.
Privacy Statement
Required cookies are necessary for basic website functionality. Some examples include: session cookies needed to transmit the website, authentication cookies, and security cookies.
Functional cookies enhance functions, performance, and services on the website. Some examples include: cookies used to analyze site traffic, cookies used for market research, and cookies used to display advertising that is not directed to a particular individual.
Advertising cookies track activity across websites in order to understand a viewer’s interests, and direct them specific marketing. Some examples include: cookies used for remarketing, or interest-based advertising.