credit-facility-rs
A Rust library for modeling and managing various types of credit facilities including term loans, revolving credit, open-term loans, and overdraft facilities. Provides deterministic time control for testing and financial calculations.
Features
-
Multiple facility types
- Term loans (personal, mortgage, auto)
- Revolving credit (credit cards, HELOC)
- Open-term loans with collateral
- Overdraft facilities
-
Time control system
- Deterministic time manipulation for testing
- Real-time and controlled time modes
- Built on hourglass-rs SafeTimeProvider
-
Financial calculations
- Interest accrual with multiple conventions
- Payment processing and amortization
- Penalty calculations and grace periods
- Collateral monitoring and liquidation
-
API design
- Unified primitives:
approve,deny,disburse,make_payment,json - Builder pattern with
.set_time(&time).build() - JSON serialization for state inspection
- Unified primitives:
Quick start
use ;
use TermLoanBuilder;
Time control for testing
use ;
use TermLoanBuilder;
use ;
API patterns
All facility types follow consistent patterns:
Core operations
approve()- approve the facility for usedeny()- deny/cancel the facilitydisburse(amount)- disburse fundsmake_payment(amount)- process a paymentjson()- get JSON representation of current state
Time management
.set_time(&time)- set time provider during construction.build()- build facility with stored or system timeaccrue_interest()- accrue interest using stored timeupdate_daily_status()- update status using stored time
State inspection
.facility()- access underlying facility data.json()- pretty-printed JSON state- Status lifecycle:
Originated → Active → Settled/GracePeriod/Delinquent
Examples
The examples/ directory contains 11 examples:
- 00_quick_start - minimal usage example
- 01_basic_usage - basic facility operations
- 02_time_control - deterministic time manipulation
- 03_facility_types - different facility types
- 04_shared_time - shared time across facilities
- 05_json_state - JSON serialization
- 06_lifecycle - facility status lifecycle
- 07_bitcoin_loan - collateralized bitcoin loan
- 08_revolving_credit - revolving credit facility
- 09_overdraft - overdraft facility
- 10_status_test - status transition testing
Run examples with:
Installation
Add to your Cargo.toml:
[]
= "0.1.0"
Dependencies:
rust_decimal- precise decimal arithmeticchrono- date/time handlinghourglass-rs- time control for testinguuid- unique identifiersserde- JSON serialization
Testing
Run all tests:
Runs 88 unit tests covering facility types, interest calculations, payment processing, collateral management, and time manipulation.
Architecture
The library is organized into modules:
- facilities/ - facility implementations (term_loan, revolving, open_term, overdraft)
- interest/ - interest calculation engines
- payments/ - payment processing and amortization
- collateral/ - collateral management and liquidation
- decimal/ - precise decimal types (Money, Rate)
- config/ - facility configuration
- state/ - facility state management
- events/ - event system for auditing
Known limitations
- Denied loans use
Settledstatus (noCancelledstatus yet) - Scheduled payments may leave small residual balances due to rounding
- Some edge cases in payment timing and status transitions