数字と日付の食い違い

明細や精算書の誤りの多くは、同じ文書の 2 か所が合っていないことです。合計が内訳の和にならない、差引支給額が総支給額から控除を引いた額にならない、帰着日が出発日より前にある、同じ予約番号が 2 通りに書いてある、などです。 chaff は、こうした食い違いを日本語でも英語でも機械で見つけます。ただし、2 か所のどちらが正しいかは分かりません。それを確かめるのは書いた人です。

指摘が言っていること

この種類の指摘が言うのは、文書の中の 2 か所が合っていない、ということだけです。どちらが間違っているかは言いません。合計が違うこともあれば、上の行のどれかが違うこともあります。利率が違うことも、掛けた元の額が違うこともあります。

することしないこと
指摘が挙げる 2 か所を両方見る指摘が指した数字を、指されたからという理由で直す
元の資料と見比べる(領収書、勤務表、銀行の記録、予約の控え)合っていた数字を、もう一方に合わせて書き換える
間違っている方を直し、もう一度 chaff をかける両方をいじって、数字どうしを合わせるだけにする

どちらが正しいか分からないときは、両方そのままにして、分かる人に聞きます。

かけてみる

次の旅費精算書を seisan.md という名前で保存しました。名前は架空のものです。

# 出張旅費精算書(大阪出張)

申請者:吉田 真奈
出発日:2026年10月14日
帰着日:2026年10月16日

| 日付 | 項目 | 数量 | 単価 | 金額 |
| --- | --- | --- | --- | --- |
| 10月14日 | 新幹線(往復) | 1 | 28,340円 | 28,340円 |
| 10月14日 | 宿泊 | 2 | 9,500円 | 18,000円 |
| 10月15日 | 取引先との会食 | 1 | 4,250円 | 4,250円 |
| 合計 | | | | 51,590円 |
npx chaffjs seisan.md --genre business/report --compact    seisan.md を見て、指摘を 1 件ずつ短く出す
$ npx chaffjs seisan.md --genre business/report --compact

seisan.md   business/report · 日本語   ジャンルは --genre から

  10:30   error   金額「18,000円」が、数量×単価(2 × 9,500円 = 19,000円)と合いません
                  line-amount-mismatch
  12:14   error   合計「51,590円」が、内訳の金額の和(50,590円)と合いません
                  total-mismatch

指摘 2 件、動いていない rule 70 件

指摘は 2 件ですが、誤りは 1 か所です。

行指摘意味
10line-amount-mismatch9,500円 の 2 泊なら 19,000円 なのに、金額は 18,000円
12total-mismatch行を足すと 50,590円 なのに、合計は 51,590円

ホテルの領収書は 19,000円 なので、間違っているのは宿泊の行で、合計は正しい数字です。宿泊の行を直すと、2 件とも消えます。

# 出張旅費精算書(大阪出張)

申請者:吉田 真奈
出発日:2026年10月14日
帰着日:2026年10月16日

| 日付 | 項目 | 数量 | 単価 | 金額 |
| --- | --- | --- | --- | --- |
| 10月14日 | 新幹線(往復) | 1 | 28,340円 | 28,340円 |
| 10月14日 | 宿泊 | 2 | 9,500円 | 19,000円 |
| 10月15日 | 取引先との会食 | 1 | 4,250円 | 4,250円 |
| 合計 | | | | 51,590円 |
$ npx chaffjs seisan-fixed.md --genre business/report --compact

seisan-fixed.md   business/report · 日本語   ジャンルは --genre から


指摘 0 件、動いていない rule 70 件

間違った黙らせ方

宿泊の行ではなく、合計を 50,590円 に書き換えたとします。合計の指摘は消えますが、宿泊の行の指摘は残ります。さらに単価を 9,000円 に書き換えると、chaff は何も言わなくなり、精算は 1,000円 足りないままです。

# 出張旅費精算書(大阪出張)

申請者:吉田 真奈
出発日:2026年10月14日
帰着日:2026年10月16日

| 日付 | 項目 | 数量 | 単価 | 金額 |
| --- | --- | --- | --- | --- |
| 10月14日 | 新幹線(往復) | 1 | 28,340円 | 28,340円 |
| 10月14日 | 宿泊 | 2 | 9,000円 | 18,000円 |
| 10月15日 | 取引先との会食 | 1 | 4,250円 | 4,250円 |
| 合計 | | | | 50,590円 |
$ npx chaffjs seisan-quiet.md --genre business/report --compact

seisan-quiet.md   business/report · 日本語   ジャンルは --genre から


指摘 0 件、動いていない rule 70 件

指摘が 0 件なのは、文書の中で数字が合っているということです。領収書と合っているということではありません。どの数字が正しいかを決められるのは、元の資料だけです。

chaff が比べるもの

下の表は、どの行も短い文書に chaff をかけて、実際に出た指摘を載せています。ルールの名前からそのページに進むと、ほかの例と、見ないことが分かります。

