2010年、Node.js v0.4が出てインターネットはサーバー上のJavaScriptがジョークかどうかを議論していた。一方、私は22歳で、ヨルダンの病院全体にデプロイされる国家EHRシステムの薬剤調剤モジュールのMUMPSルーティンを書いていた。

私の年齢のほとんどのエンジニアはCRUDアプリを作っていた。私はヘルスケアインフラに取り組んでいた。

それがHAKEEM — Electronic Health Solutions(EHS)が運営する国家EHRプロジェクトで、ヨルダン政府とヘルスケアプロバイダーのコンソーシアムの官民連携だ。私の役割:デベロッパーとシステムアナリスト、2010〜2013年。三年間。四病院。一つの国家スケールシステム。

HAKEEMが何の上に構築されていたか

HAKEEMはVistA — 米国退役軍人省が開発したVeterans Information Systems and Technology Architecture — の上に構築されていた。聞いたことがなければ:VistAは地球上で最も長く稼働しているEHRシステムの一つで、1980年代からアメリカの退役軍人病院に展開されている。MUMPS(後にMと呼ばれる)で動き、他に書いたことのないものとは全く異なる階層型データベースと言語の組み合わせだ。

国家EHRをVistAを基盤にする決定は奇妙なものではなかった。VistAは商用EHRが競合するのが難しい方法で実績がある — 薬局モジュール、臨床意思決定支援、スケジューリング、課金があり、すべてが一つの一貫したデータモデルの下に統合されている。オープンソースであることは、ヨルダンが国家デプロイのために独自のソフトウェアをライセンスする必要がなかったことを意味した。GT.M、階層型NoSQLデータベースで動くことは、MUMPSを読めて四十年前の技術スタックを恐れないエンジニアが必要だったことを意味した。

私はそのエンジニアの一人だった。

「システムアナリスト」が現場で実際に意味したこと

肩書きはデベロッパー/システムアナリストだった。実践では:Remote Procedure Call(RPC)ブローカープロトコル経由でVistAバックエンドと通信するC# GUIアプリケーションを書いた。主要なものの二つは患者情報管理GUIスケジューリングGUIだった。

これらはつまらなく聞こえる。そうではなかった。国家EHRでの患者情報管理は、あなたのGUIがすべてのダウンストリームシステム — 薬局、検査、課金、報告 — に流れ込むデータを受付看護師が入力するインターフェースだということを意味する。データモデルを間違えるか、ゴミを入れるGUIを作ると、ゴーライブの六ヶ月後にPrince Hamza病院で患者ID不一致をデバッグしている。

スケジューリングGUIも同様に重要だった。Amman Comprehensive Clinicでの外来クリニックスケジューリングは、複数の診療科にわたる予約スロットの管理、キャンセルと予約変更の処理、クリニック管理が人員配置の決定に使う報告の生成を意味した。それが壊れると非常に重要になるつまらないソフトウェアだ。

2011年のLinuxサーバー上のMUMPS

GT.Mデータベースはlinuxサーバー上で動いていた。私の仕事にはバックアップとタスク管理のためのbashスクリプトのメンテナンスが含まれていた — 履歴書を印象的に見せないが絶対に病院のデータ損失を防ぐオペレーショナルな作業。

PharmacyとBillingとHL7メッセージングの三つのパッケージでMUMPSルーティンも書いた。

MUMPSは審美的な感性を傷つけ、その後四十年間正しく動く言語だ。変数はデフォルトでグローバルだ。データベースが言語だ — グローバル(MUMPSの永続変数の用語)は階層型データベース構造に直接マッピングされる。ルーティンはファイルだ。モダンな意味での関数はない;構造化プログラミングの人を不快にさせるラベルとGOTO相当のものがある。

そして:HAKEEMのためにMUMPSで書いた薬剤調剤ロジックは、何らかの形でヨルダンの病院でまだ動いている可能性が高い。2011年に人気だったJavaScriptフレームワークのほとんどについてはそう言えない。

四病院、四つの異なる問題

HAKEEMは四つの施設にロールアウトされ、それぞれが独自のデプロイストーリーを持っていた。

Prince Hamza病院は大きな総合病院だった — 高ボリューム、複数の専門科、EHRの機能の全幅。ここで、外来患者が一日に何百人もいるときに患者登録とスケジューリングがスケールするかどうかを確認する。

Amman Comprehensive Clinicは外来モデルだった。入院ケアには軽く、予約管理と慢性疾患のフォローアップには重い。スケジューリングGUIはここで真価を発揮した。

Prince Hussein病院には、デフォルトのVistA設定にクリーンにマッピングしない独自の臨床ワークフロー要件があった。MUMPSレイヤーでのカスタマイズ。楽しかった。

King Hussein Cancer Centreはインテグレーションプロジェクトだった — それ自体の説明が必要で、HL7についての別の投稿で詳しく話す。短いバージョン:KHCCは独自のEHR、独自の患者記録、独自のワークフローを持っていた。HAKEEMは共有標準を通じてデータを消費して提供する必要があった。その標準はHL7 v2だった。私はインテグレーションを構築した。

2012年のモバイルGUI

目立つポイントに現れないもう一つのこと:JavaとObjective-Cで書いたHAKEEMコンポーネント用のモバイルGUI。それぞれAndroidとiOSをターゲットにした。

2012年のモバイルヘルスケアは成熟したスペースではなかった。Androidはバージョン4.0だった。iOS 6は数ヶ月後だった。臨床医が患者記録にアクセスするためにモバイルデバイスを使うというコンセプトは、UXパターンに確立された慣例がないほど新しかった。制約の下で手探りで進んでいた。モバイルデバイスで誤って読まれた患者記録は、誤って読まれたツイートとは異なる患者安全の意味を持つ。

国家スケールのインフラについて教えてくれたこと

HAKEEMでの三年間は、それ以来すべてのプロジェクトに持ち込んできたことを教えてくれた:「動くソフトウェア」と「国が依存するインフラ」のギャップは、技術的ではなく組織的な問題だ。

コードは難しかった。MUMPSは難しい。HL7は難しい。誰もプレイブックを持っていなかった2012年にモバイルEHR GUIを書くことは難しかった。

しかしより難しい問題はデバッガーを持たないものだった。どの病院が次のカスタマイズスプリントを得るか?二つの病院が同じMUMPSルーティンに矛盾する変更を必要とするとき、誰が決定を所有するか?ロールバックとは、明日の朝患者を診ている病院にデプロイの途中でどういう意味か?

あの三年間、私は22〜25歳だった。習得した技術スキルは価値があった。複雑なシステムが組織レイヤーで失敗する方法の理解はより価値があった。MUMPSで薬局ロジックを書くことは、両方を同時に学ぶかなり良い方法であることが判明した。

EHSを終えた頃、Node.jsエコシステムはまだ自分自身を把握しようとしていた。HAKEEMの薬局モジュールはすでに四病院の本番で稼働していた。あの年月の使い方に満足している。