---
title: "Transaction types"
description: "The Transactions tab is the organization's stock ledger: one row per movement, carrying its type, item, location, signed change, note, author and time. This page lists all eleven transaction types with the short badge the ledger prints, the backend's full name, the direction the badge is colored for and what creates each one. It also covers the eight type filters and what each keeps, why the ledger has no work-order column, and why old rows still read Production."
category: "Reference"
source_url: "https://www.iotflows.com/docs/inventory/transaction-types/"
---
# Transaction types

Every transaction type the ledger can print, and what creates each one.

A *transaction* is one row recording one change to stock: a quantity, an item, a location, a time, and the person who caused it. The *ledger* is every such row for the organization, in one list. On-hand figures are the sum of those rows, so the ledger is the only place a count can be explained.

## The ledger
Open **Inventory** and choose the **Transactions** tab, at `/inventory?select=transactions`. The heading reads **Stock Transactions**, followed by the number of rows currently shown.

Each row carries seven columns: **Type**, **Item**, **Location**, **Change**, **Note**, **By** and **Date**. **Change** is signed and colored, so `+12` is green and `-4` is red. A zero stays gray, because a transfer or an adjustment that nets out is neither a gain nor a loss.

The ledger pages 12 rows at a time.

Where a movement came from a work order, the **Note** is where it says so: an automatic note reads `Auto-generated upon completion of Work Order: #237`. Notes are clamped to two lines, with the full text on hover.

> **Warning:**
> **Tracing one work order.** The ledger has no work-order column, no work-order filter and no link back to the job. Filter by type, then match on the item, the timestamp and the name in **By**.

An organization with no movements shows **No stock transactions yet.** For one item's history instead of the whole organization, open the item and read **Transaction history** at the bottom of the drawer; on an item stocked as [pieces](/docs/inventory/serialized-pieces/#when), individually numbered units of the same part, that list merges every piece and keeps the **Item** column to say which one moved.

**On mobile.** The ledger is the **Transactions** segment of the Inventory screen on iOS and Android, with the same type filters. Rows stack rather than forming columns, which is what the web does too in the item drawer and in a narrow window.

![The Transactions segment of the Inventory screen in the mobile app, showing stacked ledger entries grouped by day, each with a type badge, location, timestamp and a signed change](/images/inventory/inv-txn-02.webp)

*The transactions ledger in the mobile app, carrying the same typed filters as the web.*

## Transaction types
Every row wears a badge in the **Type** column. The label is short so it fits a fixed-width column; hover it to read the backend's full name, so **WO Checkout** is **Work Order Checkout**. A badge beginning **WO** was written by a work order rather than by a person.

The badge's color is its *direction*, not its type: four tones carry all eleven badges, so you can scan the column for what came in, what left, and what only moved.

Diagram: A legend of eleven transaction badges in four columns, one column per direction. In, described as stock the organization did not have before: Receipt, WO Receipt, WO Return, WO Check-In, and a dashed Production. Out, described as stock that left the shelf: Issue, WO Issue, WO Checkout. Loss, described as gone, and the row a supervisor hunts for: Scrap. Neutral, described as the same total, moved or corrected: Transfer, Adjustment. A line across the bottom reads: four tones carry eleven badges, the color follows the direction rather than the type, and Production, dashed, is legacy.

*The 11 transaction types grouped by direction: in, out, loss and neutral.*

