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
+59
View File
@@ -0,0 +1,59 @@
---
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 departments 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
---
## Where the cost centre comes from
A cost centre belongs to a department, and a person belongs to a department. 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 staff record.
2. **Their department's cost centre**, from `Settings Places & cost centres`.
If neither gives a code, the issue falls under an em dash on Overview and under `UNALLOCATED` on the journal. Finance cannot post that line, so the Journal tab marks it; see [Journal export](/docs/reports/journal-export).
## Setting departments and codes
`Settings Places & cost centres` lists each department or ward with its cost centre and the number of staff on it. An Admin can edit both boxes in place, and each change saves as you type. To add one, enter a name such as `Ward 4A` and a code such as `RGH-4010`, then press `Add`; both are required.
- A name already on the list is refused, 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.
- Two departments may share a code. The journal then gives them one line.
On a staff record, `Cost centre override` offers the codes already on your departments, or `None — derived from department`. The profile shows the result followed by `— override` or `— from department`. See [Staff register](/docs/people/staff-register).
## The price on the day
When a garment is issued, the issue stores the catalogue cost of that garment at that moment as its unit cost. This is true at the counter, 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. 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 (a row from before costs were stored) falls back to today's catalogue cost.
## Why nothing is re-priced
Changing a garment's cost in the catalogue updates the catalogue and records the old and new cost with your name. It does not touch any issue. A journal for a month finance has already posted totals the same after a supplier raises its prices.
Three figures are not price-on-the-day. Valuation and Shrinkage use the current catalogue cost, and so does the value saved on Pre-loved. Those figures move when a catalogue cost changes.
## Moving a person between departments
The cost centre is not stored on the issue. The reports work it out from the staff record each time the screen opens. When you change a person's department or cost centre override, every issue they have ever had moves to the new cost centre, including issues in months already closed. Changing a department's code moves the issues of everyone on that department in the same way.
> **Careful** Changing a department, 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. The unit costs stay as they were.
## What is written
| Record | Change | Undo |
|---|---|---|
| Department | Name and cost centre; a rename also renames it on staff and orders | Edit the boxes back |
| Staff record | Department and cost centre override | Edit the record back |
| Catalogue cost | New catalogue 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 Journal
role: Admin or Issuer
keywords: journal, GL, general ledger, account code, finance, debit, CSV, export, posting, month end, reconcile, cost centre, unallocated
---
## What the journal is
`Reports Journal` turns the month's issues into one debit line per cost-centre code. It starts from the cost centre table on Overview, drops cost centres with no items this month, and adds together departments that share a code. Lines are sorted by debit, largest first, and a `TOTAL` row closes the table.
The journal counts exactly what Overview 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 Overview's issued value for the month. See [The nine 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 tab, or `Export CSV` in the header. The file is `threadcount-journal-YYYY-MM.csv`, for example `threadcount-journal-2026-08.csv`.
| Column | Holds |
|---|---|
| Cost Centre | The code, or `UNALLOCATED` |
| Department | The department 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 row is `TOTAL`, with the item count and 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 is added after the prefix as a full month name and year, so `Uniform issues` becomes `Uniform issues August 2026`. There is one GL account per facility.
## Choosing the period
The journal covers one calendar month, the one in the month picker at the top of `Reports`. There is no custom date range. An issue belongs to the month of its date, and that date is the day in the facility's `Time zone` under `Settings Facility` when it was recorded.
`Print` on the Journal tab 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 department has no code, lands on `UNALLOCATED`. The Journal panel is then marked, and its footer tells you to set the person's department or override on People before posting. Fix the 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 Journal.**
2. **Press the cost centre code.** A window opens listing the issues behind that line: date, staff, item, size, quantity, unit cost and value, with a total that equals the line's debit.
3. **Press `Export CSV` in that window** to give finance the detail. The file is `threadcount-cost-centre-rgh-4010-2026-08.csv`, with a first line naming the cost centre and the month, then the columns `Date, Staff, Item, Size, Qty, Unit cost, Value` and a `TOTAL` row.
The detail is counted from the same issues as the line each time it opens, 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 department re-files their past issues, so export the journal before you change anyone's department at month end.
+66
View File
@@ -0,0 +1,66 @@
---
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, summary, journal, shrinkage, exceptions, approvals, monthly routine, close
---
## What the pack is
`Month-end pack` is a button in the header of `Reports`. It prints one A4 document for the month in the month picker, titled `Month-end pack` and the month, for example `Month-end pack — August 2026`. The line under the title gives the facility name, the location, today's date and the coordinator.
The pack is print only. It has no CSV of its own; the journal CSV comes from the Journal tab, see [Journal export](/docs/reports/journal-export). Printing it 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 the Exceptions tab.
- **Uncollected manager's approvals.** Staff, approved by, and sets remaining.
The pack does not include the supplier table, the pre-loved tables, the totals by staff group or staff member, the financial year table, or the valuation line by line. Print those from their tabs; see [The nine 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 | Orders dated in the month that were placed, less back orders |
| 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 is always as at today, and so are the approvals, 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 staff record as it is today; see [Cost centres](/docs/reports/cost-centres).
## A monthly routine
In the first days of the new month:
1. **Pick last month and open Journal.** If a line reads `UNALLOCATED`, set the person's department or cost centre override on the [Staff register](/docs/people/staff-register), then check the line has gone.
2. **Open Exceptions.** Read each override and anyone at the monthly threshold before finance asks.
3. **Open Approvals.** Follow up sets approved but not collected; see [Manager approvals](/docs/counter/manager-approvals).
4. **Print the month-end pack.**
5. **Export the journal CSV** and send it to finance with the pack.
6. **Only then move anyone between departments.** A move re-files that person's past issues.
Stocktakes are counted in the pack by the date they were filed. File the month's count before the month ends if you want it in that month's shrinkage. Because the 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).
+63
View File
@@ -0,0 +1,63 @@
---
title: The nine reports
section: reports
order: 1
summary: The nine reports on the three Reports tabs, what each one counts and leaves out, the period it covers, and how to print or export it.
screen: Reports
role: Admin or Issuer
keywords: reports, finance, overview, journal, top stock, valuation, shrinkage, exceptions, suppliers, approvals, pre-loved, month, print, CSV, export
---
## How the screen works
`Reports` has three tabs, `Spend`, `Stock` and `People`, and one month picker. The nine reports sit on them as panels: Spend holds the Overview figures and tables, the Journal and the financial year; Stock holds Valuation, Shrinkage, Top stock and Supplier spend; People holds Exceptions, Approvals outstanding and Pre-loved. The picker lists the current month, every month with an issue or an order in it, and the 5 months before the month you have chosen. Every report reads the month you pick, except Valuation and Approvals, which describe today.
`Export CSV` in the header downloads the main report of the tab you are on: cost centres on Spend, Valuation on Stock and Exceptions on People. Most panels also 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. `Month-end pack` in the header prints a separate document; see [Month-end pack](/docs/reports/month-end-pack).
On Spend, each cost-centre code is a button that opens the issues behind its figure, with their own `Export CSV`.
## The reports at a glance
| Report (tab) | Answers | A row is | Period |
|---|---|---|---|
| Overview (Spend) | What did we issue, and to whom? | A cost centre and department | Month, previous month, financial year |
| Journal (Spend) | What does finance post? | One cost centre | Month |
| Top stock (Stock) | What goes out most? | A garment, top 15 | Month, financial year to date |
| Valuation (Stock) | What is on the shelf worth? | A garment with stock on hand | Today |
| Shrinkage (Stock) | Is stock going missing? | A filed stocktake | Financial year to the end of the month |
| Exceptions (People) | Whose issues need a look? | A staff member with a flag | Month |
| Suppliers (Stock) | What did we order, from whom? | A supplier | Month |
| Approvals (People) | Which approvals are uncollected? | An approval with sets remaining | Today |
| Pre-loved (People) | What did the pool save? | A pool issue, a hand-in, a garment in the pool | Month, and the pool 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.
The financial year starts on 1 July. Every year-to-date figure stops at the end of the chosen month, so a pack reprinted for a closed month does not pick up later months. Each issue is valued at the unit cost stored on it when it was issued; see [Cost centres](/docs/reports/cost-centres).
## Overview and Journal
The Spend tab opens with three figures: issued value against the month before, garments issued with how many of them were pre-loved, and the value ordered from suppliers with the number of orders. Below them are issued value by cost centre, totals by staff group and by staff member, a 6-month bar chart, the Journal and a financial year table by month. Each bar is a button that changes the month.
Journal folds the cost centre table into one debit per cost-centre code. It is covered in [Journal export](/docs/reports/journal-export).
## Top stock, Valuation and Shrinkage
Top stock ranks the 15 garments with the most items issued in the month, with their value, their share of the month's items, and their quantity for the financial year.
Valuation counts units on hand for every garment and size today, whatever month is picked, and prices them at the current catalogue cost. Garments with no units are left out. A size below zero counts as 0, and the panel says how many sizes are negative. The pre-loved pool is not in this figure.
Shrinkage lists every stocktake filed from 1 July to the end of the month: lines counted, variances, net units (counted less expected) and net value at the current catalogue cost. Counts of the pre-loved pool are left out. See [Stocktakes](/docs/stock/stocktakes).
## Exceptions and Approvals
Exceptions names a staff member when, in that month, they were issued garments on an override past the sets ceiling, outside their staff group, or not in their uniform style. It also names anyone whose items for the month reach `Exception threshold (items/month)` in `Settings Facility`. The ceiling is `Ceiling, every group (sets)`, and 6 when it is blank; the threshold is 10 when it is blank. Rows with an override come first. `Items (FY)` is a running tally, and nobody is flagged on it; see [The entitlement rule](/docs/people/entitlement-rule).
Approvals lists every manager's approval with sets not yet collected, whenever it was given. It does not follow the month picker.
## Suppliers and Pre-loved
Suppliers totals orders dated in the month that were placed with the supplier. Drafts, cancelled orders and back orders are left out, so a short line is not counted twice. A delivered line is valued at the cost recorded on its receipt, and an undelivered line at catalogue cost. The invoice column collects the invoice numbers on the order and on its receipts.
Pre-loved lists issues from the pool in the month with the value saved at catalogue cost, hand-ins in the month split into good and rag with whether they were credited, and what is in the pool today at $0 book value.