Logo   Form 990 Schedule A Public Support Calculator

Download Program

Home

Dragonnorth...

Resources

Contents

Download the Program
Software Licensing
Using PSCALC
Using F990CALC
Releases

Public Support Calculator

This program is used to calculate the Public Support information required on an IRS form 990 Schedule A. There are two versions of this Form 990 calculator PSCALC is a pure command line version with no graphical input. F990CALC is a Windows GUI front end for the same calculation engine. F990CALC can be used from the command line with the same set of commands.

The command line program reports the results by printing them to the console or to an output file. The Windows program reports results to a window which can then be saved. In general errors are reported to multiple places. For command line use errors go both to the console and to the output file (if one is specified). For Windows use errors go to an error window and to the output window. Errors associated with an input file can be clicked to bring up that file and the line with the error.

Using PSCALC or F990CALC

Input File Lines

When the program reads the input file each line represents either income from (donation by) a Funding Source or an association between a Funding Source (donor) name and the type of donation that this funding source makes. Funding Sources that have not been associated with a type of donation are assumed to be from the DONOR type.

The program can read any number of input files.

Funding Sources

The IRS talks about money that comes in to a 501(c)3 organization as coming from different types of "Funding Sources". The first column in the input file is the name of a Funding Source.

Some Funding Sources are individuals (associated with the keyword DONOR) who donate money. Others are income from events, money earned from SALES, money from grants (which might be DONOR or REVENUE) etc.

To calculate the analysis of Public Support correctly for Form 990 Schedule A the program needs to know the nature of where each donation comes from. This is done by associating each revenue item with a Funding Source. Each donation is attributed to a donor by name. Splitting donations to individual names in general does not matter except for two issues:

The first issue is when money from a single source exceeds a percentage of the total funding (known as the 2 percent limit). When that happens a portion of the funding from that source is not considered Public Support and changes the calculations.

The second issue is when money comes from people who have special roles in the organization (DIRECTORs OFFICERs, TRUSTEEs etc.). Those people must be individually identified and their name associated with a funding type keyword to get a correct answer. Funding from these sources also does not always count toward Public Support.

Input File Format

The input file can be in one of two formats, either a tab seperated or comma seperated list of two or three fields. Detecting which format is provided is automatic. When the program reads a line and sees a tab that line is assumed to be tab seperated and commas on that line are then ignored. Otherwise commas are taken as seperators. NOTE: This means that a Name field or Amount field which contains commas must be quoted.

Excel can export either a CSV file or a tab seperated file. Either will be correctly read by the program. Only the first three columns of the spreadsheet will be noticed by the program and must be the Name, Date and Amount respectively. Other fields are allowed and are ignored.

Extra space characters at the beginning or end of a field are usually ignored. Blank lines are ignored. Lines that start with an exclamation point are comments and are ignored. (NOTE: If the first column in Excel starts with an exclamation point the rest of that row will be ignored.)

There are two types of lines in the simple example below. In Excel these will be in the first, second and third columns. The first type are lines that associate a Funding Source with a keword. It is normal for these associations to be presented first in the input file(s). This line associates Bill Smith with his role as an OFFICER of the corporation:

Bill Smith    OFFICER
The second type of line describes a particular amount recieved.
Bill Smith    31-Dec-21    150.00
This line says that Bill Smith gave $150 on December 31st of 2021. Remember that fields on either type of line are seperated by the tab or comma character.

Lines which associate a Funding Source with the type of that source have only two fields: The name of the Funding Source in the first field and the keyword that describes the type of revenue from this Funding Source in the second. The keywords are not case sensitive. These keywords often describe some special roles that certain people (who might donate funds) have (i.e. DIRECTOR or TRUSTEE). When putting these associations in a spreadsheet use the first column for the name and the second for the keyword. Leave the third column blank.

Lines which show an amount recieved have three fields: The Name of the Funding Source in the first field, the Date in the second field and then the dollar Amount in the third field. Neither the name nor the date is case sensitive. Amounts can contain a leading dollar sign and a decimal point followed by cents. If the amount is quoted or the line is tab seperated the amount can also contain commas.

