Resources
Contents
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:
| | ! Name | Date | Amount |
| | ! | or Keyword | |
| | Bill Smith | OFFICER | |
| | Bill Smith | 31-Dec-21 | 150.00 |
| | Ticket Sales | ADMISSIONS | |
| | Ticket Sales | 4-Feb-22 | 990.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:
| Keyword | Purpose |
| 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:
| | !
Name | Keyword | |
| | "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 |
|---|
| -h | Emit 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. |
| -v | Increase the output verbosity. |
| -v=1 | Emit more printouts explaining the results.
Includes all outputs in '-v'. |
| -v=2 | Emit enough printouts to recreate the answers
manually. Includes all printouts in '-v1'. |
| -v=3 | Emit printouts useful in testing to see if the
code is calculating correct answers. Includes all printouts in
'-v2'. |
| -v=4 | Emit 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.
| Revision | Size | ZIP 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.
|
|