PREPROD
ReaderAuthor

Tally · Workflow

Buyer checkout: from won lots to a settled invoice

The buyer checkout flow — generate and issue the invoice, record payments by method, watch the balance fall to zero (PAID), then authorize the buyer for loadout.

2 min read · 3 depth levelsstratum-tally · vdevMatches production
Everyday

Checkout is how a buyer's won lots turn into a settled invoice and a cleared loadout. Once the ring is closed, the office works the Checkout screen (/sales/[id]/checkout) one buyer at a time: build the invoice, take the money, and only then release the animals. Each buyer's Invoice rolls their won lots into subtotal, adds buyerFeesAmount and taxAmount to give totalDue, and tracks amountPaid against balanceDue as money comes in.

Loadout authorization checks two things independently: the invoice must be PAID and the buyer must not be on holdLoadout. Clearing one does not clear the other.

How it works

  1. Generate the invoice

    From the sale's checkout screen, generate invoices from the recorded transactions. Tally reads each buyer's won lots and builds one Invoice per buyer, computing subtotal + buyerFeesAmount + taxAmount = totalDue. Fresh invoices start in DRAFT.

    invoice-total-due
  2. Issue the invoice

    When the numbers are right, issue it — the invoice moves DRAFT → ISSUED. An issued invoice is the one you hand the buyer to pay against; it's no longer a working draft.

    invoice-status
  3. Record payments

    As the buyer pays, record each InvoicePayment with its amount and method (CASH, CHECK, ACH, WIRE, CARD, APPLIED_CREDIT, or HOLD_AT_OFFICE) plus an optional referenceNumber. A partial payment moves the invoice to PARTIAL; amountPaid climbs and balanceDue falls.

    payment-method
  4. Reach PAID

    When balanceDue hits zero the invoice flips to PAID and stamps paidInFullAt. PAID is the gate everything downstream waits on — nothing leaves the yard until the invoice reads paid in full.

    invoice-status
  5. Clear the buyer for loadout

    Before releasing stock, confirm the buyer has no holdLoadout flag set. A hold is a hard stop the office must lift (with a reason) regardless of payment — an unpaid balance and an active hold are two separate blocks.

    buyer-hold-loadout
  6. Authorize the loadout

    Authorizing is a two-step move: first create a PENDING LoadoutTicket for the buyer, then authorize it. Authorization only succeeds when the invoice is PAID; the ticket moves PENDING → AUTHORIZED, and that authorization is what lets the animals physically leave against the gate crew's ticket.

    loadout-authorization
Admin section
Permissions, locking rules, and setup — visible to admins.
View as admin
Technical section
Data model, API, and internals — visible to developers.
View as developer
Was this helpful?