On 29/09/24 03:41, Rick Flower wrote:
Thanks Martin!  I'll keep that suggestion in mind but before I saw your reply I started playing with the custom directive and was able to get an example that passes muster with bean-check.  The example is below:

2013-01-01 open Assets:US:WellsFargo:Checking4431
   institution: "Wells Fargo Bank NA"
   address: "123 America Street, LargeTown, USA"
   phone: "+1.012.345.6789"

2013-01-01 open Income:US:Donations

;; fields are as follows :
;;      donor-id : a string defining a unique identifier that can be used to identify this donor
;;      donor-name : a string containing the name of the donor
;;      donor-address : a string of the address for the donor
;;      donor-city : a string containing the city the donor lives in
;;      donor -state : donor's state
;;      donor-zipcode : donor's zip code
;;      donor-phone : donors phone number
;;      donor-email : email address of donor
2024-09-28 custom "Donor" "john-smith" "John Smith" "123 First Street" "Palo Alto" "CA" "93501" "123-456-7890" "[email protected]"

2024-09-28 txn "john-smith"
   Assets:US:WellsFargo:Checking4431-100.00 USD
   Income:US:Donations

The big question for me is can bean-query search in the custom directive fields and so forth -- such that I could potentially run a report against my file asking for any donations by a specific donor (e.g. "john-smith")?  I did a quick internet search for bean-query and custom but didn't really find anything.

How you structure the data is mostly determined by how you foresee querying the data. From your example above, you can easily use bean-query for getting all the donations by a donor:

SELECT *
FROM #postings
WHERE
  account = 'Income:US:Donations' AND
  narration = 'john-smith'

You choose to have the donor name in the narration field, but you could have it in a metadata entry:

2024-09-28 * "Donation"
   donor: "john-smith"
   Assets:US:WellsFargo:Checking4431-100.00 USD
   Income:US:Donations

In this case, the query would be:

SELECT *
FROM #postings
WHERE
  account = 'Income:US:Donations' AND
  entry.meta['donor'] = 'john-smith'

And you could use the narration to record other relevant information, for example the circumstance in which the donation was collected (particular donation campaign, or event, for example).

On the other hand, keeping the donor information into a custom directive does not seem optimal to me. As your big comment block above the custom directive suggests, the custom directive does not enforce any structure on the fields (and allows only strings and not more complex data types, but this may not be a limitation of this specific use).

If you want to keep all data in the ledger, one way of doing it is to assign a sub-account to every donor and record the donor data in the account open directive:

2013-01-01 open Income:US:Donations

2024-09-28 open Income:US:Donations:John-Smith
    name: "John Smith"
    address: "123 First Street"
    city: "Palo Alto"
    state: "CA"
    zipcode: "93501"
    phone: "123-456-7890"
    email: "[email protected]"

2024-09-28 * "Donation"
    Assets:US:WellsFargo:Checking4431   -100.00 USD
    Income:US:Donations:John-Smith

However, I think using a software dedicated to record personal data to keep donor information and simply mark transactions with an unique donor id. You can then use an external script for collating the ledger and roster information to generate the reports.

Cheers,
Dan

--
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/91bafaf2-b099-47ee-bcec-aab1b9228ec9%40grinta.net.

Reply via email to