CDFIs and small lenders manage loan portfolios with spreadsheets or fragile
legacy systems. Interest accrual is manual. Amortization schedules live in
Excel files that diverge from the ledger. There is no subledger/GL
reconciliation. No covenant monitoring. No immutable event trail.
When an auditor asks to reconstruct a loan balance from origination to
present, the answer should not require opening six spreadsheets.
Full Loan Lifecycle
Originate, accrue, pay, payoff, refinance. Every state change is an immutable event with a corresponding journal entry.
6 Instrument Types
Term, revolving, construction, bridge, interest-only, balloon. Each with appropriate amortization and payment behavior.
3 Day-Count Conventions
Actual/365, Actual/360, 30/360. Set per loan, enforced by a deterministic math engine with reproducible results.
Versioned Schedules
Amortization schedules are never edited. Changes create a new version with a supersede chain. Full history preserved.
Daily Interest Accrual
Automated daily computation with period-close GL posting. Economic vs. posted balance distinction by design.
Subledger Reconciliation
Daily verification that subledger balances match GL control accounts. Mismatches flagged as critical health alerts.
Covenant Monitoring
DSCR, reserve ratio, delinquency, insurance covenants evaluated automatically with breach effect enforcement.
Enforcement Guards
Three guards evaluate every loan transaction: covenant compliance, payment split validation, interest calculation verification.
SHA-256 Verification
Balance snapshots include cryptographic hashes of the underlying event chain. Tamper-evident by construction.
The math engine is a pure function layer with no database access. Same
inputs produce the same outputs. Interest computation, payment splitting,
amortization generation, and schedule validation are all deterministic
and reproducible.
day_count_fraction(start, end, convention) → Decimal
compute_daily_interest(principal, rate_bps, convention, start, end) → Decimal, dict
split_payment(amount, accrued_interest, accrued_fees, order) → dict
generate_amortization_schedule(principal, rate_bps, term, ...) → list[dict]
compute_verification_hash(events_data) → str (SHA-256)
Every balance is reproducible. Given the origination event, the schedule version,
and the event stream, any loan balance can be independently reconstructed.
The verification hash proves the event chain has not been altered.
Loan servicing runs on the same enforcement engine as CommunityPay's
HOA accounting and trust accounting. The properties that make institutional
accounting work apply equally to loan portfolio management.
01
Single posting interface. Every loan origination, accrual, payment, and payoff flows through JournalEngine. No direct database writes to the general ledger.
02
Event-sourced subledger. Every loan state change is an immutable LoanEvent. Balances are derived from events, not stored directly. Append-only by design.
03
Mandatory enforcement. Three guards evaluate every loan transaction: LoanCovenantGuard (DSCR, reserves), PaymentSplitGuard (P+I+F validation), InterestCalculationGuard (accrual math).
04
Immutable audit trail. LoanEvents cannot be edited after creation. Every enforcement decision is logged with a full signal snapshot. Schedule versions form a chain.
05
Two-tier reconciliation. Posted subledger balance equals GL balance at all times. Economic balance (including unposted daily accrual) reconciles at period close.
For lenders who allocate debt service to multiple borrowers, the system
supports sub-loan origination with configurable allocation strategies:
equal per borrower, by square footage, by ownership percentage, or custom.
Each borrower loan has its own event stream, balance snapshots, and
payment history.
What is an event-sourced loan subledger?
Every loan state change (origination, accrual, payment, payoff, rate reset)
is recorded as an immutable event. Balances are derived from the event stream,
not stored directly. This means every balance can be independently reconstructed
from the event history.
How does subledger reconciliation work?
The debt subledger computes loan balances from events and mirrors them to
the general ledger via posted journal entries. A daily reconciliation verifies
that posted subledger balances match GL control account balances exactly.
Mismatches are flagged as critical health alerts.
Do I need to use CommunityPay's HOA features?
No. Loan servicing works as a standalone product. CDFIs and small lenders
sign up, select Loan Servicing, and get a simplified interface focused on
loan portfolio management. No HOA features are visible.
What day-count conventions are supported?
Three conventions: Actual/365, Actual/360, and 30/360. The convention is
set per loan and enforced deterministically by the math engine. All
computations are reproducible from inputs.
Simple, flat pricing. No per-transaction fees. No accrual surcharges.
CommunityPay accounting subscribers
Included
Standalone — up to 50 loans
$50
Standalone — 51+ loans
$100 (cap)
Every tier includes: Unlimited borrowers, daily interest accrual, versioned schedules,
subledger/GL reconciliation, covenant monitoring, enforcement guards, rollforward reports.
Processing fees passed through at cost.
Both products, one subscription. Trust Accounting and Loan Servicing
are both included under the same CommunityPay subscription. CommunityPay accounting
subscribers get both at no additional cost. Standalone pricing applies only if you
use Loan Servicing or Trust Accounting without a CommunityPay accounting subscription.