健康診断の結果票を読み取り、再検査が要る職員を抽出して受診勧奨の連絡を作る
健診機関から届く健康診断の結果票を読み取り、項目ごとの判定を書かれたとおりに抽出します。再検査や精密検査が要る職員の一覧と、本人に送る受診勧奨の連絡文の下書きを作ります。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 連携・自動化
- Google Apps Script/Make
- 対象業界
- 介護/医療/物流/製造
- 対象部門
- 人事
- 対象業務
- データ入力・転記/書類作成
- 主な課題
- 人手が足りない/入力作業が多い/期限・対応漏れが起きる
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 健診機関から届いた結果票(紙・PDF)を、健康管理担当が受け取る。紙はスキャンして共有ドライブに保存する
- 1枚ずつ開き、職員の氏名・生年月日・受診日・健診機関を確かめ、人事システムの職員番号と照合する
- 項目ごとの判定と総合判定を読み、健診管理表に転記する
- 健診機関ごとの判定区分を自法人の区分(異常なし/経過観察/要再検査/要精密検査・要治療/治療中)に読み替える
- 要再検査・要精密検査の職員を抜き出し、本人宛ての受診勧奨の連絡を作って送る
- 期限までに受診の報告が無い職員に、催促の連絡を送る
- 人紙の結果票をスキャンし、PDFとあわせて健康管理担当だけが見られる受付フォルダに保存する
- 自動定期的に動くスクリプトが新しいファイルを見つけ、形式と解像度を確かめる
- 自動OCRが結果票のキーと値のペア、表、信頼度を返す
- 自動生成AIが、職員の識別情報と項目ごとの判定を書かれたとおりに抽出する
- 自動スクリプトが人事システムの一覧で職員を照合し、健診機関ごとの対応表で判定を自法人の区分に読み替える
- 自動要再検査・要精密検査の職員について、本人宛ての受診勧奨の連絡文の下書きを作り、報告の期限を健診管理表に入れる
- 人保健師が確認画面で、結果票の画像と抽出結果、読み替え結果を並べて確かめる
- 人連絡文を必要に応じて直し、本人へ送る
- 自動期限が近づいた未報告の職員を毎週一覧にし、催促の下書きを作る
各工程の詳しい説明を読む
- 健診機関から届いた結果票(紙・PDF)を、健康管理担当が受け取る。紙はスキャンして共有ドライブに保存する
- 1枚ずつ開き、職員の氏名・生年月日・受診日・健診機関を確かめ、人事システムの職員番号と照合する
- 項目ごとの判定と総合判定を読み、健診管理表に転記する
- 健診機関ごとの判定区分を自法人の区分(異常なし/経過観察/要再検査/要精密検査・要治療/治療中)に読み替える
- 要再検査・要精密検査の職員を抜き出し、本人宛ての受診勧奨の連絡を作って送る
- 期限までに受診の報告が無い職員に、催促の連絡を送る
(a)転記が終わらない。 1枚に20以上の項目が並び、判定の欄は項目ごとにあります。240枚を写すだけで、保健師の時間の多くが消えます。 保健指導や面談に使うはずの時間です。
(b)読み替えを人の記憶に頼っている。 「この機関のCは再検査、あの機関のCは経過観察」という区別を、担当者が覚えて読み替えています。担当が替わった月に、再検査の対象者が一覧から落ちたことがあります。
(c)催促が漏れる。 受診勧奨を送った日と、報告の期限を表計算で管理していますが、毎月の新しい結果票の処理に追われて、催促の確認が後回しになります。
(d)知られたくない情報が、手作業の途中で広がりやすい。 転記のために印刷した結果票が机に残る、所属の共有アドレスに連絡を送ってしまう。手作業の工程が多いほど、健康情報が本人と担当以外の目に触れる機会が増えます。
- 【人】 紙の結果票をスキャンし、PDFとあわせて健康管理担当だけが見られる受付フォルダに保存する
- 【自動】 定期的に動くスクリプトが新しいファイルを見つけ、形式と解像度を確かめる
- 【自動】 OCRが結果票のキーと値のペア、表、信頼度を返す
- 【自動】 生成AIが、職員の識別情報と項目ごとの判定を書かれたとおりに抽出する
- 【自動】 スクリプトが人事システムの一覧で職員を照合し、健診機関ごとの対応表で判定を自法人の区分に読み替える
- 【自動】 要再検査・要精密検査の職員について、本人宛ての受診勧奨の連絡文の下書きを作り、報告の期限を健診管理表に入れる
- 【人】 保健師が確認画面で、結果票の画像と抽出結果、読み替え結果を並べて確かめる
- 【人】 連絡文を必要に応じて直し、本人へ送る
- 【自動】 期限が近づいた未報告の職員を毎週一覧にし、催促の下書きを作る
7番目で保健師が見るのは、全件の読み替え結果です。 ただし、判定が ok で照合も一致したものは一覧で流し見、判定が読めない・健診機関の対応表に無い表記・職員が照合できないものだけを画像まで開きます。
5番目の読み替えを生成AIにさせないのが、この設計の要です。 対応表なら、誰がいつ動かしても同じ結果になり、表を直せば全件の読み替えが同じように変わります。
02今回想定するシステム構成
結果票(紙・PDF) │ 紙はスキャン ▼ 受付フォルダ(Google ドライブ、健康管理担当のみ閲覧可) ▼【トリガー】時間主導型トリガー(定期実行) Google Apps Script ── 形式・解像度・ページ数の確認 ▼ Google Document AI(Form Parser) │ キーと値のペア・表・信頼度を返す ▼ Gemini API ── 識別情報と項目ごとの判定を、書かれたとおりに抽出 ▼ Google Apps Script ── 職員の照合(人事システムの一覧) │ 判定の読み替え(健診機関ごとの対応表) ├──▶ 照合できない・対応表に無い表記 ──▶【保健師が確認】 ▼ 健診管理表(Google スプレッドシート)+ 受診勧奨の下書き ▼ 【保健師が確認して本人へ送る】 ──▶ 期限の管理と催促の下書き
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Google Document AI(Form Parser) | Azure AI Document Intelligence |
| 生成AI | Gemini API(識別情報と判定の抽出、連絡文の下書き) | Claude API、OpenAI API |
| 連携 | Google Apps Script(ファイルの検知、職員の照合、判定の読み替え、期限の管理) | Make |
| 保管 | Google ドライブ(受付フォルダと処理済みフォルダ) | Microsoft SharePoint |
人事システムには書き込みません。 職員の照合には、人事システムから書き出した職員番号・氏名・生年月日・所属・連絡先の一覧を使います。健診管理表は健康管理担当だけが見られる場所に置き、人事の他の担当者とは分けます。
OCRに Form Parser を選ぶのは、結果票がキーと値の組と表でできているからです。 Document AI のプロセッサ一覧では、Form Parser はキーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを取り出すとされ、対応言語に日本語(ja)が含まれています。
ページ数の上限は、オンライン(同期)の処理で15ページ、バッチ(非同期)の処理で100ページです。 結果票は1人1〜4ページ程度なので、1人分ずつ同期で送ります。施設ごとにまとめてスキャンした束は、先に1人分ずつに分けます。
生成式の Custom Extractor は使いません。 プロセッサ一覧では、Custom Extractor の生成AIによる抽出は公式に対応している言語が英語とされています。日本語の結果票には、Form Parser で構造を取り、抽出は生成AIで行う組み合わせにします。
03どうやって実装するのか
処理の起点を決める
受付フォルダに新しいファイルが入ったかを、定期実行で確かめます。 Google Apps Script の時間主導型トリガーは、毎分から月1回までの間隔で動かせます。結果票は数日おきにまとめて届くので、平日の業務時間中に1時間ごとで十分です。
トリガーの実行時刻は少しずれることがあります。 公式のガイドでは、午前9時に設定した場合、9時から10時の間のどこかで動くとされています。「朝9時ちょうどに一覧ができている」前提で運用を組まないでください。
もう一つ大事なのは、トリガーが作成した人のアカウントで動くことです。 インストール型トリガーは、常に作成した人の権限で実行されます。健康管理担当の共用アカウントで作るか、担当の異動時に作り直す手順を決めておきます。 作った人が異動して権限を外されると、処理が黙って止まります。
処理が終わったファイルは処理済みフォルダへ移します。移すのは成功したときだけにし、受付フォルダに残った数を毎朝見ます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 結果票ファイル | PDFまたは画像。届いた日時と健診機関 | 受付フォルダ |
| 読み取り結果 | キーと値のペア(fieldName/fieldValue)、表(headerRows/bodyRows)、信頼度 | Google Document AI |
| 職員の一覧 | 職員番号、氏名、フリガナ、生年月日、所属、夜勤の有無、連絡用のメールアドレス | 人事システムからの書き出し |
| 判定区分の対応表 | 健診機関ごとの判定の表記と、自法人の区分の対応 | 健康管理担当が作る表 |
| 受診勧奨の文面の型 | 区分ごとの連絡文の型と、報告の期限の日数 | 保健師が作る表 |
夜勤の有無の列は、次の健診の時期を決めるために持ちます。 夜勤に就く職員は6か月ごとに受けるので、結果票を処理した時点で次の受診月を健診管理表に入れておくと、受け忘れの案内も同じ仕組みで出せます。
質を決めるのは、判定区分の対応表です。 4つの健診機関の判定区分を、自法人の5つの区分に1行ずつ対応させます。健診機関が区分の定義を変えたら、この表を直すだけで済むようにします。
| 健診機関 | 結果票の表記 | 自法人の区分 |
|---|---|---|
| A健診センター | C | 要再検査 |
| A健診センター | D | 要精密検査・要治療 |
| B病院 | 要経過観察(再検) | 要再検査 |
| C健診機関 | D2 | 要精密検査・要治療 |
同じ「C」でも、機関によって意味が違います。 表の1行目と3行目のように、同じ区分に行き着く表記が機関ごとに違うのが普通です。
データの取得方法を決める
スクリプトから、Form Parser のプロセッサを呼び出します。返ってくる Document オブジェクトのうち、使うのは3つです。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 全文 | text | 他の要素が位置(startIndex/endIndex)で参照する元の文字列 |
| キーと値のペア | formFields の fieldName と fieldValue、信頼度 | 氏名、生年月日、受診日、総合判定など、欄と値が組になっているもの |
| 表 | tables の headerRows と bodyRows | 項目名・結果の値・判定が並ぶ表 |
表は、行や列をまたぐセルを持たない前提で読みます。 公式の説明では、Form Parser は結合されていないセルだけを認識し、rowSpan と colSpan は常に1とされています。結果票の「血圧」の下に「最高」「最低」が並ぶような結合セルは、行として分かれて返ります。 項目名が空の行は、直前の行の項目名を引き継いで読みます。
職員の照合は、職員番号が先、氏名と生年月日が後です。 結果票に職員番号が印字されていればそれで引き、無ければ氏名と生年月日の両方が一致するものを探します。
AIへ渡す前に整形する
- 形式の確認 … 対応形式はPDF、GIF、TIFF、JPEG、PNG、BMP、WebPなどです。それ以外は変換します
- 解像度の確認 … 公式のガイドでは、正確なOCRには最低200dpi、300dpi以上で最適とされています。紙のスキャンは300dpiに設定します
- JPEGの圧縮に注意 … JPEGは非可逆な形式で、圧縮が精度を下げることがあるとされています。スキャナの保存形式はPDFかPNGにします
- 1人分ずつに分ける … 施設ごとの束は、表題と氏名欄の繰り返しでページを区切ります
- ページ数の確認 … 同期の処理は15ページまでです。1人分がこれを超えることはまれですが、超えたらバッチに回します
- 重複の検知 … 同じ職員・同じ受診日の結果票がすでにあれば、再送として印を付けます
2番目と3番目を軽く見ないでください。 判定の記号は1文字です。「C」と「G」、「D1」と「D」の読み違いが、そのまま区分の読み替えの誤りになります。
AIに処理させる
させるのは、結果票から識別情報と項目ごとの判定を書かれたとおりに抜き出し、読めない箇所を分けることだけです。
| 抜き出すもの | 抜き出し方 | 判断できないときの扱い |
|---|---|---|
| 氏名・生年月日 | 書かれたとおりに写す | 信頼度が低ければ unreadable |
| 職員番号 | 印字があれば写す | 無ければ missing(照合は氏名と生年月日で行う) |
| 受診日・健診機関名 | 書かれたとおりに写す | 複数の日付があれば ambiguous |
| 項目ごとの判定 | 項目名と、判定欄の文字をそのまま写す | 判定欄が空なら missing |
| 総合判定 | 総合判定欄の文字をそのまま写す | 欄が無い書式なら missing |
| 医師のコメント | 所見欄の文章をそのまま写す | 手書きで読めなければ unreadable |
させないことも、同じ重さで決めておきます。
| させないこと | 理由 |
|---|---|
| 数値から判定を作ること | 判定は健診機関の医師が付けるもの |
| 判定の記号を自法人の区分に読み替えること | 対応表で機械的に行う。AIの読み替えは再現できない |
| 判定欄が空のときに、数値や他の項目から埋めること | 送り漏れか、健診機関への問い合わせが要る事案 |
| 病名や見込みを連絡文に書き足すこと | 本人への説明は医師と保健師が行う |
| 就業上の措置の要否に触れること | 産業医の意見を聴いて事業者が決めること |
1行目と3行目が、最も起きやすい逸脱です。 生成AIは、血圧の値が高ければ「要再検査」と書き足したくなります。判定欄が空なのは、多くの場合、その項目を健診で測っていないか、機関の書式で別の欄にあるからです。 埋めると、その確認の機会が消えます。
指示内容を固定する
あなたは事業者の健康管理担当の補助です。
健診機関が作成した健康診断の結果票の読み取り結果から、
識別情報と、項目ごとの判定を書かれたとおりに抜き出してください。
推測で埋めないでください。医学的な判断をしないでください。
【抜き出すもの】
1. 氏名、生年月日、職員番号(印字があれば)
2. 受診日、健診機関名
3. 項目ごとの:項目名、結果の値、判定欄の文字
4. 総合判定欄の文字
5. 医師のコメント欄の文章
【status の選び方】
- ok ......... 値が書かれており、読み取れている
- missing .... 書かれていない。欄名だけがあって値が空の場合も missing
- unreadable . 文字は検出されているが信頼度が低く、確定できない
- ambiguous .. 候補が複数あり、1つに決められない
迷ったときに ok を選ばないでください。
【厳守事項】
- 判定欄の文字は、記号も含めて書かれたとおりに写してください。
「C」を「要再検査」のように言い換えないでください。
- 判定欄が空の場合は missing にしてください。
結果の値や基準範囲から判定を作らないでください。
- 基準範囲の外にある値を見つけても、判定を書き足さないでください。
- 医師のコメントは、書かれた文章をそのまま写してください。要約しないでください。
- evidence には、根拠にした文字列をそのまま写してください。
- confidence は OCR が返した値をそのまま入れてください。
- 結果票でない書類(送付状、請求書、問診票など)と判断した場合は、
抜き出しをせず document_type に種類を書いてください。
【読み取り結果】{form_parser_result}
【健診機関名(受付時に分かっている場合)】{facility_hint}
「言い換えない」と「数値から判定を作らない」を、分けて書いているのには理由があります。 前者だけを書くと、判定欄が空のときに値から作り、後者だけを書くと、記号を親切に言い換えます。どちらも読み替えを対応表から奪う動きなので、両方を明記します。
出力形式を固定する
次の形のJSONで受け取ります。 Gemini API の構造化出力で JSON スキーマを指定し、status は enum で4つの値に絞ります。値が無いことを表す項目は、型に null を含めて表します。
{
"document_type": "checkup_result",
"person": {
"name": { "value": "", "status": "ok", "confidence": 0.0, "evidence": "" },
"birth_date": { "value": "", "status": "ok", "confidence": 0.0, "evidence": "" },
"employee_no": { "value": null, "status": "missing", "confidence": null, "evidence": "" }
},
"exam_date": { "value": "", "status": "ok", "evidence": "" },
"facility": { "value": "", "status": "ok", "evidence": "" },
"items": [
{ "item": "血圧", "result": "", "grade_raw": "C", "status": "ok", "confidence": 0.0 }
],
"overall_grade_raw": { "value": "", "status": "ok", "evidence": "" },
"doctor_comment": { "value": "", "status": "ok", "evidence": "" }
}
1つ目の理由は、grade_raw に書かれたとおりの表記だけを持たせられることです。 自法人の区分は、スクリプトが facility と grade_raw の組で対応表を引いて付けます。対応表に無い組は、区分を空にして保健師へ回します。
2つ目は、結果の検証をスクリプトの側で行えることです。 公式のガイドでは、構造化出力は構文として正しいJSONを返すが、値そのものは必ずアプリケーションの側で検証することとされています。
| 検証 | 引っかかったときの扱い |
|---|---|
grade_raw が対応表にある表記か | 無ければ区分を空にし、保健師へ |
evidence の文字列がOCRの全文に含まれるか | 含まれなければ、AIが作った文字列とみなして保健師へ |
| 生年月日が職員の一覧と一致するか | 一致しなければ照合保留 |
items の判定がすべて missing | 書式の読み違いを疑い、画像を開く |
2行目の検証がいちばん効きます。 写したはずの文字列が元の全文に無ければ、それは写したのではなく作ったものです。
連絡文の型と期限も、区分ごとに表で持ちます。 下書きは生成AIに作らせますが、型に無い内容(病名、見込み、生活上の指示)を足していないかをスクリプトで確かめます。
| 自法人の区分 | 連絡の型 | 報告の期限 | 催促 |
|---|---|---|---|
| 要再検査 | 再検査の受診のお願い | 受診勧奨から1か月 | 期限の1週間前と当日 |
| 要精密検査・要治療 | 精密検査・受診のお願い(保健師の連絡先つき) | 受診勧奨から1か月 | 期限の1週間前。未報告なら保健師が面談を打診 |
| 経過観察・異常なし・治療中 | 連絡なし(結果票の本人への通知は別の手順) | - | - |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ | Google Apps Script の定期実行 | 新しいファイルを見つける |
| Google Document AI | API呼び出し | キーと値のペア、表、信頼度を返す |
| Gemini API | API呼び出し | 識別情報と判定の抽出、連絡文の下書き |
| 職員の一覧 | スプレッドシートの読み取り | 職員番号と、氏名・生年月日で照合する |
| 健診管理表 | スプレッドシートへの書き込み | 区分、報告の期限、連絡の状態を記録する |
| メール | 下書きの作成まで | 本人宛ての受診勧奨と催促。送信は保健師が行う |
連絡は本人のメールアドレスにだけ送ります。 所属の共有アドレスや上司を宛先・写しに入れません。下書きの宛先欄をスクリプトが職員の一覧から入れ、保健師が確かめてから送ります。
人が確認する
- 照合保留を先に見る … 職員が特定できないものです。別人の結果票を別の職員に紐付けると、その職員に他人の健康情報が届きます
- 区分が空のものを見る … 対応表に無い表記です。健診機関に定義を確かめ、対応表に行を足します
- 要精密検査・要治療を見る … 医師のコメントと合わせて読み、連絡の前に保健師が本人と話すべきものを分けます
- 残りを一覧で流し見る … 区分と下書きの宛先が合っているかを見ます
- 下書きを直して送る … 文面を本人の状況に合わせて直します
催促の下書きは、毎週月曜に一覧で出します。 期限の近い順に並べ、報告があった職員は、本人から届いた結果の写しを健康管理担当が確かめてから「報告済み」にします。報告済みにする操作を自動にしないのは、本人が別の職員の書類を取り違えて出すことがあるからです。
3番目は、この構成が保健師の判断を置き換えない箇所です。 同じ「要精密検査」でも、連絡の文面だけで済むものと、先に面談を設けたほうがよいものがあります。それを見分けるのは保健師です。
目標は、240枚をならして1枚2分です。 照合も区分も付いたものは数十秒、照合保留や要精密検査は数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 解像度が足りず判定の記号が読めない | 200dpi以上、できれば300dpiで取り直す。健診機関にPDFでの送付を頼む |
| 対応表に無い判定の表記が出る | 区分を空にして保健師へ。健診機関に定義を確かめ、表に足す |
| 職員が照合できない | 照合保留。旧姓・通称での受診を先に疑う |
| 1ファイルに複数の職員 | 表題と氏名欄で分割し、再投入する |
| 結果票でない書類が混ざる | document_type を見て抜き出さずに戻す |
| 同じ職員の結果票が再送される | 職員・受診日で照合し、区分を上書きする前に保健師が確かめる |
| 判定欄が空の項目が多い | その項目を受けていない書式のことが多い。健診機関の実施項目の一覧と照らす |
| 本人が他院で再検査を受けて結果を出す | 本人が自発的に出したものとして受け付ける。受診先へ直接照会しない |
| OCRや生成AIが応答しない | 受付フォルダに残す。処理済みへ移すのは成功時だけ |
| トリガーが動いていない | 作成した人のアカウントの権限を確かめる。受付フォルダに残った数で気づく |
上から3行目は、医療・介護の職場で特に多いものです。 職場では旧姓で働き、健診機関には戸籍の氏名で登録している職員がいます。職員の一覧に旧姓・通称の列を持たせておくと、照合保留が大きく減ります。
記録を残す
- 元の結果票ファイルと、届いた日時・健診機関
- OCRが返したJSONと、生成AIが返したJSON
- 読み替えに使った対応表の版と、付けた区分
- 照合に使った職員の一覧の版と、照合の結果(一致・保留・保健師が決めた職員番号)
- 受診勧奨・催促の下書き、送った日時、報告の期限、報告の有無
- 保健師が区分や照合を直した記録
3つ目で対応表の版を残すのは、表を直すと過去の区分の意味が変わるからです。 版が残っていれば、どの時点の表でどの職員に連絡したかを後から追えます。
記録の閲覧は健康管理担当に限ります。 このログは結果票の中身そのものです。人事の他の担当者が見られる場所に置かないでください。
04実装レベルの3段階
最小構成は確かめるための段階です。 黒塗りの手間があるので、240枚には使えません。 半自動化で、1枚9分が5分程度になります。 転記は自動になりますが、読み替え、対象者の抜き出し、連絡の作成が残ります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、読み替えと連絡の作成が、1枚ずつの手作業だからです。 半自動化の段階で1か月回すと、対応表に無い表記がどれだけ出るかが分かります。 表を育ててから本格構成に進むと、保健師に回る件数が減ります。
05工数削減シミュレーション
導入後 240件 × 2分 ÷ 60 = 8 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 誕生月ごとの定期健康診断や、夜勤・深夜業の従事者の健康診断で、結果票が毎月まとまって届く医療法人・介護事業者・工場・物流拠点。複数の健診機関を使っていて、結果票の書式と判定区分の表記が機関ごとに違う場合。保健師や衛生管理者が結果票を1枚ずつ読み、再検査の対象者を一覧に写している場合。
- 健診機関から結果がデータ(CSVなど)で届き、判定区分がすでにそろっている場合。職員が数十名で、年1回の一斉健診しかない場合。なお、就業上の措置の要否や、どこまでを受診勧奨の対象にするかといった判断は、産業医と保健師が行うものであり、この構成では代替できません。
07最小構成で試す方法
- 先月届いた結果票から30枚を選ぶ(4つの健診機関の書式がすべて入るようにする)
- 氏名・生年月日・職員番号を黒塗りにする
- 手元の生成AIの画面に1枚ずつ貼り付け、「項目ごとの判定欄の文字と総合判定を、書かれたとおりに抜き出してください。言い換えないでください。判定欄が空なら空のままにし、数値から判定を作らないでください」と指示する
- 出てきた判定を、当時の健診管理表の転記と突き合わせる
- 並行して、4つの健診機関の判定区分の対応表を作る
30枚は必ずやってください。 見たいのは、判定の記号を言い換えずに写せるかと、空欄を埋めないかの2点です。
| 出てきた内容 | 判断 |
|---|---|
| 当時の転記と同じ判定が出た | OCRとスクリプトの連携に進む |
| 記号を言い換えた、空欄を埋めた | 指示の書き方で直る。構成は有効 |
| 記号の読み違いが多い | スキャンの設定が先。 300dpiとPDF保存に変える |
5番目の対応表づくりは、試行の結果にかかわらず必要です。 表ができていないと、AIが正しく写せても区分が付きません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 判定の記号を言い換えて返す | 「言い換えない」を明記し、grade_raw をOCRの全文と照合する |
| 判定欄が空なのに値から判定を作る | 「数値から判定を作らない」を別に明記する。空欄は保健師へ |
| 同じ記号が機関ごとに違う意味 | 健診機関と表記の組で対応表を引く。 記号だけで引かない |
| 結合セルの項目名が空の行になる | 結合されていないセルだけが認識される。直前の行の項目名を引き継ぐ |
| 記号の1文字を読み違える | 200dpi以上、できれば300dpi。JPEGではなくPDFかPNGで保存する |
| 旧姓で受診した職員が照合できない | 職員の一覧に旧姓・通称の列を持たせる |
| トリガーが止まっても気づかない | 作成した人の権限で動く。共用アカウントで作り、残数を毎朝見る |
| 連絡が上司や共有アドレスに届く | 宛先は職員の一覧の本人アドレスだけにする。送信は保健師 |
| 人事の他の担当者が健診管理表を見られる | 保管場所と閲覧権限を分ける。取扱規程に書く |
上の3行が、この構成の失敗のほとんどです。 どれも「判定」を誰が決めるかがあいまいになるところから始まります。判定は健診機関の医師が付け、読み替えは対応表が行い、AIは写すだけという線を守れば、残りは運用の問題です。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 職員の氏名、生年月日、健康診断の結果の値と判定、医師のコメントです。ほとんどが要配慮個人情報です。
- 取扱規程に沿って、触れる人と範囲を決める … 厚生労働省の「労働者の心身の状態に関する情報の適正な取扱いのために事業者が講ずべき措置に関する指針」(令和4年3月31日改正)は、事業者が取扱規程を定め、情報を取り扱う者とその権限、取り扱う情報の範囲などを決めることを求めています。この構成で誰が何に触れるかを、規程に書いてから動かします
- 情報の分類ごとに扱いを変える … 同じ指針では、健康診断の結果(法定の項目)や法定の項目と同一の再検査の結果は取扱規程で適正な取扱いを定めて運用する情報、精密検査の結果や保健指導の結果はあらかじめ本人の同意を得ることが必要な情報に分けられています。精密検査の結果の提出を求めるときは、同意の取り方を先に決めます
- 本人が出した情報と、医療機関に問い合わせる情報を分ける … 指針では、本人が自発的に提出した情報は同意を得たものと解される一方、事業者が医療機関に直接問い合わせる場合は別途本人の同意が要るとされています。受診の報告を本人からもらう形にし、健診機関や受診先に直接照会する処理は組み込みません
- 不利益な取扱いにつながる使い方をしない … 指針は、心身の状態の情報を理由とした解雇や退職勧奨などの不利益な取扱いを原則として行ってはならないとしています。健診管理表の区分を、配置や評価の資料に流用しないでください
- 事後措置は産業医の意見を聴いて決める … 厚生労働省のリーフレットは、健康診断の実施、有所見者についての医師からの意見聴取、医師の意見を勘案した事後措置は、いずれも労働安全衛生法に基づく事業者の義務としています。この構成が作るのは受診勧奨の下書きまでで、就業上の措置には触れません
- 外部のAIに渡す範囲を決める … 生成AIに渡すのは読み取り結果です。利用する環境の契約で、入力が学習に使われないことと、処理される場所を確かめます
誤りが起きた場合のリスクは、受診勧奨の送り漏れと、他人の健康情報の誤送付の2つです。 前者は読み替えを曖昧にすると起き、後者は照合を急ぐと起きます。前者は対応表で、後者は照合保留と保健師の確認で防ぎます。
10まず何から始めるか
1週目:取扱規程と対応表を確かめる
自法人の健康情報の取扱規程を読み、結果票に触れる人、健診管理表を見る人、連絡を送る人がこの構成と合っているかを確かめます。並行して、4つの健診機関の判定区分の説明を取り寄せ、対応表の最初の版を作ります。
2週目:30枚で試す
先月の結果票から30枚を選び、黒塗りにして手元の生成AIの環境に貼り付けます。判定の記号を言い換えていないか、空欄を埋めていないかを当時の転記と突き合わせます。
3週目:スキャンの設定と職員の一覧を整える
スキャナを300dpi・PDF保存に変えます。人事システムから職員の一覧を書き出し、旧姓・通称の列を足します。
4週目:受付フォルダから健診管理表までをつなぐ
Google Apps Script で受付フォルダを定期的に見て、Document AI と Gemini API を呼び、抜き出した判定を健診管理表に書き出すところまで作ります。この時点では区分の読み替えも連絡の下書きもせず、抜き出しだけを保健師が確かめます。
2か月目: 対応表での読み替えと職員の照合を足し、照合保留と区分が空のものの件数を毎週数えます。3か月目以降: 受診勧奨と催促の下書き、期限の管理を足し、1枚9分が何分になったかを実測します。対応表に無い表記がほとんど出なくなり、催促の漏れが無くなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Form Parser がキーと値のペア(エンティティとチェックボックス)、表、一般的なエンティティを取り出し、日本語に対応すること。同期15ページ・バッチ100ページが上限であること。Custom Extractor の生成AIによる抽出が公式には英語対応であること | Google Cloud: Processor list | 2026-09-29 |
Document の text、formFields(fieldName/fieldValue)、tables(headerRows/bodyRows)、startIndex/endIndex による参照。Form Parser が結合されていないセルだけを認識し rowSpan・colSpan が常に1であること | Google Cloud: Handle the processing response | 2026-09-29 |
| 対応するファイル形式(PDF、GIF、TIFF、JPEG、PNG、BMP、WebP など)。正確なOCRには最低200dpi、300dpi以上が最適であること。JPEGの圧縮が精度を下げうること | Google Cloud: Supported files | 2026-09-29 |
構造化出力で JSON スキーマを指定できること。enum や required が使え、null を型に含めて値が無いことを表せること。構文は正しくても値はアプリケーション側で検証すべきこと | Google AI for Developers: Structured outputs | 2026-09-29 |
| 時間主導型トリガーが毎分から月1回までの間隔で動くこと。実行時刻が少しずれること。インストール型トリガーが作成した人のアカウントで動くこと | Google Apps Script: Installable triggers | 2026-09-29 |
| 心身の状態の情報のほとんどが要配慮個人情報に当たること。取扱規程に定めるべき事項。健康診断の結果(法定の項目)・同一項目の再検査の結果と、精密検査の結果・保健指導の結果など本人同意が要る情報の分類。自発的な提出と医療機関への直接の問い合わせの扱い。不利益な取扱いの禁止。令和4年3月31日改正であること | 厚生労働省: 労働者の心身の状態に関する情報の適正な取扱いのために事業者が講ずべき措置に関する指針 | 2026-09-29 |
| 健康診断の実施、有所見者についての医師からの意見聴取、医師の意見を勘案した事後措置が労働安全衛生法に基づく事業者の義務であること。結果を労働者に通知し、事業者も保存しなければならないこと | 厚生労働省・都道府県労働局: 職場の健康診断実施強化月間のリーフレット | 2026-09-29 |
どの情報を誰が扱うか、受診勧奨の対象をどこまでとするかは、自社の取扱規程と、産業医・保健師の判断に従ってください。 本記事は公開されている製品のドキュメントと厚生労働省の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0327)についてのご相談はこちらから。
