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
Funding Sources
The IRS talks about money that comes in to a 501(c)3 organization
as comming from different types of "Funding Sources". Some funding sources are
individuals who donate money. Others are income from events, money
earned from sales, money from grants etc. To be done correctly the analysis of public
support on Form 990 Schedule A needs to know the nature of where
money comes from. This is done by associating each revenue item
with a funding source. Splitting funding sources by individual
names in general does not matter except for money that comes
from people who have special roles in the organization (DIRECTORs
OFFICERs, TRUSTEEs etc.). Those people should be individually
identified to get a correct answer.
Input File Format
The file is a tab seperated list of two or three fields. Extra space characters at the beginning or end of a field
are usually ignored.
This file can be
created in Excel and exported to a tab seperated file and will be
correct. (Only the first three columns of the spreadsheet will be
noticed by the program and must be the Name, Date and Amount
respectively.) Comma seperated files can not be used.
Commas can not be used as the seperator because commas can be presented as part of an amount ($1,000.00).
There are two types of lines in the input file. The first type are lines that
associate a funding source with a keword. The second type of line
describes
a particular amount recieved.
Remember that fields
on either type of line are seperated by the tab character.
Lines which associate a funding source with a purpose have two
fields: The name of the funding source in the first field and the
keyword that describes the purpose of the funding source in the
second. The keywords are not case sensitive. These keywords also
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.
The 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.
Name Field
The name field is the first field on every line.
The name (donor or funding source) is ended by a TAB 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.
Date or Keyword Field
The second field is used for a date or a keyword. It is not case
sensitive and is terminated with a tab.
These 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 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. Names which have never been
associated with a keyword are assigned to this revenue category.
|
CHARITY |
All revenue from a source associated with this name is
from another charitable institution. This keyword should also
be used for revenue from Donor Advised Fund where the donors
do not select charities by name (not typical). |
DAF |
All revenue from a source associated with this name is
from a charitable institution that distributes Donor Advised
Funds to charities where the donor designates the destination
charity by name. (This is
typically how Donor Advised Funds work.) These
donations are special because although they are from a
charity they are still subject to the 2 percent limit per
donor in the
calculation of public support contribution. The calculation of
the 2 percent limit will be incorrect if the aggregate group
such as "Fidelity Charitable" exceeds the limit. In this case
different donor advisors to that group must be treated as different
unique donors such as "Fidelity Charitable Pope" and "Fidelity
Charitable Newman". When the DAF group exceeds the 2 percent
limit warnings are emitted and the source data must be
updated to use a unique DAF name for each advisor to handle
this case properly. Those unique names should be associated
with the DAFDONOR name because amounts over 2 percent
designated by a single donor are properly handled and
a warning is not needed.
|
DAFDONOR |
This is the same as DAF but represents donations advised
by exactly one donor. When donations from this single
donor exceed the 2 percent limit they are properly handled
and do not
issue a warning. Donations from these donors are
subject to the 2 percent limit and as long as each donor
is given a unique name the amount over 2 percent is not
considered public support and is properly handled.
|
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.
|
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
all mean the same thing:
December 31st, 2021 is also the date on the fourth line of the
example file.
Amount 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 in the
amount field are also ignored.
(Excel sometimes outputs an
amount surrounded by quotation marks). 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 line or by a TAB
character. Fields after this are ignored. $150.00 is the
donation amount Bill Smith gave on the fourth line of the example
above.
Software Licensing
501(c)(3) organizations are herby granted
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.
Downloading the Program
The PSCALC (command line only) 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.
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.
Running the Program from the Command Line
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 asociated make was used but any C++ compiler is likely
to work. The GCC compiler has also been verified to work, it was
also 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.
|
20231102 |
80Kb |
Log in to see a link to the sources. |
This is version 2(4)-11 in the GUI build and 2(4)-5 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(5) 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.
|
|