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 38e16eb on 2026-09-15. Licensed under the Functional Source License (FSL-1.1-ALv2).
This commit is contained in:
ThreadCount
2026-09-16 07:57:54 +10:00
commit 0910bc32c1
457 changed files with 55952 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
---
title: Cost centres
section: reports
order: 2
summary: How an issue reaches a cost centre, why each issue keeps the price of the day it went out, and what moving a person between wards does to the reports.
screen: Settings Places & cost centres
role: Admin
keywords: cost centre, cost center, department, ward, override, price, unit cost, re-price, valuation, move staff, transfer, unallocated, places
---
## Where the cost centre comes from
A cost centre belongs to a department or ward, and a person belongs to a ward. When the reports group an issue, they look up the person it was issued to and use, in this order:
1. **Their cost centre override**, if one is set on their record.
2. **Their ward's cost centre**, from `Settings Places & cost centres`.
If neither gives a code, the issue shows under an em dash in `Reports Spend By cost centre` and under `UNALLOCATED` on the journal. Finance cannot post that line, so the Journal panel is marked; see [Journal export](/docs/reports/journal-export).
## Setting departments and codes
`Settings Places & cost centres` has a `Departments & cost centres` table with the columns `Department / ward`, `Cost centre` and `Staff`. An Admin edits the name and the code in place, and each change saves as you type; for an Issuer the boxes are disabled. To add one, enter a name such as `Ward 4A` under `New department / ward` and a code such as `RGH-4010` under `Cost centre`, then press `Add`. The button stays disabled until both are filled.
- A name already on the list is refused, whatever its capitals, including when you rename a department to it.
- Renaming a department moves its staff and any orders filed under the old name to the new name.
- A department with staff on it cannot be removed; the `×` only appears when its `Staff` count is 0.
- Two departments may share a code. The journal then gives them one line.
- `Export CSV` downloads the table.
The same section links to `Stock Locations`, where rooms, shelves and bays are kept.
## The override on a record
Open the person under `People`, then `Details & access`. The `Cost centre` row shows the code in use followed by `override` or `from ward`. An Admin presses `Edit details` and picks from `Cost centre override`, which lists the codes already on your departments, or `None (from ward)`. See [Staff register](/docs/people/staff-register).
## The price on the day
When a garment is issued, the issue stores the garment's catalogue cost at that moment as its unit cost. This holds at the counter, when a picked request is handed over, on a pickup, and when a delivery goes straight to the person who ordered it. An issue from the pre-loved pool stores $0.
In an exchange, the garment that came back keeps its original unit cost, and the replacement stores the catalogue cost on the day of the exchange. If the original came from the pre-loved pool, the replacement is pre-loved too and stores $0. A partial return splits the row, and both halves keep the unit cost. See [Exchanges and returns](/docs/counter/exchanges-and-returns).
Every issued figure on `Reports` is quantity times that stored unit cost. An issue with no stored cost falls back to today's catalogue cost.
## Why nothing is re-priced
Changing a garment's cost in the catalogue records the old and new cost with your name. It does not touch any issue, so a journal finance has already posted totals the same after a supplier raises its prices.
Three figures are not price-on-the-day. Valuation and Shrinkage on `Reports Stock`, and value saved on `Reports People Pre-loved`, use the current catalogue cost, so they move when a cost changes.
## Moving a person between wards
The cost centre is not stored on the issue. The reports work it out from the person's record each time the screen draws. When you change a person's ward or override, every issue they have ever had moves to the new cost centre, including months already closed. Changing a department's code moves the issues of everyone on it who has no cost centre override.
> **Careful** Changing a ward, an override or a department's code re-files that history in every month, so a reprinted journal for a posted month will no longer match what finance posted.
If a person transfers at month end, print the month-end pack and export the journal first, then change the record. Unit costs stay as they were.
| Record | Change | Undo |
|---|---|---|
| Department | Name and cost centre; a rename also renames it on staff and orders | Edit the boxes back |
| Staff record | Ward and cost centre override | Edit the record back |
| Catalogue cost | New cost and a cost change entry; issues untouched | Enter the old cost |
+70
View File
@@ -0,0 +1,70 @@
---
title: Journal export
section: reports
order: 3
summary: One debit line per cost centre for the month, its exact CSV layout, where the GL account is set, and how to trace a line back to the issues.
screen: Reports Spend Journal
role: Admin or Issuer
keywords: journal, GL, general ledger, account code, finance, debit, CSV, export, posting, month end, reconcile, cost centre, unallocated, spend
---
## What the journal is
The `Journal` panel on `Reports Spend` turns the month's issues into one debit line per cost-centre code. It starts from the `By cost centre` table, drops cost centres with no items this month, and adds together wards that share a code. Lines are sorted by debit, largest first, and a `TOTAL` row closes the table.
The journal counts what `Issued value` counts: issues dated in the month, less garments returned as `Returned - Good`, less issues from the pre-loved pool, each at the unit cost stored when it was issued. Its total equals `Issued value` for the month. See [Spend, Stock and People reports](/docs/reports/the-nine-reports).
The export has debit lines only. There is no credit line and no date column.
## The columns
Press `Export journal CSV` on the Journal panel. The `Export CSV` button in the page header downloads the whole monthly report instead. The journal file is `threadcount-journal-YYYY-MM.csv`, for example `threadcount-journal-2026-08.csv`.
| Column | Holds |
|---|---|
| Cost Centre | The code, or `UNALLOCATED` |
| Department | The ward name; several are joined with ` / ` |
| GL Account | The GL account from Settings, the same on every line |
| Description | The description prefix, a space, then the month |
| Items | Items issued, a whole number |
| Debit | The value to 2 decimal places, with no dollar sign or commas |
The first row is the header and the last is `TOTAL`, with the item count, the debit total and the middle columns blank:
```
"Cost Centre","Department","GL Account","Description","Items","Debit"
"RGH-4010","Ward 4A","631020","Uniform issues August 2026",42,"1386.00"
"RGH-5090","Ward 5C / Theatres","631020","Uniform issues August 2026",17,"602.50"
"TOTAL","","","",59,"1988.50"
```
Text is wrapped in double quotes, and so is the debit. Text that begins with a space, `=`, `+`, `-` or `@` gets a leading apostrophe, so a spreadsheet does not read it as a formula. The file is UTF-8 with a byte-order mark.
## The GL account and description
An Admin sets both under `Settings Facility`, in `Finance & reports`:
- `GL account`, up to 40 characters. While it is blank, the journal shows `—` in its place.
- `Journal description prefix`, up to 120 characters. While it is blank, the journal uses `Uniform issues`.
The month follows the prefix as a full month name and year, so `Uniform issues` becomes `Uniform issues August 2026`. There is one GL account per facility, and the Journal panel's head shows it after `GL`.
## Choosing the period
The journal covers one calendar month, the one in `Reporting month` at the top of `Reports`. There is no custom date range. An issue belongs to the month of its date, which is the day in the facility's `Time zone`, under `Settings Facility`, when it was recorded.
`Print` on the Journal panel prints the same table on A4, headed `End-of-month journal` and the month.
## UNALLOCATED lines
An issue to someone with no cost centre override, whose ward has no code, lands on `UNALLOCATED`. The Journal panel is then marked with the footer `UNALLOCATED = no cost centre`. Once a stocktake has been filed that month, step 3 of the month-end strip shows how many issues are affected, and pressing that number scrolls to the Journal. Until then the step reads `Ready after the count`. Set the person's ward or override on their record, and the line moves to the right code the next time the screen draws. See [Cost centres](/docs/reports/cost-centres).
## Reconciling a line
1. **Pick the month and open `Spend`.**
2. **Press the cost-centre code on the Journal line.** A dialog titled `Issues behind` the code and the month lists the issues: date, staff, item, size, quantity, unit cost and value, with a total that equals the line's debit.
3. **Press `Export CSV` in the dialog** to give finance the detail. The file is named like `threadcount-cost-centre-rgh-4010-2026-08.csv`. Its first line names the cost centre and the month, then come the columns `Date, Staff, Item, Size, Qty, Unit cost, Value` and a `TOTAL` row.
The detail is recounted from the same issues as the line, so the two agree. Both follow each person's cost centre as it is now, not as it was in that month.
> **Careful** Moving a person to another ward re-files their past issues, so export the journal before you change anyone's ward at month end.
+68
View File
@@ -0,0 +1,68 @@
---
title: Month-end pack
section: reports
order: 4
summary: One printed document for finance with the month's summary figures, cost centres, journal and top stock, plus shrinkage, exceptions and approvals when there are any.
screen: Reports
role: Admin or Issuer
keywords: month-end pack, month end, EOM, finance pack, print, PDF, summary, journal, shrinkage, exceptions, approvals, monthly routine, close, month-end steps
---
## What the pack is
`Month-end pack` is a button in the header of `Reports`, and the fourth step of the month-end strip below it. Both print the same A4 document for the month in `Reporting month`, titled `Month-end pack` and the month, for example `Month-end pack — August 2026`. The line under the title gives the facility, the location, today's date and the coordinator.
The pack is print only. The strip's step reads `PDF + journal CSV + valuation`, but pressing it prints the one document and downloads no file. The journal CSV comes from the Journal panel on `Spend`; see [Journal export](/docs/reports/journal-export). Printing writes nothing.
## What it contains
Four sections are always there:
1. **Summary.** The six figures below.
2. **Cost centre summary.** One row per journal line: code, department, items and value, with a `TOTAL` row.
3. **Journal.** One debit per cost centre, headed with the GL account: code, description and debit.
4. **Top stock.** The 10 garments with the most items issued in the month, with quantity and value.
Three sections appear only when they have rows:
- **Shrinkage.** Each stocktake filed from 1 July to the end of the month: date, counted by, variances, net units and net value.
- **Staff exceptions.** Staff, cost centre and the flag, as on `Reports People Exceptions`.
- **Uncollected manager's approvals.** Staff, approved by, and remaining sets.
The pack leaves out supplier spend, pre-loved, the totals by staff group and staff member, the financial year table and the valuation line by line. Print those from their panels; see [Spend, Stock and People reports](/docs/reports/the-nine-reports).
## The summary figures
| Figure | Counted as |
|---|---|
| Issued value | Month's issues at the unit cost stored on each |
| Items issued | Items in those issues |
| Supplier orders placed | Value of orders dated in the month, less drafts, cancelled orders and back orders; delivered lines at receipt cost, the rest at catalogue cost |
| Stock on hand value | Units on hand today at current catalogue cost |
| Shrinkage (FY to end of month) | Net stocktake variance at current catalogue cost |
| Stocktakes counted (FY) | Stocktakes filed from 1 July to the end of the month |
Issues exclude garments returned as `Returned - Good` and issues from the pre-loved pool. Stock on hand value and the approvals are always as at today, even when you print a past month.
## Running and printing it
1. **Open `Reports` and pick the month.**
2. **Press `Month-end pack`.** A new window opens with the document and the print dialog.
3. **Print from the dialog.** If nothing opens, allow pop-ups for ThreadCount and press the button again.
A pack for a closed month can be printed again at any time. Issued figures use the unit cost each issue was stored with, and year-to-date figures stop at the end of that month. The cost centre on each line follows each person's record as it is today; see [Cost centres](/docs/reports/cost-centres).
Today always shows a `Month-end` panel for the current month, with `Deliveries booked in`, `Stock take filed` and `Journal ready`. A row of receipts to sign, with a `Chase` link, appears only when receipts are unsigned. Its unallocated link and its `Month-end pack` button both open `Reports`; neither prints.
## A monthly routine
In the first days of the new month, pick last month on `Reports` and work along the strip:
1. **Check `Deliveries booked in`.** Book in anything overdue from `Orders All orders`.
2. **Check `Stock take filed`.** A stocktake counts in the month it was filed, so file the month's count before the month ends.
3. **Clear `Journal`.** If it shows a number unallocated, press it to jump to the Journal, then set the person's ward or cost centre override on their record; see [Staff register](/docs/people/staff-register).
4. **Open the `People` tab of `Reports`.** Read Exceptions, and follow up Approvals outstanding; see [Manager approvals](/docs/counter/manager-approvals).
5. **Print the month-end pack**, then press `Export journal CSV` and send both to finance.
6. **Only then move anyone between wards.** A move re-files that person's past issues.
Because stock on hand value is as at today, print the pack early in the month for a figure close to month end. See [Stocktakes](/docs/stock/stocktakes).
+66
View File
@@ -0,0 +1,66 @@
---
title: Spend, Stock and People reports
section: reports
order: 1
summary: The three Reports tabs, the month-end strip, what each panel counts and leaves out, the period it covers, and how to print or export it.
screen: Reports
role: Admin or Issuer
keywords: reports, spend, stock, people, finance, cost centre, journal, top stock, valuation, shrinkage, exceptions, supplier spend, approvals outstanding, pre-loved, month, month-end, print, CSV, export
---
## How the screen works
`Reports` has a month select (`Reporting month`), `Export CSV` and `Month-end pack` in its header. Below them sit the month-end strip and three tabs: `Spend`, `Stock` and `People`. The select lists the current month, every month with an issue or an order in it, and the 5 months before the one chosen. Every panel reads the chosen month, except Valuation, Approvals outstanding and the `Pool today` part of Pre-loved, which describe today.
`Export CSV` in the header downloads the main export of the tab you are on: the monthly report on Spend (cost centres, staff groups, staff, suppliers and the financial year in one file), Valuation on Stock, and Exceptions on People. Most panels carry their own `CSV` and `Print`. `Print` opens an A4 page in a new window, headed with the facility, location, today's date and the coordinator.
Old report links such as `?tab=journal` still open the tab that now holds that report.
## The month-end strip
The strip has four steps for the chosen month:
1. **Deliveries booked in.** `All in`, or the number overdue, linked to `Orders All orders`.
2. **Stock take filed.** The date of the latest stocktake filed in the month, or `Not yet` with `Start`, which opens `Stock Count`. Counts of the pre-loved pool do not count.
3. **Journal.** `Ready after the count` until a stocktake is filed, then the number of issues with no cost centre, or `Ready`.
4. **Month-end pack.** Prints the pack; see [Month-end pack](/docs/reports/month-end-pack).
## The panels at a glance
| Panel (tab) | A row is | Period |
|---|---|---|
| By cost centre, By staff group, By staff member (Spend) | A cost centre and ward, a group, a person | Month |
| Journal (Spend) | One cost-centre code | Month |
| Financial year (Spend) | A month | 1 July to the end of the month |
| Valuation (Stock) | A garment with stock on hand | Today |
| Shrinkage (Stock) | A filed stocktake | Financial year to the end of the month |
| Top stock (Stock) | A garment, top 15 | Month, and the financial year |
| Supplier spend (Stock) | A supplier | Month |
| Exceptions, Pre-loved (People) | A flagged person; a pool issue or hand-in | Month |
| Approvals outstanding (People) | An approval with sets remaining | Today |
## What counts as issued
An issue counts when its date falls in the month and the garment has not come back as `Returned - Good`. A garment returned in any other condition still counts. Issues from the pre-loved pool are left out of every issued figure and reported only on Pre-loved.
Every year-to-date figure stops at the end of the chosen month, so a closed month reprints with the figures it first had. Each issue is valued at the unit cost stored on it when it went out; see [Cost centres](/docs/reports/cost-centres).
## Spend
Three figures head the tab: `Issued value` against the month before, `Garments issued` with how many were pre-loved, and `Ordered from suppliers` with the number of orders. Below them sit `By cost centre`, `By staff group`, `By staff member` and `Issued value · last 6 months`, whose bars change the month. A row in `By cost centre` opens the issues behind it. `Journal` and `Financial year` close the tab; see [Journal export](/docs/reports/journal-export).
## Stock
Valuation counts units on hand for every garment and size today, at the current catalogue cost. Garments with no units are left out, and a negative size counts as 0; the panel says how many sizes are negative. The pre-loved pool is not in it.
Shrinkage lists every stocktake filed from 1 July to the end of the month, with lines counted, variances, net units and net value at current catalogue cost. See [Stocktakes](/docs/stock/stocktakes).
Top stock ranks the 15 garments with the most items issued in the month. Supplier spend totals orders dated in the month that were placed; drafts, cancelled orders and back orders are left out. A delivered line is valued at its receipt cost, an undelivered line at catalogue cost.
## People
Exceptions names a person who, in the month, was issued garments on an override past the sets ceiling, outside their staff group or not in their uniform style, or whose items reach `Exception threshold (items/month)` in `Settings Facility`. The threshold is 10 when blank or 0; the ceiling is `Most anyone holds` in `Settings Issuing rules`. Override rows come first. `Items (FY)` is a tally, and nobody is flagged on it; see [The entitlement rule](/docs/people/entitlement-rule).
Approvals outstanding lists every manager's approval with sets not yet collected. Pre-loved lists pool issues with value saved at catalogue cost, hand-ins split into good and rag, and the pool today at $0.
The line `Yearly figure for reports` shows garments per person, and an Admin changes it with `Change`. The counter does not refuse on it.