Class: OrcaApi::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/orca_api/client.rb

Overview

日医レセAPIを呼び出すため低レベルインタフェースを提供するクラス

リクエスト毎に日レセAPIの接続先を切り替えられるように、接続・認証情報をこのクラスのオブジェクトに保持する。 また、スレッド毎に別のオブジェクトを生成することを想定しており、 同じオブジェクトに複数のスレッドからアクセスすることはできない。

基本的には、低レベルインタフェースを使わなくても電子カルテのアプリケーションが組めるように、 OrcaApi::Service クラスを継承した高レベルインターフェースを提供する。

OrcaApi::Client#debug_output= に IO オブジェクトを設定すると、日レセAPIとのやりとりを IO に出力できる。

orca_api.debug_output = $stdout

接続・認証に関するサンプルプログラムは /example/common.rb を参照。 また、低レベルインタフェースに関するサンプルプログラムは /example/orca_api/call.rb を参照。

Instance Attribute Summary collapse

高レベルインターフェース collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, options = {}) ⇒ Client

Returns a new instance of Client

Parameters:

  • uri (String)

    接続先のURI。 スキーマはhttpとhttpsに対応。ただし、https以外を指定された場合は強制的にhttpでの通信とみなす。 認証情報は https://username:password@hostname として指定できる。 ポートを指定しない場合は http だと 80 番、https だと 443 番ポートを指定したものとみなす。

  • options (Hash) (defaults to: {})
    • :user (String) ユーザー名。ただし、uriのユーザー名が優先される。
    • :password (String) パスワード。ただし、uriのパスワードが優先される。
    • :use_ssl (Boolean) SSL通信を行うかどうか。 ただし、uriのスキーマがhttpsだった場合、この値に関わらずtrueを指定したものとして扱われる。
    • :ssl (Hash) SSL通信に関するオプション
      • :ca_file (String) CA証明書のパス
      • :ca_path (String) CA証明書を格納しているディレクトリのパス
      • :verify (Boolean) [true] サーバ証明書を検証するかどうか
      • :verify_mode (Integer) サーバ証明書の検証モード。 OpenSSL::SSL モジュールに定義されている VERIFY_ から始まる定数を指定することを想定。
      • :p12 (OpenSSL::PKCS12) PKCS#12 (秘密鍵、証明書、関連するCA証明書を1つのファイルに保存する形式)のクライアント証明書
      • :cert (OpenSSL::X509::Certificate) クライアント証明書
      • :key (OpenSSL::PKey::PKey) 暗号鍵。 鍵の種類に応じて OpenSSL::PKey::RSA 等の適切なクラスのインスタンスを指定する。
    • :timeout (Hash) タイムアウトに関するオプション
      • :ssl (Integer) SSL/TLSのタイムアウト秒数
      • :open (Integer) 接続時のタイムアウト秒数
      • :read (Integer) 読み込み時のタイムアウト秒数
      • :continue (Integer) 「100 Continue」レスポンスを待つタイムアウト秒数
      • :keep_alive (Integer) コネクションの再利用(keep-alive)を許可する秒数


95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/orca_api/client.rb', line 95

def initialize(uri, options = {})
  uri = URI.parse(uri)
  @host = uri.host
  @port = uri.port
  @user = uri.user || options[:user]
  @password = uri.password || options[:password]
  @use_ssl = uri.scheme == 'https' || options[:use_ssl]
  if @use_ssl
    extract_ssl_options(options.fetch(:ssl))
  end
  @reuse_http = 0
  self.timeout = options[:timeout]
end

Constructor Details

#initialize(uri, options = {}) ⇒ Client

Returns a new instance of Client

