数字と日付の食い違い
明細や精算書の誤りの多くは、同じ文書の 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 か所です。
| 行 | 指摘 | 意味 |
|---|---|---|
| 10 | line-amount-mismatch | 9,500円 の 2 泊なら 19,000円 なのに、金額は 18,000円 |
| 12 | total-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 が入っています。どの設定が選ばれるかと、その決め方は、文書の種類を決めるにあります。
次に読むもの
- 給与明細、請求書、通帳などは、給与明細・請求書・各種の明細に進みます。
- 契約書の合計や日付は、契約書・利用規約にあります。
- すべてのルールと例は、ルールの一覧にあります。