A simple example input looks like this:

    ! NameDateAmount
 !or Keyword 
 Bill SmithOFFICER 
 Bill Smith31-Dec-21150.00
 Ticket SalesADMISSIONS 
 Ticket Sales4-Feb-22990.00

Comments

Comments are lines that start with an exclamation point '!'. These lines are ignored. Blank lines are also ignored.

First Field

The Funding Source name is the first field on every line. The name (donor name or Funding Source) is ended by a TAB or COMMA character. It is not case sensitive. Bill Smith is the name on the third and fourth lines in the above example. Ticket Sales is the name on the fifth and sixth line.

Second Field

The second field is used for either a date or a keyword. It is not case sensitive and is terminated with a TAB or a COMMA. The keyword names and their associated meaning is shown in the table below. When a recognized keyword is present the line is an association between the Funding Source type and that keyword.

Keyword

When the second filed is a keyword it will be one of the keywords in the table below.

Date

When the second field is a date it is the date the funding amount in the third field was made. Dates in the second field can be input in any of several formats:

31-Dec-21
31-Dec-2021
31-December-21
31-December-2021
31 Dec 21
31 dec 21
31 Dec 2021
31 December 21
31 December 2021
12/31/21
12/31/2021
all mean the same thing: December 31st, 2021 which is the date used on the fourth line of the example file.

Third Field

The third field is the Amount of money from the named source on this date. It can be supplied with or without the dollar sign. Supplying the decimal point and cents after the decimal is optional. Spaces in the amount field, commas and any dollar sign(s) are ignored. Quotation marks can surround the amount and within those quotes a COMMA will not be treated as a terminator. (Excel outputs an amount surrounded by quotation marks in CSV files.) If a donor gives two seperate donations on the same date that is OK and seperate lines can be used for each. (NOTE: There is no difference in the answers if these two donations are combined on a single line with the total of the two donations.)

The amount field is terminated by the end of the line or by a TAB or COMMA character. If a tab was seen earlier in the line commas will be ignored (not treated as a terminator) $150.00 is the donation amount Bill Smith gave on the fourth line of the example above.

Subsequent Fields

Once the Amount field is terminated any subsequent fields are ignored.

Keywords

When the second field is a keyword from the table below it associates the Funding Source in the first field with that type of revenue. The keywords are associated with IRS understood meanings. When one of the keywords in the list below is supplied any third field on the line is ignored and a third field need not be present. A Funding Source name can not be associated with more than one keyword. An error is reported if a second keyword is specified for any name. OFFICER is the keyword on the third line in the above example.

The following keywords are recognized:
KeywordPurpose
DONOR If This keyword is associated with a name it describes a simple donor who made a contribution. It is not necessary to associate every donor with a keyword. Names which have never been associated with a keyword are assigned to this revenue category. Each donor's contribution is subject to the 2 percent limit when calculating public support, amounts over 2 percent per donor are not considered public support. This is calculated properly, donations by each unique name are added together and the limit is applied to the sum for that donor.
CHARITY

All revenue from a source associated with this name is from another charitable institution. The 2 percent limit on donations from a single entity does not apply to charities. All of these funds are considered public support. This keyword should also be used for revenue from Donor Advised Funds where the donors do not select charities by name (not typical).

There is some question if revenue from all Donor Advised Funds is subject to the 2 percent limit. Some sources state that donations from a Donor Advised Fund that is itself a public supported 501(c)3 entity are not not subject to the 2 percent limit. If that is true of a particular fund then that fund can be associated with this CHARITY keyword where the 2 percent limit does not apply.

If the fund is a Private Foundation the issue is clear, donations from Private Foundations are subject to the 2 percent limit and should use the FOUNDATION and FOUNDATIONDONOR keywords. Donations from Donor Advised Funds should use the DAF and DAFDONOR keywords which will follow IRS intrepretations.

FOUNDATION

