New Quote
Drawing in, costed quote out
1 · Drawing or photo
Making one of your regular products?
Notes about this drawing (optional)
Quotes
Rate Card
Add prices as new materials and hardware come up
Description
Category
Subcategory
Unit
Price (excl. VAT)
R
SKU (optional)
Payroll
Salaries, PAYE/UIF/SDL and payslips for Natalie Branscombe (Pty) Ltd's staff
Payroll month
Production
Approved jobs currently in the workshop, 6–8 weeks to completion
Settings
Defaults applied to every new quote
Default markup %
Default labour rate (per hour, excl. VAT)
R
Default waste % (materials & finish)
Default waste % for round/turned parts
Finish coats
Cylinder legs and other turned parts are cut from staves and lathed round, which uses up a lot more stock than the finished piece itself — this default applies only to material lines the drawing-reader tags as a round/turned shape, not flat panels. Finish coats multiplies the auto-filled Finish line's m² by this number — oiling/varnishing a surface twice (the default) needs roughly twice the product of doing it once.
Drawer runner clearance per side (mm)
Drawer box height deduction (mm)
Drawer runner fitting margin (mm)
Most drawings don't show a drawer box's own size — it's worked out here from the drawer opening instead. Box width = opening width minus the per-side clearance (both sides); box height = opening height minus the height deduction; box depth snaps down to the largest standard Blum 560H runner length (250–600mm) that still fits the available carcass depth once the fitting margin is subtracted, then adds the matching runner pair from the rate card. Applies only to material lines the drawing-reader tags as a drawer box.
Labour minutes per component
Labour minutes per hardware item
Base labour hours per job
The Labour line on every new quote now pre-fills itself (still editable, same as a material line) from: every component counted on the bill of materials × the minutes above, plus every hardware item × its own minutes, plus the fixed base hours for design/setup/admin on every job. A round/turned component counts as 2 components and a drawer box as 4, since lathe work and a 4-panel box both take meaningfully longer to build than one flat panel. These three numbers are starting placeholders, not a researched standard — no two workshops build at the same speed, so check the first several quotes' "Actual hours worked" (entered on a saved quote once it's built) against what was estimated here, and adjust these numbers to match Natalie's shop specifically.
Default carcass species
Default carcass thickness (mm)
Most drawings only show the visible parts (tops, fronts, drawer internals, legs) and never call out the structural case itself — when that happens, a Carcass line is added automatically from the overall dimensions, priced on this species/thickness (must match a rate card name, e.g. "Solid Oak - 25mm" for the 25mm default). It includes the outer box (2 sides, a back, a bottom) plus internal dividers worked out from the drawer/door grid the drawing shows — full-height vertical dividers between columns, and a divider per row boundary in each column — a reasonable but approximate stand-in for Natalie's actual construction, flagged on the quote so it's never a silent guess. If the drawing DOES call out its own carcass material, this is skipped entirely.
Material subcategories
Groups the Materials rate card into sections (Wood, Steel, Veneer…). Renaming one updates every rate card item using it; deleting one leaves those items as Uncategorized rather than losing them.
New subcategory
Admin
Team logins and site-wide settings — kept apart from Costing settings since this isn't costing-specific
Team logins
Who can log in to Batten. Owner sees and can do everything, including Admin itself and approving a quote into a job — those two are never available to an Employee. An Employee only gets the functions ticked below; tick "Tick off production progress" only alongside "Production board", since it has nothing to act on otherwise.
Name
Username
Password
Role
Joiners / carpenters
Who's available to assign a job to, in the dropdown Natalie sees when approving a quote into a job. Renaming one updates every job already assigned to it; deleting one leaves those jobs Unassigned rather than losing them.
New joiner / carpenter
Site settings
Nothing else lives here yet — Costing's own defaults stay on the Costing > Settings screen, and Payroll's on Payroll > Settings, since both are specific to that job. Anything that applies across the whole app, rather than to one of those, belongs here going forward.
Payroll Settings
Departments, company letterhead details, and a one-off import of payroll from before this app was used
Departments
Groups the roster (Management, Production, Admin…). Renaming one updates every employee in it; deleting one leaves those employees Unassigned rather than losing them.
New department
Company details
Printed on every payslip's letterhead and used for EMP201/IRP5 reference — this is a single-company payroll, so there's just the one record.
Company name
PAYE number
UIF number
SDL number
Address
SARS requires a named contact person with a phone number on every e@syFile Employer Reconciliation (IRP5/IT3(a)) export — these aren't used anywhere else in Batten.
Contact person — first name
Contact person — surname
Contact — business phone
Contact — cell phone
Contact — email (optional)
Import previous payrolls
One-off backfill for months from before this app was used — e.g. this tax year's earlier months from an old spreadsheet. Drop a CSV file below, or paste the lines directly into the box — one line per employee per month, 27 comma-separated columns each (see SETUP.md for the exact column order and a worked example). An employee is matched by Employee # only, never by name — if no employee has that number yet, one is created for you to check over on the Roster afterwards. Importing the same employee/month twice overwrites rather than duplicating.
Drop a CSV file hereOr use Choose file — one row per employee per month, in the column order above