Skip to main content

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.typed marker
  • 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

credkit-0.3.0.tar.gz (36.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

credkit-0.3.0-py3-none-any.whl (50.2 kB view details)

Uploaded Python 3

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

Hashes for credkit-0.3.0.tar.gz
Algorithm Hash digest
SHA256 3373e63ac192ba1ced201f8961df3c3e336e923a9b9ffe2b327f4a2ee5164bdd
MD5 cd981ba09757fbed3ba92d0996ef5fff
BLAKE2b-256 61efcecaf32eca9ab06a8395a987682ec422f63137bd79cb5dae720c1cde38b8

See more details on using hashes here.

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

Hashes for credkit-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5176ad8054db753747355a820f92c01b475f9ddd8979e5b8b89676f5324b28ca
MD5 387795236f9bd64f0dc138845275d067
BLAKE2b-256 53aec58b41df1f9e7ec3a6c69113d7c18257cd0c44dce45a54bb808736f9495d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page