All revenue from a source associated with this name is from an institution subject to the 2 percent limit. revenue from Private Foundations work this way. This revenue is special because it is subject to the 2 percent limit per donor in the calculation of the Public Support contribution. The calculation of the 2 percent limit will be incorrect if the aggregate group such as "Ford Foundation" exceeds the limit. In this case different donor advisors to that group must be treated as different unique donor advisors such as "Ford Foundation Pope" and "Ford Foundation Newman". When the FOUNDATION group exceeds the 2 percent limit warnings are emitted and the source data can (and should) be updated to use a unique name for each advisor to handle this case properly. Those unique names should be associated with the FOUNDATIONDONOR keyword because amounts over 2 percent designated by each single donation advisor are properly handled and a warning is not needed.

All sources state that donations from Private Foundations are subject to the 2 percent limit and thus should use the FOUNDATION or FOUNDATIONDONOR keywords. Some sources say that all Donor Advised Funds should be treated this way. To let program updates follow changes in regulations use the DAF and DAFDONOR keywords for Donor Advised Funds that are not Private Foundations.

FOUNDATIONDONOR This is the same as FOUNDATION but represents donations advised by exactly one advisor. When donations designated by this single advisor exceed the 2 percent limit the amount over 2 percent is properly excluded from Public Support and does not issue a warning. Revenue from these sources is subject to the 2 percent limit and as long as each advisor is given a unique name the amount from that advisor which is over 2 percent is is the only portion not considered Public Support and is properly handled. This keyword should be used for revenue from Private Foundations. Unique names should be used for each advisor to the Private Foundation.
DAF

This keyword is intended for Donor Advised Funds where the donor designates the destination charity by name. (Typically how Donor Advised Funds work.)

This is currently the same as FOUNDATION. If it is determined that Donor Advised Funds are not subject to the 2 percent limit this will be changed to be the same as CHARITY where the 2 percent limit does not apply. If the 2 percent limit currently does not apply future tax law is expected to change this to require that the 2 percent limit be applied.

The question at issue is if 2 percent limits applies to Donor Advised Funds like Fidelity Charitable. Some sources state that revenue from 501(c)3 Donor Advised Funds which themselves meet the Public Support test is not subject to the 2 percent limit. There are also sources say that Donor Advised Funds are not subject to the 2 percent limit now, but there is pending legislation to change this. If it is certain that a particular fund will never be subject to the 2 percent limit the CHARITY keyword can be used. Otherwise use this keyword and the DAFDONOR keyword and the program will be updated over time based on correct IRS interpretation. The DAFDONOR keyword should be used when a single advisor designated the destination charity.

DAFDONOR

This keyword is intended for Donor Advised Funds where a single advisor designated the destination charity by name.

This is currently the same as FOUNDATIONDONOR but if it is determined that Donor Advised Funds are not subject to the 2 percent limit this will be changed to be the same as CHARITY where the 2 percent limit does not apply. Like DAF this will follow the tax rules as they change.

GOVERNMENT All revenue from a source associated with this name is from a govenment agency.
DIRECTOR The donor name associated with this keyword is a director of the organization
OFFICER This donor name associated with this keyword is an officer of the organization.
TRUSTEE This donor name associated with this keyword is a trustee of the organization.
FAMILY This donor name associated with this keyword is a family member of a Director, Officer or Trustee.
TAX The name associated with this keyword is for taxes that were collected and distributed to the organization (this is unusual).
FREE_USE The name associated with this keyword is a special source. It describes the value of the free use of a government resource. No cash is exchanged.
UNRELATED Revenue from names associated with this keyword is "Unrelated business taxable income (less section 511 taxes) from businesses acquired after June 30, 1975" (Part III section B line 10b).
OLD_BUSINESS Revenue from names associated with this keyword is "Net income from unrelated business activities not included in line 10b, whether or not the business is regularly carried on" (Part III section B line 11).
NOT_UNRELATED Revenue from names associate with this keyword is from business activity related to the charitable purpose. "Gross receipts from activities that are not an unrelated trade or business under section 513" (Part III line 3).
OTHER Revenue from names associated with this keyword is from "Other income. Do not include gain or loss from the sale of capital assets (Explain in Part VI.)" (Part III line 12).
ADMISSIONS Revenue from names associated with this keyword is from "Gross receipts from admissions, merchandise sold or services performed, or facilities furnished in any activity that is related to the organization's tax-exempt purpose" (part III line 2).

