ThreadCount Community edition

Uniform stock management for healthcare linen rooms: the coordinator app, the phone counter and the staff app, for your own server. Built from a113353 on 2026-09-15. Licensed under the Functional Source License (FSL-1.1-ALv2).
This commit is contained in:
ThreadCount
2026-09-15 22:54:09 +10:00
commit a6f1059ddf
424 changed files with 53535 additions and 0 deletions
@@ -0,0 +1,82 @@
---
title: Exchanges and returns
section: counter
order: 2
summary: Returns with a condition, size exchanges, hand-ins and the pre-loved pool. What each writes and how it moves the sets a person holds.
screen: Counter
role: Admin or Issuer
keywords: return, returned, exchange, swap size, wrong size, hand-in, hand in, pre-loved, preloved, rag, lost, written off, damaged, credit
---
Garments come back three ways. A return closes one issue line with a condition. An exchange swaps a size of the same garment. A hand-in takes back whatever the person brings and sorts it into the pre-loved pool or rags.
## Returns
`Return` sits against each line in the issue history on `Counter` and on the person's staff record. The counter app has its own return screen.
1. **Press `Return`** on the line.
2. **Say how many are coming back** when the line is more than 1 garment. The rest stays out with the person.
3. **Take a photo if you want one.** `Photo the garment (damage evidence)` is optional.
4. **Press a condition:** `Returned Good`, `Returned Damaged`, `Lost` or `Written Off`.
Pressing the condition records the return. A garment issued from stock and returned `Returned Good` counts back into the shelf figure; the other three conditions do not. A pre-loved garment returned `Returned Good` goes back into the pre-loved pool instead.
Returns refuse `This issue has already been returned / written off` and `This garment was handed in on <date> — it's already back in the pool`.
## Exchanges
Size exchanges are made in the counter app, from the person's page: choose `Exchange`, pick or scan the garment that does not fit, then pick the size that does. It swaps 1 garment at a time. The `Counter` screen has no exchange. See [Counter app](/docs/apps/counter-app).
An exchange:
- marks the garment coming back `Returned - Good`, splitting the line if they hold more than 1
- issues the new size today, condition `New` at today's catalogue cost, or `Pre-loved` at cost 0 from the pool when the original was pre-loved
- carries across `offGroup` and `offStyle` from the original line
- changes the top or trousers size on the staff record when the garment is a top or trousers
It makes no ceiling check. It refuses `Pick a different size`, `Not enough size <size> on the shelf`, `Not enough pre-loved size <size> in the pool`, `That garment has already been returned` and `That garment was handed in on <date>`.
## Hand-ins
`Hand-in` appears on `Counter` once a person is chosen, and on their staff record.
1. **Add each garment and size.** Tap a size again to add one.
2. **Mark each line** `Good` or `Rag`, and `Laundered` or `Unlaundered`.
3. **Tick `Credit the good garments back`** if the allowance should be credited.
4. **Press `Record hand-in`**, or `Record & print receipt`.
ThreadCount matches each line to the person's issues of that garment and size that are not returned or handed in: new before pre-loved, newest first. Matched issues are stamped handed in today; part of a line is split off. Good lines join the pre-loved pool and rags are counted for disposal, whether or not they matched an issue.
Credit applies only to Good lines matched to new, not pre-loved, issues. The larger of the credited tops and credited trousers is given back as sets to the person's manager's approvals, newest first, and the year's report figure is credited.
A hand-in refuses only `Add at least one garment` and `Invalid hand-in line`.
A damage report from the staff app is cleared separately on `Requests`. Clearing it does not return the garment ([Requests from staff](/docs/counter/requests-from-staff)).
## The pre-loved pool
The pool is a count per garment and size. It grows from Good hand-in lines, from pre-loved garments returned `Returned Good`, and from pre-loved garments given back in an exchange. It shrinks when a pre-loved line is issued or exchanged out.
A pre-loved issue costs the ward nothing and never comes off a manager's approval. It does count towards the ceiling. `Today` shows the pool's total under `Pre-loved pool`. A stocktake can count the pool on its own ([Stocktakes](/docs/stock/stocktakes)).
## What is written
| Record | Change | Undo |
|---|---|---|
| Return | Return date today and the condition on the issue; photo linked | No screen reverses a return |
| Exchange | Old line returned `Returned - Good`; new issue row today; staff record size | No screen reverses an exchange |
| Hand-in | A hand-in with its lines; matched issues stamped handed in; pool up by the Good lines | No screen reverses a hand-in |
| Approval, on credit | Sets used go down | Issue the sets again |
## How each moves sets held
Sets held count every issue that is not returned and not handed in, plus garments still owed.
| Action | Sets held |
|---|---|
| Return, any condition | The returned garments stop counting |
| Exchange | 1 garment out, 1 in: the count does not change |
| Hand-in, credit ticked or not | Matched garments stop counting |
| Hand-in line matching no issue | No change |
> **In plain terms** The credit tick is about approvals and reports; the hand-in itself is what makes room under the ceiling.