Files
threadcount-community/docs/manual/reference/csv-templates.md
T
ThreadCount 0910bc32c1 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).
2026-09-16 07:57:54 +10:00

120 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: CSV templates
section: reference
order: 1
summary: The six import files, the columns each one reads, how a row is matched to a record, and what every importer message means.
screen: Settings Data & audit log
role: Admin
keywords: csv, import, template, import the register, data and audit log, spreadsheet, columns, headers, upload, catalogue, staff register, departments, barcodes, reorder levels, opening balances, bulk load
---
## Load order and the basics
Under `Settings Data & audit log`, in `Import from CSV`, an Admin picks a file kind, presses `Download template` for `threadcount-<kind>-template.csv` (header row plus one example row), fills it in, saves it as CSV and presses `Import CSV`. `Import the register` on `People` opens the same place with the staff register already chosen.
Load in this order, because later files look up what earlier ones created:
1. **Departments & cost centres** (`depts`)
2. **Catalogue** (`catalog`)
3. **Staff register** (`staff`)
4. **Supplier barcodes** (`barcodes`)
5. **Opening balances** (`opening`)
6. **Reorder levels** (`reorder`)
For every file:
- Headers are matched ignoring case, spaces and punctuation, so `Staff no.` reads as `staffno`. Unknown columns are ignored.
- Cells are trimmed and cut at 400 characters. Blank lines are skipped.
- The apostrophe ThreadCount's exports put before `=`, `+`, `-`, `@` or a space is removed, so an exported file imports back unchanged.
- On a re-import a blank cell keeps what the record holds. An import cannot clear a field.
## Departments and catalogue
**Departments & cost centres.** Matched by exact name. The row order becomes the list's order.
| Column | Required | Rule | Example |
|---|---|---|---|
| `dept` | Yes | Also `department`, `name`, `ward`. | `Harbour Ward` |
| `cc` | No | Also `costcentre`, `costcenter`, `code`. Blank keeps the existing one. | `RGH-4010` |
**Catalogue.** Updates the garment with the same `item` and gender, and the same `sku` when given; otherwise creates one.
| Column | Required | Rule | Example |
|---|---|---|---|
| `item` | Yes | Also `name`, `itemname`, `garment`. | `Scrub Top` |
| `gender` | No | Starts `m`: men's. Starts `f` or `w`: women's. Anything else or blank: Unisex. | `Women's` |
| `sku` | No | Also `code`, `productcode`. | `NW-ST-220` |
| `supplier` | No | Also `vendor`. A new name is added to the supplier directory; a known one, in any case, takes the directory's spelling. | `Northline Workwear` |
| `cost` | No | Also `unitcost`, `price`. Non-digits dropped. Blank or 0 keeps the existing cost. | `31.50` |
| `group` | No | Also `staffgroup`. Several separated by a pipe; `All` is every group. Blank: All when new, unchanged on update. | `Midwife` |
| `sizes` | New garments | Also `size`. Separated by a pipe, `,`, `;` or `/`. An update adds new sizes and removes none. | `S/M/L/XL` |
| `notes` | No | Also `note`. | `Navy` |
| `type` | No | Not in the template. Also `producttype`, `garmenttype`. Decides top, trousers or neither. | `Scrub top` |
## Staff register
Updates the person with the same staff number, or creates one. Managers are linked after every row is written, so a manager can sit anywhere in the file. A row without a staff number or first name is skipped.
| Column | Required | Rule | Example |
|---|---|---|---|
| `num` | Yes | Also `staffnumber`, `staffno`, `number`, `payroll`, `payrollnumber`, `id`. | `00400127` |
| `first` | Yes | Also `firstname`, `given`. A `name` or `fullname` column is split at the first space if first and last are blank. | `Amira` |
| `last` | No | Also `lastname`, `surname`, `family`. | `Hassan` |
| `phone` | No | Also `mobile`, `contact`. | `0400 000 000` |
| `group` | No | Also `staffgroup`, `classification`. Not checked against `Settings Issuing rules`. | `Registered Nurse` |
| `dept` | No | Also `department`, `ward`, `wardunit`. | `Harbour Ward` |
| `cc` | No | Also `costcentre`, `costcenter`, `departmentcostcentre`. With `dept`, creates a missing department. Never changes an existing one. | `RGH-4010` |
| `manager` | No | Also `managernum`, `managernumber`, `approver`, `reportsto`. A staff number, not a name. | `00400019` |
| `fte` | No | Also `combinedfte`, `totalcombinedfte`, `totalfte`, `employmentfraction`, `fraction`. Above 0, or `Casual`. | `0.8` |
| `style` | No | Also `uniformstyle`, `uniform`, `cut`, `gender`. `m`, `male`, `men's`: Men's. `f`, `w`, `female`, `women's`, `ladies`: Women's. `either`, `both`, `any`, `all`, `unisex`: Either. | `Women's` |
| `top` | No | Also `topsize`, `shirt`, `shirtsize`. | `M` |
| `pants` | No | Also `pantsize`, `pant`, `trouser`. | `12` |
| `ccoverride` | No | Also `costcentreoverride`. | `RGH-4090` |
| `ent` | No | Also `entitlement`, `annualentitlement`. Whole number for the yearly report; limits nothing. | `10` |
| `start` | No | Also `startdate`, `commenced`. `YYYY-MM-DD`, or day first as `11/03/2024`. | `2026-02-02` |
| `notes` | No | Also `note`. | `Night shift` |
`Export CSV` on `People` writes headers that read back onto these columns. See [the staff register](/docs/people/staff-register) and [managers](/docs/people/managers).
## Barcodes, opening balances, reorder levels
Each row must match exactly one garment on whichever of `sku` (also `code`, `productcode`), `item` (also `name`, `itemname`, `garment`) and `gender` it fills in, then a `size` spelt as on the garment. Blank `gender` matches any. A header named `code` is read as the SKU.
| File | Column | Rule | Example |
|---|---|---|---|
| Supplier barcodes | `barcode` | Also `ean`, `code128`, `scan`. Blank skips the row. | `9300000000017` |
| Opening balances | `opening` | Also `qty`, `quantity`, `onhand`, `count`. Overwrites; blank leaves the size alone. | `14` |
| Opening balances | `reorder` | Optional. Also `reorderat`, `reorderlevel`. Not a number: sets 0. | `4` |
| Reorder levels | `reorder` | Also `reorderat`, `reorderlevel`, `level`. Overwrites; not a whole number skips the row. | `4` |
Negative figures are stored as 0. Every row these files write counts as created. See [barcodes](/docs/stock/barcodes) and [reorder levels](/docs/stock/reorder-levels).
## Messages and what to do
The result reads like `Catalogue: 12 created, 3 updated, 1 skipped.`, then up to 40 row messages. `Row 1` is the first row under the header, blank lines not counted; the two whole-file refusals give the file's line number.
| Message | Meaning | Fix |
|---|---|---|
| `Line N: a quote is opened and never closed…` | Nothing imported. | Fix the quote. |
| `Lines N: the wrong number of columns…` | Nothing imported; usually a stray `"`. | Fix those lines. |
| `No rows found — check the header row.` | Nothing under the header. | Save the right sheet. |
| `Row N: X has no sizes` | New garment skipped. | Add `sizes`. |
| `Row N: start date “X” isn't a date…` | Stored blank. | Write `YYYY-MM-DD`. |
| `Row N: FTE “X” isn't a fraction…` | Stored blank. | Write `0.75` or `Casual`. |
| `Row N: uniform style “X” isn't…` | Stored blank. | Use Men's, Women's or Either. |
| `Row N: no staff member with number X to be the manager` | Not linked. | Add or fix the manager's row. |
| `The register is full for this plan — 60 staff records…` | Said once; further new people skipped, updates applied. | See [plan and billing](/docs/account/plan-and-billing). |
| `Row N: no catalogue items match…` or `several…` | Skipped. | Fill in `item` or `gender`. |
| `Row N: size X not on Y` | Skipped. | Match the size's spelling. |
| `Row N: opening “X” isn't a number…` | Size left alone. | Write a whole number. |
| `X is already on Y · size Z…` | Code bound to another size, as a one-code-per-style list does. | One code per size. |
| `X is the generated code for Y…` | Refused. | Use the printed label's code. |
## Limits
- 20,000 rows a file: `Import at most 20,000 rows at a time`.
- 20 imports and backup restores together per person in 10 minutes: `Too many imports — wait a few minutes.`
- Over 60 MB: `Request too large`.
- An Issuer gets `Admin only`. A read-only facility gets the read-only message pointing to `Settings Plan`.
- Hosted Small holds 60 staff records (`PRICES.freeStaff`). Other plans and the Community edition have no ceiling.