NOTE: Revenue of this type which came from a disqualified person (Director, Officer or Trustee), is not supposed to be included in some fields and calculations. That distinction is not made by the program and there is presently no way to represent money that came from a disqualified person that was anything other than a donation. If a disqualified person bought a ticket to an event that purchase should be excluded from the admissions total and is neither noticed nor excluded properly.
REVENUE This is another name for ADMISSIONS, it will be summarized seperately, but for tax purposes it is the same as ADMISSIONS and gets added to the same lines on the form.
SALES This is also another name for ADMISSIONS, it will be summarized seperately, but for tax purposes it is the same as ADMISSIONS and gets added to the same lines on the form.
INVESTMENT Revenue from names associated with this keyword is "Gross income from interest, dividends, payments received on securities loans, rents, royalties, and income from similar sources" (Part II line 8 and Part III line 10a).

NOTE: All investment amounts presented to the program are included in the calculations. A distinction is supposed to be made between capital gains vs income earned on investments. Capital gains should not be included as a source of revenue on Form 990. Here the program makes the assumption that capital gains are not listed in the investment income presented to the program. It is probably necessary to create another source for Capital Gains that then gets summarized and excluded properly. For now the program expects Capital Gains to simply not be in the list. For Form 990 Schedule A Capital Gains do not participate in any of the calculations.

Grants are tricky. The grantor must be characterized by the purpose of the grant. The grant might come from a corporation as a simple gift and then would be a DONOR. They might come from another 501(c)3 charity and would be a CHARITY. A grant which hires the organization to do a particular task unrelated to a charitable purpose and would be REVENUE. When grants of multiple types come from a single organization create multiple funding source names to divide the grants by type:

    ! NameKeyword 
 "Dragonnorth, Inc. Donation"DONOR 
 "Dragonnorth, Inc. Program"REVENUE 




Software Licensing

501(c)(3) organizations are herby granted without charge a license to download and use this software for calculating their own form 990 Schedule A results. Others (such as accounting firms) should contact mnewman@dragonnorth.com for licensing terms.

Windows Version of the Program

Downloading the Windows Version

The Windows GUI version of the program can be downloaded from: the Latest Built F990CALC Image This ZIP file contains a file called f990calc.exe which is a Windows GUI application and a set of DLL libraries necessary to run the application. Extract all of these files from the zip file into a directory. NOTE: This version is still experimental, comments welcome.)

Running the Windows GUI F990CALC Program

Documentation for running the F990CALC Graphical Input Windows program is not complete. A discussion of the menu items presented graphically and how to use them is missing.

Double click on the executible 'f990calc.exe' to start the Windows GUI version of the program. Other normal methods of starting a Windows application can be used such as putting a link in the menu or a shortcut on the desktop. Perhaps some day an installation script will be created that creates the menu entry and/or shortcut automatically as well as placing the DLL libraries in a location that will allow them to be shared with other applications.

The Windows F990CALC program can also be run from the command line. The same arguments as the PSCALC version are used. If run from the command line the GUI is not started and the program should work the same way the Command Line PSCALC version does.

NOTE: The Windows GUI program requires libraries that are part of wxWidgets. It will not run unless those libraries are available. The libraries should now be included in the built image of the ZIP distribution. Please report if the program starts and reports a missing library.

Command Line Version of the Program

Downloading the Command Line version of the Program

The PSCALC (command line only) version of the program can be downloaded from: the Latest Built PSCALC Image This ZIP file contains a file called pscalc.exe which is expected to run in a Command Prompt window on an MS Windows PC.

