CDFI Bond Guarantee Program eligibility screener — net asset, lending volume, portfolio quality thresholds, and bond issuance feasibility analysis
Project description
bond-issuer-screener
CDFI Bond Guarantee Program eligibility screener — quickly assess whether a CDFI meets the net asset, lending volume, portfolio quality, and governance thresholds required to participate in Treasury's BGP. Compute a composite capacity score, estimate maximum issuance size, quantify gaps, and generate Markdown screening reports.
Why
The CDFI Bond Guarantee Program allows certified CDFIs to issue bonds of $100M–$1B with a federal guarantee. Qualifying is non-trivial: CDFIs must meet minimum asset, volume, and quality thresholds, have at least three years of certification, and demonstrate governance strength. This library makes the screening process transparent, repeatable, and auditable.
Installation
pip install bond-issuer-screener
Quickstart
from bondscreener import (
CDFIProfile,
BondIssuance,
BGP_THRESHOLDS,
check_basic_eligibility,
check_portfolio_quality,
check_governance,
comprehensive_eligibility_check,
estimate_bond_capacity,
lending_capacity_score,
portfolio_quality_score,
governance_score,
issuance_feasibility,
gap_to_eligibility,
peer_comparison,
generate_screening_report,
eligibility_summary_table,
)
# Describe the CDFI
profile = CDFIProfile(
name="Heartland CDFI",
certification_date="2018-03-01",
total_assets=150_000_000,
net_assets=18_000_000,
total_lending_volume_5yr=320_000_000,
sectors_served=["small_business", "affordable_housing"],
geographic_areas=["IL", "IN", "WI"],
regulator="state",
audit_status="clean",
governance_structure="independent_board",
npl_rate=0.04,
charge_off_rate=0.012,
single_borrower_concentration=0.07,
)
# Describe the proposed bond
issuance = BondIssuance(
proposed_amount=150_000_000,
term_years=15,
intended_use="Small business and community facility lending",
expected_lending_pace=35_000_000,
projected_portfolio_composition={"small_business": 0.60, "community_facility": 0.40},
)
# Run individual threshold checks
basic = check_basic_eligibility(profile)
print(f"Basic eligibility: {'PASS' if basic['overall_passed'] else 'FAIL'}")
print(f"Net assets: ${profile.net_assets:,.0f} (min: ${BGP_THRESHOLDS['min_net_assets']:,.0f})")
quality = check_portfolio_quality(profile)
print(f"Portfolio quality: {'PASS' if quality['overall_passed'] else 'FAIL'}")
gov = check_governance(profile)
print(f"Governance: {'PASS' if gov['overall_passed'] else 'FAIL'}")
# Full eligibility check
result = comprehensive_eligibility_check(profile, issuance)
print(result.summary())
# Capacity scores
lc = lending_capacity_score(profile)
pq = portfolio_quality_score(profile)
gs = governance_score(profile)
print(f"Lending capacity: {lc:.1f} Portfolio quality: {pq:.1f} Governance: {gs:.1f}")
# Bond capacity estimate
cap = estimate_bond_capacity(profile)
print(f"Max bond size: ${cap['recommended_max']:,.0f} ({cap['rationale']})")
# Full feasibility analysis
feasibility = issuance_feasibility(profile, issuance)
print(f"Feasibility: {feasibility['overall_feasibility']}")
for note in feasibility["summary_notes"]:
print(f" - {note}")
# Gap analysis (what's needed to qualify)
gap = gap_to_eligibility(profile, issuance)
print(f"Already eligible: {gap['is_already_eligible']}")
# Peer comparison
peer = CDFIProfile(
"Peer Fund", "2016-01-01", 80_000_000, 10_000_000, 210_000_000,
["small_business"], ["OH"], "OCC", "clean", "independent_board",
npl_rate=0.07, charge_off_rate=0.02, single_borrower_concentration=0.09,
)
comp = peer_comparison(profile, [peer])
print(f"Peer standing: {comp['peer_standing']} (overall percentile: {comp['overall_percentile']:.0f})")
# Generate a full Markdown report
report = generate_screening_report(profile, issuance)
print(report[:500])
# Summary table for multiple CDFIs
table = eligibility_summary_table([profile, peer], [issuance, issuance])
for row in table:
print(f"{row['name']:25s} eligible={row['is_eligible']} tier={row['capacity_tier']}")
Key Features
- Threshold checking — net assets ($2M), 5-year lending volume ($200M), certification years (3+), leverage ratio, NPL rate (≤15%), charge-offs (≤5%), single-borrower concentration (≤10%)
- Governance assessment — audit status (clean required), board independence, federal vs. state regulation
- Capacity scoring — 0-100 composite score weighted across lending capacity (40%), portfolio quality (35%), and governance (25%)
- Bond capacity estimation — leverage-based and deployment-based caps; identifies binding constraint
- Feasibility analysis — combines eligibility, capacity, and deployment pace into a single verdict
- Gap analysis — quantifies exactly what a CDFI needs to close to qualify, with time estimates
- Peer comparison — percentile ranks across all key metrics vs. a peer group
- Markdown report generation — export-ready screening reports with threshold tables and recommendations
Use Cases
- CDFIs assessing their BGP readiness before investing in application preparation
- Consultants screening client portfolios for BGP suitability
- Intermediaries comparing multiple CDFIs for referral or co-issuance opportunities
- Researchers analyzing BGP participant characteristics at scale
License
MIT © Jay Patel
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bond_issuer_screener-0.1.0.tar.gz.
File metadata
- Download URL: bond_issuer_screener-0.1.0.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cb725224aae7dfc3b3131405e99b2c6b66697c6d66837a92360df26e7b6ad4a
|
|
| MD5 |
07a7b0da57d95219b813e7ad59349c63
|
|
| BLAKE2b-256 |
40d535560bc2aaa842b43e94f8beaf104c3660f320d1ada4aecd80d38b93c883
|
File details
Details for the file bond_issuer_screener-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bond_issuer_screener-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d63f6f43d9672c9ce6e6d0408059f631ed5d5a95476be75bc46b2d6e9eb011a7
|
|
| MD5 |
52584aa4b929c8f39a686403f22028a6
|
|
| BLAKE2b-256 |
b6e502a049d20969b7e0f33c97b42336af41a9be4f26248ec67d3003f2768959
|