| Badge | Full name | Direction | Created by | Notes |
|---|---|---|---|---|
| **Receipt** | Receipt | In | **Add** on an item's stock adjustment, and the starting count on a new piece | The stock-in you write by hand. See [Add stock with a receipt](/docs/inventory/adjust-stock/#receipt) |
| **WO Receipt** | Work Order Receipt | In | The server, on a work-order close | Stock a job made, arriving at that line's location |
| **WO Return** | Work Order Return | In | The server, on a work-order close | Stock that went out against a job and came back |
| **WO Check-In** | Work Order Check-In | In | The server, on a work-order close | A tool returning from a job's custody. Nothing was bought |
| **Issue** | Issue | Out | **Remove** on an item's stock adjustment | The stock-out you write by hand |
| **WO Issue** | Workorder Issue | Out | The server, on a work-order close | A job consuming a required line. The full name is the backend's own wording, without the space |
| **WO Checkout** | Work Order Checkout | Out | The server, on a work-order close | A tool leaving the shelf into a job's custody. The count drops with nothing used up |
| **Scrap** | Scrap | Loss | The server. No web control writes one | Stock leaves like an issue, but it gets the ledger's one flag color because it is the row a supervisor hunts for |
| **Transfer** | Transfer | Neutral | The server. No web control writes one | Stock changing location. The organization's total does not move |
| **Adjustment** | Adjustment | Neutral | **Set count** on an item's stock adjustment | A counted correction, up or down. See [Correct a count with Set count](/docs/inventory/adjust-stock/#set) |
| **Production** | Production | In | Nothing new. See [Legacy types](#legacy) | Old rows only |

Three types are the only ones a person writes directly, and all three come from the same control: **Add**, **Remove** and **Set count** on [Adjust stock and track locations](/docs/inventory/adjust-stock/#directions). Everything else is written by the server when a work order closes, which is covered on [How work orders move stock](/docs/inventory/how-work-orders-move-stock/#completion).

> **Info:**
> **Which badge does a close write?** IoTFlows sets that server-side, and no client screen names the pairing, so read the badge on the row rather than predicting it from the parts list. What each close moves, and in which direction, is on [What happens on completion](/docs/inventory/how-work-orders-move-stock/#completion).

Logging scrap against a production job is a different record. It reaches the job, the schedule and historical production, and writes no ledger row. See [Where scrap appears](/docs/production/log-scrap/#where).

You do not need the ledger to answer "how many are on the shelf". That figure is **On hand** on the item itself, and the ledger only tells you how it got there. Open the ledger when a count is wrong, when you want to know who moved something, or when you are reconciling a month.

## Filter by type
Eight chips sit beside the heading, one at a time. Eleven types would be eleven buttons, so the chips group them by the question people actually ask.

| Chip | Keeps |
|---|---|
| **All** | Every row, including a type this version does not recognize |
| **Receipts** | Receipt, WO Receipt, and legacy Production |
| **Issues** | Issue, WO Issue |
| **Returns** | WO Return |
| **Tooling** | WO Checkout, WO Check-In |
| **Transfers** | Transfer |
| **Adjustments** | Adjustment |
| **Scrap** | Scrap |

**Tooling** holds both halves of custody, out and back, rather than filing the check-in under receipts. That is the filter to use for the question "where is the torque wrench", since the two rows for one tool sit together.

Choosing a chip filters the rows already loaded, updates the count next to the heading and returns you to page 1. Below a tablet width the chips collapse into a dropdown showing the selected filter, which is also what the mobile apps show.

## Legacy types
**Production** is a legacy type. The backend used to write it for anything a job produced, then split that into the work-order types above. New rows use those; old rows keep **Production** so a historical ledger still reads correctly.

It is toned as stock in, and the **Receipts** chip keeps it, so a receipts filter over a long window returns both the old rows and the new ones.

A type the client has never seen prints as a gray badge carrying whatever the server called it, so a new backend type is readable the day it ships. It matches no chip, though: until the client learns it, it appears under **All** only.

## See also
- [How work orders move stock](/docs/inventory/how-work-orders-move-stock/)
- [Adjust stock and track locations](/docs/inventory/adjust-stock/#directions)
- [Track serialized pieces and tools](/docs/inventory/serialized-pieces/#stock)
- [Create and edit items](/docs/inventory/manage-items/)
- [Bind materials to an operation](/docs/production/bind-materials/)
