PostgreSQL Schema
The Float Service uses a single PostgreSQL table as its primary data store for float records. The primary instance and its read replica are located in us-east-2.
FloatMeAPI_userloansmodel
Float
One row per float advance. Every Lambda in the service reads from or writes to this table.
| Column | Type | Description |
|---|---|---|
|
|
Primary key. |
|
|
Reference to the owning user. |
|
|
|
|
|
Advance amount disbursed to the user. |
|
|
Fee charged for the advance. |
|
|
Current float status. See Float Statuses below. |
|
|
Float due date — the date collection is expected to begin. |
|
|
USIO debit reference ID for the most recent collection attempt. Empty until the first attempt. Overwritten on each new attempt. For a |
|
|
USIO credit reference ID for the disbursement. Should match a payment record in the Payments Service. |
|
|
Unused. |
|
|
Unused. |
|
|
Float creation timestamp. |
|
|
Underwriting evaluation reference ID. Links this float to the eligibility result from the Underwriting Service. |
|
|
Initial due date calculated at float creation. |
|
|
|
Float Statuses
The ach_debit_status column tracks where a float is in its collection lifecycle.
| Status | Description | Set by |
|---|---|---|
|
Initial status. Float has been created and disbursement is being processed. |
Float creation (API) |
|
ACH debit submitted to the payment processor. Awaiting a settlement result via the |
T-1 Day, Due Date, Daily Retry, Webhook workers |
|
Float fully collected. Terminal status for successful repayment. |
ACH Handler (success callback); pinless debit success |
|
Collection attempted but unsuccessful. Will be retried at the next Daily Retry run or on the next qualifying income or balance event. |
T-1 Day (ACH failed), Due Date (all attempts failed), Daily Retry (attempt failed), Webhook workers |
|
Float has exceeded the maximum automated collection attempts or is more than 90 days past due. |
Daily Retry, Webhook worker |
|
No valid payment method (Plaid account or primary debit card) exists. Re-evaluated on each subsequent Daily Retry run. |
Daily Retry |
UNCOLLECTABLE is not a permanent terminal status. The Daily Retry scheduler re-queues floats in this state. If a valid payment method is later associated with the user, collection will be reattempted automatically.
|
See Collections Engine for the full decision logic that drives each of these transitions.
Loan Types
| Value | Description |
|---|---|
|
Standard float. Disbursed via ACH credit. Collection uses pinless debit if a valid card is present, with ACH as the fallback. |
|
Float disbursed via pinless debit. Collection routing is the same as |
|
Float disbursed via Real-Time Payments. If the RTP submission fails with a P04 error and the fallback feature flag is enabled, the disbursement is retried as |
Related Pages
-
Collections Engine — Full collection flow diagrams and status transition logic
-
DynamoDB Tables — Collection history, locks, and bypass tables
-
Float Lifecycle — End-to-end float state machine