Cash Disbursements

Process outgoing payments for loan fundings, investor note redemptions, interest payments, escrow disbursements, and operating expenses with maker-checker controls and automatic GL posting.

Disbursement Types

CEF Core categorizes disbursements by purpose. Each type follows a specific GL posting pattern and may trigger approval workflows based on amount thresholds:

Disbursement Typetransaction_typeGL Entry
Loan DisbursementWITHDRAWALDR Loans Receivable / CR Cash (1010)
Note RedemptionWITHDRAWALDR Investor Notes Payable / CR Cash (1010)
Interest PaymentWITHDRAWALDR Interest Expense / CR Cash (1010)
Escrow PaymentWITHDRAWALDR Escrow Payable / CR Cash (1010)
Operating ExpenseWITHDRAWALDR Operating Expense / CR Cash (1010)
Inter-Account TransferTRANSFERDR Cash (target) / CR Cash (source)

Recording a Disbursement

Post a disbursement via POST /api/v1/cash/transactions. The amount is always a positive number -- the system determines the direction from the transaction_type field. Requires the ADMIN, TREASURY, or SYSTEM_ADMIN role.

POST /api/v1/cash/transactions
Content-Type: application/json
x-idempotency-key: disb-loan-2026-03-15-001

{
  "account_id": "uuid-of-operating-checking",
  "transaction_date": "2026-03-15",
  "transaction_type": "WITHDRAWAL",
  "amount": 250000.00,
  "description": "Loan funding - First Baptist Church building project",
  "reference_number": "WIRE-8834"
}

Idempotency Required: Every disbursement POST must include an x-idempotency-key header. This is enforced by the idempotency middleware to prevent duplicate payments. Resubmitting the same key returns the original response without processing a second disbursement.

Maker-Checker Approval

Large disbursements are subject to the maker-checker approval workflow, which enforces the four-eyes principle for financial transactions:

RoleAuto-Approved LimitRequires Approval Above
STAFFRole-based daily limitAll disbursements require approval
TREASURYPer-transaction limitAbove configured threshold
ADMINHigher per-transaction limitAbove configured threshold
SYSTEM_ADMINHighest limitAbove configured threshold

When a disbursement exceeds the auto-approval threshold, it enters the approval queue managed by the Approvals module (/api/v1/approvals). The scheduled executeApprovedRequests job processes approved disbursements every 15 minutes, and sendApprovalNotifications alerts approvers of pending items every 30 minutes.

Transaction limits are enforced by the Limits module (/api/v1/limits), which tracks per-user daily totals. The dailyLimitReset job resets counters at midnight UTC.

Payment Methods

Disbursements can be issued via three payment methods, selected based on urgency, amount, and recipient preference:

  • CHECKPhysical checks printed and mailed. Use for operating expenses and smaller payments. Include the check number in the reference_number field for reconciliation matching. Outstanding checks appear on the bank reconciliation until cleared.
  • ACHElectronic transfers via the Automated Clearing House network. Typical for recurring interest payments to investors and escrow disbursements. Settlement is typically 1-2 business days.
  • WIRESame-day wire transfers for time-sensitive, high-value disbursements such as loan fundings. Include the wire confirmation number in reference_number. Wire transfers typically require maker-checker approval regardless of amount.

Escrow Disbursements

Escrow accounts are managed by a separate Escrow module at /api/v1/escrow. When an escrow payment is due (property taxes, insurance premiums, or maintenance reserves), the escrow service creates the disbursement in the cash module automatically:

  1. Escrow analysis: The system calculates the required payment based on the escrow account balance and the upcoming due date.
  2. Disbursement creation: A WITHDRAWAL transaction is posted to the operating checking account.
  3. GL posting: DR Escrow Payable / CR Cash (1010) is recorded in the general ledger.
  4. Payment issuance: The check or ACH payment is sent to the taxing authority, insurance company, or maintenance vendor.

GL Posting Details

Every disbursement generates a double-entry journal entry. The credit always goes to the source cash account:

Cash AccountGL CodeTypical Disbursements
Operating Checking1010Loan fundings, operating expenses, escrow payments
Money Market1020Note redemptions, reserve transfers
Reserve Fund1030Restricted reserve withdrawals (rare, requires approval)

The GL journal entry ID is linked to the cash transaction via the gl_je_id column, enabling full traceability from the disbursement back to the general ledger.

Best Practices

  • Always include reference numbers: Check numbers, wire confirmations, and ACH trace numbers make bank reconciliation significantly easier.
  • Use descriptive text: Include the borrower or vendor name and purpose in the description field for audit trail clarity.
  • Verify available balance first: Check the cash position via GET /api/v1/cash/position before processing large disbursements to ensure sufficient funds.
  • Respect the approval workflow: Do not split a large disbursement into smaller amounts to circumvent maker-checker thresholds. This is flagged by the fraud detection module.
  • Reconcile promptly: Match disbursements to bank statement entries within 5 business days to maintain accurate outstanding item tracking.

Related Documentation

Disbursements interact with approval workflows, transaction limits, and escrow management.