Skip to content
Jose Carlos De Oliveira edited this page Nov 6, 2026 · 27 revisions

Overview

What is Gift Aid

Gift Aid is a UK tax scheme that helps charities by allowing them to claim an extra 25% on each donation back from the government when the donor is a UK taxpayer — a £10 gift becomes £12.50 for the charity, at no extra cost to the donor. Charities file claims with HMRC (the UK tax authority) to collect it.

A Gift Aid Declaration can come from a donation — usually ticking a box confirming Gift Aid eligibility — or from any other means such as a form, a text message, a phone call or a conversation, as long as the charity can provide an auditable record for HMRC.

Official Guidelines: HMRC Detailed tax guidance for charities | Chapter 3: Gift Aid

Aim of this Project

Build a free, open-source Salesforce package that lets UK charities manage the entire Gift Aid lifecycle end-to-end, whilst still leaving room for partners to automate the HMRC submission step as a registered agent claiming on behalf of the charity.

The package:

  • Captures declarations from any source — a donation checkbox, a public web form, or manual entry — producing an auditable record for HMRC.
  • Tracks eligibility separately at donor and donation level, using simple, admin-configurable criteria.
  • Produces HMRC claims — exports eligible donations as a CSV ready for the HMRC Gateway, and tracks claim status back in Salesforce. The initial release works with NPSP only, without Person Accounts, with donations tracked on the Opportunity object (not Payments). Recurring Donations are supported.

Installation and contributor setup are in the repository README. We are looking for all sorts of feedback and contributions.

Out of Scope

  • How donations get into Salesforce (payment processors, imports, etc.).
  • How the claim file gets into HMRC — charities submit through their own HMRC Gateway (or via an agent).

The one-size-fits-all problem

Future plans aim to make the package fully agnostic, but that means trading off the simplicity of this initial implementation.

At the moment, "Gift Aided" donations to claim are tracked on the same Opportunity record, and a simple report produces the list of donations to submit to HMRC, filtered by the donor's declaration period (start and end date).

Building an agnostic package adds complexity to the data model and background processes, because donations to claim need to be decoupled from whatever is currently used to track donations — different objects depending on the implementation (Gift Transactions in NPC, Payments in NPSP, etc). Among other things, that requires:

  • Multiple triggers across the objects in use.
  • Duplicated data, as each eligible donation needs a corresponding "Gift Aid Donation" record, which is the one used to claim.
  • Batch processes to generate those "Gift Aid Donation" records retrospectively when a donor with previous donations declares Gift Aid. All achievable, but probably better delivered as separate packages.

How It Works

When a donation or recurring donation is saved with Gift Aid ticked, or a supporter submits the public web form, the package creates a Gift Aid Declaration on the related Contact — but only if that Contact doesn't already have an active one. The declaration's Start Date defaults to four tax years back (the most HMRC allows) and stays open until an End Date is entered. When the charity is ready to claim, a report pulls every eligible, unclaimed donation whose Close Date falls both inside the claim period and inside the donor's declaration window; that report is exported as a CSV for the HMRC Gateway, and the donations are then stamped as claimed so they don't appear next time.

Auxiliary reports helps data cleaning and prompting for broadcasting Gift Aid Drive, such as "Eligible but not declared", or "Declared but not eligible". Staff can use these reports to mass email Donors asking/confirming eligibility for the former and closing Gift Aid Declarations for the latter.

Data Model

Process Flow

{...needs updating...}

1. A declaration is captured

A Gift Aid Declaration record is created against the donor (Contact) from any of three sources:

Source How it arrives What triggers the declaration
Donation An Opportunity is created or updated with Gift Aid Declared ticked Record-triggered flow on Opportunity
Recurring Donation An NPSP Recurring Donation is created or updated with Gift Aid Declared ticked Record-triggered flow on Recurring Donation
Web form A supporter submits the public Gift Aid Declaration form (Experience Cloud screen flow) The screen flow itself
Manual A user creates a declaration from the Contact record (related list or quick action) None — standard record creation

All three automated sources hand off to one Declaration Creation subflow, so the rules live in a single place.

2. Only one active declaration per donor

