Files
threadcount-community/app/(site)/guides/cost-centre-reporting/page.tsx
T
ThreadCount 1bc2de655a ThreadCount Community edition
Uniform stock management for healthcare linen rooms. Licensed under the GNU AGPL v3.
2026-09-13 08:45:19 +10:00

110 lines
6.4 KiB
TypeScript
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.
import Link from "next/link";
import { Band, body, small } from "@/components/site";
import { GuideFoot, GuideHead, GuideMeta, Pitfalls, Steps, type Step } from "@/components/guide";
export const metadata = {
title: "Charging uniforms to the right cost centre",
description:
"How to attribute uniform spend to the ward, wing or clinic that incurred it: what to capture at the counter, how to value an issue, and what finance needs in the journal before they will accept it.",
alternates: { canonical: "/guides/cost-centre-reporting" },
};
const STEPS: Step[] = [
{
n: "01",
h: "Attribute at the moment of issue, not at month end",
p: <>The only person who reliably knows which ward, wing or clinic a garment is for is the person handing it over. Reconstructing that from invoices four weeks later is guesswork, and it is the reason most linen rooms end up charging everything to one central code. Capture the cost centre when the garment leaves the counter and the month-end job becomes an export rather than an investigation.</>,
},
{
n: "02",
h: "Hang the cost centre off the person, not the transaction",
p: <>Asking &ldquo;which cost centre?&rdquo; at every issue is a question that will be answered wrong under pressure. Put the ward and cost centre on the staff record, so the issue inherits it. The counter stays fast, and corrections happen once on the register rather than repeatedly at the counter.</>,
},
{
n: "03",
h: "Decide what an issue is worth",
p: <>Unit cost is the defensible answer: what you paid the supplier for that garment, per unit. Avoid apportioning freight and avoid an average across sizes if your sizes genuinely differ in price. The figure needs to be one you can explain in a sentence, because at some point someone will ask you to.</>,
},
{
n: "04",
h: "Decide when the charge lands",
p: <>There are two honest answers and you must pick one: at purchase, or at issue. Charging at purchase makes the linen room&rsquo;s budget lumpy and makes wards indifferent to what they take. Charging at issue is what most facilities want the ward or clinic feels the cost of its own consumption but it means your stock on hand is an asset carried by the linen room until it moves. Pick one, write it down, and don&rsquo;t quietly change it mid-year.</>,
},
{
n: "05",
h: "Produce one line per cost centre",
p: <>Finance does not want your transaction list. They want a journal: one debit line per cost centre, one credit to the GL account the stock was bought against, for a stated period, totalling to a number that matches. Give them exactly that as CSV and the upload takes minutes. Give them a spreadsheet of every issue and it will sit in an inbox.</>,
},
{
n: "06",
h: "Keep the detail behind the summary",
p: <>The summary is what gets uploaded; the detail is what settles the argument when a ward manager queries their figure. You want to be able to go from &ldquo;Ward 3A, $1,840&rdquo; to the individual issues behind it without rebuilding anything. If your summary can&rsquo;t be drilled into, expect to spend the following week defending it.</>,
},
];
const PITFALLS: [string, string][] = [
["One catch-all cost centre", "Everything charged centrally means no ward, wing or clinic ever sees the cost of its own uniform consumption, so nothing ever changes."],
["Cost centres that only exist in someones head", "If the mapping from ward or team to code lives in memory, it leaves when that person does. Put it on the record."],
["Charging at purchase and at issue", "Double-counting is the fastest way to lose finances trust, and it is easy to do accidentally when the method changes mid-year."],
["Retail price instead of unit cost", "There is no margin here. Anything other than what you paid invites a question you cannot answer."],
["No period stamped on the export", "A journal without an unambiguous date range cannot be reconciled and will be sent back."],
["Rounding per line", "Round the total, not each line, or the journal wont balance against the invoice and someone will spend an afternoon on eleven cents."],
];
export default function Page() {
return (
<>
<GuideMeta
slug="cost-centre-reporting"
title="Charging uniforms to the right cost centre"
description={metadata.description}
updated="2026-09-07"
/>
<GuideHead
kicker="Guide"
title="Charging uniforms to the right cost centre"
lede="Uniform spend that lands in one central code tells nobody anything. Attributing it properly is mostly a matter of capturing one field at the right moment."
/>
<Band>
<Steps steps={STEPS} />
</Band>
<Band tone="surface">
<div style={{ fontSize: 11.5, letterSpacing: "0.12em", textTransform: "uppercase", fontWeight: 800, borderBottom: "2px solid var(--color-text)", paddingBottom: 9 }}>
What finance sends back
</div>
<Pitfalls items={PITFALLS} />
</Band>
<Band>
<h2 style={{ fontFamily: "var(--font-heading)", fontWeight: 800, fontSize: "clamp(24px,3vw,36px)", letterSpacing: "-0.02em", margin: 0 }}>
Doing this in ThreadCount
</h2>
<p style={{ ...body, margin: "16px 0 0", maxWidth: "62ch" }}>
Ward and cost centre sit on the staff record, so every issue values itself at unit cost
against the right code without anyone being asked at the counter. The journal exports as
one debit line per cost centre for the month you choose, and each line opens the issues
behind it who, what, which size, what it cost when someone queries their
number.
</p>
<p style={{ ...small, margin: "14px 0 0", maxWidth: "62ch" }}>
If your finance team needs a different layout, that is usually a small change say what
they need.
</p>
<div style={{ display: "flex", gap: 12, marginTop: 24, flexWrap: "wrap" }}>
<Link href="/reporting" className="btn btn-primary">See the reporting</Link>
<Link href="/contact" className="btn btn-secondary">Ask about a layout</Link>
</div>
</Band>
<GuideFoot
related={[
["Staff entitlements and manager approvals", "/guides/manager-approvals"],
["How to run a uniform stocktake", "/guides/uniform-stocktake"],
]}
/>
</>
);
}