AgentSkillsCN

form990-expert

深入掌握IRS Form 990的结构、字段设置与非营利组织财务分析。当需要解析Form 990、对接ProPublica API,或开展慈善财务评估相关代码开发时,可启用此技能。

SKILL.md
--- frontmatter
name: form990-expert
description: Deep expertise on IRS Form 990 structure, fields, and nonprofit financial analysis. Activates when working on Form 990 parsing, ProPublica API integration, or charity financial evaluation code.

Form 990 Expert

You have deep expertise in IRS Form 990 - the annual tax return filed by tax-exempt organizations.

When This Skill Activates

  • Working on form_990_parser.py or PDF extraction
  • Modifying ProPublica collector or validator
  • Adding new financial fields to charity data models
  • Analyzing charity financial health or ratios
  • Debugging 990 data extraction issues

Core Knowledge

Form 990 Structure (12 Parts)

PartNameKey Data
ISummaryRevenue, expenses, net assets, mission (30-word)
IISignature BlockFiling date, preparer info
IIIProgram Service AccomplishmentsMission statement, top 3 programs with expenses
IVChecklist of Required SchedulesWhich schedules are attached
VTax Compliance StatementsOther IRS filings
VIGovernance & ManagementBoard size, independence, policies
VIICompensationOfficers, directors, key employees, highest paid
VIIIStatement of Revenue12 revenue categories
IXStatement of Functional ExpensesProgram/Admin/Fundraising breakdown (26 expense lines)
XBalance SheetAssets, liabilities, net assets
XIReconciliation of Net AssetsChanges in fund balance
XIIFinancial StatementsAudit status, accounting method

Key Schedules

ScheduleRequired WhenContains
AAlways (501c3)Public charity status test, public support calculation
BContributors >$5kDonor names (confidential)
CPolitical activityLobbying expenses, political campaign involvement
DCertain assetsEndowment details, art collections, escrow accounts
FForeign activitiesCountries served, foreign grants, offices abroad
GFundraising eventsGaming, special events details
IGrants to orgsGrantee list with amounts
JCompensation >$150kDetailed executive pay breakdown
LInterested personsRelated party transactions
MNon-cash contributionsIn-kind donation details
OAlwaysNarrative explanations, additional info

Form Variants

FormWho FilesGross ReceiptsAssets
990Large nonprofits>$200k>$500k
990-EZMedium nonprofits$50k-$200k<$500k
990-PFPrivate foundationsAnyAny
990-NSmall nonprofits<$50kN/A

Field Mappings

ProPublica API to Form 990 Lines

code
totrevenue        -> Part I, Line 12 (Total Revenue)
totfuncexpns      -> Part I, Line 18 (Total Expenses)
totcntrbgfts      -> Part VIII, Line 1h (Contributions & Grants)
totprgmrevnue     -> Part VIII, Line 2g (Program Service Revenue)
invstmntinc       -> Part VIII, Line 3 (Investment Income)
othrevnue         -> Part VIII, Line 11e (Other Revenue)
compnsatncurrofcr -> Part VII, Column D total (Officer Compensation)
totassetsend      -> Part X, Line 16 (Total Assets EOY)
totliabend        -> Part X, Line 26 (Total Liabilities EOY)
totnetassetend    -> Part X, Line 33 (Net Assets EOY)

Codebase to Form 990 Parts

code
form_990_parser.py:
  _extract_header_info()     -> Part I header
  _extract_financial_data()  -> Parts VIII, IX, X
  _extract_officers()        -> Part VII
  _extract_programs()        -> Part III
  _extract_schedule_o()      -> Schedule O (partial)

propublica.py:
  fetch_organization()       -> Part I summary + Part VII + Part X
  _get_filing_history()      -> 3 years of returns

Financial Analysis Guidance

Program Expense Ratio

  • Formula: Program Expenses / Total Expenses
  • Good: >75% (efficient)
  • Acceptable: 65-75%
  • Concerning: <65% (high overhead)
  • Red flag: <50%

Fundraising Efficiency

  • Formula: Total Contributions / Fundraising Expenses
  • Good: >$4 raised per $1 spent
  • Acceptable: $2-4 per $1
  • Concerning: <$2 per $1

Compensation Reasonableness

  • Compare to similar-size orgs in same NTEE category
  • CEO pay >2% of total expenses is unusual
  • Watch for related-party compensation in Schedule L

Red Flags to Watch For

  • Declining revenue with stable/growing expenses
  • Fundraising expenses > Program expenses
  • Zero volunteers reported
  • No independent board members (Part VI)
  • Missing audit when required (>$500k should audit)

Current Gaps in Codebase

The existing parser extracts ~60% of useful 990 data. Missing:

  • Part VI (Governance) - board independence, policies
  • Schedule A - public charity test results
  • Schedule J - detailed executive compensation
  • Part IV checklist - which schedules were filed
  • Filing date and preparer information
  • Year-over-year trend calculations

When Adding New Fields

  1. Identify which Part/Schedule contains the data
  2. Check if ProPublica API provides it (see resources/field-mappings.md)
  3. If PDF parsing needed, determine which page/section
  4. Update the appropriate extractor in form_990_parser.py
  5. Add field to validator and reconciled profile model

Reference Resources

For detailed information, see:

  • resources/form990-structure.md - All 12 parts with line-by-line details
  • resources/schedules-reference.md - Complete schedule guide
  • resources/field-mappings.md - Full ProPublica API to codebase mapping