Parameters:

  • uri (String)

    接続先のURI。 スキーマはhttpとhttpsに対応。ただし、https以外を指定された場合は強制的にhttpでの通信とみなす。 認証情報は https://username:password@hostname として指定できる。 ポートを指定しない場合は http だと 80 番、https だと 443 番ポートを指定したものとみなす。

  • options (Hash) (defaults to: {})
    • :user (String) ユーザー名。ただし、uriのユーザー名が優先される。
    • :password (String) パスワード。ただし、uriのパスワードが優先される。
    • :use_ssl (Boolean) SSL通信を行うかどうか。 ただし、uriのスキーマがhttpsだった場合、この値に関わらずtrueを指定したものとして扱われる。
    • :ssl (Hash) SSL通信に関するオプション
      • :ca_file (String) CA証明書のパス
      • :ca_path (String) CA証明書を格納しているディレクトリのパス
      • :verify (Boolean) [true] サーバ証明書を検証するかどうか
      • :verify_mode (Integer) サーバ証明書の検証モード。 OpenSSL::SSL モジュールに定義されている VERIFY_ から始まる定数を指定することを想定。
      • :p12 (OpenSSL::PKCS12) PKCS#12 (秘密鍵、証明書、関連するCA証明書を1つのファイルに保存する形式)のクライアント証明書
      • :cert (OpenSSL::X509::Certificate) クライアント証明書
      • :key (OpenSSL::PKey::PKey) 暗号鍵。 鍵の種類に応じて OpenSSL::PKey::RSA 等の適切なクラスのインスタンスを指定する。
    • :timeout (Hash) タイムアウトに関するオプション
      • :ssl (Integer) SSL/TLSのタイムアウト秒数
      • :open (Integer) 接続時のタイムアウト秒数
      • :read (Integer) 読み込み時のタイムアウト秒数
      • :continue (Integer) 「100 Continue」レスポンスを待つタイムアウト秒数
      • :keep_alive (Integer) コネクションの再利用(keep-alive)を許可する秒数


95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/orca_api/client.rb', line 95

def initialize(uri, options = {})
  uri = URI.parse(uri)
  @host = uri.host
  @port = uri.port
  @user = uri.user || options[:user]
  @password = uri.password || options[:password]
  @use_ssl = uri.scheme == 'https' || options[:use_ssl]
  if @use_ssl
    extract_ssl_options(options.fetch(:ssl))
  end
  @reuse_http = 0
  self.timeout = options[:timeout]
end

Instance Attribute Details

#ca_fileObject

CA証明書のパス



36
37
38
# File 'lib/orca_api/client.rb', line 36

def ca_file
  @ca_file
end

#ca_pathObject

CA証明書を格納しているディレクトリのパス



37
38
39
# File 'lib/orca_api/client.rb', line 37

def ca_path
  @ca_path
end

#certObject

クライアント証明書



39
40
41
# File 'lib/orca_api/client.rb', line 39

def cert
  @cert
end

#debug_outputObject

デバッグに使う IO オブジェクト



42
43
44
# File 'lib/orca_api/client.rb', line 42

def debug_output
  @debug_output
end

#hostObject

ホスト名



31
32
33
# File 'lib/orca_api/client.rb', line 31

def host
  @host
end

#karte_uidString

カルテUIDの取得 OrcaApi::Client#karte_uid= で明示的に設定しない場合は、OrcaApi::Client のインスタンス毎にユニークな値を自動生成する

Returns:

  • (String)

    カルテUID



113
114
115
# File 'lib/orca_api/client.rb', line 113

def karte_uid
  @karte_uid ||= SecureRandom.uuid
end

#keyObject

暗号鍵



40
41
42
# File 'lib/orca_api/client.rb', line 40

def key
  @key
end

#passwordObject

パスワード



34
35
36
# File 'lib/orca_api/client.rb', line 34

def password
  @password
end

#portObject

ポート番号



32
33
34
# File 'lib/orca_api/client.rb', line 32

def port
  @port
end

#timeoutObject

Returns the value of attribute timeout.



43
44
45
# File 'lib/orca_api/client.rb', line 43

def timeout
  @timeout
end

#use_sslObject

SSL通信をするかどうか



35
36
37
# File 'lib/orca_api/client.rb', line 35

def use_ssl
  @use_ssl
end

#userObject

ユーザー名



33
34
35
# File 'lib/orca_api/client.rb', line 33

def user
  @user
end

#verify_modeObject

