Consent changes
Consent changes counts updated consent records using their latest saved status, not every change made to those records.
Consent changes counts updated consent records using their latest saved status, not every change made to those records.
Stay in the loop 🚀
processAndSaveConsentActivitySummary selects nondeleted MemberConsent rows whose updatedAt falls within the reporting day. The consent join supplies tenant scope.
The writer uses dataDate when supplied, otherwise yesterday. DateUtil provides the configured timezone's day boundaries. Counts use each row's current status and the gap between its createdAt and updatedAt.
| Stored count | Condition |
|---|---|
newlyAccepted | Accepted, update within 60 seconds of creation |
reaccepted | Accepted, update more than 60 seconds after creation |
newlyWithdrawn | Withdrawn, update within 60 seconds of creation |
rewithdrawn | Withdrawn, update more than 60 seconds after creation |
reaccepted does not require a previous withdrawal. An older row updated while accepted can enter that category. .
For example, accepting then withdrawing the same consent on one day can yield one withdrawn record here. can count both history events.
The collector checks for any existing summary for that tenant and dateOfRecord, then returns early if found. Rerunning collection does not automatically refresh that day's counts.
historical-consent-activity sums summary fields by dateOfRecord and period. It filters tenant and nondeleted summaries.
newlyAccepted becomes Subscribed, positive.reaccepted becomes Subscribed - again, positive.newlyWithdrawn + rewithdrawn becomes Unsubscribed, multiplied by −1.No member-level distinct count is applied. Several consent types belonging to one member contribute separately. .
The frontend parses comma-separated consentIds. Missing or empty IDs default to currently active consent IDs in the service.
The repository adds its IN filter only for a nonempty array. If no active IDs exist, that default becomes an unfiltered consent query within the tenant. Historical inactive types can therefore remain in results. This differs from Consents, whose empty-active-ID guard returns no rows. .
Net change = newly accepted + reaccepted − newly withdrawn − rewithdrawn.
With 8 additions and 3 withdrawals, the net is 5. The withdrawal share is 3/11 because tooltip shares use absolute visible values, not the signed net.
The Details tooltip total sums visible signed values. Net change sums all returned categories, including hidden ones. Shared positional legend state can hide the combined bar after switching views; restore all categories before comparing. .
The weekly default covers the last 12 weeks. Daily windows stop yesterday; coarser periods include the unfinished current bucket. Requested windows are capped at 550 buckets. Activity uses the day summarized; Consents snapshots use summary creation time.
updatedAt with the reporting window. Later updates can move it outside that window.updatedAt - createdAt with 60 seconds. The category does not inspect prior history.consentIds and the empty-array behavior above.null.The chart translates the 3 returned field names; it does not plot each consent type separately. , .
The endpoint requires Dashboard read permission; the menu also depends on Analytics access and Insights. .
Source checked 28 September 2026 at 6cd1850569be3b1702ca736a19320c7626efb7bc. Prior UI evidence confirms navigation and the heading Consents changes. No fresh UI, numeric reconciliation, empty-selection or ordinary-role test was performed.
For graph interpretation and controls, see .