Create different types of Donation purchasable? (for Gift Aid etc)
Maybe a bit late but we've implemented gift aid for a client's donations site and whilst in Craft2 and using the Charge plugin it might help a bit.

We added a field to the Charge order which is a lightswitch of GiftAid on or off. As August suggested this could be done in the line item as an options[giftaid] value of Craft Commerce

We then created a couple of twig templates restricted to admin users only. The first one is an index file that lists the calendar months as links to another twig template that lists the details of that months orders as a CSV file for GiftAid reporting. 

The code for the css twig template looks like this:

{% set month = craft.request.getParam('d') %}
{% set year = craft.request.getParam('y') %}
{% set firstDay = date(year ~ '-' ~ month ~ '-01') %}
{% set lastDay = firstDay|date_modify('first day of next month') %}
{% header "Content-Type: application/csv" %}
{% header "Content-Disposition: attachment; filename=" ~ month ~ "-" ~ year ~ "-GiftAidReport.csv" %}
{% set postDateParam = ['and', '&gt;= ' ~ firstDay|date('c'), '&lt; ' ~ lastDay|date('c')] %}
{% set charges = craft.charge.charges({  
    giftAid: 1,
    dateCreated: postDateParam,
    refunded: false
})%}
CharityNumber, CharityName, ProjectName, FundraisingCampaign, DonorTitle,DonorFirstName,DonorLastName,DonorAddress,DonorPostcode, Description, DonatonDate, DonationAmount, DonationCurrency, GiftAidValue
{% for charge in charges %}
{% set thisName = charge.customer.name|split(' ') %}
&lt;this is your list of CSV fields&gt;
{% endfor %}


I'm sure there is a much nicer way of doing this all in a plugin within the backend but this was a nice quick and easy way to do it.