All rules

The same receipt or invoice number on two rows of an itemised table

reference-number-repeatedon by defaultJapanese / English

The same receipt or invoice number written on two rows of one itemised table

Example

Flagged
| Date | Receipt no. | Description | Amount | | --- | --- | --- | --- | | April 6, 2026 | K-118 | Train fare | $12.40 | | April 8, 2026 | K-119 | Stationery | $21.10 | | April 9, 2026 | K-119 | Taxi | $35.50 |
What chaff prints
5:19 "K-119" in the column "Receipt no." is already on line 4
Fixed
| Date | Receipt no. | Description | Amount | | --- | --- | --- | --- | | April 6, 2026 | K-118 | Train fare | $12.40 | | April 8, 2026 | K-119 | Stationery | $21.10 | | April 9, 2026 | K-120 | Taxi | $35.50 |
What chaff prints
no finding

How to fix

If the two rows are different receipts, correct the number; if they are the same receipt, remove one of the rows.

Why it matters

In an expense claim or an invoice's line items, each row is one receipt or invoice, and its number appears once in the table. The same number on two rows means either the same receipt is claimed twice or a row was copied and its number not changed. Neither is seen unless the reader checks the numbers one by one. The column is decided by its heading words alone (Receipt no., Invoice no., Voucher no., Ref.). Only cells holding at least one digit are read as numbers; a blank cell, a dash, "none" or "N/A" is not. Case, full-width and half-width forms and spaces are ignored when comparing.

What it does not flag

A column whose heading is not a receipt, voucher or invoice number word (a category code, an account number, a date, a bare "No.") is not read, nor is a table with two such columns. A cell with no digit (blank, a dash, "none", "N/A") is not compared. A table where two or more numbers repeat, or one number is on three rows or more, groups the rows of one slip (an invoice and its payment, the parts of one receipt) and is not compared. The same number in two different tables is fine.

Turning it off or relaxing it

Silence this one spot (in the document)
<!-- stet: reference-number-repeated — reason -->
Relax it for the team (the reason is kept as a comment in chaff.yaml)
npx chaffjs relax reference-number-repeated --why "reason"
Turn it off for the team (chaff.yaml)
rules: reference-number-repeated: off
Technical details
Layer
L3
Status
stable
Severity
warning
Languages
Japanese and English
Suited to
business, technical, blog, legal, docs, academic, literature, speech

Levels

Set a level for this rule under rules in chaff.yaml. With nothing set, it runs at the level its genre gives it (see By genre below).

stricterror
normalwarning
relaxedinfo

This rule has no limit to count to. A level sets how a finding is marked: relaxed keeps the finding and marks it a step lower.

By genre

Runs by default in
technical/spec, technical/readme, blog/tech, blog/essay, blog/owned-media, business/proposal, business/report, business/email, business/press-release, business/meeting-notes, legal/contract, legal/statute, legal/judgment, legal/patent, docs/manual, docs/faq, docs/glossary, academic/paper, speech/address, speech/transcript
Turned off by the genre in
literature/fiction, literature/essay, literature/poetry, literature/play

Genres

Message

"{number}" in the column "{heading}" is already on line {firstLine}

This page is built from the rule's definition file:packages/chaff/rules/reference-number-repeated.yaml