YONAPO RESEARCH
研究記録
MedDSL(仮称)

RESEARCH / RECORD

MedDSL(仮称)調査(R1〜R6)R3

R3:実ファイルの取得・初期照合

原文 docs/research/03-acquisition.md

11 KB

GitHubで見る

版 be280c0

この文書の目次 5項目

実施日:2026-10-18。選定した 4 ファイルを公式配布元から取得し、初期のファイル検査を完了しました。保存先は Git 管理外の data/research/r3/、版・取得日時・サイズ・SHA-256・検査結果は 資料台帳 に記録しました。

RxNorm の資料提供:Courtesy of the U.S. National Library of Medicine。NLM による本プロジェクトの推薦を意味しません。

取得結果

資料 ローカルファイル バイト数 公表値との照合・初期検査
RxNorm CPC 2026-09-08 RxNorm_full_prescribe_09082026.zip 74,751,736 公表 MD5 は現行ページ本文で未確認。SHA-256・MD5 を計算し、CRC・README の版・RRF 構造を確認
RxNorm CPC 2026-10-05 RxNorm_full_prescribe_10052026.zip 74,994,831 公表 MD5 a3bfab544c6a67c127ebcd10ab914aa9 と一致。CRC・README の版・RRF 構造を確認
FHIR Procedure R4 v4.0.1 fhir-procedure-4.0.1.html 369,317 SHA-256・MD5 を計算。ページ名・版・performed[x] を確認。公表ハッシュとの照合は未実施
FHIR Procedure R5 v5.0.0 fhir-procedure-5.0.0.html 437,501 SHA-256・MD5 を計算。ページ名・版・occurrence[x] を確認。公表ハッシュとの照合は未実施

公表 MD5 の参照元は NLM の配布一覧 です。取得 URL は台帳にある日付・版付きのものを使いました。9 月版の計算 MD5 は 88bbe4cefabd8e71f58651c1c3188646 ですが、公表値を現行本文で再確認できていないため、独立した公表値との一致としては扱っていません。

公表値との照合、ZIP の CRC、今回計算した SHA-256 は別の確認です。CRC は破損の検出、SHA-256 は取得したバイト列の固定と再検査に使います。自分たちで計算した値だけから、発行者の公表値とも一致したとはしません。

RxNorm の内容に関する初期確認

両アーカイブで全メンバーの CRC 検査が通り、各 README は選定した日付の CPC であることを記載していました。各 ZIP は README、三つの RRF、データベース向けの付属スクリプトを含む 16 ファイルでした。展開や付属スクリプトの実行はせず、アーカイブから直接検査しました。

RRF 列数(終端の区切りを除く) 2026-09-08 の行数 2026-10-05 の行数
RXNCONSO.RRF 18 246,241 247,028
RXNREL.RRF 16 2,578,453 2,589,722
RXNSAT.RRF 13 3,370,462 3,382,290

全行について UTF-8、列数、末尾の区切り、出典欄を検査しました。出典は RXNORM・MTHSPL・MTHCMSFRF の範囲内でした。実際に RXNCONSO に MTHCMSFRF が各版 11 行あり、第三者の商用薬剤語彙の混入はこの出典検査では見つかりませんでした。出典別の件数は台帳にあります。三つの出典を含む CPC の説明は NLM 技術文書 §11.6 で確認できます。

この検査は、全概念の意味、関係の医学的妥当性、外部参照の解決、旧版から新版への意味の保存・喪失・追加を検証したものではありません。台帳の content_verified は引き続き false とし、ファイル検査の initial_file_checks_passed と区別しています。行数が変わったことから概念数の変化や意味差分を算出した扱いにもしていません。

再検査

Python 3.9 以降の標準ライブラリだけで実行できます。リポジトリのルートで以下を実行します。

python3 scripts/research/verify-r3-materials.py

台帳に今回の検査結果を記録する場合は次のコマンドです。

python3 scripts/research/verify-r3-materials.py --record

四つすべての初期検査が通れば終了コードは 0、ファイル不足または不合格があれば 1 です。詳細は data/research/r3/verification-report.json に出ます。ネットワーク通信、ZIP の展開、付属 SQL 等の実行は行いません。

公表 MD5 と不一致、または記録済み SHA-256 から変わったファイルは不合格とし、そのハッシュを台帳へ上書きしません。--record は合格したファイルの情報と各項目の最終検査状態を更新します。取得日時は、同じ SHA-256 を持つ取得記録がローカルにある場合だけ転記し、不明な場合は検査日時で代用しません。

確認用の架空ファイルで、正常な ZIP・HTML、MD5 不一致、記録済みハッシュの変化、CRC 不良、列数不正、範囲外の出典、異なる HTML 版、ファイル不足を区別できることを検査しました。恒久的なテスト基盤・依存パッケージは追加していません。

通信と保存の記録

最初は NLM 配布元の名前解決がタイムアウトしましたが、再試行で通信が始まりました。約 75 MB の ZIP は 25 秒の制限では途中で切れたため、その不完全な取得物を除き、待ち時間を延ばして再取得しました。今回の成功した取得記録と最終 URL は台帳にあります。

