his_emr_api_lab 1.1.20 → 1.1.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef07023388b9d06939b9e9b0d09531aaecf58471eb2e62b2f883bc8112121cf8
4
- data.tar.gz: b4aa93d96700812eed8cd0c04e37130b56f30fec563c168679b420ccd229ddb7
3
+ metadata.gz: e14a15d54b4c2e4f38b5a8a93a91c6e2c9c159abcc26b89defa3a535822ef2a6
4
+ data.tar.gz: b3669866f7747eeead4e5d7b3595431474d7b78177527db1bd80f96bfa035280
5
5
  SHA512:
6
- metadata.gz: 97cb016a11e134600fb11f1017df49f819ca43efdc973f2e526a9493c02e126a7af9af19ce58caa4f4e67b2d13e18fb99b1abd45136cf2dabb54f613c92402a6
7
- data.tar.gz: cdf3a623a0e5b25e9436aa108cafce799ca1e5fdd7a22688062fcff7a07dcda5f9a5aaab7127952e4ec5569e09c827513b6cf07b446f16b8a29921f28d2016ae
6
+ metadata.gz: 82efc08842fafa54aaf212a5852977e3cba393c3ac398d76310125dc26b5e6b4cc34a80686fa567039f09a9a9d2a1d0252ca48c3b14e8f0f3a0d7e506232dca0
7
+ data.tar.gz: fe78bc7e8defe9e562da0b8a05b08a7dbc69deda63780e92393d92e42af624602fc745861557319d85681d15f1170113cb9d9bc3bc973bd7277fe28e8fd5edc7
@@ -11,7 +11,7 @@ module Lab
11
11
  :value_modifier,
12
12
  { indicator: [:concept_id] }] }])
13
13
 
14
- result = Lab::ResultsService.create_results(params[:test_id], result_params)
14
+ result = Lab::ResultsService.create_results(params[:test_id], result_params, 'user entered')
15
15
 
16
16
  render json: result, status: :created
17
17
  end
@@ -188,6 +188,9 @@ class Lab::Lims::Api::RestApi
188
188
  last_name: order_dto.fetch(:patient).fetch(:last_name),
189
189
  phone_number: order_dto.fetch(:patient).fetch(:phone_number),
190
190
  gender: order_dto.fetch(:patient).fetch(:gender),
191
+ arv_number: order_dto.fetch(:patient).fetch(:arv_number),
192
+ art_regimen: order_dto.fetch(:patient).fetch(:art_regimen),
193
+ art_start_date: order_dto.fetch(:patient).fetch(:art_start_date),
191
194
  national_patient_id: order_dto.fetch(:patient).fetch(:id),
192
195
  requesting_clinician: requesting_clinician(order_dto),
193
196
  sample_type: order_dto.fetch(:sample_type),
@@ -64,12 +64,40 @@ module Lab
64
64
  first_name: name&.given_name,
65
65
  last_name: name&.family_name,
66
66
  id: national_id&.identifier,
67
+ arv_number: find_arv_number(patient_id),
68
+ art_regimen: find_current_regimen(patient_id),
69
+ art_start_date: find_art_start_date(patient_id),
67
70
  phone_number: phone_number&.value || 'Unknown',
68
71
  gender: person.gender,
69
72
  email: nil
70
73
  }
71
74
  end
72
75
 
