作成日:2026-10-22。状態:計画(§1〜§6)は照会の前に固定し、結果(§7〜§9)を照会の後に追記。P2-u の結果84 の F49・F50(新版にない170参照の状態は、CPC の資料だけでは決められない)を受け、利用者の判断(2026-10-22「(b)の方針」、03-data-access.md)に従って、RxNorm API(RxNav)で、その170参照の状態を照会する。独立確認は未実施で、independent_review / evaluation_frozen は false のままです。生データ(概念の ID・名称・応答)は Git に入れず、文書には集計だけを残します。
RxNorm の資料提供:Courtesy of the U.S. National Library of Medicine。API の利用条件が求める文言:「This product uses publicly available data from the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services; NLM is not responsible for the product and does not endorse or recommend this or any other product.」
1. 問い
| ID | 問い |
|---|---|
| Q1 | CPC に(9 月版にあり 10 月版に)ない170参照は、RxNorm の中で、有効(Active)・廃止(Obsolete)・別の概念への置換(Remapped)・その他のどれか。つまり、CPC に不在であることは、廃止を意味するか(F50) |
| Q2 | 置換された参照の置換先は、10 月版の CPC にあるか。公式の置換先が、監査の「後継は決めない」と矛盾せず、追加情報として使えるか |
| Q3 | 用語種別が RXNCUI の対象(SCD・SBD・GPCK・BPCK、50件)と、対象外(120件)で、状態の分布は違うか |
2. 取得した定義(一次資料)
RxNorm API の関数の文書2ページ(getRxcuiHistoryStatus、getRxNormVersion)を取得し、台帳に記録した。次の記述を使う。
| 内容 | 記述(要約) |
|---|---|
| 呼び出し | GET https://rxnav.nlm.nih.gov/REST/rxcui/{rxcui}/historystatus.json、GET /REST/version.json。数値は文字列。空の欄は省かれるか null |
| 状態 | Active(現行のデータにあり、SAB=RXNORM の抑制されていない語を持つ)、Obsolete(現行のデータで抑制 O。同等な有効概念の指定なし)、Remapped(以前は有効または廃止だったが、現行の RXNCONSO になく、RXNATOMARCHIVE で有効または廃止の概念に置換された)、Quantified(量の係数がなく調剤できない。SUPPRESS=E)、NotCurrent(現行にあるが RxNorm の語がない、または以前の月次にあったが除かれ、置換されていない)、Unknown(月次リリースに一度もない) |
| 欄 | releaseStartDate・releaseEndDate(MMYYYY。終了の値なしは現存)、isCurrent、activeStartDate・activeEndDate、remappedDate、概念の tty、置換先 remappedConcept[](remappedRxCui・remappedTTY・remappedActive) |
| データの版 | version=API が返す RxNorm の月次リリース(dd-Mmm-yyyy)。文書の例は 05-Oct-2026 |
| 範囲 | getRxcuiHistoryStatus は、現行と過去のリリースの概念を扱う(Scope: Current and Historical) |
3. 方法
- 対象は、P2-u の監査(P-full)で
not_foundの170参照(旧版にあり新版にない)。台帳のハッシュを確かめた CPC の ZIP から作り直す。 - 照会の前後に
/REST/version.jsonを取り、データの版が同じであることを記録する。170件のhistorystatusを、1秒に5要求以下(上限20の4分の1)で逐次に照会する。通信の失敗は3回まで再試行し、失敗した件数を報告する。 - 応答の生データは
data/research/r4/rxnorm-history/に保存し、照会時刻・URL・状態コード・SHA-256 の一覧(manifest)を置く(Git 管理外)。 - 集計:状態別の数、用語種別の群(SCD・SBD・GPCK・BPCK/他)別の数、置換先の有無と、置換先が10月版の CPC にある数、
releaseEndDateの月の分布。応答の語(名称)は集計に出さない。 - 送るのは公開の薬剤概念の識別子(RxCUI)だけで、患者・秘密情報を含まない。照会は170参照に限り、全体の取得に広げない。
4. 実施前に固定する予測
| ID | 予測 | 外れた場合に分かること |
|---|---|---|
| AQ1 | 170件すべてに応答があり、Unknown はない(9 月版の CPC にあったため)。通信の失敗は1%以下 |
照会の方法 |
| AQ2 | API が返すデータの版は 05-Oct-2026(10 月版の CPC と同じ月次)で、照会の前後で同じ |
応答が10月版の状態を表すか(そうでなければ、照会時点の状態として解釈する) |
| AQ3 | Active(RxNorm では有効だが CPC にない)が1件以上ある。割合は 20〜70% |
F50(不在≠廃止)の実データでの裏付け |
| AQ4 | Remapped は 5〜40%、Obsolete は 5〜40%、Quantified と NotCurrent は各 10% 以下 |
状態の分布 |
| AQ5 | Remapped の概念のうち、置換先が10月版の CPC にあるものは 80% 以上 |
公式の置換先が監査に使えるか |
| AQ6 | 用語種別が SCD・SBD・GPCK・BPCK の50件は、他の120件より Active の割合が低い(RXNCUI の対象が、廃止または置換されやすい) |
用語種別と状態の関係 |
| AQ7 | releaseEndDate が 092026(9 月版が最後)の Remapped・NotCurrent の概念が、Remapped・NotCurrent の過半数 |
不在の時期 |
予測の外れは、予測を直さず、結果に残す。
5. 受入条件
- 照会の前に、この文書を別に保持し、結果は予測と別に書く。
- 照会の道具は、通信を行う部分と、応答の読み取り・集計の部分を分け、後者を架空の応答でテストする(通信はテストに含めない)。
- 応答の生データは Git に入れない。文書に載せるのは集計だけ。
- 照会は170参照に限る。上限(1秒に20要求)を守り、応答の版と時刻を記録する。
- 結果は、CPC に不在であることの意味(F50)と、監査の「後継は決めない」との関係を、結論ではなく測定として書く。
Remappedの置換先を後継と断定しない(公式の置換先の記録と、薬剤の同等性は別)。
6. 範囲外
170参照以外の照会、通常のリリースの取得、置換先の薬剤の同等性・臨床上の代替の判断、API の他の関数(NDC・関係・性質)、週次更新、応答の再配布。
7. 結果(2026-10-22 に実施)
照会は170参照に限り、170件すべてに HTTP 200(失敗0)。API が返すデータの版は、照会の前後とも 05-Oct-2026(API の版 3.1.356)で、対象の CPC(10 月版)と同じ月次だった。所要は161秒(1秒に約1.06要求、上限20の約5%)。応答の生データと manifest は data/research/r4/rxnorm-history/(Git 管理外)にある。
7.1 予測と測定
| ID | 予測 | 結果 |
|---|---|---|
| AQ1 | 170件すべてに応答があり Unknown はない。失敗は1%以下 |
成立。170件、Unknown 0、失敗0 |
| AQ2 | データの版は 05-Oct-2026で、照会の前後で同じ |
成立(前後とも 05-Oct-2026)。応答は10月版の月次の状態と解釈できる。ただし週次更新の差は検査していない |
| AQ3 | Active が1件以上、割合は20〜70% |
成立。Active 70件(41.2%) |
| AQ4 | Remapped 5〜40%、Obsolete 5〜40%、Quantified と NotCurrent は各10%以下 |
一部外れ。Remapped 0件(外れ)、Obsolete 100件(58.8%)(上に外れ)、Quantified 0・NotCurrent 0(成立)。置換が一般的だという推論の誤り(§8 F53) |
| AQ5 | Remapped のうち置換先が10月版の CPC にあるものは80%以上 |
評価できない(Remapped が0件) |
| AQ6 | 用語種別が SCD・SBD・GPCK・BPCK の50件は、他の120件より Active の割合が低い |
成立。30.0%(15/50)対 45.8%(55/120) |
| AQ7 | releaseEndDate が 092026 の Remapped・NotCurrent が過半数 |
評価できない(該当が0件) |
7.2 集計(170参照)
| 状態 | 全体 | SCD・SBD・GPCK・BPCK(50) | 他(120) |
|---|---|---|---|
Active |
70(41.2%) | 15(30.0%) | 55(45.8%) |
Obsolete |
100(58.8%) | 35(70.0%) | 65(54.2%) |
Remapped・Quantified・NotCurrent・Unknown |
0 | 0 | 0 |
Obsolete の100件はすべて activeEndDate=092026(9月のリリースが、有効だった最後のリリース)で、10月版で廃止になった。isCurrent は Active が YES、Obsolete が NO で、状態と一致した。
8. 分かったこと
| ID | 発見 | 根拠 | 限界 |
|---|---|---|---|
| F51 | CPC に不在の参照の41%(70/170)は、RxNorm では有効なままだった。 CPC に不在であることは、RxNorm での廃止を意味しない(F50 の実測) | 状態 Active 70件 |
1か月の組。CPC から外れた理由(市販でなくなった等)は応答に含まれない |
| F52 | 公式の置換先(Remapped)は170件のうち0件。 廃止された100件は「同等な有効概念の指定なし」(定義)で、置換先は返らない。監査の successor: not_determined は、この月の組では RxNorm 自身の状態と一致した |
状態 Obsolete 100・Remapped 0 |
定義の「Obsolete:RxNorm は同等な有効概念を指定していない」による。置換の有無は、この170件についてだけ |
| F53 | 予測の推論の誤り:置換が一般的だと見た。 Remapped を5〜40%と予測したが0件で、Obsolete(同等の指定なしで廃止)が59%だった。RXNCUI が退役を追跡することから、置換先があると推論した |
AQ4 の外れ | 置換先のない廃止は、RXNCUI の追跡の対象でも後継を持たない |
| F54 | 照会の道具は、通信(fetch)と応答の読み取り・集計を分け、後者を架空の応答でテストできた。通信の規則(再試行・上限・照会する URL)は偽の通信でテストした。実際の照会は、テストの外で一度だけ行った |
tests/p2/test_rxnorm_history.py |
実際の応答の形は、試しの3件(170件のうち)で確かめてから架空の応答を書いた |
9. 限界
- 170参照・1か月の組の測定です。他の月・他の参照には一般化しません。
- API が返すのは照会時点の現行の状態で、データの版(
05-Oct-2026)は10月版と同じでしたが、週次更新が状態を変える可能性は検査していません。 - 有効(
Active)の70件が CPC から外れた理由(市販でなくなった等)は、API の応答に含まれません。CPC の説明(市販の処方薬の近似)からの推論に留まります。 - 薬剤の意味の同一・置換の安全性は扱いません。
Obsoleteに置換先がないことは、薬剤が不要になったことを意味しません。 - 応答の生データ(名称を含む)は Git に入れていません。この文書は集計だけを載せます。通常のリリースの取得は、利用者の判断で行っていません。
- 設計・実装・検査は同じ作成者で、独立確認はありません。
10. 検証
照会の道具とそのテストを加えた後、影響する範囲を Python 3.14.4 と 3.11.17 で実行した:道具のテスト(照会の道具 9、P2-u の道具 13、P2-u の監査 14 の計36テスト)、道具・契約・継承のテスト(97テスト)、保存監査(8テスト)、版比較つき統合評価、P1-d の CLI 照合(P1 20条件・80 JSON・417必須パス、P0 37 JSON・221必須パス)、保存監査(600+256+32+1)、登録検査(25/拒否0)は、両 Python 版とも全て通過した。固定対象は 1,927ファイル、manifest 1eea02fd…、束 d6466533…(テスト test_rxnorm_history.py の追加による。全系列の再実行は行っていない:変更は道具とそのテスト、台帳、文書に限り、契約・実装・他の拡張は変えていない)。実際の照会(通信)はテストの外で一度だけ行った。