his_emr_api_lab 2.3.2 → 2.3.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 621f287ea97c94b4c48cd73c0bcd44e38ec8232bad9c2e5a9c1bed97ffa40828
4
- data.tar.gz: 41138387babca534befa95b3c2f07e794f2b8fe3b7812901dba45f18aa80b45d
3
+ metadata.gz: 3873475c6cfd03e575f78f41fbf683f18c7dc7c9805727b7fe95c68bda0c9ad0
4
+ data.tar.gz: 1ac84309c0eb67cc136b7e51c2254d45b64514c7a2cc605f7366cc73d33fcc59
5
5
  SHA512:
6
- metadata.gz: 7712bd7f073b68e2b1ebc23f248902ac27b4ba08773fba780f12704b43b849f209eb75c7de421763e7bbe80dd960031abf68e2aa961514451c7d153afb62824b
7
- data.tar.gz: b00db5c45c98f2c05a9ce6bc7f843d0a66b6db78528b2f1d8bf1c978e9d7b56848c32f8d6a98400ba1e554c72d8f34d281242151f6c23f92dadf4209fbe298b1
6
+ metadata.gz: d4a4106f2ace136bede102affbf76ba7d6d9d740711f401b53727349ff47f3bc781ad5b3f709e56b17c75dcb1f194a7e6fa4e2abaa3895ac6685f262afa62c53
7
+ data.tar.gz: 04ac7da59794e253c10bab14a5002633c1b9f30e48e0a70338153af8020443bd75914400ef274edc469a5852862bfe03623f5be4664c564af29ada6782a9b1e0
@@ -12,6 +12,16 @@ module Lab
12
12
  encounter = Encounter.unscoped.find_by(encounter_id: results_obs.encounter_id)
13
13
  Location.current = Location.find(encounter.location_id) if encounter&.location_id
14
14
  Lab::ResultsService.process_result_completion(results_obs, serializer, result_enter_by)
15
+
16
+ # Publish notification that results have been processed
17
+ ActiveSupport::Notifications.instrument(
18
+ 'lab.results_saved',
19
+ patient_id: results_obs.person_id,
20
+ order_id: results_obs.order_id,
21
+ result_id: results_obs.obs_id,
22
+ encounter_id: results_obs.encounter_id,
23
+ timestamp: Time.current
24
+ )
15
25
  end
16
26
  end
17
27
  end
@@ -16,6 +16,14 @@ module Lab
16
16
 
17
17
  worker = Lab::Lims::PushWorker.new(Lab::Lims::ApiFactory.create_api)
18
18
  worker.push_order(order)
19
+
20
+ # Publish notification that order has been voided
21
+ ActiveSupport::Notifications.instrument(
22
+ 'lab.order_voided',
23
+ patient_id: order.patient_id,
24
+ order_id: order.order_id,
25
+ timestamp: Time.current
26
+ )
19
27
  end
20
28
  end
21
29
  end
@@ -50,6 +50,10 @@ module Lab
50
50
  # reason_for_test_id: is a concept_id for a (standard) reason of why the test is being carried out
51
51
  # requesting_clinician: Name of the clinician requesting the test (defaults to current user)
52
52
  def order_test(order_params)
53
+ serialized_order = nil
54
+ order_id = nil
55
+ patient_id = nil
56
+
53
57
  Order.transaction do
54
58
  encounter = find_encounter(order_params)
55
59
  if order_params[:accession_number].present? && check_tracking_number(order_params[:accession_number])
@@ -68,13 +72,29 @@ module Lab
68
72
  # Reload order to include status trails and tests
69
73
  order = Lab::LabOrder.prefetch_relationships.find(order.order_id)
70
74
 
71
- Lab::LabOrderSerializer.serialize_order(
75
+ serialized_order = Lab::LabOrderSerializer.serialize_order(
72
76
  order, requesting_clinician: add_requesting_clinician(order, order_params),
73
77
  reason_for_test: add_reason_for_test(order, order_params),
74
78
  target_lab: add_target_lab(order, order_params),
75
79
  comment_to_fulfiller: add_comment_to_fulfiller(order, order_params)
76
80
  )
81
+
82
+ # Store IDs for notification after transaction commits
83
+ order_id = order.order_id
84
+ patient_id = order.patient_id
77
85
  end
86
+
87
+ # Publish notification AFTER transaction commits
88
+ # This ensures the order is visible in the database before rebuilding
89
+ ActiveSupport::Notifications.instrument(
90
+ 'lab.order_created',
91
+ patient_id: patient_id,
92
+ order_id: order_id,
93
+ accession_number: serialized_order[:accession_number],
94
+ timestamp: Time.current
95
+ )
96
+
97
+ serialized_order
78
98
  end
79
99
 
80
100
  def attach_test_method(order, order_params)
@@ -153,6 +173,16 @@ module Lab
153
173
  save_order_status_trail(order, order_params) if order_params['status']
154
174
  end
155
175
  create_rejection_notification(order_params) if order_params['status'] == 'test-rejected'
176
+
177
+ # Publish notification that order status has changed
178
+ ActiveSupport::Notifications.instrument(
179
+ 'lab.order_status_changed',
180
+ patient_id: order.patient_id,
181
+ order_id: order.order_id,
182
+ new_status: order_params['status'],
183
+ tracking_number: order_params['tracking_number'],
184
+ timestamp: Time.current
185
+ )
156
186
  end
157
187
 
158
188
  def update_order_result(order_params)
@@ -46,6 +46,17 @@ module Lab
46
46
  ProcessLabResultJob.perform_now(results_obs.id, serializer, result_enter_by)
47
47
 
48
48
  Rails.logger.info("Lab::ResultsService: Result created for test #{test_id} #{serializer}")
49
+
50
+ # Publish notification that results have been created
51
+ ActiveSupport::Notifications.instrument(
52
+ 'lab.results_created',
53
+ patient_id: results_obs.person_id,
54
+ order_id: results_obs.order_id,
55
+ result_id: results_obs.obs_id,
56
+ test_id: test_id,
57
+ timestamp: Time.current
58
+ )
59
+
49
60
  serializer
50
61
  end
51
62
 
data/lib/lab/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lab
4
- VERSION = '2.3.2'
4
+ VERSION = '2.3.3'
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: 2.3.2
4
+ version: 2.3.3
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-04-01 00:00:00.000000000 Z
11
+ date: 2026-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: couchrest