his_emr_api_lab 2.3.8 → 2.3.9.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/services/lab/notification_service.rb +31 -7
- data/app/services/lab/results_service.rb +6 -1
- data/lib/lab/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 765ba6c202e8acbcc7b4c527f825712faaa90dcf6065652b8af1af697ad95a43
|
|
4
|
+
data.tar.gz: 7c669c0d903dd3f55269a771faf3987f92c35b2d4e6c6f9ff0649bf886ad44c9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b86dd7203397f49373d56a54738f17959732e2b8a334da57c24a62396c86f4b125d8bc52aabcab0e21dc34fd661e10ecec49f58c82967ebc9b77a6b6a1afd785
|
|
7
|
+
data.tar.gz: 0131d1135c05cbe03b41ce3e05993087607cffbc28c7845c530df10a740ff16f0c6697880142816dc656c280b8766a4bed47e2cbcbef093a4cd0ab40629152e1
|
|
@@ -27,22 +27,46 @@ class Lab::NotificationService
|
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def create_notification(alert_type, alert_message
|
|
30
|
+
def create_notification(alert_type, alert_message,
|
|
31
|
+
uniq_checkers: { test_type_id: nil, order_id: nil, specimen_id: nil })
|
|
31
32
|
return if alert_type != 'LIMS'
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
test_type_id = uniq_checkers[:test_type_id]
|
|
35
|
+
order_id = uniq_checkers[:order_id]
|
|
36
|
+
specimen_id = uniq_checkers[:specimen_id]
|
|
37
|
+
|
|
38
|
+
return unless test_type_id.present? && order_id.present? && specimen_id.present?
|
|
35
39
|
|
|
40
|
+
lab = Lab::Lims::Utils.lab_user
|
|
36
41
|
unless lab
|
|
37
42
|
Rails.logger.warn('NotificationService: lab_daemon user not found, skipping notification creation')
|
|
38
43
|
return
|
|
39
44
|
end
|
|
40
45
|
|
|
41
46
|
ActiveRecord::Base.transaction do
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
# Atomic find or create - checks and creates in one operation
|
|
48
|
+
alert = NotificationAlert.find_or_create_by!(
|
|
49
|
+
test_type_id: test_type_id,
|
|
50
|
+
order_id: order_id,
|
|
51
|
+
specimen_id: specimen_id
|
|
52
|
+
) do |new_alert|
|
|
53
|
+
# Only set these attributes on creation
|
|
54
|
+
new_alert.text = alert_message.to_json
|
|
55
|
+
new_alert.date_to_expire = Time.now + not_period.days
|
|
56
|
+
new_alert.creator = lab
|
|
57
|
+
new_alert.changed_by = lab
|
|
58
|
+
new_alert.date_created = Time.now
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Only notify if this is a new record (not a duplicate)
|
|
62
|
+
notify(alert, User.joins(:roles).uniq) if alert.previously_new_record?
|
|
63
|
+
rescue ActiveRecord::RecordNotUnique
|
|
64
|
+
# Handle race condition if unique constraint exists
|
|
65
|
+
Rails.logger.info("Duplicate notification prevented for test_type: #{test_type_id}, order: #{order_id}, specimen: #{specimen_id}")
|
|
66
|
+
rescue ActiveRecord::InvalidForeignKey => e
|
|
67
|
+
Rails.logger.error("Invalid foreign key: #{e.message}")
|
|
68
|
+
rescue StandardError => e
|
|
69
|
+
Rails.logger.error("Unexpected error: #{e.message}")
|
|
46
70
|
end
|
|
47
71
|
end
|
|
48
72
|
|
|
@@ -74,6 +74,11 @@ module Lab
|
|
|
74
74
|
def precess_notification_message(result, values, result_enter_by)
|
|
75
75
|
order = Order.find(result.order_id)
|
|
76
76
|
test_concept_id = result.test&.value_coded
|
|
77
|
+
uniq_checkers = {
|
|
78
|
+
test_type_id: test_concept_id,
|
|
79
|
+
order_id: order&.order_id,
|
|
80
|
+
specimen_id: order.concept_id
|
|
81
|
+
}
|
|
77
82
|
|
|
78
83
|
data = { Type: result_enter_by,
|
|
79
84
|
Specimen: get_test_catalog_name(order.concept_id) || ConceptName.find_by(concept_id: order.concept_id)&.name,
|
|
@@ -84,7 +89,7 @@ module Lab
|
|
|
84
89
|
PatientID: result.person_id,
|
|
85
90
|
'Ordered By': Order.columns.include?('provider_id') ? order&.provider&.person&.name : Person.find(User.unscoped.find(order.creator).person_id)&.name,
|
|
86
91
|
Result: values }.as_json
|
|
87
|
-
NotificationService.new.create_notification(result_enter_by, data)
|
|
92
|
+
NotificationService.new.create_notification(result_enter_by, data, uniq_checkers: uniq_checkers)
|
|
88
93
|
end
|
|
89
94
|
|
|
90
95
|
def process_acknowledgement(results, results_enter_by)
|
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.3.
|
|
4
|
+
version: 2.3.9.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-06-
|
|
11
|
+
date: 2026-06-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: couchrest
|
|
@@ -341,9 +341,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
341
341
|
version: '0'
|
|
342
342
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
343
343
|
requirements:
|
|
344
|
-
- - "
|
|
344
|
+
- - ">"
|
|
345
345
|
- !ruby/object:Gem::Version
|
|
346
|
-
version:
|
|
346
|
+
version: 1.3.1
|
|
347
347
|
requirements: []
|
|
348
348
|
rubygems_version: 3.4.1
|
|
349
349
|
signing_key:
|