An open credit modeling tool kit
Project description
credkit
An open toolbox for credit modeling in Python
Credkit provides elegant, type-safe primitives for building credit models that typically force teams to reach for Excel. From consumer loans to portfolio analytics, credkit offers domain-driven tools designed for precision and composability.
Built for consumer lending (mortgages, auto loans, personal loans) with cash flow modeling, amortization schedules, and present value calculations.
Currently focused on USD-denominated consumer loan products in the US market.
Installation
# Using uv (recommended)
uv add credkit
# Using pip
pip install credkit
Quick Start
from credkit import Loan, Money, InterestRate, FlatDiscountCurve
from datetime import date
# Create a 30-year mortgage
loan = Loan.mortgage(
principal=Money.from_float(300000.0),
annual_rate=InterestRate.from_percent(6.5),
term_years=30,
origination_date=date(2024, 1, 1),
)
# Calculate payment
payment = loan.calculate_payment() # ~$1,896.20/month
# Generate amortization schedule
schedule = loan.generate_schedule() # 720 cash flows (360 principal + 360 interest)
# Calculate total interest over life of loan
total_interest = loan.total_interest()
# Value the loan at market rate
market_curve = FlatDiscountCurve(
InterestRate.from_percent(5.5),
valuation_date=date(2024, 1, 1)
)
npv = schedule.present_value(market_curve)
See EXAMPLES.md for more comprehensive examples of all features.
Core Features
Temporal (credkit.temporal)
- Day count conventions: ACT/365, ACT/360, ACT/ACT, 30/360, and more
- Periods: Time spans with natural syntax (
"30Y","6M","90D") - Payment frequencies: Annual, monthly, bi-weekly, etc.
- Business day calendars: Holiday-aware date adjustments
Money (credkit.money)
- Money: Currency-aware amounts with Decimal precision
- Interest rates: APR with multiple compounding conventions
- Spreads: Basis point adjustments (e.g., "Prime + 250 bps")
Cash Flow (credkit.cashflow)
- Cash flows: Individual payment representation with present value
- Schedules: Collections with filtering, aggregation, and NPV
- Discount curves: Flat and zero curves with interpolation
Loans (credkit.instruments)
- Loan types: Mortgages, auto loans, personal loans
- Amortization: Level payment, level principal, interest-only, bullet
- Schedules: Generate complete payment schedules with principal/interest breakdown
- Integration: Full end-to-end from loan creation to NPV calculation
Features
- Immutable by default: All core types are frozen dataclasses
- Decimal precision: No floating-point errors in financial calculations
- Type safety: Full type hints with
py.typedmarker - Composable: Build complex models from simple primitives
- Tested: 148 passing tests with comprehensive coverage
Documentation
- EXAMPLES.md: Comprehensive code examples for all modules
Requirements
- Python 3.13+
- No runtime dependencies (uses only standard library)
Development
# Clone and setup
git clone https://github.com/jt-hill/credkit.git
cd credkit/core-classes
uv sync --dev
# Run tests
uv run pytest tests/ -v # All 148 tests should pass
Contributing
Contributions welcome! This project follows:
- Domain-driven design with immutable primitives
- Comprehensive testing
License
Copyright (c) 2025 JT Hill
Licensed under the GNU Affero General Public License. See LICENSE for details
For commercial licensing options not covered by AGPL, contact the author
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 credkit-0.3.0.tar.gz.
File metadata
- Download URL: credkit-0.3.0.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3373e63ac192ba1ced201f8961df3c3e336e923a9b9ffe2b327f4a2ee5164bdd
|
|
| MD5 |
cd981ba09757fbed3ba92d0996ef5fff
|
|
| BLAKE2b-256 |
61efcecaf32eca9ab06a8395a987682ec422f63137bd79cb5dae720c1cde38b8
|
File details
Details for the file credkit-0.3.0-py3-none-any.whl.
File metadata
- Download URL: credkit-0.3.0-py3-none-any.whl
- Upload date:
- Size: 50.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5176ad8054db753747355a820f92c01b475f9ddd8979e5b8b89676f5324b28ca
|
|
| MD5 |
387795236f9bd64f0dc138845275d067
|
|
| BLAKE2b-256 |
53aec58b41df1f9e7ec3a6c69113d7c18257cd0c44dce45a54bb808736f9495d
|