サーバ証明書の検証モード



38
39
40
# File 'lib/orca_api/client.rb', line 38

def verify_mode
  @verify_mode
end

Class Method Details

.underscore(name) ⇒ Object



45
46
47
48
49
50
# File 'lib/orca_api/client.rb', line 45

def self.underscore(name)
  name.
    gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
    gsub(/([a-z\d])([A-Z])/, '\1_\2').
    downcase
end

Instance Method Details

#call(path, params: {}, body: nil, http_method: :post, format: "json", output_io: nil) ⇒ IO, String

任意の日レセAPIを呼び出す

引数paramsやbodyの内容のチェックは行わない。

結果はRubyのオブジェクト(HashやArray等)が返る。処理結果を番号で格納したApi_Resultでさえ、 値のフォーマットや意味が様々であるため、結果の内容のチェックも行わない。

Parameters:

  • path (String)

    エンドポイント

  • params (Hash{String,Symbol=>String})

    リクエストパラメータ

  • body (#to_json, nil)

    リクエストボディ。 nilとfalse以外が指定された場合、 #to_json を呼び出してJSON形式に変換してからリクエストボディに指定する。

  • http_method (:get, :post)

    (:post) HTTPメソッド

  • format (String)

    ("json") リクエストボディとレスポンスボディの形式。"json"を指定するとJSON形式でやりとりする。

  • output_io (IO)

    (nil) レスポンスボディを格納するIO。 大容量データを取得するときのように、サイズが大きくてメモリに展開することが難しい場合に指定する。

Returns:

  • (IO, String)

    output_ioが指定された場合、output_ioを返す。 そうでない場合、HTTPレスポンスのbodyをそのまま文字列として返す。



141
142
143
# File 'lib/orca_api/client.rb', line 141

def call(path, params: {}, body: nil, http_method: :post, format: "json", output_io: nil)
  do_call make_request(http_method, path, params, body, format), output_io
end

#new_acceptance_serviceAcceptanceService

Returns AcceptanceServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 162

#new_blob_serviceBlobService

Returns BlobServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 189

#new_department_serviceDepartmentService

Returns DepartmentServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 153

#new_disease_serviceDiseaseService

Returns DiseaseServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 165

#new_find_serviceFindService

Returns FindServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 204

#new_form_data_serviceFormDataService

Returns FormDataServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 168

#new_image_serviceImageService

Returns ImageServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 177

#new_income_serviceIncomeService

Returns IncomeServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 171

#new_insurance_serviceInsuranceService

Returns InsuranceServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 150

#new_lock_serviceLockService

Returns LockServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 192

#new_medical_practice_serviceMedicalPracticeService

Returns MedicalPracticeServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 159

#new_patient_servicePatientService

Returns PatientServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 147

#new_physician_servicePhysicianService

Returns PhysicianServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 156

#new_print_servicePrintService

Returns PrintServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 174

#new_receipt_data_check_serviceReceiptDataCheckService

Returns ReceiptDataCheckServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 180

#new_receipt_data_serviceReceiptDataService

Returns ReceiptDataServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 183

#new_receipt_serviceReceiptService

Returns ReceiptServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 186

#new_rehabilitation_comment_serviceRehabilitationCommentService

Returns RehabilitationCommentServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 195

#new_statistics_form_serviceStatisticsFormServie

Returns StatisticsFormServiceインスタンス

Returns:

  • (StatisticsFormServie)

    StatisticsFormServiceインスタンス



# File 'lib/orca_api/client.rb', line 207

#new_user_serviceUserService

Returns UserServiceインスタンス

Returns:



# File 'lib/orca_api/client.rb', line 198

#reuse_sessionObject



246
247
248
249
250
251
# File 'lib/orca_api/client.rb', line 246

def reuse_session
  start_reuse_session
  yield
ensure
  finish_reuse_session
end

#reusing_session?Boolean

Returns:

  • (Boolean)


253
254
255
# File 'lib/orca_api/client.rb', line 253

def reusing_session?
  @reuse_http.positive?
end