Skip to content

How LOC draws work

A draw is a sub-account within a line of credit. Each draw has its own balance, interest rate, fee structure, and transaction history. Draws allow borrowers to segregate different types of borrowing (e.g., purchases at one rate, cash advances at a higher rate) within a single credit line.

This page explains how LOC draws work. To run a migration, see the LOC migration procedure.

What is a draw?

A draw is a virtual "bucket" within the LOC. When a purchase is posted or a cash advance is taken, it is assigned to a specific draw. The LOC's total credit limit is shared across all active draws, but each draw independently maintains its own balance, interest rate, promotional rate, draw fees, and minimum payment calculation.

Draw types

Peach supports four draw types:

Draw typePurposeTypical useInterest behavior
RegularPurchaseStandard retail purchasesPrimary draw type for card activityStandard APR
CashAdvanceCash withdrawal or equivalentATM withdrawals, cash-like transactionsOften higher APR; may have different fees
BalanceTransferTransferred balance from another cardPromotional offersOften 0% APR promotional rate
StaticMigration draw (historical data)Created automatically at migrationNo interest accrual; no new activity after migration

Most active LOCs have multiple draws. The Static draw is special and used only during migration.

How draws share the credit limit

The LOC has a single credit limit (e.g., $10,000) that applies across all draws:

available_credit = loc.creditLimit - sum(draw.balance for all active draws)

Each draw can also have a sub-limit that further restricts that specific draw type. Both the LOC-level limit and the draw-level limit must be satisfied for a new purchase to be approved.

Draw fees

Fees can be charged at draw creation or throughout the draw's lifecycle:

Fee typeWhen chargedExample
Draw feeAt draw creation$75 cash advance origination fee
Transaction feePer transaction3% foreign transaction fee
Periodic feeEach billing period$5/month servicing fee
Late feeWhen draw goes overdueAutomatic, handled by DLM

Draw fees are tracked separately from LOC-level fees (like annual fees). During migration, draw fee balances must be included in the migration period draw data under the appropriate nonDueDrawFeesAmount, dueDrawFeesAmount, or overdueDrawFeesAmount fields.

How purchases are associated with draws

When a purchase is posted, it must be assigned to a specific draw. The assignment determines which draw's balance increases, which interest rate applies, and which minimum payment calculation is used.

During migration, historical purchases are posted to the migration draw (static draw) with an originalDrawId field referencing the actual legacy draw they belonged to. Post-migration, new purchases are posted directly to the appropriate draw (RegularPurchase, CashAdvance, etc.).

Static draw (migration draw)

The static draw is an internal construct created at migration to hold all pre-migration transactions and balances. It exists solely to bootstrap the LOC with historical data.

Creation: Peach automatically creates one static draw per LOC when the loan is created with migrationStatus: "prepMigration". You don't create it manually.

Configuration:

PropertyValueWhy
drawTypeStaticIdentifies it as the migration draw
timestampsEqual to LOC activation dateAppears to have existed since LOC origination
min_payment_percentage_of_principal0Static draw doesn't contribute to minimum payment
migration_statusSynced with LOCFollows the LOC's migration lifecycle

What it holds: All pre-migration purchases, transactions (payments, service credits), fees, and obligations.

Behavior after migration: The static draw transitions to Active status (like all other draws) but is effectively disabled — the API rejects any attempt to post new activity to a static draw with "This endpoint is invalid for a static draw." Payment application can still target the static draw if the borrower carries an unpaid balance from pre-migration.

The originalDrawId field on historical purchases references the actual legacy draw, not the static draw. This lets you track which legacy draw each purchase belonged to, even though all historical purchases are stored under the static draw in Peach.

Minimum payment calculation

The LOC's minimum payment is the sum of each draw's minimum payment:

loc.minimumPayment = sum(draw.principal * draw.minPaymentPercentage for all active draws)

The percentage can vary by draw type (e.g., CashAdvance might require 5% while RegularPurchase requires 2%). The static draw's percentage is 0, so it contributes nothing to the minimum payment. This prevents borrowers from facing unexpectedly high minimums immediately after migration due to old balances.

Why this matters for migration

  1. The static draw is created automatically — don't create it manually.
  2. Post all historical purchases to the static draw using originalDrawId to reference the actual legacy draw.
  3. Create actual draws (RegularPurchase, CashAdvance, etc.) for any draw types that were active before migration and should continue to accept new activity.
  4. Populate migration period data for each draw — the system validates that every non-static draw has a ledger update event.
  5. After migration, all new activity goes to actual draws. The static draw is read-only.
  6. Draw fees must be configured correctly on each draw's atOrigination.fees object, and fee balances must be seeded in the migration period draw data.

See also