毒物劇物の管理台帳を試薬棚卸表からClaudeで点検する手順
試薬の棚卸表をClaudeに渡し、毒物・劇物の区分と保管の抜けを条文つきで洗う手順です。濃度の除外規定は表で渡し、判定の検算はスクリプトで行います。
試薬の棚卸表を毒物及び劇物取締法に照らして点検する作業は、Claudeに向いています。試薬名と濃度の一覧から「毒物・劇物に当たるか」を仕分け、施錠・容器・表示の記入漏れを拾う作業は、表の読み合わせだからです。
ただし、Claudeに濃度の境目を暗記で答えさせてはいけません。除外濃度は政令に書かれた数字なので、その表を先に渡して当てはめさせ、結果は別のスクリプトで検算します。法に適合しているかの判断は、最後まで人に残ります。この記事は、その分担でそのまま使える棚卸表の列、ルール表、プロンプト、検算スクリプトを順に示します。
研究室の台帳に、法が決めた様式はあるのか
条文を読むと、帳簿や書面を求める規定は毒物劇物営業者に向けたものです。第14条は他の営業者へ販売・授与したときの書面を求め、第15条は一定の物の交付時の確認を記載する帳簿を求めます。どちらも登録を受けた製造業者・輸入業者・販売業者の義務です。
大学や企業の研究室は、多くの場合その営業者ではありません。それでも法の外にはなりません。第22条第5項は、営業者や特定毒物研究者などを除く者のうち、省令で定める毒物・劇物を業務上取り扱う者に、第11条・第12条第1項と第3項・第17条・第18条を準用します。省令(施行規則第18条の2)が定める物は「すべての毒物及び劇物」です。
つまり研究室の棚卸表は、法が様式を決めた帳票ではありません。第11条などの義務を守れているかを、自分で確かめるための道具です。何を列に立てるかは、準用される条文から逆算できます。
| 条文 | 求めていること | 棚卸表に置く列 |
|---|---|---|
| 第11条第1項 | 求めていること盗難・紛失を防ぐのに必要な措置 | 棚卸表に置く列保管場所、施錠 |
| 第11条第2項 | 求めていること飛散・漏れ・しみ出しを防ぐ措置 | 棚卸表に置く列容器の種類 |
| 第11条第4項 | 求めていること飲食物の容器として通常使われる物を使わない | 棚卸表に置く列容器の種類 |
| 第12条第1項 | 求めていること容器・被包に「医薬用外」と区分の文字を表示 | 棚卸表に置く列表示の有無 |
| 第12条第3項 | 求めていること貯蔵・陳列する場所にも表示 | 棚卸表に置く列保管場所の表示 |
| 第15条の2 | 求めていること廃棄は政令の技術上の基準に従う | 棚卸表に置く列廃棄予定の方法 |
| 第17条 | 求めていること事故・盗難・紛失のときの届出 | 棚卸表に置く列連絡先の掲示 |
第12条第1項の表示は、毒物なら赤地に白色で「毒物」、劇物なら白地に赤色で「劇物」と定められています。この表示をしないと、第24条第2号により3年以下の拘禁刑か200万円以下の罰金、またはその併科です。第22条第5項で準用される場合も含まれます。
第11条第4項の飲食物容器の禁止は、毒物と、省令が指定する劇物に及びます。その省令(施行規則第11条の4)は、指定する劇物を「すべての劇物」としています。ペットボトルや飲料の空き瓶への小分けは、毒物でも劇物でも点検対象です。
棚卸表の列を決める
列は、先ほどの表と、区分の判定に要る情報から決めます。判定に要るのは、試薬名ではなく成分と含有率です。「塩酸」という名前だけでは、35%の試薬も0.1mol/Lの滴定液も同じ行に見えてしまいます。
id,試薬名,成分,含有率,単位,保管場所,施錠,容器,表示
R001,水酸化ナトリウム(固体),水酸化ナトリウム,100,%,B棟2階 試薬庫,あり,ガラス瓶,あり
R002,塩酸,塩化水素,35,%,B棟2階 試薬庫,あり,ガラス瓶,あり
R003,塩酸 0.1 mol/L,塩化水素,0.1,mol/L,B棟2階 流し下,,ガラス瓶,
R004,メタノール,メタノール,99.8,%,B棟2階 試薬庫,あり,ガラス瓶,あり
R005,ホルマリン,ホルムアルデヒド,37,%,B棟2階 試薬庫,あり,ガラス瓶,あり
R006,過酸化水素水,過酸化水素,3,%,A棟1階 冷蔵庫,なし,ペットボトル,ありこれは記入例です。R003は施錠と表示が空欄、R006は施錠なしでペットボトル入りにしてあり、点検で拾わせたい形をあえて混ぜています。
実際の棚卸表を渡す前に、担当者の氏名や内線番号の列は落とします。点検に要らない個人情報を渡さないためです。取引先の秘密情報を扱う場合の線引きは、コンサルがClaudeに顧客資料を渡す前のNDA点検表の確認順が参考になります。
区分の基準は、Claudeに暗記させず表で渡す
毒物・劇物は、法の別表第一と別表第二に物質名で載ります(第2条)。ただし「医薬品及び医薬部外品以外のもの」という限定があるため、医薬品や医薬部外品として製造された物は含まれません。
濃度の除外は別の政令にあります。毒物及び劇物指定令の第2条は、劇物の含有製剤について「N%以下を含有するものを除く」と定めます。試薬の棚卸しでよく出る成分から拾うと、次のとおりです。
| 成分 | 劇物から除かれる含有率 |
|---|---|
| 水酸化ナトリウム | 劇物から除かれる含有率5%以下 |
| 水酸化カリウム | 劇物から除かれる含有率5%以下 |
| 塩化水素 | 劇物から除かれる含有率10%以下 |
| 硫酸 | 劇物から除かれる含有率10%以下 |
| 硝酸 | 劇物から除かれる含有率10%以下 |
| アンモニア | 劇物から除かれる含有率10%以下 |
| 過酸化水素 | 劇物から除かれる含有率6%以下 |
| ホルムアルデヒド | 劇物から除かれる含有率1%以下 |
メタノールは別表第二に物質名で載っていますが、指定令には含有製剤の除外濃度の項がありません。薄めた水溶液を劇物とみるかどうかは、この表だけでは決まらないので、人が確認する列に回します。
この表は、Claudeへの入力の一部にします。ルールを「渡した表だけ」に限ると、モデルの記憶に頼った答えを抑えやすくなります。次のような指示にします。
添付の棚卸表(ledger.csv)の各行について、下のルール表だけを根拠に区分を出してください。
ルール表に無い成分は「表にない」とし、推測で区分を付けないでください。
ルール表(毒物及び劇物指定令 第2条の抜粋):
水酸化ナトリウム: 5%以下は劇物から除く
水酸化カリウム: 5%以下は劇物から除く
塩化水素: 10%以下は劇物から除く
硫酸: 10%以下は劇物から除く
硝酸: 10%以下は劇物から除く
アンモニア: 10%以下は劇物から除く
過酸化水素: 6%以下は劇物から除く
ホルムアルデヒド: 1%以下は劇物から除く
メタノール: 別表第二に物質名のみ。混合物の扱いは人が確認
出力は表にしてください。列は id、区分候補、根拠(上の表の行)、人が確認すること。
「適合」「問題なし」という判定語は使わないでください。
単位が%でない行は、換算せず「単位が%ではない」と書いてください。単位の扱いを指示に入れたのは、mol/Lから%への換算を、Claudeが黙ってやってしまうのを防ぐためです。密度が絡む換算は、試薬のロットや温度で数字が動きます。換算した値で除外濃度と比べる作業は、根拠を人が見て決めます。
保管の抜けを、第11条と第12条の順に洗う
区分が出たら、同じ棚卸表で保管の列を点検します。ここでの判定は「適合」ではなく、記入の有無と、条文に照らして人が見るべき行の抽出に限ります。
続けて、劇物候補と判定した行について、次の3点を調べてください。
1. 施錠が「あり」でない行(空欄を含む)。根拠は法第11条第1項。
2. 容器がペットボトル・飲料瓶・食品容器に見える行。根拠は法第11条第4項。
3. 表示が「あり」でない行(空欄を含む)。根拠は法第12条第1項。
列は id、抜けの種類、根拠条、棚卸表の該当セルの値。
セルが空欄の場合は「記入なし」と書き、現場の状況を推測しないでください。「記入なし」と「問題あり」は別のことです。棚卸表の空欄は、保管庫が施錠されていないことの証拠ではなく、誰も記入していないことの証拠にすぎません。この区別を指示に書いておくと、出力が人の確認事項の一覧になります。
保管場所そのものの表示(第12条第3項)は、棚卸表の1行ごとではなく、場所ごとに確かめます。保管場所の列を重複なしで並べさせ、場所ごとの表示の有無を別の表にさせると、現場を回るときのチェックリストにできます。
検算スクリプトで、Claudeの結果を突き合わせる
Claudeの出力を、そのまま台帳に貼らないでください。ルール表は単純な数値比較なので、同じ判定をスクリプトで再現し、食い違った行だけを人が見るのが速くて確実です。
import csv
import sys
# 毒物及び劇物指定令 第2条: 「N%以下を含有するものを除く」の N(%)
EXCLUDE_AT_OR_BELOW = {
"水酸化ナトリウム": 5, "水酸化カリウム": 5, "塩化水素": 10, "硫酸": 10,
"硝酸": 10, "アンモニア": 10, "過酸化水素": 6, "ホルムアルデヒド": 1,
}
NAME_ONLY = {"メタノール"} # 別表第二に名称のみ。含有製剤の除外濃度は指定令にない
FOOD_CONTAINERS = ("ペットボトル", "飲料瓶", "食品容器")
def classify(row):
name, unit = row["成分"], row["単位"]
if name in EXCLUDE_AT_OR_BELOW:
if unit != "%":
return "要人確認(濃度の単位が%ではない)"
pct = float(row["含有率"])
if pct > EXCLUDE_AT_OR_BELOW[name]:
return "劇物候補"
return "指定令の除外濃度以下(令38条は人が確認)"
if name in NAME_ONLY:
return "劇物候補(混合物は人が確認)"
return "表にない成分(人が別表を確認)"
def gaps(row):
out = []
for col in ("施錠", "容器", "表示"):
if not row[col].strip():
out.append(f"{col}が空欄")
if row["施錠"] == "なし":
out.append("施錠なし")
if any(w in row["容器"] for w in FOOD_CONTAINERS):
out.append("飲食物の容器に見える")
return out
with open(sys.argv[1], encoding="utf-8") as f:
for row in csv.DictReader(f):
print(row["id"], classify(row), gaps(row) or "-")python3 check_ledger.py ledger.csv先ほどの記入例では、次のように出ます。
R001 劇物候補 -
R002 劇物候補 -
R003 要人確認(濃度の単位が%ではない) ['施錠が空欄', '表示が空欄']
R004 劇物候補(混合物は人が確認) -
R005 劇物候補 -
R006 指定令の除外濃度以下(令38条は人が確認) ['施錠なし', '飲食物の容器に見える']R006の過酸化水素3%は、指定令の除外濃度(6%以下)に収まるので、劇物候補になりません。それでも、施錠なしと飲食物容器の2点は拾われています。劇物でないなら点検は不要、とはならない点が、この仕組みを分けて持つ利点です。区分の判定と保管の抜けを、別の経路で確かめられます。
Claudeの出力とスクリプトの出力で区分が食い違う行は、どちらかの入力が間違っています。ルール表の転記ミスか、棚卸表の濃度の誤記か、Claudeの読み違いかを、元の数字に戻って確かめます。
「劇物でない」と出た行で、見落とされやすいこと
除外濃度以下の試薬は、劇物から外れますが、扱いの確認が全部なくなるわけではありません。理由は2つあります。
1つ目は、政令第38条です。第11条第2項の飛散・漏れ・しみ出しを防ぐ措置の対象には、劇物そのものに加えて、政令で定める物が含まれます。第38条は、塩化水素・硝酸・硫酸・水酸化カリウム・水酸化ナトリウムを含有する液体状の物のうち、水で10倍に希釈した場合の水素イオン濃度が水素指数2.0から12.0までのもの以外を挙げます。無機シアン化合物を含有する液体状の物も、一定の濃度以下を除いて含まれます。除外濃度以下の酸やアルカリでも、この定義に当たりうるため、スクリプトは「令38条は人が確認」と表示させています。
2つ目は、別の規定で所持が制限される物です。第3条の4は、引火性・発火性・爆発性のある毒物・劇物で政令が定める物を、業務その他正当な理由がなければ所持してはならないと定めます。施行令の第32条の3は、ナトリウムとピクリン酸、さらに亜塩素酸ナトリウム(30%以上のもの)と塩素酸塩類(35%以上のもの)を挙げています。棚卸表にこれらの成分があれば、保管の点検とは別に、業務上の正当な理由を人が確認します。
第3条の3も見ておきます。興奮・幻覚・麻酔の作用を持つ物をみだりに摂取・吸入したり、その目的で所持したりしてはならないという規定で、施行令第32条の2は、トルエンと、酢酸エチル・トルエン・メタノールを含むシンナー・接着剤・塗料・充てん料を挙げています。条文が禁じるのは摂取・吸入と、その目的での所持です。棚卸表にこれらの成分があるときに、保管の管理を一段厳しく見る手がかりになります。
間違えやすいところ
落とし穴
mol/Lの試薬を、そのまま%の除外濃度と比べてしまう
滴定液や標準液は、mol/Lで表記されます。除外濃度は含有率(%)なので、単位をそろえない比較は意味を持ちません。棚卸表に単位の列を持たせ、%以外は人が換算する運用にすると、Claudeに黙って換算させずに済みます。
落とし穴
棚卸表にない試薬は、点検の対象外になる
点検できるのは、表にある行だけです。実験台の上の小分け容器や、廃棄待ちの空き瓶は、棚卸表に載らないまま残りがちです。第12条第1項の表示は「毒物又は劇物の容器及び被包」にかかるので、購入時のラベルに限った規定ではありません。小分けした容器も、台帳の1行にします。
落とし穴
Claudeの「問題なし」を、法適合の証拠にしてしまう
指示で判定語を禁じているのは、出力が人の確認の代わりに使われるのを避けるためです。「抜けがない」と出ても、それは棚卸表に書かれた範囲の話です。現場の施錠の実態は、棚卸表からは分かりません。
Claudeに渡さない判断
次の判断は、点検の結果を受けて、人と所管の窓口が決めます。
- 届出が要る事業かどうか: 第22条第1項は、電気めっき、金属熱処理、大型自動車を用いた運送、しろあり防除の事業(施行令第41条)のうち、一定の毒物・劇物を取り扱う者に、事業場ごとの届出を求めます。該当するかは、事業の内容で決まります。
- 事故・盗難・紛失の連絡: 第17条のとおり、盗難・紛失は直ちに警察署へ届け出ます。飛散や漏れで不特定または多数の者に危害のおそれがあるときは、保健所・警察署・消防機関へ届け出て応急の措置を取ります。連絡先は、棚卸表ではなく保管場所の掲示に置きます。
- 廃棄の方法: 第15条の2は、廃棄を政令の技術上の基準に従って行うことを求めます。施行令第40条の基準の中身は、中和・加水分解・酸化・還元・希釈などで毒物・劇物に当たらない物にすることです。実際の処理の手順は、物質ごとの危険性に応じて人が決めます。
SDSからの危険有害性の洗い出しは、毒劇法の点検とは別の作業です。SDSのPDFを根拠ページ付きで表に抜き出す手順は、SDSのPDFからリスクアセスメントの下書きをClaudeで作るにあります。棚卸表そのものを表計算ソフトの上で整える段階では、列を固定して数字を集約する来期予算の部門別要求をClaude for Excelで集約する手順の進め方が使えます。点検の目的が倫理審査の申請書など別の書類の下書きなら、倫理審査の申請書をClaudeで下書きする手順のように、人が確認する欄を先に分けておく形が同じ型です。
まとめ
研究室の毒物・劇物の台帳は、法が様式を決めた帳票ではなく、第11条・第12条などを守れているかを確かめる道具です。その道具として使うには、棚卸表に成分・含有率・単位・施錠・容器・表示を持たせ、除外濃度の表と指示をClaudeに渡し、結果をスクリプトで検算する流れが組めます。
Claudeに任せられるのは、表の読み合わせと、人が見るべき行の抽出までです。適合の判断と、届出や廃棄の可否は人の側に残ります。まずは棚卸表の10行ほどで試し、スクリプトとの食い違いがどこで出るかを見ると、自分の台帳に足りない列が分かります。