CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

uk-sole-trader-tax

UK self-employed (sole trader) tax rules for this invoicing app - income tax bands, personal allowance taper, Class 2/4 NIC, cash basis, payments on account, more than one trade, trading allowance, Making Tax Digital, invoice content. Use before changing anything under src/utils/taxCalculator.ts, the Dashboard or Accounting pages, expense handling, or PDF invoice content, and when writing or reviewing tax tests.

Quality

92%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

UK sole-trader tax for this app

The app's owner is a UK sole trader in England with two separate trades (AI research consulting for an overseas client, and ceramics teaching for a UK studio). See README.md for the full use case. All rules below are for England (Scotland has different income tax bands).

Ground rules

  1. Never invent a rate, threshold or date. Every figure lives in references/rates-2026-27.md with its gov.uk source. If a rule you need is not there, say so in the PR and leave a TODO(tax-source) comment; do not guess.
  2. Rates belong to a tax year. Do not hard-code figures inside calculations; key them by tax year so a new year means adding data, not editing logic. The UK tax year runs 6 April to 5 April.
  3. Every tax rule change needs a compliance case in evals/compliance/ with the source URL and a hand-worked example in a comment.
  4. The app is an estimate, not advice. UI copy should say figures are estimates and point to an accountant or HMRC for the real return.

Rules the code must respect

TopicRuleWhere it bites in this app
Income tax bandsBands apply to income after allowances: 20% on the first £37,700, 40% up to £125,140, 45% above.calculateUKSelfEmployedTax uses gross-profit thresholds (£50,270), which only works when the full allowance applies.
Allowance taperPersonal allowance falls £1 for every £2 of income over £100,000; zero at £125,140.The taper is applied but the bands are not re-based, so tax is understated above £100k.
Class 4 NIC6% on profits £12,570-£50,270, 2% above. Charged on total profits across all trades.Correct today.
Class 2 NICNot payable if profits are £7,105 or more (treated as paid). Below that, voluntary at £3.65/week to protect the State Pension record.Code says "abolished". The ceramics-only years can fall below £7,105, so the app should mention the voluntary option.
Cash basisStandard for sole traders: income counts when received, expenses when paid. Traditional (accruals) accounting is an opt-out.Paid income is grouped by invoice date; must be grouped by paid date.
Taxable profitProfit = income received minus allowable business expenses. Only the business part of mixed-use costs is allowable.The Dashboard projects tax on income alone, ignoring recorded business expenses.
Payments on accountTwo payments, 31 Jan and 31 Jul, each half the previous year's bill. Not needed if last year's bill was under £1,000, or more than 80% was collected at source. Balancing payment: 31 Jan after the tax year ends.Dates for a year are mislabelled, and payments on account are always shown, even when the £1,000 rule means none are due.
More than one tradeA separate self-employment page per trade. Losses in one trade cannot be set against another trade's profits for Class 4; they carry forward against the same trade.All invoices are pooled; nothing records which trade an invoice, expense or loss belongs to.
Trading allowance£1,000 against gross trading income from one or more trades, instead of expenses (not both). Cannot create a loss.Not modelled. Relevant for a small-turnover ceramics year.
Making Tax DigitalRequired if qualifying income is over £50,000 (2024-25, from Apr 2026), £30,000 (2025-26, from Apr 2027), £20,000 (2026-27, from Apr 2028).Not modelled; a warning when projected income crosses a threshold would help.
Other incomeEmployment (PAYE) income in the same year uses the personal allowance and bands first.The projection assumes self-employment is the only income. At minimum, warn.
Invoice contentA non-VAT-registered invoice must show: unique number; your name, any business name, address and contact details; customer name and address; description; supply date; invoice date; amounts and total.Check PDF components (src/pdf/) against this list.

Open questions: do not encode without a source

  • Recharged client expenses. The app treats reimbursed expense claims as "pass-through, not taxable". The gov.uk expenses page does not address recharges. The usual treatment (reimbursement is income, the cost is an allowable expense, net effect nil) needs an accountant or HMRC manual reference before it is coded. Do not change this behaviour without a source.
  • Overseas client. The research client is in the USA. For income tax, UK residents pay UK tax on worldwide trading income, but this is not yet sourced in the references file. Do not add currency or foreign-tax logic without a source.
  • Sideways loss relief (setting a trading loss against other income for income tax) exists under conditions not yet captured here.

When you change tax code

  1. Read references/rates-2026-27.md.
  2. Add or update a case in evals/compliance/ first, with source and worked example.
  3. Make the change; keep logic pure and in src/utils/.
  4. Run npm run check (regression gate) and npm run eval:compliance.
  5. When a compliance case starts passing for good, move it into tests/ so it becomes a regression guard.
Repository

mmtsfasman/adulting-invoicing-app-demo

Path

.claude/skills/uk-sole-trader-tax/SKILL.md

Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.