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

loan_id

uuid

Primary key.

user_id_id

varchar

Reference to the owning user.

loan_type

varchar

NORMAL, PINLESS, or RTP. See Loan Types below.

loan_amount

varchar

Advance amount disbursed to the user.

fee

varchar

Fee charged for the advance.

ach_debit_status

varchar

Current float status. See Float Statuses below.

ach_debit_date

timestamp with tz

Float due date — the date collection is expected to begin.

ach_debit_id

varchar

USIO debit reference ID for the most recent collection attempt. Empty until the first attempt. Overwritten on each new attempt. For a COMPLETED float this holds the reference ID of the successful payment.

ach_credit_id

varchar

USIO credit reference ID for the disbursement. Should match a payment record in the Payments Service.

ach_credit_status

varchar

Unused.

ach_credit_date

timestamp with tz

Unused.

created_date

timestamp with tz

Float creation timestamp.

evaluation_id

varchar

Underwriting evaluation reference ID. Links this float to the eligibility result from the Underwriting Service.

default_payback_date

varchar

Initial due date calculated at float creation.

is_custom_payback_date

boolean

true if the user selected a custom payback date other than the default.

Float Statuses

The ach_debit_status column tracks where a float is in its collection lifecycle.

Status Description Set by

SCHEDULING

Initial status. Float has been created and disbursement is being processed.

Float creation (API)

ACHSENT

ACH debit submitted to the payment processor. Awaiting a settlement result via the prod-payments Kinesis stream.

T-1 Day, Due Date, Daily Retry, Webhook workers

COMPLETED

Float fully collected. Terminal status for successful repayment.

ACH Handler (success callback); pinless debit success

RETRY

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

DEFAULTED

Float has exceeded the maximum automated collection attempts or is more than 90 days past due.

Daily Retry, Webhook worker

UNCOLLECTABLE

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

NORMAL

Standard float. Disbursed via ACH credit. Collection uses pinless debit if a valid card is present, with ACH as the fallback.

PINLESS

Float disbursed via pinless debit. Collection routing is the same as NORMAL — the type is recorded at creation and used by internal routing decisions in the collection engine.

RTP

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 PINLESS. The resolved loan type after fallback is stored, not the originally requested type.