海外から来る留学生・研究者が出す英文の予防接種記録と健康診断書を読み取り、接種の種類と日付を健康記録に写して、受け入れ前に足りない接種を拾う
海外から来る留学生・研究者が出す英文の予防接種記録と健康診断書を読み取り、接種の種類と日付を健康記録に写します。大学が定めた必要な接種の表と照らし、足りないものを受け入れの前に拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 医療/教育
- 対象部門
- 人事/総務
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 共有受信箱に届いた記録と健康診断書のPDFを、国際交流課の担当者が開く
- 氏名、生年月日、受け入れの区分を、受け入れ予定者の一覧と照らす
- 記録から、ワクチンの名前と接種日を1行ずつ読み、健康記録の様式に写す
- 抗体検査の結果があれば、検査の項目・値・単位・検査日を写す
- 必要な接種の表を見て、足りない接種と、追加で出してもらう書類を書き出す
- 判断に迷うものを保健管理センターの保健師に回す
- 本人に、追加の接種または抗体検査の結果を出すよう連絡する
- 自動共有受信箱に届いた記録と健康診断書が、受付フォルダ(Amazon S3)に保存される
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめ、受け入れ予定者の一覧と照らして誰の書類かを決める
- 自動OCRが、全文・キーと値・表・質問への答えを、手書きか印字かと信頼度付きで返す
- 自動生成AIが、ワクチンの名前・接種日・抗体検査の値を原文のまま取り出し、日付の書き方があいまいなものに印を付ける
- 自動プログラムが、読み替えの表でワクチンの名前を病気ごとの接種に数え直し、必要な接種の表と照らして不足に印を付ける
- 人国際交流課の担当者が、印の付いた行を原本と見比べ、日付の読み方を確かめる
- 人保健管理センターの保健師が、不足と抗体検査の結果を見て、追加で求めるものを決める
- 人担当者が、本人に追加の提出を連絡する
各工程の詳しい説明を読む
- 共有受信箱に届いた記録と健康診断書のPDFを、国際交流課の担当者が開く
- 氏名、生年月日、受け入れの区分を、受け入れ予定者の一覧と照らす
- 記録から、ワクチンの名前と接種日を1行ずつ読み、健康記録の様式に写す
- 抗体検査の結果があれば、検査の項目・値・単位・検査日を写す
- 必要な接種の表を見て、足りない接種と、追加で出してもらう書類を書き出す
- 判断に迷うものを保健管理センターの保健師に回す
- 本人に、追加の接種または抗体検査の結果を出すよう連絡する
(a)英文の記録の転記に時間がかかる。 3番目と4番目は、書式が人ごとに違う記録から値を探して写す作業です。1人分の接種が10行を超えることも珍しくなく、 手書きの記録では1行ずつ読み解くことになります。
(b)日付の書き方で接種日を取り違える。 05/06/2002 は、月が先なら5月6日、日が先なら6月5日です。取り違えると、2回目の接種までの間隔が変わり、 1歳の誕生日の前の接種かどうかも変わります。担当者の慣れで読み方が決まり、確かめた記録が残りません。
(c)混合ワクチンの数え方がそろわない。 「MMR」を麻しん・風しん・流行性耳下腺炎の3つの接種として数えるのか、記録の行が1行なので1回と書くのか。担当者によって写し方が違い、 保健師が見直すときに数え直しになります。
(d)不足に気づくのが直前になる。 書類が届いてから転記が追いつくまで数週間かかることがあり、足りない接種に気づいたときには、来日や実習の開始が迫っています。 追加の接種や抗体検査には時間がかかるので、間に合わないと受け入れの日がずれます。
- 【自動】 共有受信箱に届いた記録と健康診断書が、受付フォルダ(Amazon S3)に保存される
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめ、受け入れ予定者の一覧と照らして誰の書類かを決める
- 【自動】 OCRが、全文・キーと値・表・質問への答えを、手書きか印字かと信頼度付きで返す
- 【自動】 生成AIが、ワクチンの名前・接種日・抗体検査の値を原文のまま取り出し、日付の書き方があいまいなものに印を付ける
- 【自動】 プログラムが、読み替えの表でワクチンの名前を病気ごとの接種に数え直し、必要な接種の表と照らして不足に印を付ける
- 【人】 国際交流課の担当者が、印の付いた行を原本と見比べ、日付の読み方を確かめる
- 【人】 保健管理センターの保健師が、不足と抗体検査の結果を見て、追加で求めるものを決める
- 【人】 担当者が、本人に追加の提出を連絡する
6番目と7番目が、この設計の分かれ目です。 読み取った値を確かめるのは担当者、足りているかを決めるのは保健師です。この2つを分けておかないと、転記の確認と医学的な判断が一度に担当者に寄ります。
5番目をAIにさせないのも意図してのことです。 混合ワクチンの数え方や接種の間隔の数え方は、大学が決めた規則で機械的に決まる処理です。AIに任せると、記録ごとに数え方が揺れます。
02今回想定するシステム構成
英文の予防接種記録・健康診断書(PDF・スキャン・写真。本人からのメール添付) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認、受け入れ予定者の特定 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES。結果は自分のバケットへ暗号化して出力) │ 全文、キーと値、接種の表、質問への答え、手書きか印字か、信頼度 ▼ Claude API ── 値を原文のまま取り出し、日付の書き方を記録 │ ① 氏名・生年月日 ② ワクチンの名前と接種日 ③ 抗体検査の項目・値・単位・検査日 │ ④ 健康診断書の検査日と医師の署名の有無 ▼ Python ── 読み替えの表で病気ごとに数え直し、必要な接種の表と照らす ▼ 健康記録の下書きと印(ok / missing_dose / date_ambiguous / needs_review) ▼ 【担当者が原本と見比べ、保健師が不足と抗体の値を判断】 └──▶ 本人への追加の提出の連絡
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(接種の記録の値の取り出し) | OpenAI API、Gemini API |
| 差異計算 | Python(ワクチンの名前の読み替え、接種の回数と間隔の計算、必要な接種の表との照合) | 健康記録の仕組みの照合の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(記録、読み取り結果、照合の結果。暗号化して保存) | 学内のファイルサーバー |
受け入れ予定者の一覧と健康記録の仕組みは、新しく足すものではありません。 最初の準備は、ワクチンの名前の読み替えの表を作ることです。略称・製品名・混合ワクチンの名前ごとに、どの病気の接種として数えるかを保健管理センターが決めます。
OCRに AWS Textract を選ぶのは、記録が英文で、手書きが多いからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、手書きの文字の認識は英語のみとされています。接種手帳の手書きの行を英語で書いたものは読めますが、英語以外で手書きされた記録は読めません。 この題材を英文の記録に限るのはこのためです。
この題材で効くのは、読み取りの結果を自分のバケットに暗号化して出させることです。 StartDocumentAnalysis では、OutputConfig で結果を自分の指定したバケットに出させ、KMSKeyId で指定した鍵で暗号化できます。健康診断の結果を含む書類なので、読み取りの結果も原本と同じ扱いで保管します。
03どうやって実装するのか
処理の起点を決める
起点は、受付フォルダ(Amazon S3)に書類が保存されたことです。 受け入れの案内のメールで、提出先の専用のアドレスを伝えておき、そのアドレスに届いた添付をS3へ転送します。保存の通知で AWS Lambda が動きます。
書類は1人分がまとめて届くとは限りません。 記録が先に届き、健康診断書があとから届くことがあります。届いた書類から順に読み、受け入れ予定者ごとに足していきます。 必要な書類がそろった時点で照合をやり直します。
毎週月曜の朝にも1回動かします。 受け入れ予定日まで6週間を切っているのに、書類が届いていない人と、不足の印が付いたまま追加の提出が無い人を一覧にして担当者に送ります。追加の接種や抗体検査に時間がかかるため、週ごとに追いかけます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 予防接種記録 | PDFまたは画像。氏名、生年月日、ワクチンの名前(略称・製品名)、接種日、接種した機関、医師の署名 | 受付フォルダ(Amazon S3) |
| 健康診断書 | 検査日、検査の項目と結果、抗体検査の項目・値・単位、医師の名前と署名 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、キーと値、表とセル、質問への答え、手書きか印字か、信頼度 | AWS Textract |
| 受け入れ予定者の一覧 | 氏名、生年月日、国籍、受け入れの区分、受け入れ予定日、連絡先 | 国際交流課の表 |
| 読み替えの表 | ワクチンの名前(略称・製品名)と、数える病気の対応 | 保健管理センターが作る表 |
| 必要な接種の表 | 受け入れの区分ごとに、必要な病気、回数、数え方の規則、抗体検査で代えられるか | 保健管理センターの医師が決めた表 |
質を決めるのは、下の2つの表です。 読み替えの表に無い名前は、数えずに unknown_vaccine の印を付けて保健師に回します。知らない名前を、似た名前から推し量って数えないためです。
国籍は、日付の書き方の手がかりに使います。 ただし、国籍から書き方を決めつけはしません。海外の大学で発行された記録は、その大学の国の書き方になるためです。手がかりとして画面に並べるだけにします。
データの取得方法を決める
書類は StartDocumentAnalysis で読みます。 1人分が数ページあり、写真のPDFは大きくなるので、非同期の処理を使います。S3の場所と FeatureTypes を渡して始め、完了は NotificationChannel に指定した Amazon SNS のトピックに通知されます。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | FORMS、TABLES、QUERIES | 氏名などの欄、接種の表、名前で受け取りたい項目 |
QueriesConfig | 質問の文と Alias の組 | 氏名・生年月日・検査日を項目名で受け取る |
OutputConfig | 自分の指定したバケットと接頭辞 | 読み取りの結果を自分の管理するバケットに置く |
KMSKeyId | 大学で管理する鍵 | 結果を指定した鍵で暗号化する |
ClientRequestToken | ファイルのハッシュ | 同じ書類で二重に読み取りを始めない |
JobTag | 受け入れ予定者の番号 | 完了の通知から誰の書類かを引く |
Alias | 質問の文 |
|---|---|
NAME | What is the patient's full name? |
DOB | What is the date of birth? |
EXAM_DATE | What is the date of the medical examination? |
PHYSICIAN | What is the name of the physician? |
質問は英語の文書でしか使えず、非同期では1ページあたり30個までです。接種の行は、質問ではなく表として読みます。 1人に10行を超える接種があり、質問の答えは一つの値しか返らないためです。表の CELL を RowIndex、ColumnIndex でたどり、列の見出し(COLUMN_HEADER)で「Vaccine」「Date」「Lot」「Clinic」を分けます。
状態が SUCCEEDED なら、GetDocumentAnalysis で結果を取ります。 1回で返るのは最大1,000ブロックで、NextToken が返る限り呼び直します。各 Block の TextType(HANDWRITING/PRINTED)と信頼度を残し、 手書きで信頼度の低い行は担当者の確認に回します。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます。HEICなどの写真は JPEG に変換します
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは本人に解除したものを頼みます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです
- 文字の大きさの確認 … 検出できる文字の高さの下限は15ピクセルで、150DPIで8ポイントの文字に当たるとされています。接種手帳を遠くから撮った写真は、取り直しを頼みます
- 言語の確認 … 6言語に入らない記録は読み取りに回さず、翻訳を付けて出し直してもらうか、担当者が目で見る一覧に入れます
- 誰の書類かを決める … 送り元のアドレスと件名の受け入れ番号で、受け入れ予定者を決めます。決まらないものは処理を止めます
6番目を軽く見ないでください。 他人の接種の記録を別の人の健康記録に写すのは、転記の誤りではなく、健康の情報の取り違えです。誰の書類か決まらないものは、読み取りに進めません。
AIに処理させる
させるのは、OCRの結果から接種と検査の値を原文のまま取り出し、日付の書き方を記録することです。 数え直しと照合はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 氏名と生年月日 | 原文のまま | 一覧と食い違えば identity_mismatch |
| ワクチンの名前 | 書かれた名前を原文のまま(略称・製品名・混合の表記) | 読めなければ unreadable |
| 接種日 | 原文のまま。数字の並びと区切りの記号を残す | 月と日のどちらとも読めれば date_ambiguous |
| ロット番号・接種した機関 | 原文のまま | 書かれていなければ空 |
| 抗体検査 | 項目、値、単位、検査法の表記、検査日を原文のまま | 単位が無ければ unit_unknown |
| 健康診断書の検査日と署名 | 検査日を原文のまま、医師の署名と名前の有無 | 署名が無ければ not_signed |
date_ambiguous を付ける条件をはっきりさせます。 日付が 数字/数字/数字 の形で、最初の2つの数字がどちらも12以下なら、月と日のどちらが先でも成り立ちます。 その場合は解釈を書かず、印だけを付けます。月の名前(May、Jun)が書かれているもの、片方が13以上のもの、書類のほかの日付から書き方が確かめられるものは、解釈を書いて根拠を残します。
| させないこと | 理由 |
|---|---|
| ワクチンを病気ごとの接種に数え直すこと | 読み替えの表で Python が行う |
| 足りているかの判断 | 必要な接種の表と照らして Python が印を付け、保健師が決める |
| 抗体の値が十分かの判断 | 医学的な判断で、保健師と医師が行う |
| あいまいな日付の解釈を決めること | 国籍や慣れで決めると取り違えが残る |
| 書かれていない接種の補完 | 「通常は接種しているはず」で埋めない |
4行目がいちばん起きやすい失敗です。 出身国が分かると、生成AIはその国の一般的な書き方で日付を読もうとします。記録を発行した機関の国と出身国は一致するとは限らず、 推し量った読み方が正しい日付として健康記録に残ります。
指示内容を固定する
あなたは大学の国際交流課で、海外から受け入れる人が出した
英文の予防接種記録と健康診断書の記載を記録する立場です。
OCRの読み取り結果だけを使ってください。推測で埋めないでください。
【取り出す項目】
name_raw、dob_raw、
doses(配列:vaccine_raw、date_raw、date_parsed、date_basis、
lot_raw、clinic_raw、handwritten、status)、
titers(配列:test_raw、value_raw、unit_raw、method_raw、
date_raw、status)、
exam_date_raw、physician_raw、signed(true / false)
【status の選び方】
- ok ............. 値が読み取れており、その欄の値として解釈できる
- unreadable ..... 文字は検出されているが値として確定できない
- date_ambiguous . 月と日のどちらが先でも成り立つ日付
- unit_unknown ... 抗体検査の単位が書かれていない
- not_signed ..... 健康診断書に医師の署名が無い
【日付の扱い】
- date_raw には書かれた文字をそのまま入れてください。
- 月の名前が書かれている、または片方の数字が13以上で
並びが一つに決まる場合だけ、date_parsed に YYYY-MM-DD を入れ、
date_basis に根拠を書いてください。
- 最初の2つの数字がどちらも12以下なら、date_parsed を空にして
status を date_ambiguous にしてください。
国籍や国の一般的な書き方で決めないでください。
【厳守事項】
- ワクチンの名前は書かれたまま入れてください。
MMR を麻しん・風しん・流行性耳下腺炎に分けたり、
製品名を一般名に直したりしないでください。
- 書かれていない接種を補わないでください。
- 抗体の値が十分か、接種が足りているかを書かないでください。
- 予防接種記録でも健康診断書でもない書類と判断した場合は、
項目を取り出さず document_type に種類を書いてください。
【受け入れ予定者の氏名と生年月日(照合用)】{expected_identity}
【読み取り結果(TextType と信頼度付き)】{textract_result}
「国の一般的な書き方で決めない」を明記しないと、決めます。 指示が無ければ、生成AIはあいまいな日付をいちばんありそうな読み方で埋めます。埋めた日付が正しいかではなく、確かめていないことが記録から消えることが問題です。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、書類ごとに次の形のJSONを受け取ります。
{
"file": "",
"document_type": "immunization_record",
"name_raw": "",
"dob_raw": "14/07/2001",
"doses": [
{ "vaccine_raw": "MMR", "date_raw": "03/09/2002", "date_parsed": "",
"date_basis": "", "handwritten": true, "status": "date_ambiguous" },
{ "vaccine_raw": "Varivax", "date_raw": "21/10/2006", "date_parsed": "2006-10-21",
"date_basis": "first number 21 > 12", "handwritten": false, "status": "ok" }
],
"titers": [
{ "test_raw": "Measles IgG", "value_raw": "", "unit_raw": "", "date_raw": "", "status": "ok" }
]
}
1つ目の理由は、数え直しと照合をプログラムの側に置けることです。 Python が読み替えの表で vaccine_raw を病気ごとの接種に分け、必要な接種の表と照らして印を付けます。
| 印 | 付ける条件 |
|---|---|
ok | 必要な病気のすべてで、表の規則どおりの回数の接種日が確定している |
missing_dose | 必要な病気のどれかで、確定した接種の回数が足りない |
titer_only | 接種の回数は足りないが、その病気の抗体検査の結果がある(判断は保健師) |
date_ambiguous | 回数や間隔の判定に、あいまいな日付が関わっている |
needs_review | unreadable・unit_unknown・unknown_vaccine・identity_mismatch がある |
2つ目は、あいまいな日付を照合から外せることです。 date_parsed が空の接種は、Python が回数にも間隔にも数えず、その病気を date_ambiguous にします。 確定していない日付で「足りている」と出す経路を作りません。
3つ目は、titer_only を保健師の判断に渡せることです。 抗体検査で接種に代えられるかは、必要な接種の表に「代えられるか」の列を持たせたうえで、値を見て保健師が決めます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 書類の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 記録と健康診断書を読み、結果を指定したバケットに暗号化して出す |
| Claude API | API呼び出し | 値の取り出しと日付の書き方の記録 |
| 受け入れ予定者の一覧 | 読み取り | 誰の書類か、受け入れの区分と予定日を引く |
| 健康記録の仕組み | 下書きの書き込み | 担当者が確かめた行だけを確定させる |
| 通知 | メール | 毎週の未着・不足の一覧を担当者に送る |
健康記録には、下書きとして書きます。 担当者が原本と見比べて確かめた行だけを確定にし、未確認の行は保健師の画面で色を変えて出します。 AIの読み取りがそのまま健康記録の正本になる作りにはしません。
本人への連絡は自動で送りません。 不足の連絡は、保健師が追加で求めるものを決めてから、担当者が送ります。
人が確認する
国際交流課の担当者が値を確かめ、保健師が不足と抗体の値を判断します。
identity_mismatchを最初に片付ける … 氏名の綴りや生年月日の書き方の違いか、別人の書類かを確かめますdate_ambiguousの日付を原本で確かめる … 書類の発行元の国、ほかの日付の書き方を見て決め、決めた根拠を記録します。決まらなければ本人に問い合わせます- 手書きで信頼度の低い行を見る … ワクチンの名前と日付を原本と見比べます
- 保健師が
missing_doseとtiter_onlyを判断する … 追加の接種か抗体検査のどちらを求めるかを決めます - 追加の提出を連絡する … 受け入れ予定日から逆算した期限を付けます
2番目を省かないでください。 あいまいな日付を担当者の慣れで決めると、この構成で分けた「読めた値」と「解釈した値」の区別が、確認の段で消えます。 決めた根拠を一言でも残すことが条件です。
目標は、90件をならして1件6分です。 ok の印のものは数分で確かめ、印の付いたものは保健師の判断と本人への連絡まで含めて10分を超えます。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。本人に解除したものを頼む |
| 英語以外の記録 | 読み取りに回さず、翻訳を付けた出し直しを頼むか、担当者が目で見る |
| 誰の書類か決まらない | 処理を止め、担当者が送り元に確かめる |
| 読み替えの表に無いワクチンの名前 | unknown_vaccine。数えずに保健師に回し、表に足すかを決める |
| 接種の表が2ページにまたがる | ページの順につなぎ、切れた行は unreadable |
| 同じ人の書類が出し直される | 版を上げて記録し、前の版との違いを並べる |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページを記録し、そのページを人へ |
4行目は、表を育てる入口です。 保健師が名前ごとに数え方を決めて表に足していくと、数か月で unknown_vaccine はほとんど出なくなります。
記録を残す
- 元の書類と、受け取った日時、送り元、受け入れ予定者の番号
- AWS Textract が返したJSONの全文(指定したバケットに暗号化して保存)
- Claude API が返したJSON(原文と、日付の解釈と根拠)
- 照合の結果と、そのとき参照した読み替えの表と必要な接種の表の版
- 担当者があいまいな日付を決めた根拠と、保健師の判断
- 本人への連絡と、追加で出された書類との対応
5行目が、この構成のいちばん大事な記録です。 後から接種日を問われたとき、原文と、誰がどの根拠でその日付に決めたかが残っていれば説明できます。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと数え直しと照合が自動になり、担当者は印の付いた行を確かめ、保健師が判断します。1件20分が6分になるのはこの段階です。 本格構成で足すのは、受け入れの手続きとの連動です。 在留の手続きや住まいの手配の進み具合と並べて、接種の不足が受け入れの日に響く人を先に出すことができます。 段階を飛ばさないでください。 半自動化で unknown_vaccine と date_ambiguous の多い国や発行元を先に知り、読み替えの表と、提出の案内に書く日付の書き方の説明を整えてから、手続きとの連動に進みます。
05工数削減シミュレーション
導入後 90件 × 6分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 医学部・看護学部・薬学部や附属病院を持ち、海外からの留学生、交換留学生、外国人研究者、臨床実習の受け入れが毎月ある私立大学。受け入れの前に予防接種の記録と健康診断書の提出を求め、国際交流の担当と保健管理センターの職員が英文の記録を読んで健康記録に手で写している場合。足りない接種に気づくのが来日の直前や実習の開始の直前になり、追加の接種や抗体検査が間に合わないことがある場合。
- 海外からの受け入れが年に数名で、目で見て足りる場合。予防接種の記録の提出を求めていない、または必要な接種の基準を大学として決めていない場合(先に基準を決めるのが先です)。記録が英語以外の言語(中国語・韓国語・ベトナム語など)で出されることが多い場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、手書きは英語のみです)。なお、接種や抗体の値が足りているかの医学的な判断と、実習や研究への参加の可否は、保健管理センターの医師・保健師が行うもので、この構成では代替できません。
07最小構成で試す方法
- 過去の受け入れから20人分の記録を選ぶ(手書きの接種手帳、月と日があいまいな日付、混合ワクチン、抗体検査の結果だけのものを必ず入れる)
- 氏名と生年月日を伏せた写しを作る
- 手元の生成AIの画面に1人分ずつ貼り付け、「この予防接種記録から、ワクチンの名前と接種日を書かれたとおりに表にしてください。月と日のどちらが先とも読める日付は解釈せず『あいまい』と書いてください。ワクチンの名前を言い換えないでください」と指示する
- 出てきた表を、当時の健康記録と見比べる
20人分は必ずやってください。 仕組みを組む前に、あいまいな日付が「あいまい」として残るかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の健康記録と同じ接種日が出て、あいまいな日付に印が付いた | OCRのAPIと照合の処理に進む |
| あいまいな日付を一つの読み方で埋めた | 指示を強める。直るまで先に進まない |
| 手書きの行が読めない件が多い | 写真の撮り方の案内が先。 AIの問題ではない |
2行目が出ることは珍しくありません。 失敗ではなく、これまでの転記でも同じ取り違えが起きていたかもしれないと分かったということです。当時の健康記録の日付を、原本で確かめ直すきっかけにしてください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| あいまいな日付が一つの読み方で埋まる | 国の一般的な書き方で決めることを禁じ、date_ambiguous で残す |
| 混合ワクチンを1回とだけ数える | 読み替えの表で病気ごとに分けて数える |
| 知らないワクチンの名前を似た名前で数える | unknown_vaccine にして保健師に回す |
| 抗体の値が十分かをAIが書く | 指示で禁じ、titer_only として保健師に渡す |
| 他人の書類を別の人の記録に写す | 誰の書類か決まらなければ処理を止める |
| 英語以外の手書きの記録を読ませる | 6言語に入らないものは読み取りに回さない |
| 読み取りの結果が暗号化されずに残る | OutputConfig と KMSKeyId で自分のバケットに暗号化して出す |
上の2行が、この構成の失敗のほとんどです。 どちらも、記録に書かれた形を、読み手の慣れで別の形に置き換える誤りです。置き換えはすべて表と人の側で行い、AIの出力には原文を残します。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 受け入れ予定者の氏名、生年月日、国籍、予防接種の記録、健康診断の結果と抗体検査の値です。
- 要配慮個人情報として扱う … 個人情報保護委員会のガイドラインでは、医師等により行われた疾病の予防及び早期発見のための健康診断その他の検査の結果は、要配慮個人情報に当たるとされています。要配慮個人情報が含まれる個人データの漏えい等が発生し、または発生したおそれがある場合は、個人情報保護委員会への報告が必要とされています。予防接種の記録も同じ扱いで管理します
- 取得の範囲と目的を本人に示す … 受け入れの案内で、何のために、どの記録を出してもらい、誰が見るかを示します。同意の取り方は学内の規程と法務の担当と決めます
- 外部へ渡す範囲を絞る … 生成AIに渡すのは読み取り結果と照合用の氏名・生年月日だけです。国籍、連絡先、受け入れの区分は渡しません。 生成AIのサービスと AWS のデータの扱いの条件、利用するリージョンを契約で確かめます
- 見られる人を絞る … 国際交流課の担当者には転記の確認の画面だけを、抗体の値と判断の記録は保健管理センターだけが見られるようにします
- 保存の期間を決める … 受け入れの後に原本と読み取り結果をいつ消すかを決め、健康記録の側の保存の期間と合わせます
誤りが起きた場合のリスクは、接種日を取り違えて不足を見落とすことと、他人の記録を写すことの2つです。 前者はあいまいな日付を確定させない設計で、後者は誰の書類か決まらなければ止める設計で防ぎます。
10まず何から始めるか
1週目:2つの表を作る
保健管理センターが、ワクチンの名前の読み替えの表と、受け入れの区分ごとの必要な接種の表を作ります。数え方の規則(回数、間隔、抗体検査で代えられるか)を表の列にします。
2週目:20人分で試す
過去の記録から20人分を選び、氏名を伏せて手元の生成AIの画面で接種の表を作らせます。あいまいな日付が「あいまい」として残るかを最優先で見ます。
3週目:提出の案内を直す
受け入れの案内に、日付を「日・月の名前・年」で書いてもらうお願いと、提出先の専用のアドレスを足します。あいまいな日付が入口で減ります。
4週目:受付フォルダから下書きまでをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、健康記録に下書きを書くところまで作ります。この時点では、臨床実習生と病院で研究する研究者だけを対象にします。
2か月目: 対象をすべての受け入れに広げ、unknown_vaccine と date_ambiguous の件数を毎週数えて表と案内を直します。3か月目以降: 毎週の未着・不足の一覧を運用に乗せ、1件20分が何分になったかを実測します。不足の連絡が、書類が届いた週のうちに本人へ届くようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 医師等により行われた疾病の予防及び早期発見のための健康診断その他の検査の結果が要配慮個人情報に当たること。要配慮個人情報が含まれる個人データの漏えい等が発生し、または発生したおそれがある場合に個人情報保護委員会への報告が必要とされること | 個人情報保護委員会: 個人情報の保護に関する法律についてのガイドライン(通則編) | 2026-10-08 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。質問は英語の文書だけで、非同期で1ページ30個までであること。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語であること。手書きは英語のみであること。文字の高さの下限が15ピクセル(150DPIで8ポイント)であること | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
StartDocumentAnalysis の FeatureTypes、QueriesConfig、ClientRequestToken、JobTag、NotificationChannel(Amazon SNS への完了の通知)、OutputConfig(結果を指定したバケットに出す)、KMSKeyId(指定した鍵で結果を暗号化する) | AWS: StartDocumentAnalysis | 2026-10-08 |
GetDocumentAnalysis の JobStatus(IN_PROGRESS/SUCCEEDED/FAILED/PARTIAL_SUCCESS)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings | AWS: GetDocumentAnalysis | 2026-10-08 |
Block が TextType(HANDWRITING/PRINTED)、RowIndex/ColumnIndex、EntityTypes(COLUMN_HEADER など)、Confidence を持つこと | AWS: Block | 2026-10-08 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-08 |
必要な接種の種類・回数・数え方と、抗体の値の判断は、学内の保健管理センターの医師が関係する学会のガイドライン等を参照して決めてください。 本記事は個人情報保護委員会のガイドラインとAWSの公開仕様で確認できた範囲だけを扱っており、接種の基準そのものは扱っていません。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1034)についてのご相談はこちらから。
