his_emr_api_lab 2.1.2 → 2.1.4.pre.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/serializers/lab/lab_order_serializer.rb +1 -1
- data/app/services/lab/concepts_service.rb +2 -2
- data/app/services/lab/lims/exceptions.rb +11 -0
- data/app/services/lab/lims/migrator.rb +1 -1
- data/app/services/lab/lims/order_serializer.rb +4 -9
- data/app/services/lab/lims/push_worker.rb +1 -1
- data/app/services/lab/lims/utils.rb +2 -3
- data/app/services/lab/orders_service.rb +1 -1
- data/app/services/lab/results_service.rb +8 -2
- data/db/migrate/20260128111557_add_program_id_to_encounter.rb +13 -0
- data/lib/lab/version.rb +1 -1
- metadata +6 -5
- /data/app/services/lab/lims/api/{couch_db_api.rb → couchdb_api.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2cb84913a3c09866a51aa40a98812803bfee6f66a36c3e5c7ea4bdcb9a530724
|
|
4
|
+
data.tar.gz: 833074b20f473b97b515a11392fc768dabc0b3289b1717474e08b903120c6216
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa6487f57604f5ee24b2fc15e730dfc765cea9eff12051d1875560aa49832e36dc7ffab4320517eeb1f6ffe0ccb706b0e40e4bffc0bcb56d3055b77c9f72c650
|
|
7
|
+
data.tar.gz: 02a6a0b02074c8fcec8c3d9dbeaeee0a29ea6f96a62f30459f96ee904720c72a854d8251bfb111c5e6e80ae6552a658dabb409547b92119062ada27723d2d0bf
|
|
@@ -21,7 +21,7 @@ module Lab
|
|
|
21
21
|
order_date: order.date_created,
|
|
22
22
|
location_id: encounter.location_id,
|
|
23
23
|
program_id: encounter.program_id,
|
|
24
|
-
program_name: program
|
|
24
|
+
program_name: program&.name,
|
|
25
25
|
# order_date: order.start_date,
|
|
26
26
|
patient_id: order.patient_id,
|
|
27
27
|
accession_number: order.accession_number,
|
|
@@ -9,7 +9,7 @@ module Lab
|
|
|
9
9
|
FROM concept_set cs
|
|
10
10
|
INNER JOIN concept_name cn ON cn.concept_id = cs.concept_id
|
|
11
11
|
INNER JOIN concept_attribute ca ON ca.value_reference = #{ActiveRecord::Base.connection.quote(nlims_code)}
|
|
12
|
-
AND ca.attribute_type_id =
|
|
12
|
+
AND ca.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
|
|
13
13
|
WHERE cs.concept_id IN (SELECT concept_set.concept_id
|
|
14
14
|
FROM concept_set
|
|
15
15
|
WHERE concept_set.concept_set IN (SELECT concept_name.concept_id
|
|
@@ -22,8 +22,8 @@ module Lab
|
|
|
22
22
|
FROM concept_name
|
|
23
23
|
WHERE concept_name.voided = 0
|
|
24
24
|
AND concept_name.name = 'Test type')
|
|
25
|
-
AND concept_set.concept_id = ca.concept_id
|
|
26
25
|
)
|
|
26
|
+
AND cs.concept_set = ca.concept_id
|
|
27
27
|
GROUP BY cn.concept_id
|
|
28
28
|
SQL
|
|
29
29
|
end
|
|
@@ -11,3 +11,14 @@ module Lab
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
module Lab
|
|
17
|
+
module Lims
|
|
18
|
+
class LimsException < StandardError; end
|
|
19
|
+
class DuplicateNHID < LimsException; end
|
|
20
|
+
class MissingAccessionNumber < LimsException; end
|
|
21
|
+
class UnknownSpecimenType < LimsException; end
|
|
22
|
+
class UnknownTestType < LimsException; end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -29,7 +29,7 @@ require 'lab/lab_test'
|
|
|
29
29
|
require 'lab/lims_order_mapping'
|
|
30
30
|
require 'lab/lims_failed_import'
|
|
31
31
|
|
|
32
|
-
require_relative 'api/
|
|
32
|
+
require_relative 'api/couchdb_api'
|
|
33
33
|
require_relative 'config'
|
|
34
34
|
require_relative 'pull_worker'
|
|
35
35
|
require_relative 'utils'
|
|
@@ -144,10 +144,9 @@ module Lab
|
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
def format_test_status_trail(order)
|
|
147
|
-
tests = order.voided ? order.tests : Lab::LabOrderSerializer.voided_tests(order)
|
|
148
|
-
|
|
147
|
+
tests = [0, false].include?(order.voided) ? order.tests : Lab::LabOrderSerializer.voided_tests(order)
|
|
149
148
|
tests.each_with_object({}) do |test, trail|
|
|
150
|
-
test_name = format_test_name(
|
|
149
|
+
test_name = format_test_name(::Concept.find(test.value_coded).test_catalogue_name)
|
|
151
150
|
|
|
152
151
|
current_test_trail = trail[test_name] = {}
|
|
153
152
|
|
|
@@ -156,7 +155,7 @@ module Lab
|
|
|
156
155
|
updated_by: find_user(test.creator)
|
|
157
156
|
}
|
|
158
157
|
|
|
159
|
-
unless test.voided
|
|
158
|
+
unless [0, false].include?(test.voided)
|
|
160
159
|
current_test_trail[test.date_voided.strftime('%Y%m%d%H%M%S')] = {
|
|
161
160
|
status: 'Voided',
|
|
162
161
|
updated_by: find_user(test.voided_by)
|
|
@@ -209,11 +208,7 @@ module Lab
|
|
|
209
208
|
end
|
|
210
209
|
|
|
211
210
|
def format_test_name(test_name)
|
|
212
|
-
return
|
|
213
|
-
|
|
214
|
-
return 'TB' if test_name.casecmp?('TB Program')
|
|
215
|
-
|
|
216
|
-
test_name.titleize
|
|
211
|
+
return test_name
|
|
217
212
|
end
|
|
218
213
|
|
|
219
214
|
def format_sample_priority(priority)
|
|
@@ -51,7 +51,7 @@ module Lab
|
|
|
51
51
|
mapping = Lab::LimsOrderMapping.find_by(order_id: order.order_id)
|
|
52
52
|
|
|
53
53
|
ActiveRecord::Base.transaction do
|
|
54
|
-
if mapping && !order.voided
|
|
54
|
+
if mapping && ![0, false].include?(order.voided)
|
|
55
55
|
Rails.logger.info("Deleting order ##{order_dto['accession_number']} from LIMS")
|
|
56
56
|
lims_api.delete_order(mapping.lims_id, order_dto)
|
|
57
57
|
mapping.destroy
|
|
@@ -78,9 +78,8 @@ module Lab
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
def self.find_concept_by_name(name)
|
|
81
|
-
ConceptName.joins(
|
|
82
|
-
.
|
|
83
|
-
.where(name: CGI.unescapeHTML(name))
|
|
81
|
+
ConceptName.joins("INNER JOIN concept_attribute ON concept_attribute.concept_id = concept_name.concept_id")
|
|
82
|
+
.where("concept_attribute.value_reference = ?", CGI.unescapeHTML(name))
|
|
84
83
|
.first
|
|
85
84
|
end
|
|
86
85
|
end
|
|
@@ -234,7 +234,7 @@ module Lab
|
|
|
234
234
|
encounter.encounter_type = EncounterType.find_by_name!(Lab::Metadata::ENCOUNTER_TYPE_NAME)
|
|
235
235
|
encounter.encounter_datetime = order_params[:date] || Date.today
|
|
236
236
|
encounter.visit = Visit.find_by_uuid(visit) if Encounter.column_names.include?('visit_id')
|
|
237
|
-
encounter.provider_id = User.current&.person
|
|
237
|
+
encounter.provider_id = User.current&.person&.id if Encounter.column_names.include?('provider_id')
|
|
238
238
|
encounter.program_id = order_params[:program_id] if Encounter.column_names.include?('program_id') && order_params[:program_id].present?
|
|
239
239
|
encounter.save!
|
|
240
240
|
encounter.reload
|
|
@@ -35,7 +35,11 @@ module Lab
|
|
|
35
35
|
serializer = Lab::ResultSerializer.serialize(results_obs)
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
# force commit all transactions
|
|
39
|
+
ActiveRecord::Base.connection.commit_db_transaction
|
|
40
|
+
|
|
41
|
+
# delay job by a second
|
|
42
|
+
ProcessLabResultJob.set(wait: 1.second).perform_later(results_obs.id, serializer, result_enter_by)
|
|
39
43
|
|
|
40
44
|
Rails.logger.info("Lab::ResultsService: Result created for test #{test_id} #{serializer}")
|
|
41
45
|
serializer
|
|
@@ -78,12 +82,14 @@ module Lab
|
|
|
78
82
|
def find_encounter(test, encounter_id: nil, encounter_uuid: nil, date: nil, provider_id: nil)
|
|
79
83
|
return Encounter.find(encounter_id) if encounter_id
|
|
80
84
|
return Encounter.find_by_uuid(encounter_uuid) if encounter_uuid
|
|
85
|
+
encounter_type = EncounterType.find_by_name!(Lab::Metadata::ENCOUNTER_TYPE_NAME)
|
|
81
86
|
|
|
82
87
|
encounter = Encounter.new
|
|
83
88
|
encounter.patient_id = test.person_id
|
|
84
89
|
encounter.program_id = test.encounter.program_id if Encounter.column_names.include?('program_id')
|
|
85
90
|
encounter.visit_id = test.encounter.visit_id if Encounter.column_names.include?('visit_id')
|
|
86
|
-
encounter.
|
|
91
|
+
encounter.type = encounter_type
|
|
92
|
+
encounter.encounter_type = encounter_type if (encounter&.encounter_type.nil? || encounter&.type.nil?)
|
|
87
93
|
encounter.encounter_datetime = date || Date.today
|
|
88
94
|
encounter.provider_id = provider_id || User.current.user_id if Encounter.column_names.include?('provider_id')
|
|
89
95
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This migration adds the program_id column to the encounter table if it doesn't already exist.
|
|
4
|
+
# The program_id column is used to associate encounters with specific programs (e.g., HIV Program, TB Program).
|
|
5
|
+
class AddProgramIdToEncounter < ActiveRecord::Migration[5.2]
|
|
6
|
+
def change
|
|
7
|
+
return if column_exists?(:encounter, :program_id)
|
|
8
|
+
|
|
9
|
+
add_column :encounter, :program_id, :integer, after: :encounter_type
|
|
10
|
+
add_index :encounter, :program_id
|
|
11
|
+
add_foreign_key :encounter, :program, column: :program_id, primary_key: :program_id
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/lab/version.rb
CHANGED
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: 2.1.
|
|
4
|
+
version: 2.1.4.pre.beta
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Elizabeth Glaser Pediatric Foundation Malawi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-01-
|
|
11
|
+
date: 2026-01-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: couchrest
|
|
@@ -270,7 +270,7 @@ files:
|
|
|
270
270
|
- app/services/lab/lims/acknowledgement_serializer.rb
|
|
271
271
|
- app/services/lab/lims/acknowledgement_worker.rb
|
|
272
272
|
- app/services/lab/lims/api/blackhole_api.rb
|
|
273
|
-
- app/services/lab/lims/api/
|
|
273
|
+
- app/services/lab/lims/api/couchdb_api.rb
|
|
274
274
|
- app/services/lab/lims/api/mysql_api.rb
|
|
275
275
|
- app/services/lab/lims/api/rest_api.rb
|
|
276
276
|
- app/services/lab/lims/api/ws_api.rb
|
|
@@ -301,6 +301,7 @@ files:
|
|
|
301
301
|
- db/migrate/20210807111531_add_default_to_lims_order_mapping.rb
|
|
302
302
|
- db/migrate/20260119104240_add_fulfiller_fields_to_orders.rb
|
|
303
303
|
- db/migrate/20260119104241_create_comment_to_fulfiller_concept.rb
|
|
304
|
+
- db/migrate/20260128111557_add_program_id_to_encounter.rb
|
|
304
305
|
- lib/auto12epl.rb
|
|
305
306
|
- lib/couch_bum/couch_bum.rb
|
|
306
307
|
- lib/generators/lab/install/USAGE
|
|
@@ -339,9 +340,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
339
340
|
version: '0'
|
|
340
341
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
341
342
|
requirements:
|
|
342
|
-
- - "
|
|
343
|
+
- - ">"
|
|
343
344
|
- !ruby/object:Gem::Version
|
|
344
|
-
version:
|
|
345
|
+
version: 1.3.1
|
|
345
346
|
requirements: []
|
|
346
347
|
rubygems_version: 3.4.1
|
|
347
348
|
signing_key:
|
|
File without changes
|