外部ファイル本体・取得記録・詳細レポートは data/ の除外設定下に置き、Git には調査文書、集計メタデータ、検査スクリプトだけを残します。FHIR HTML に含まれる外部用語の参照・例を、独自体系へ転用可能な語彙データとして扱いません。R3 の利用範囲 は維持します。

追加の取得(2026-10-21)

P2-o の第二段(FHIR への接地の監査)のために、D03 が「R5 v5.0.0 の HTML 定義を参照」と選定していた範囲から、FHIR Observation R5 v5.0.0(706,699バイト)と FHIR Specimen R5 v5.0.0(365,066バイト)のページを追加で取得しました。同じ手順で data/research/r3/ に保存し、取得記録(*.receipt.json)と 台帳 の項目を作りました。検査スクリプトは、ページ名・版・目印の項目(資源ごとの表)を確かめるよう、資源の種類を台帳の resource で引く形にしました。検査は Observation・Specimen を含む6件がすべて通っています(公表ハッシュはなく、not_available)。使い方は構造・濃度・制約の読み取りに限り、第三者用語の内容は取り込んでいません。

同日、監査の未確認を減らすため、同じ FHIR R5 v5.0.0 の本体から、データ型(Datatypes)、observation-status の符号系ページ、data-absent-reason の値集合ページ、Provenance、Extensibility の5ページを追加で取得し、同じ手順で記録しました(台帳は計11件、検査はすべて通過)。status と data-absent-reason の符号は HL7 自身が定義する小さな集合で、名前と意味の把握のために読んだだけで、プロジェクトの語彙には取り込んでいません。

同日(P2-t の設計のため、設計79)、同じ FHIR R5 v5.0.0 の本体から、provenance-entity-role の符号系ページ(21,969バイト、SHA-256 1c038151…)を1ページ追加で取得しました(台帳は計12件、検査はすべて通過)。Provenance の entity.role の5つの符号(revision など)の名前と定義の把握のために読んだだけで、プロジェクトの語彙には取り込んでいません。activity の符号の例が名前を挙げる第三者の符号系(v3 の系、ISO のライフサイクル)は取得しておらず、内容を扱っていません。

2026-10-21(P2-u の道具の事実の接地のため、設計82 の U1。利用者の方針:「NLM の技術文書の該当ページを、台帳つきで取得する」)、D03 が公式資料として挙げていた NLM の RxNorm 文書の3ページを取得しました:技術文書(techdoc.html、131,478バイト、SHA-256 1f05a1f6…)、CPC の説明(prescribe.html、20,916バイト、da895512…)、付録1の関係(appendix1.html、44,177バイト、7dd0fe70…)。いずれも HTTP 200、最終 URL は同じ(リダイレクトなし)で、Git 管理外の data/research/r3/ に保存し、台帳(計17件)と取得記録に結びました(ページの版は取得日。ページ自体は版を持たない)。検査器 verify-r3-materials.py に NLM のページ名と目印の語の表を足し、検査は全て通りました。使い方は、ファイル・列・関係・収載範囲の記述の読み取りに限り、薬剤用語の内容は取り込んでいません。CPC の説明ページは「最終確認 2019年4月17日」「草案で今後変わりうる」と記しているため、記述は取得日のものとして扱います。

2026-10-22(利用者の依頼「条件の確認」)、通常のリリース・履歴ファイル・RxNorm API の取得条件を確認するため、条件のページ5つを取得し、台帳に terms として記録しました:利用条件(termsofservice.html、21,509バイト、SHA-256 c92d6431…)、ダウンロード案内(rxnormfiles.html、42,996バイト、bc563b49…)、UMLS ライセンスの案内(umls.html、25,147バイト、34ac259b…)、RxNav の利用条件(TermsofService.html、19,908バイト、55b1a349…)、RxNorm API の関数の一覧(RxNormAPIs.html、21,311バイト、b8d6a83d…)。いずれも HTTP 200、リダイレクトなしで、Git 管理外の data/research/r3/ に保存し、検査は全て通りました(台帳は計20件)。使い方は条件の記述の読み取りに限ります。ライセンス本文(PDF)、RxNorm の履歴ファイルの実体、API の応答は取得していません。結果は 03-data-access.md の「RxNorm の通常のリリース・履歴ファイル・RxNorm API の条件」。

同日(利用者の判断(b)に従い、85)、RxNorm API の関数の文書2ページ(getRxcuiHistoryStatus、48,430バイト、SHA-256 0287cf53…。getRxNormVersion、19,056バイト、b22c8fa8…)を取得して台帳に記録し(計22件)、旧版にあり新版にない170参照の historystatus を、API(https://rxnav.nlm.nih.gov/REST)で照会しました。1秒に5要求以下(上限20の4分の1)、逐次、170件すべて HTTP 200、データの版は照会の前後とも 05-Oct-2026。応答の生データと manifest(照会時刻・URL・状態コード・SHA-256)は Git 管理外の data/research/r4/rxnorm-history/ にあり、文書に載せるのは集計だけです。送ったのは公開の薬剤概念の識別子だけです。API の利用条件が求める出典の文言は 85 の冒頭に記載しました。

R3

同じ区分の文書