比べるもの書いたものchaff の指摘
合計と内訳(total-mismatch)28,340円、18,000円、4,250円 の行の下に、合計 51,590円合計「51,590円」が、内訳の金額の和(50,590円)と合いません
数量×単価と金額(line-amount-mismatch)数量 2、単価 9,500円、金額 18,000円金額「18,000円」が、数量×単価(2 × 9,500円 = 19,000円)と合いません
差引額と、総額から控除を引いた額(net-amount-mismatch)総支給額:262,500円/控除合計:43,210円/差引支給額:219,920円「219,920円」は、総額から控除合計を引くと 219,290円 です
残高と、入金・出金(closing-balance-mismatch)前回残高:241,836円/入金合計:294,180円/出金合計:320,360円/今回残高:216,556円「216,556円」は、初めの残高に入金を足し出金を引くと 215,656円 です
税額と、税をかける額(tax-mismatch)小計 800,000円、消費税(10%) 88,000円税額「88,000円」が、上の金額の10%(80,000円)と合いません
利息と、残高に利率を掛けた額(interest-mismatch)対象残高360,000円 × 利率0.50% = 180円利息「180円」が、残高「360,000円」に利率0.50%を掛けた額(1800円)と合いません
差異と、予算・決算(variance-mismatch)予算 40,000円、決算 43,450円、差異 4,350円「茶菓代」の増減は「4,350円」ですが、予算と決算の差からは「3,450円」です
文の中の増減率(change-rate-mismatch)売上高は2025年度の10億円から2026年度は15億円となり、前年度比20%増えました。「20%」と書いていますが、二つの値からは 50% です
順に来るはずの 2 つの日付(due-before-issue)チェックイン:2026年11月12日/チェックアウト:2026年11月10日「チェックアウト」(2026年11月10日)が、「チェックイン」(2026年11月12日)より前です
2 通りに書いた番号(reference-number-variant)証券番号:PL-48213、後ろで証券番号 PL-48231番号「PL-48231」は、「PL-48213」の隣り合う文字が入れ違っています
2 つの値がある項目(fact-conflict)受講料:30,000円、後ろで「受講料は35,000円です。」「受講料」が 35,000円 と書かれていますが、同じ節の前の所では 30,000円 です

利息の行を見ると、chaff がどちらとも決められない理由が分かります。利率の打ち間違い(0.05% なら 180円)かもしれませんし、利息を別の月から写したのかもしれません。この種類のルールは、npx chaffjs rules の「事実の食い違い」と、ルールの一覧にすべてあります。

指摘の強さ

このページのチェックは、どれも error か warning で指摘します。 error があると実行は失敗し、CI はそこで止まります。warning は指摘として出ますが、実行は失敗しません。業務の文書のジャンルなら、どれでも同じように動きます。ジャンルで変わるのは、画面の初めの手引きと言葉づかいのルールです。文学のジャンルでは動きません。明細や請求書にどのジャンルを使うかは、給与明細・請求書・各種の明細にあります。

文書の方が正しいとき

食い違って見えても、chaff の知らない事情で正しいことがあります。給与を前の月の 25 日に、その月の分を前払いする会社がその例です。給与明細・請求書・各種の明細に載せました。そのときは、その箇所だけを stet で黙らせ、理由を書きます。

<!-- stet: due-before-issue — 給与は前の月の 25 日に、その月の分を前払いする -->

黙るのは、すぐ下の段落、表、リストだけです。文書のほかの所は、これまでどおり見ます。 1 か所ではなく、チームの文書がどれもそう書くのなら、指摘されたら、道は 3 つにあるとおり、ルールの方を変えます。

chaff が読まないもの

chaff は、その数字が何かを見分けられる所でしか数字を読みません。次の所は読まないので、指摘が無くても、数字が合っているとは限りません。

書き方読むか
項目を並べたリストの最後の項目に - 合計:54,000円読みます。上の項目の和と比べます
リストの最初の項目に - 合計:54,000円 を置き、その後に内訳読みません。合計は、その上にあるものと比べます
文の中で「〜の合計54,000円」と金額を並べた後に書く読みます
文の中で「〜で、お支払いは54,000円です」と書く読みません。文の中では、「合計」のような語が付いた金額だけを合計と読みます
総支給額・控除合計と並べた行の 差引支給額:219,920円読みます
文の中の「差引支給額は219,920円です」読みません。差引額は、名前の付いた行と表からだけ読みます
chaff が知っている名前(差引支給額)読みます
知らない名前(振込額)読みません
表の 合計 の行で、一つ目の升に「合計」と書く読みます
表の 合計 の行で、一つ目の升を空け、二つ目に「合計」と書く読みません

数字は、表と名前の付いた行で一番よく読み、文の中ではあまり読みません。大事な数字は、表か、名前を付けた 1 行に書きます。数字が本当か、税率が正しいか、支払いが法律どおりかは、まったく見ません。

chaff が読む言葉

差引支給額、控除合計、支給日、チェックイン のような名前は、chaff に入っている言語ごとの語彙表から読みます。 chaff.yaml から、この語彙表に言葉を足すことはできません。名前が読まれないときや、指摘が間違っているときは、npx chaffjs feedback で報告の下書きを作ります。下書きには、文書のその前後の行だけが入ります(誤った指摘や見逃しを報告する)。報告は、テストと修正になります。

一つの種類の文書にだけ当てはまる知識は、chaff に同梱した設定ファイル(profile)に入っています。たとえば不動産の物件広告の設定(listing)には、徒歩の分数を出す分速 80 m が入っています。どの設定が選ばれるかと、その決め方は、文書の種類を決めるにあります。

次に読むもの