Before creating a record, the subflow checks whether the Contact already has an active Gift Aid Declaration.

  • Active declaration exists → nothing is created. The existing declaration already covers the donation. (Optionally the source is noted on the existing record — see Next Steps.)
  • No active declaration → a new Gift Aid Declaration is created with:
    • Declaration Date — the date the declaration was made (the Opportunity Close Date when it comes from a donation; today's date from the web form or manual entry).
    • Start Date — defaulted to 4 tax years before the Declaration Date (6 April boundary), which is the maximum HMRC allows charities to backdate. This is a real, editable field: users can override it when the donor limits the backdate, when re-declaring after a cancellation, or when importing declarations from another system.
    • End Date — left blank. It is only populated when the donor tells the charity they are no longer a UK taxpayer or withdraws the declaration.
    • Source / Source link — where the declaration came from and, where possible, a link back to the originating record or form submission, for audit.
    • Declared Name / Address — the name and address as stated by the donor at the time of declaring (HMRC requires this to be recorded).

3. The declaration window is maintained

  • Is Active on the declaration is TRUE when Start Date ≤ today and End Date is blank or ≥ today. It is recalculated on create/update by a record-triggered flow and nightly by a scheduled flow, so declarations switch off automatically when an End Date passes.
  • The Contact carries roll-ups of Gift Aid Start Date and Gift Aid End Date from its declarations, plus a formula Gift Aid Status (Eligible / Ineligible / Unknown) that admins can adapt to their own rules (e.g. require a full address).

4. Each donation is assessed for eligibility

On the Opportunity:

  • Gift Aid Declared — the donor ticked the box for this gift.
  • Is GA Eligible (formula) — checks the data HMRC needs (donor name and address present, donation type, etc.). Admins can edit the formula — e.g. exclude certain Record Types or membership products.
  • GA Eligible Amount — the claimable portion, defaulting to Amount but editable where a gift is bundled with a purchase.

5. A claim is produced

When the charity is ready to claim (typically each quarter), the Gift Aid Claim report returns every Opportunity where:

  1. Close Date falls within the claim period being prepared (e.g. the last quarter), and
  2. Is GA Eligible = TRUE, and
  3. Gift Aid Claimed = FALSE and GA Claimed By is blank (not already claimed here or by a third party), and
  4. Close Date falls within the related Contact's declaration window — between Gift Aid Start Date and Gift Aid End Date (or End Date blank). Point 4 is what makes backdating work: a declaration made today with a 4-year Start Date automatically pulls in the donor's earlier, unclaimed gifts.

The report is exported as a CSV in the column layout HMRC expects and uploaded to the charity's HMRC Gateway.

6. The claim is stamped back

After submission, the exported rows are updated (import or bulk update) to set Gift Aid Claimed = TRUE and Gift Aid Claimed Date, so they drop out of the next claim run. Charities using an agent set GA Claimed By instead, which excludes the donation from the package's own claim process.

Process Modelling

Process Flow Diagram

{...needs further updating...}

flowchart TD
    A[Donation with GA ticked] --> D[Coverage Period subflow]
    B[Recurring Donation with GA ticked] --> D
    C[Public web form] --> D
    D -->|active period exists| E[Update Last Confirmation Date<br/>on Contact]
    D -->|none active| F[Create Coverage Period<br/>Start = 6 April, 4 tax years back]
    M[Manual entry by staff] --> F
    E --> L[Link Opportunities whose Close Date<br/>falls in a Coverage Period]
    F --> L
    H[Opportunity saved<br/>isGiftAidEligible set] --> L
    L --> K[Create Gift Aid Claim<br/>Auto Link Donations ticked]
    K --> N[Batch links claimable Opportunities<br/>and calculates totals]
    N --> J[Export HMRC schedule CSV<br/>and submit on Gateway]
    J --> S[Record Submitted On and HMRC reference]
    S --> T[Stamp Gift Aid Claimed Date<br/>on linked Opportunities]
    X[Donor no longer eligible] --> Y[Set End Date and End Reason<br/>on Coverage Period]
    Y --> Z[Unlink Opportunities<br/>after the End Date]
Loading

BPMN

bpmn

Made in: BPMN Sketch Miner

Use this text to edit: /// Gift Aid end-to-end process

/// Main path: donation with Gift Aid ticked, no active Coverage Period
Donor: (Gives donation with Gift Aid ticked)
//Before-save flow sets isGiftAidEligible
Salesforce: Save Opportunity with Gift Aid Declared
Run Coverage Period subflow
Active Coverage Period on Contact?
No
//Start Date: 6 April four tax years back (Custom Metadata rule)
Create Coverage Period with declared name and address
//Immediate (trigger) or Batch mode, set in Custom Metadata
Link Opportunities whose Close Date falls in a Coverage Period
Charity Staff: (timer End of claim period)
//Auto Link Donations ticked
Create Gift Aid Claim for the claim period
//Eligible, linked to a Coverage Period and not yet claimed
Salesforce: Link claimable Opportunities to the Claim
Calculate Line Count, Total and Expected Gift Aid
//Max 1,000 rows per HMRC schedule
Charity Staff: Export Claim as HMRC schedule CSV
Submit schedule on HMRC Gateway
HMRC: (Claim received)
Charity Staff: Record Submitted On and HMRC reference
Salesforce: Stamp Gift Aid Claimed Date on linked Opportunities
(Donations claimed)

/// Donor already has an active Coverage Period
...
Active Coverage Period on Contact?
Yes
Salesforce: Update Last Confirmation Date on Contact
Link Opportunities whose Close Date falls in a Coverage Period
...

/// Other sources
Donor: (Sets up Recurring Donation with Gift Aid ticked)
Salesforce: Save Recurring Donation with Gift Aid Declared
Run Coverage Period subflow
...

Donor: (Submits Gift Aid web form)
Salesforce: Run Coverage Period subflow
...

Charity Staff: (Donor declares by phone, email or paper)
Create Coverage Period manually
Salesforce: Link Opportunities whose Close Date falls in a Coverage Period
...

/// Donor stops being eligible
Donor: (Notifies no longer a UK taxpayer)
Charity Staff: Set End Date and End Reason on Coverage Period
Salesforce: Unlink Opportunities after the End Date
(Coverage Period ended)


HMRC Open Questions

Is GAD still valid when RLS (Returned post with "not known at this address" or "gone away") Only up to the point of the address is unknown (Address Gone Away Date), any future donations won't be claimable until a new address is received
Re-opening an ended Declaration after a Wrong/Gone Away Address becomes available A Gift Aid Claim Period ends as soon as the address changes to unknown, but once the new address is received, should a new Period be created? or the same ended period automatically reopened (only when ended due to address)? Should the subscriber have a configuration place to control this automated actions? What happens if the new Address is a non-UK address?

HMRC FAQs

Gift Aid Declaration from Couples/Joint Accounts A Donation is eligible as long as one of the account holders is GA eligible and there is no evidence the donation has been given by the non-eligible other half. If both are eligible, the donation is eligible. Ref. Chapter 3.32 Donations from joint bank accounts
Gift Aid Declaration covering period A GAD can cover a specific donations, 4 years of past donations and/or future donations. The description text in the declaration checkbox must specified the type of declaration to be made. The charity needs to provide evidence linking each donation to a GAD.
Claiming on ended GAD _{draft} A donor might end their GAD due to change of address, or any other reason. Donations that happened under that GAD are still claimable. Similarly, an active GAD can become Void, and only linked donations should become ineligible and not all. For these reasons, Donations are linked to individual GADs_

ADR - Architectural Decision Records

ADR-001 — Store Name and Address on the Gift Aid Declaration

Status: Accepted, Oct 2026

Context: HMRC requires the donor's name and address as they were when the declaration was made. The Contact record only holds the current values, which change over time (name changes, house moves, address removed when post is returned). Reading the name and address from the Contact at claim time implies looking them up in NPSP address history when the current address is not available.

Decision: The Gift Aid Declaration stores the declared Name and Address at the time of the declaration, copied from the source (donation, web form or manual entry).

Consequences: The declaration stays a valid audit record on its own, even if the Contact's name changes or the current address is no longer available. The fields duplicate Contact data by design and are not kept in sync.

Related: #13

ADR-002 — Opportunity is the Gift Aid Donation record

Context: Claimable donations could be tracked on a separate custom object, on a mirrored Opportunity with its own Record Type, or on the donation Opportunity itself.

Decision: All Gift Aid fields live on the Opportunity. No separate record is created.

Consequences: No duplicated records or sync batches, and claims work with standard reports. The package is tied to the NPSP Opportunity model; other donation objects (Payments, NPC Gift Transactions) will need a separate, decoupled package.

Related: #16, #20

ADR-003 — Ensure each Opportunity is covered by a Gift Aid Declaration's window

Context: Some Gift Aid Declarations (GAD) might have different Start/End Date (eg. inactive GADs, started later than 4 years back), and some contacts might have multiple ended-GAD and one active. Finding which Donations falls under those GAD's date windows requires a manual work by the subscriber, and then an extra step to manually include them in the list of Gift Aid Donations to claim as they won't appear automatically in the report.

Decision: A lookup on the Opportunity points to the Gift Aid Declaration whose Start/End dates cover its Close Date. Only linked Opportunities can be claimed. Matching is done by one Apex class, run from triggers (immediate) or from a batch before the claim, selected by a Custom Metadata setting (Immediate / Batch / Off).

Consequences: Ended declarations and gaps are handled automatically, and each claimed donation has an auditable link to its declaration. Creating a declaration can update many Opportunities at once, which is why the batch mode exists. Contact Start/End roll-ups are deprecated.

Related: #13, #15, #17, #20

ADR-004 Deprecate Contact's roll-ups to store GAD's Start/End Date Filtering claims on the Contact's dates fails in two cases:

Installation Steps

Package Installation Link

The package is delivered as an unlocked package (2GP) so it can be upgraded in place. The install link is published in the repository README once each version is released.

Post-Installation Steps

  1. Assign the Gift Aid permission set to users who manage declarations and claims.
  2. Add the Gift Aid fields to the Contact page layout or dynamic form — recommended in a dedicated Gift Aid section.
  3. Add the Gift Aid Declarations related list to the Contact layout.
  4. Add the Gift Aid fields to the Opportunity page layout (Gift Aid Declared, GA Eligible Amount, Is GA Eligible, Gift Aid Claimed, Claimed Date, Claimed By).
  5. Review the Is GA Eligible and Gift Aid Status formulas and adjust them to your organisation's rules.
  6. (Optional) Publish the Gift Aid Declaration form on your Experience Cloud site.

Dependencies (List of Components)

Objects

Object Purpose
Contact Donor-level Gift Aid status, cancellation and claimable address.
Opportunity Donation-level Gift Aid flags, eligibility, coverage period and claim links.
Recurring Donations When used by NPSP, parent object of Opportunity instalments.
GiftAidCoveragePeriod__c Holds the declarations' eligibility timeline. Replaces Gift Aid Declaration.
GiftAidClaim__c The claim submitted to HMRC. Linked Opportunities are its donations.
GACP_Custom_Settings__mdt Custom Metadata Type. Package configuration (see Configuration).
Gift_Aid_Bypass_Setting__c Hierarchy Custom Setting. Bypasses automation per org, profile or user.

Fields

Gift Aid Declaration

To be deprecated - replaced by GiftAidCoveragePeriod__c and tentative GiftAidDeclarationHistory__c

Field Data Type Notes / Automation
Donor Master-Detail May need to be a Lookup if Person Accounts is used.
Is Active Checkbox TRUE when Start Date ≤ today and End Date is blank or ≥ today. Set by a record-triggered flow (create/update) and a nightly scheduled flow.
Declaration Date Date Date the declaration was made. Defaults to the Opportunity Close Date when created from a donation.
Start Date Date Editable. Defaults to 4 tax years before the Declaration Date (6 April boundary). Override for donor-limited backdates, re-declarations or imports.
End Date Date Manually entered when the donor notifies they are no longer eligible or withdraws.
Origin / Source Picklist Web / Email / Phone / Paper …
Link to Origin / Source URL Optional: link to an SF record (e.g. Opportunity) or an external link.
Declared Name / Declared Address Text Multiple fields — TBC how to populate automatically from donation import (may need extra Opportunity fields or a staging object).

Contact (or Person Account)

Field Data Type Notes / Automation
Active_GACP__c Formula (Checkbox) TRUE when NumberOfActiveGiftAidClaimPeriods__c > 0. Handy for reports.
AddressGoneAwayDate__c Date Date the charity learnt the donor no longer lives at the address. Set and cleared by flows.
Gift_Aid_Cancellation_Date__c Date Date this Contact stops being eligible.
Gift_Aid_Cancellation_Reason__c Picklist Deceased / Non Tax Payer / Retired / Unknown/Other.
GiftAidClaimableAddress__c Text Area Current postal address, or last known address if current is empty. Used in claims.
GiftAidLastConfirmationDate__c Date Last declaration or confirmation date. HMRC recommends re-confirming every 2 years.
Gift_Aid_Status__c Formula (Text) Active / Former / Cancelled, from Coverage Periods and Cancellation fields. Admin-customisable.
NumberOfActiveGiftAidClaimPeriods__c Roll-Up Summary COUNT of Coverage Periods with no End Date.
NumberOfEndedGiftAidClaimPeriods__c Roll-Up Summary COUNT of Coverage Periods with an End Date.

Opportunity

Field Data Type Notes / Automation
npsp__Primary_Contact__c Lookup Standard NPSP field.
CloseDate Date Standard field.
Amount Currency Standard field.
Gift_Aid_Declared__c Checkbox Donor ticked Gift Aid on this gift. Triggers the Gift Aid process.
isGiftAidEligible__c Checkbox Donation-level eligibility. Set by flow Opportunity_BeforeSave_Gift_Aid_Eligibilty.
Payment_Method__c Picklist Cash / Bank Transfer / Cheque. Read by the eligibility flow.
GiftAidCoveragePeriod__c Lookup The Coverage Period whose dates contain CloseDate. Set by automation. No link = not claimable.
GiftAidClaim__c Lookup The Claim this gift was exported in. Set when the claim is built. Blank = not yet claimed.
Gift_Aid_Claimed_Amount__c Currency Amount submitted to HMRC. Defaults to Amount. Lower when only part of the gift is eligible.
Gift_Aid_Claimed_Date__c Date Stamped from the Claim's Submitted On once sent to HMRC.
Adjusted_in_Claim__c Lookup The Claim in which this gift was adjusted.
Adjustment_Reason__c Picklist Why the gift was adjusted. Values are placeholders (TBC).
Tax__c Currency Label: Tax Over-Claimed. Tax over-claimed on this gift.

Gift Aid Coverage Period (GiftAidCoveragePeriod__c)

Replaces the Gift Aid Declaration Object

Field Data Type Notes / Automation
Name Auto Number Coverage Period ID. Display format {...}.
Contact__c Master-Detail(Contact) The donor this period belongs to. Drives the Contact roll-ups and sharing.
StartDate__c Date First day covered. Defaults to 6 April four tax years before DeclarationDate__c when blank.
EndDate__c Date Last day covered. Blank = open-ended. Set on cancellation or ineligibility.
EndReason__c Picklist Why the period ended. Required when EndDate__c is set. Values {...}.
ActiveFormula__c Formula (Checkbox) StartDate__c <= TODAY() and (EndDate__c blank or >= TODAY()).
DeclarationDate__c Date Date the donor declared (gift Close Date, or today for the web form).
Source__c Picklist Written / Oral / Website.
AddressLine1__c Text(255) declared Address.
AddressCity__c Text(255) As above.
AddressPostCode__c Text(255) As above. Goes on the HMRC schedule.

Gift Aid Claim (GiftAidClaim__c)

Field Data Type Notes / Automation
Name Auto Number Gift Aid Claim Name. Display format {...}.
Status__c Picklist Where the claim is in its life: Draft / Exported / Submitted / Paid {...}. Drives what can still be edited.
ClaimStartDate__c Date First Donation's Close Date the claim covers.
ClaimEndDate__c Date Last Donation's Close Date the claim covers.
AutoLinkDonations__c Checkbox When ticked, automation links every claimable Opportunity with Close Date in range and no claim yet, to this record.
LineCount__c Number(18, 0) Number of linked Opportunities. Set by automation. HMRC accepts max 1,000 per schedule.
TotalDonationsAmount__c Currency(16, 2) Sum of Gift_Aid_Claimed_Amount__c across linked Opportunities. Set by automation.
ExpectedGiftAid__c Currency(16, 2) Tax expected back: TotalDonationsAmount__c x 25%. Set by automation (stored, not formula, so it survives rate changes).
EarliestGiftDate__c Date Earliest Close Date among linked Opportunities. Goes in HMRC Box 1. Overlapped by ClaimStartDate__c
OverclaimAdjustment__c Currency(16, 2) Tax over-claimed in earlier claims, deducted from this one. Goes in HMRC Box 2.
AdjustmentExplanation__c Long Text Area(20000) Explanation HMRC asks for when Box 2 is filled. HMRC form allows 350 characters; keep within that.
SubmittedOn__c Date Date the schedule was sent to HMRC. Stamped to Gift_Aid_Claimed_Date__c on linked Opportunities.
HMRCSubmissionReference__c Text(50) Reference from the HMRC acknowledgment page.

Configuration

Component Type Field / Record Notes
GACP_Custom_Settings__mdt Custom Metadata Type Start_Date_Calculation_Rule__c Tax Years / Rolling 4 Years. Sets how far back a Coverage Period starts.
GACP_Custom_Settings__mdt Custom Metadata Record Start_Date Default record read by the Coverage Period flows.
Gift_Aid_Bypass_Setting__c Hierarchy Custom Setting Bypass_All__c Bypasses all Gift Aid triggers, flows and validation rules.
Gift_Aid_Bypass_Setting__c Hierarchy Custom Setting Bypass_Flows__c Bypasses Gift Aid record-triggered flows.
Gift_Aid_Bypass_Setting__c Hierarchy Custom Setting Bypass_Triggers__c Bypasses Gift Aid Apex triggers.
Gift_Aid_Bypass_Setting__c Hierarchy Custom Setting Bypass_Validation_Rules__c Bypasses validation rules that read this setting.

Removed in the Amsterdam Sprint (Oct 2026)

Component Replaced by
Gift_Aid_Declaration__c (object, tab, layout, record page, 3 flows) GiftAidCoveragePeriod__c
Contact.Gift_Aid_Start_Date__c GiftAidCoveragePeriod__c.StartDate__c
Contact.Gift_Aid_End_Date__c GiftAidCoveragePeriod__c.EndDate__c
Contact.Gift_Aid_Eligibility__c —
Opportunity.Is_Gift_Aid_Eligible__c Opportunity.isGiftAidEligible__c
Opportunity.Gift_Aid_Claimed__c Opportunity.Gift_Aid_Claimed_Date__c
Opportunity.Gift_Aid_Exclusion__c —
Opportunity.GiftAidClaimed_Formula__c Opportunity.GiftAidClaim__c
GiftAidClaim__c.EarliestGiftDate__c GiftAidClaim__c.ClaimStartDate__c

Automation

Type Name Object Notes / Automation
Record-Triggered Flow {...} Opportunity Gift Aid Declared = true AND GA Claimed By = null. Passes data to the Declaration Creation subflow.
Record-Triggered Flow {...} Recurring Donation Gift Aid Declared = true AND GA Claimed By = null. Passes data to the Declaration Creation subflow.
Record-Triggered Flow {...} Gift Aid Declaration On create / update. Sets Is Active.
Apex Trigger Handler (TDTM) GiftAidClaim_TDTM Gift Aid Claim {...} e.g. after insert / update when AutoLinkDonations__c = true. Hands the claim Ids to GiftAidClaimBatchQueueable.
Queueable Apex GiftAidClaimBatchQueueable Gift Aid Claim Enqueued by the TDTM handler; starts GiftAidClaimPopulatorBatch outside the trigger context.
Batch Apex GiftAidClaimPopulatorBatch Gift Aid Claim Links claimable Opportunities with Close Date in range to the claim and updates Line Count, Total Donations Amount, Expected Gift Aid, Earliest Gift Date. {...}
Apex Service GiftAidClaimService Gift Aid Claim Claim-level logic used by the batch: totals, status. {...}
Apex Service GiftAidOpportunityService Opportunity Opportunity-level logic used by the batch: eligibility, linking to Claim / Coverage Period. {...}
Scheduled Flow {...} Gift Aid Declaration Nightly. Recalculates Is Active as End Dates pass.
Auto-launched Flow (Subflow) {...} N/A Called by the record-triggered flows and the public form. Creates a GA Declaration only if the Contact has no active declaration.
Apex Test GiftAidClaim_TDTMTest Gift Aid Claim Covers the TDTM handler.
Apex Test GiftAidClaimPopulatorBatchTest Gift Aid Claim Covers the batch, queueable and service classes.

Subflow inputs: Declaration Date, ContactId, Source; optional Address, Declared Name, Source URL.

UI

Type Name Object / Context Notes
Screen Flow {...} Experience Cloud Public declaration form. Passes data to the Declaration Creation subflow.
Apex Controller GiftAidFieldSetController {...} Serves field-set metadata to the Gift Aid LWC. {...}
Apex Test GiftAidFieldSetControllerTest {...} Covers the controller.
LWC giftAidCard {...} {...}

Reports & Dashboard

  • Gift Aid Claim — Opportunities where Is GA Eligible = true, Gift Aid Claimed = false, GA Claimed By blank, and Close Date within the claim period and within the Contact's GA Start/End window. Exported as CSV for the HMRC Gateway.
  • Eligible Contact, Gift Aid Status Unknown — donors who could be asked to declare.
  • Ineligible Contact with an active declaration — data quality check.
  • Contact eligibility re-check — donors to re-confirm every 2 years.
  • Dashboard linking to "due to claim" Opportunities.

Experience Cloud

Roadmap

  1. Finalise the installable package — first unlocked package version with a public install link.
  2. Create a 1-4-All (agnostic) solution — modular packages for each NPSP/NPC implementation type, with Gift Aid records decoupled into their own object.
  3. Triggers to start the Gift Aid process after a declaration is made.
  4. Track Donation eligibility (dynamic, admin-customisable criteria).
  5. Track Donor eligibility (dynamic criteria, including declared-but-not-eligible and eligible-but-not-declared).
  6. Store Gift Aid Donations and Gift Aid Claims.
  7. Export Gift Aid Donations for the HMRC claim, including claim tracking (Submitted, Accepted, Paid, etc.).
  8. Submit Gift Aid Declarations from an external form.
  9. Reports on Gift Aid claims revenue.
  10. Gift Aid App or Tab — a centralised place for the package (modify eligibility, etc.).
  11. Public documentation.

Next Steps

  • Add a warning and disclaimer screen component in the Experience Site screen flow about not querying data and exposing it publicly — best practice is to DML into a staging object.
  • Replace Record-Triggered Flows with Apex Triggers under the TDTM framework, allowing management from the UX (check for AFNC). The handler only needs the triggering record Id, stored in a text field.
  • Move Gift Aid recording into a separate object for an agnostic solution with NPSP (Opportunities or Payments) or AFNC (Gift Donations) — e.g. a [Gift Aid Claim] child object of whatever tracks donations.
  • Handle Person Accounts.
  • Enable external partners to collaborate by handling the claim-submission part of the process.
  • Enable retrospectively creating Gift Aid Claim records from a Gift Aid Declaration record.
  • Retrospective claims: define a separate process to work out donors with multiple GA declarations and gaps (periods of eligibility) — the current roll-up approach assumes a single continuous window per Contact.
  • Gift Aid experts: investigate declaration start dates, and whether a supporter can have multiple declarations in different time periods (or the latest one overlapping a previously closed declaration).
  • Streamline exporting Opportunities for the Gift Aid claim, and stamp back the Claim Date once submitted.
  • Create LWCs to replace modifying Page Layouts — instead of asking installers to add fields and related lists manually, provide drag-and-drop LWCs to display Gift Aid information.

How to contribute

Install the package and test! Setup instructions for contributors are in the README.

For feedback, improvements, or anything else, raise an issue: https://github.com/SFDO-Community-Sprints/gift-aid/issues