76
+ def find_current_regimen(patient_id)
77
+ regimen_data = ActiveRecord::Base.connection.select_one <<~SQL
78
+ SELECT patient_current_regimen(#{patient_id}, current_date()) regimen
79
+ SQL
80
+ return nil if regimen_data.blank?
81
+
82
+ regimen_data['regimen']
83
+ end
84
+
85
+ def find_arv_number(patient_id)
86
+ PatientIdentifier.joins(:type)
87
+ .merge(PatientIdentifierType.where(name: 'ARV Number'))
88
+ .where(patient_id: patient_id)
89
+ .first&.identifier
90
+ end
91
+
92
+ def find_art_start_date(patient_id)
93
+ start_date = ActiveRecord::Base.connection.select_one <<~SQL
94
+ SELECT date_antiretrovirals_started(#{patient_id}, current_date()) AS earliest_date
95
+ SQL
96
+ return nil if start_date.blank?
97
+
98
+ start_date['earliest_date']
99
+ end
100
+
73
101
  def format_sample_type(name)
74
102
  return 'not_specified' if name.casecmp?('Unknown')
75
103
 
@@ -204,10 +204,10 @@ module Lab
204
204
 
205
205
  creator = format_result_entered_by(test_results['result_entered_by'])
206
206
 
207
- ResultsService.create_results(test.id, provider_id: User.current.person_id,
208
- date: Utils.parse_date(test_results['date_result_entered'], order[:order_date].to_s),
209
- comments: "LIMS import: Entered by: #{creator}",
210
- measures: measures)
207
+ ResultsService.create_results(test.id, { provider_id: User.current.person_id,
208
+ date: Utils.parse_date(test_results['date_result_entered'], order[:order_date].to_s),
209
+ comments: "LIMS import: Entered by: #{creator}",
210
+ measures: measures } )
211
211
  end
212
212
  end
213
213
 
@@ -15,7 +15,10 @@ module Lab
15
15
  # - measures: An array of measures. A measure is an object of the following structure
16
16
  # - indicator: An object that has a concept_id field (concept_id of the indicator)
17
17
  # - value_type: An enum that's limited to 'numeric', 'boolean', 'text', and 'coded'
18
- def create_results(test_id, params)
18
+ # result_enter_by: A string that specifies who created the result
19
+ def create_results(test_id, params, result_enter_by = 'LIMS')
20
+ serializer = {}
21
+ results_obs = {}
19
22
  ActiveRecord::Base.transaction do
20
23
  test = Lab::LabTest.find(test_id)
21
24
  encounter = find_encounter(test, encounter_id: params[:encounter_id],
@@ -24,13 +27,34 @@ module Lab
24
27
 
25
28
  results_obs = create_results_obs(encounter, test, params[:date], params[:comments])
26
29
  params[:measures].map { |measure| add_measure_to_results(results_obs, measure, params[:date]) }
30
+ OrderExtension.create!(creator: User.current, value: result_enter_by, order_id: results_obs.order_id,
31
+ date_created: Time.now)
27
32
 
28
- Lab::ResultSerializer.serialize(results_obs)
33
+ serializer = Lab::ResultSerializer.serialize(results_obs)
29
34
  end
35
+ NotificationService.new.create_notification(result_enter_by, prepare_notification_message(results_obs, serializer, result_enter_by))
36
+ Rails.logger.info("Lab::ResultsService: Result created for test #{test_id} #{serializer}")
37
+ serializer
30
38
  end
31
39
 
32
40
  private
33
41
 
42
+ def prepare_notification_message(result, values, result_enter_by)
43
+ { Type: result_enter_by,
44
+ 'Test type': ConceptName.find_by(concept_id: result.test.value_coded)&.name,
45
+ 'Accession number': Order.find(result.order_id)&.accession_number,
46
+ 'ARV-Number': find_arv_number(result.person_id),
47
+ PatientID: result.person_id,
48
+ Result: values }.as_json
49
+ end
50
+
51
+ def find_arv_number(patient_id)
52
+ PatientIdentifier.joins(:type)
53
+ .merge(PatientIdentifierType.where(name: 'ARV Number'))
54
+ .where(patient_id: patient_id)
55
+ .first&.identifier
56
+ end
57
+
34
58
  def find_encounter(test, encounter_id: nil, date: nil, provider_id: nil)
35
59
  return Encounter.find(encounter_id) if encounter_id
36
60
 
@@ -64,6 +88,7 @@ module Lab
64
88
  obs_group_id: test.obs_id)
65
89
  return unless result
66
90
 
91
+ OrderExtension.find_by(order_id: result.order_id)&.void("Updated/overwritten by #{User.current.username}")
67
92
  result.measures.map { |child_obs| child_obs.void("Updated/overwritten by #{User.current.username}") }
68
93
  result.void("Updated/overwritten by #{User.current.username}")
69
94
  end
data/lib/lab/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lab
4
- VERSION = '1.1.20'
4
+ VERSION = '1.1.21'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: his_emr_api_lab
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.20
4
+ version: 1.1.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elizabeth Glaser Pediatric Foundation Malawi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-05 00:00:00.000000000 Z
11
+ date: 2022-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: couchrest
@@ -319,7 +319,7 @@ licenses:
319
319
  - MIT
320
320
  metadata:
321
321
  source_code_uri: https://github.com/EGPAFMalawiHIS/his_emr_api_lab
322
- post_install_message:
322
+ post_install_message:
323
323
  rdoc_options: []
324
324
  require_paths:
325
325
  - lib
@@ -334,8 +334,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
334
  - !ruby/object:Gem::Version
335
335
  version: '0'
336
336
  requirements: []
337
- rubygems_version: 3.0.9
338
- signing_key:
337
+ rubyforge_project:
338
+ rubygems_version: 2.7.6
339
+ signing_key:
339
340
  specification_version: 4
340
341
  summary: Lab extension for the HIS-EMR-API
341
342
  test_files: []