Example command strings (all are equivalent)
c:/mydir> pscalc.exe -v=1 -o=resultsfile.txt donationsfile.txt
c:/mydir> f990calc.exe -v=1 -o=resultsfile.txt donationsfile.txt
c:/mydir> f990calc.exe /v=1 /o=resultsfile.txt donationsfile.txt
 
Command Line Options
-hEmit a help message
<filename> Read the input file: filename which contains a list of donors, roles and/or donation amounts. This option can be repeated to read several files. The PSCALC version of the program allows input files to be placed anywhere on the command line. The W990CALC program follows the command line standards used in Windows and Unix and only allows input files at the end of the command line. Normal usage is to put the input files after the output file name, this will ensure that any errors reading the inputs are recorded in the output file.
-o=<filename>Write the output to the file: filename. If this option is given more than once the output file is changed each time. Using this option multiple times is not typical or expected, but will not produce errors. Each file will be created, most will be empty. If this option is not selected output will be to the console.
-r=#Use year # as the final year for the 990
-v-Minimum printouts, but includes all information required to fill out Form 990 Schedule A.
-vIncrease the output verbosity.
-v=1Emit more printouts explaining the results. Includes all outputs in '-v'.
-v=2Emit enough printouts to recreate the answers manually. Includes all printouts in '-v1'.
-v=3Emit printouts useful in testing to see if the code is calculating correct answers. Includes all printouts in '-v2'.
-v=4Emit printouts useful in debugging the program. Includes all printouts in '-v3'.

Known Problems

There is no method to differentiate Investment Income from Investment Capital gains. Capital gains are excluded from Form 990 Schedule A and should not be included in any input data.

Funding Sources ADMISSION and NOT_UNRELATED are supposed to exclude any payments from 'Disqualified Persons' which the IRS defines as Directors, Officers, Trustees and Family members. The program has no way to detect revenue in these categories that was paid by Disqualified Persons. Any such revenue should not be presented to the program. Most ticket type revenue would be very hard to determine if it came from a Disqualified Person. This might be best controlled by prohibiting such people from paying for this type of item.

Further Documentation

A place for documentation that has not been created yet.

Ideas for more documentation
Example input file
Example output file

PSCALC Releases

PSCALC is a simple command line C++ program built from source. The Borland 5.0 compiler and associated make was used but any C++ compiler is likely to work. The GCC compiler has also been verified to work. The GCC compiler was used for the F990CALC build which was build with wxWidgets-3.1.5. Regression tests show the same results with either of these compilers.

RevisionSizeZIP file
FTP
Changes
NextRelease The download files for the next release do not exist yet. As changes are made comments are accumulated here so items are not forgotten.

No changes yet.

20260302 80Kb Log in to see a link to the sources.

Updates to help messages in the GUI version.

Released as version 2(10)

20260302 80Kb Log in to see a link to the sources.

Add CSV reading capability and associated documentation on the web page.

Add FOUNDATION and FOUNDATIONDONOR keywords.

20260301 80Kb Log in to see a link to the sources.

Move version number to a central place so the GUI and command line programs will have the same number.

Many updates to the web page documantation associated with the 2 percent limit.

Add keywords FOUNDATION and FOUNDATIONDONOR currently synonyms for DAF and DAFDONOR but the 2 percent limit calculations may get changed for DAF and DAFDONOR if clarification of the rules shows that DAFs that are charities are not subject to the 2 percent limit. FONDATION and FOUNDATIONDONOR will always be subject to the 2 percent limit.

Update copyright notices.

20251216 80Kb Log in to see a link to the sources.

This repeats the release below with updated version numbers version 2(6)-11 in the GUI build and 2(6)-8 in the command line build.

20231102 80Kb Log in to see a link to the sources.

