Record deposits and incoming funds from loan payments, investor note purchases, fee income, and other sources with automatic GL posting and bank feed matching.
CEF Core supports five categories of cash receipts, each with distinct GL treatment and processing rules:
| Receipt Type | transaction_type | GL Entry |
|---|---|---|
| Loan Payments | DEPOSIT | DR Cash (1010) / CR Loans Receivable + Interest Income |
| Note Deposits | DEPOSIT | DR Cash (1010) / CR Investor Notes Payable |
| Fee Income | FEE | DR Cash (1010) / CR Fee Income |
| Interest Income | INTEREST | DR Cash (1020 Money Market) / CR Interest Income |
| Other Receipts | DEPOSIT | DR Cash (1010) / CR Miscellaneous Income |
Post a cash receipt via POST /api/v1/cash/transactions with an idempotency key header. The amount must be a positive number. Requires the ADMIN, TREASURY, or SYSTEM_ADMIN role.
POST /api/v1/cash/transactions
Content-Type: application/json
x-idempotency-key: receipt-20260315-001
{
"account_id": "uuid-of-operating-checking",
"transaction_date": "2026-03-15",
"transaction_type": "DEPOSIT",
"amount": 12500.00,
"description": "Loan payment - Grace Community Church",
"reference_number": "CHK-4821"
}| Field | Type | Required | Description |
|---|---|---|---|
account_id | UUID | Yes | Target cash account (e.g., Operating Checking) |
transaction_date | YYYY-MM-DD | Yes | Date the funds were received |
transaction_type | Enum | Yes | DEPOSIT, INTEREST, or FEE |
amount | Number | Yes | Positive value up to 999,999,999.99 |
description | String | No | Free-text description (max 500 chars) |
reference_number | String | No | Check number, wire reference, etc. (max 100 chars) |
Idempotency: Every receipt POST requires an x-idempotency-key header. If the same key is sent twice, the duplicate is rejected. This prevents double-posting of payments -- a critical safeguard for money operations.
Many receipts are created automatically when related transactions occur in other modules. You do not need to manually record these:
tenantAccrualCheck job (every 15 minutes) processes accrued interest and creates the corresponding cash and GL entries.Manual receipts are typically needed for miscellaneous income, one-time donations, insurance refunds, or corrections.
CEF Core integrates with Plaid to automatically import bank transactions. Imported deposits are matched against internal receipt records using three criteria:
syncBankTransactions job pulls new transactions from Plaid every hour.importBankActivity job runs at 2:05 AM UTC for a comprehensive daily reconciliation pull.Unmatched bank deposits appear in the reconciliation queue for manual review and matching.
Every cash receipt generates a corresponding double-entry journal entry in the General Ledger. The debit always goes to the appropriate cash account:
| Cash Account | GL Code | Typical Use |
|---|---|---|
| Operating Checking | 1010 | Day-to-day receipts: loan payments, fees, general deposits |
| Money Market | 1020 | Interest income, reserve fund transfers |
| Reserve Fund | 1030 | Restricted reserve deposits |
The GL journal entry ID is stored on the cash transaction record in the gl_je_id column, providing a direct link between the cash ledger and the general ledger for audit and reconciliation purposes.
Retrieve receipt history using the transactions endpoint with filters:
GET /api/v1/cash/transactions?accountId={uuid}&limit=50
Response:
{
"transactions": [
{
"transaction_id": "uuid",
"account_id": "uuid",
"account_name": "Operating Checking",
"transaction_date": "2026-03-15",
"transaction_type": "DEPOSIT",
"amount": "12500.00",
"description": "Loan payment - Grace Community Church",
"reference_number": "CHK-4821",
"status": "POSTED",
"created_at": "2026-03-15T14:30:00Z"
}
],
"count": 1
}Filter by accountId to view receipts for a specific bank account. Results are ordered by transaction date descending, with a maximum of 100 records per request.
All cash receipt operations are recorded in the immutable audit trail:
Cash receipts integrate closely with several other CEF Core modules.