Claudeで校正管理台帳を回す — 校正証明書PDFから次回期限を突合する
計測器の校正証明書PDFから校正日・校正事業者・JCSS標章の有無を読み取らせ、校正管理台帳と突き合わせる手順。次回期限は証明書に書かれていない点が出発点です。
校正管理台帳の期限切れを防ぐ作業のうち、Claudeに任せやすいのは「届いた校正証明書PDFを読んで台帳の行に直す」部分と、「台帳を並べて期限が近いもの・抜けているものを洗い出す」部分です。手順は、PDFから決まった項目をJSONで読み取らせ、台帳(CSV)と突き合わせ、数字は原本と照らす、の3段です。
先に押さえておきたいのは、JCSSの校正証明書には有効期間がないことです。証明書から「次回期限」を読み取る、という発想のままだと、台帳の最も大事な列が空になります。
JCSS校正証明書に「有効期限」は書かれていない
NITEのJCSSよくあるお問い合わせ(FAQ)には、「JCSS校正証明書の有効期間を知りたい」という問いがあり、答えは次のとおりです。JCSS校正証明書に有効期間はなく、再校正は計測器の使用頻度や使用環境などから利用者が検討する、という内容です。
つまり、台帳の「次回校正期限」は、証明書の記載を写す列ではありません。校正日に自社が決めた校正周期を足して作る列です。Claudeに読ませる対象と、自社ルールで埋める対象を分けておくと、後の突合が崩れません。
| 台帳の列 | 出どころ | Claudeに任せる範囲 |
|---|---|---|
| 計測器の管理番号 | 出どころ自社 | Claudeに任せる範囲証明書の機器名・器番と照合 |
| 校正日 | 出どころ証明書 | Claudeに任せる範囲読み取り(原本と照合) |
| 校正証明書番号 | 出どころ証明書 | Claudeに任せる範囲読み取り |
| 校正事業者名 | 出どころ証明書 | Claudeに任せる範囲読み取り |
| JCSS標章の有無 | 出どころ証明書 | Claudeに任せる範囲有無の判定 |
| 校正周期(月) | 出どころ自社の管理規程 | Claudeに任せる範囲台帳から参照するだけ |
| 次回校正期限 | 出どころ校正日+周期 | Claudeに任せる範囲計算はスクリプトか表計算 |
最後の行の計算をClaudeに暗算させる運用は避けます。日付の足し算は、後述のように数行のコードか表計算の関数で出すほうが再現できます。
台帳に持たせる列と、証明書から拾う項目
台帳の形は会社ごとに違いますが、期限管理と「国家標準につながっているか」の確認を両立させるなら、次の項目が最低限の骨格になります。
- 管理番号、計測器名、メーカー、型式、器番
- 校正日、校正証明書番号、校正事業者名
- JCSS標章の有無、国外受入れが必要な機器ではilac-MRAマークの有無
- 校正周期(月)、次回校正期限、次回予定日
- 校正結果の判定(合格・調整実施・使用停止)と備考
JCSS標章を台帳に持たせる理由は、トレーサビリティの確認に使えるからです。JCSSの概要ページによると、JCSS標章付きの校正証明書は、日本の国家計量標準へのトレーサビリティが確保され、校正事業者に技術能力があることが一目で分かるものとされています。さらにFAQでは、JCSSは登録(更新)審査の際に国家計量標準までのトレーサビリティを確認しており、標章が付いていれば、トレーサビリティ体系図が添付されていなくても、校正結果が国家計量標準へトレーサブルである証明になると説明されています。
体系図が付いていない証明書を受け取っても、標章があれば足りる、ということです。一方で標章がない証明書は、体系図や事業者の根拠資料を別途そろえる必要が出てきます。この分岐を台帳の列にしておけば、Claudeに「標章なしの行だけ拾って」と頼めます。
証明書PDFから項目を読み取らせる
読み取りは、PDFを添付して項目名を指定するのが基本です。ClaudeのPDF対応では、各ページが画像に変換され、抽出されたテキストが画像と一緒に渡されます。表やスタンプのような見た目の情報も、テキストと合わせて読まれます。
チャットで試すなら、Projectに「台帳の列定義」を置き、証明書PDFを1通ずつ添付して次のように頼みます。
添付の校正証明書から、次の項目をJSONで1オブジェクトだけ出してください。
読み取れない項目は null にし、推測で埋めないでください。
- certificate_no: 証明書番号
- calibration_date: 校正日(YYYY-MM-DD)
- instrument_name: 校正対象の機器名
- serial_no: 器番(シリアル番号)
- lab_name: 校正事業者名
- has_jcss_mark: JCSS標章が付いているか(true / false / null)
- has_ilac_mra_mark: ilac-MRAマークが付いているか(true / false / null)
- out_of_scope_note: 登録範囲外と明示された校正結果の有無と該当箇所
- page_of_each_field: 各項目を読んだページ番号
証明書に書かれていない次回校正期限は、出力に含めないでください。最後の1文が要点です。入れておかないと、Claudeが親切心で「1年後」のような期限を足してしまう余地が残ります。
登録範囲外の扱いも拾わせています。FAQには、登録範囲外の校正結果を証明書に含める場合でも、「登録範囲外」であることを明示すればJCSS標章を付けられる、とあります。標章があるからといって、証明書の全項目がJCSSの範囲とは限りません。該当する行は、台帳の備考に残しておきます。
件数が多いときはAPIで一括にする
数十通を超えるなら、チャットに1通ずつ貼るより、APIで同じプロンプトを回すほうが速く、出力の形もそろいます。PDFは、URL参照、base64、Files APIのfile_idのいずれかで渡せます。ローカルのPDFならbase64が手軽です。
pip install anthropicimport base64, json
import anthropic
client = anthropic.Anthropic()
PROMPT = open("prompt_extract.txt", encoding="utf-8").read()
def extract(pdf_path: str) -> dict:
data = base64.standard_b64encode(open(pdf_path, "rb").read()).decode()
msg = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{ # PDFはテキストより前に置く
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": data,
},
},
{"type": "text", "text": PROMPT},
],
}],
)
return json.loads(msg.content[0].text)PDFをテキストより前に置くのは、PDF対応の最適化のヒントとして挙げられている並べ方です。同じ手順で大量のPDFを処理するなら、Message Batches APIでまとめて投げる方法もあります。契約書で同じ型を組んだ例は契約台帳をPDFから一括抽出する手順にあります。
返ってきたJSONは、json.loadsが通るかを必ず確かめます。コードフェンスで囲まれて返ることもあるため、実運用ではフェンスを外す処理か、出力の形式を厳しく指定する工夫を足します。
読み取れないPDFの条件
PDF対応には条件があります。リクエストの最大サイズは32MB、1リクエストあたりの最大ページ数は600(コンテキストウィンドウが1M未満のリクエストでは100)で、パスワード付き・暗号化されたPDFは対象外です。スキャンした証明書にも同じ条件が当てはまります。公式のヒントとしては、標準フォントを使うこと、文字をはっきりさせること、ページを正しい向きに回転することが挙げられています。
校正事業者がメールで送ってくるPDFが暗号化されている場合は、台帳に取り込む前に、人が解除してから渡します。Claude側で回避する方法はありません。画像として貼られた証明書の読み取り全般は、ClaudeでPDF内の画像を読ませる手順も参考になります。
台帳と突き合わせて期限切れと抜けを出す
読み取ったJSONを台帳CSVに追記したら、次に期限の判定です。ここは日付計算なので、Claudeに「いつが期限切れか」を考えさせず、スクリプトで出します。
import pandas as pd
ledger = pd.read_csv("calibration_ledger.csv", parse_dates=["校正日"])
ledger["次回校正期限"] = ledger.apply(
lambda r: r["校正日"] + pd.DateOffset(months=int(r["校正周期_月"])),
axis=1,
)
today = pd.Timestamp("2026-10-13")
ledger["残日数"] = (ledger["次回校正期限"] - today).dt.days
due_soon = ledger[ledger["残日数"] <= 60].sort_values("残日数")
due_soon.to_csv("due_soon.csv", index=False, encoding="utf-8-sig")todayは実行日に合わせて書き換えます。60日という閾値は、校正を外部に出して戻るまでの日数を見込んで決める値です。自社が過去に校正を出した際の預かりから返却までの実績日数に合わせて調整します。
Claudeの出番は、このCSVを渡したあとの「読み解き」です。次のように頼みます。
添付の due_soon.csv は次回校正期限まで60日以内の計測器です。
次の3点を表にしてください。
1. 期限切れ(残日数が負)の機器と、その機器の使用状況の欄にある記述
2. 校正事業者名が同じで、期限が近い機器のまとめ(まとめて出せる候補)
3. JCSS標章が false または null の機器(別途トレーサビリティの根拠が必要)
推測で補った情報には「推測」と書いてください。2点目の「まとめて出せる候補」は、校正事業者ごとの発送計画に使えます。複数台を同じ事業者に1回で出せば、手配の回数が減ります。期限切れの機器を使った測定記録の扱いは、品質管理部門の判断が必要になるため、Claudeには候補の洗い出しまでを任せます。
突合で見つかる典型的なズレ
台帳と証明書を並べると、次のようなズレが出ます。あらかじめ「こういうズレを探して」と頼んでおくと、見落としが減ります。
- 器番の不一致: 証明書の器番が台帳と違う。機器の入れ替えや転記ミスの疑い
- 校正日の転記ミス: 証明書は10月3日なのに台帳は10月30日、といった入れ違い
- 標章なしの証明書: JCSS標章がなく、トレーサビリティの根拠が別に要る
- 範囲外の校正点が混在: 一部の校正点が登録範囲外と明示されている
- 周期の未設定: 校正周期の列が空で、次回期限が計算できない
最後の項目は、JCSS証明書に有効期間がないことの裏返しです。周期の列が空の行は、期限が永久に来ない行として台帳に残ってしまいます。突合の前に、周期の空欄を洗い出す依頼を出しておきます。
人が確認する範囲
読み取りの結果は、そのまま台帳に入れません。数字と固有名詞は特に誤りが出やすい部分です。確認する範囲を決めておきます。
台帳に入れる前の確認
- 1
校正日と証明書番号を原本と照らす
PDFを開き、読み取りの
page_of_each_fieldが示すページで、校正日と証明書番号が合っているかを目で見ます。 - 2
器番を現物の銘板と照らす
台帳の管理番号と証明書の器番が、現物の銘板で一致しているかを確かめます。
- 3
標章の有無を目視する
has_jcss_markがtrueでも、標章が証明書に実際に印刷されているかは人が見ます。 - 4
周期を管理規程で確認する
次回期限の計算に使う周期は、管理規程や過去の校正結果から決まっているか確認します。
全件を原本と照らす必要はありません。重要度の高い機器(出荷判定や検査に使うもの)は全件、そのほかは抜き取りという運用が現実的です。抜き取りの割合は、品質マニュアルの定めに従います。
国外の取引先に見せる証明書では、マークの組み合わせを見る
海外の取引先や監査に証明書を出す機会がある会社は、標章の種類にも注意が要ります。FAQによると、JCSS標章、ilac-MRAマーク、IAJapanロゴの3つが付されたJCSS校正証明書であれば、国外でも同等の校正結果として取り扱われます。
国際MRA対応の事業者とそうでない事業者の差も、FAQにあります。国際MRA対応でなければ、国外で受け入れられるilac-MRAマーク付きの証明書は出せません。台帳のhas_ilac_mra_mark列は、輸出先の要求がある機器だけで必須にします。
校正を依頼する側が事業者を選ぶときは、JCSS登録・認定事業者検索から、校正条件が合致する事業者を探して直接依頼する流れです。登録区分は、長さ、質量、温度、圧力、電気、湿度など、トレーサビリティ体系図が区分ごとに公開されています。なお、NITEの概要ページは本文で登録区分を25区分と書く一方、一覧は26番まで番号が振られており、数え方が一致していません。区分の総数は台帳に書かず、機器ごとの区分名だけを記録するのが安全です。
内部監査の前に台帳をそろえておく
校正記録は、ISO 9001の内部監査でも見られる対象です。監査の準備でチェックリストを作る手順は、ClaudeでISO 9001の内部監査チェックリストを作る手順にあります。そこでは校正の有効期限のような数字は、Claudeの読み取りを信じず原本と照らす対象に入れるよう整理しています。本記事の台帳は、その突合の相手になる資料です。
期限管理という型は、校正以外にも使えます。産廃のマニフェストの返送期限を洗い出す手順は産廃マニフェストの返送期限超過をClaudeで洗い出す手順で、日付の計算を人か表計算に残し、Claudeに読み解きを任せる分担は同じです。
つまずきやすい点
落とし穴
証明書に期限が書いてあるように見えて、実は別の日付を読んでいる
証明書に校正日以外の日付が並んでいる場合に備えます。読み取りのプロンプトで「校正日=校正を実施した日」と定義し、page_of_each_fieldで根拠ページを出させておくと、取り違えに気づきやすくなります。
- 周期を一律にしない: 使用頻度や環境で周期を変える運用なら、機器ごとに周期の列を持たせます。JCSS証明書に有効期間はなく、再校正の判断は利用者に委ねられているためです
- 台帳の更新を会話に任せない: Claudeの出力は台帳のCSVに追記してから保存します。会話の中にだけ残すと、次の担当者が参照できません
- 証明書の原本を捨てない: 台帳は索引であって、証明書の代わりにはなりません。原本またはスキャンPDFは、品質マニュアルの保存期間に従って保管します
- 標章なしの証明書を黙って通さない: 国家標準までのつながりは、標章がなければ別資料で示す必要があります
運用に落とす順番
最初は直近1か月に届いた証明書数通で、読み取りのプロンプトを調整します。次に台帳との突合を回し、ズレが出る典型を洗い出して、依頼文に探す観点として足していきます。件数が増えた段階でAPIに移し、周期の計算と期限の判定はスクリプトに固定します。
Claudeに任せるのは、読み取りと洗い出しと、人が読む一覧の整形までです。校正結果の合否の判断、期限切れ機器で取った測定値の扱い、校正周期の見直しは、品質管理の責任者が決めます。