This is version 2(4)-11 in the GUI build and 2(6)-8 in the command line build. This version has better handling of the 2 percent limit for donor advised funds. There can still be errors in the 2 percent calculation if a general fund such as Fidelity Charitable contributes more than the limit but no individual advisor to that fund exceeded the limit. In this case the program currently makes the conservative assumption that all contributions from ths fund were from a single advisor. Warnings are produced if such a fund exceded the limit. The input data can be adjusted to create unique names such as "Fidelity Charitable Pope" and "Fidelity Charitable Newman" for funding of this type. They both are treated as Donor advised funds but the 2 percent limit will be applied to them as two different contributors.

Add Usage command to GUI.

Rework arguments to use -x=# style so GUI and command line versions match.

Rework PSCALC to take file names without -i. Deprecate -i.

Rework documentation on the server.

20250102 80Kb Log in to see a link to the sources.

This is version 2(4) in the GUI build and 2(5) in the command line build. This version fixes a bug in the calculation of the 2 percent limit and associated public support tests. The bug did not include funds contributed in some years a donor contributed when calculating the total donated by that donor over 5 years.

20220225 80Kb Log in to see a link to the sources.

This is version 1(4)-6. This version does not have any special handling for Donor Advised Funds. It turns out that contributions from Donor Advised Funds need special handling because they are subject to the 2 percent limits in the public support tests much as donations from individuals are. This is not handled properly in this version. If large donations come from Donor Advised funds the 2 percent limitations will not be calculated properly in this and earlier versions.

Add Usage command to GUI.

Rework arguments to use -x=# style so GUI and command line versions match.

Rework PSCALC to take file names without -i. Deprecate -i.

Rework documentation on the server.

20220220 80Kb Log in to see a link to the sources.

Connect Problems panel to error occurance. Log error to file line information to facilitate this.

Calculate and pass around position as well as line number for file reading errors.

A variety of tweaks to error and message output that change formatting of the start of each line.

Update version processing to use the messages system.

More pervase use of the messages system.

Update help messages.

Update Two Percent limit calculation.

Fix bugs and differences when input lines end with EOL vs NUL.

Centralize Event ID declarations.

Change to calculate result in a window and expect the user to save it.

Add popup error reports for incorrect user actions such as calculating with not data read.

Discover that clicks in the error panel do not register unless it is editable when event.Skip() is not called.

20220128 80Kb Log in to see a link to the sources.

Split into many modules to facilitate changing to a windows GUI. Isolate the user interface from the processing. Update regression tests. Probably fixed some bugs but the source comparision to see what changed is impractical for this release.

20220113 80Kb Log in to see a link to the sources.

Add -r to let the user specify the most recent 990 year.

Report percent of all years for officers.

Handle Quotation marks in the name field, not allowed in the date/keyword field, already handled in the amount field..

Print some progress messages.

Add the concept of warnings. Produce the initial text of errors and warnings centrally with line number indications.

Rework normalization of date strings and computation of date from the string. Eliminate the use of strptime which the GCC compiler does not have. Add GCC compilation batch files and regression checks. Eventually move to that compiler, but MAKE handling is not yet moved.

Rework use of percentToString, some weird results occured on GCC. Now as uses only do one %s output per printf call.

Better reporting of names with leading and trailing quotes.

Avoid use of float in the reading of values, rounding errors occured.

More careful checks for headers and lines that are not in the expected name tab date tab amount format.

20220108 80Kb Log in to see a link to the sources.

Start to talk about sources of funding instead of donors.

Handle more date formats. Fix some bugs in handling of dates with - characters.

Report totals by sources of funding.

Add a report if donations are smaller than $50K in the first 3 years.

Sepreate computation of totals from printing reports and summary data.

Report issues if the organization is less than 6, not less than 5.

Handle seperators better. Provide for quoted names.

Report file and line number on more errors.

20220107 80Kb Log in to see a link to the sources.

Rework many presentations. Correct errors in calculation of public support. Complete the printing of part III. Update the web page documentation. Add keyword concept for many more cateories to now support all lines of Part II and Part III.

20220105 80Kb Log in to see a link to the sources.

First release.

                                                                                                                                                       
PScalc Work Log for Michael Newman. Send comments and corrections to:
Webmaster: mnewman@dragonnorth.com