his_emr_api_lab 2.1.8.4 → 2.1.8.6

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: 48bde24dfa632a5401c2d51ed64497181abce1eaa5383a9f89ffb97b6d53630d
4
- data.tar.gz: c7ad332d6c9f695202965f7402a51eb4d456dfd3f8d243004ab0ce8bd3df7b87
3
+ metadata.gz: 9d62deddcd36f58905cb31ed7240186170e63bb60024a9b7f1adbeeba2b7fa02
4
+ data.tar.gz: 5396bb200c07079f19b12004fb2fa11af844b0c24ae8f90a7a076f474c7d1867
5
5
  SHA512:
6
- metadata.gz: 360c583e51172ae67a2af0a7c0936ffd51bccf304ca01183400c532a97e30f31c898e790f3333011167674983b06946ddf754d1a9d69cb69294f747f5192251e
7
- data.tar.gz: 8b8b915e976ade5664acd97cf310cf78d21a8e3000dad43dfad2198438358bffb3f44c61aa90f6f417d2156e78a71f5a54fe181ee9ceed8e09f24f4e42c2eaf7
6
+ metadata.gz: 0fc83099a46e0b9879c9d489b507e3b04444e1dba215d2c3632290b937092b83682938ef3a4991851acdd725f0dbff30766ff9024378e67520b628bf8d5b170c
7
+ data.tar.gz: 58b1df7bff8f2ed90083d24a382d20dc963604574f94024a98408f1ec1ef9afa4e407f651bbd82863c2355ffef81cdccb8bea224c2516fb9d3a00420abbc0bce
@@ -7,7 +7,7 @@ module Lab
7
7
  queue_as :default
8
8
  def perform(results_obs_id, serializer, result_enter_by)
9
9
  Rails.logger.info("Lab::ProcessLabResultJob: Processing result completion for #{serializer}")
10
- results_obs = Lab::LabResult.find(results_obs_id)
10
+ results_obs = Lab::LabResult.unscoped.find(results_obs_id)
11
11
  Lab::ResultsService.process_result_completion(results_obs, serializer, result_enter_by)
12
12
  end
13
13
  end
@@ -66,7 +66,8 @@ module Lab
66
66
  def self.concept_name(concept_id)
67
67
  return concept_id unless concept_id
68
68
 
69
- ::ConceptAttribute.find_by(concept_id:, attribute_type: ConceptAttributeType.test_catalogue_name)&.value_reference
69
+ c_name = ::ConceptAttribute.find_by(concept_id:, attribute_type: ConceptAttributeType.test_catalogue_name)&.value_reference
70
+ c_name || ConceptName.find_by_concept_id(concept_id)&.name
70
71
  end
71
72
 
72
73
  def self.voided_tests(order)
@@ -14,9 +14,12 @@ module Lab
14
14
  date_received: params[:date_received])
15
15
  end
16
16
 
17
- def acknowledgements_pending_sync(batch_size)
18
- Lab::LabAcknowledgement.where(pushed: false)
19
- .limit(batch_size)
17
+ def acknowledgements_pending_sync(batch_size, start_date: nil)
18
+ query = Lab::LabAcknowledgement.joins(:order).where(pushed: false)
19
+
20
+ query = query.where('orders.date_created >= ?', start_date) if start_date
21
+
22
+ query.limit(batch_size)
20
23
  end
21
24
 
22
25
  def push_acknowledgement(acknowledgement, lims_api)
@@ -30,7 +33,8 @@ module Lab
30
33
  Rails.logger.info("Updating acknowledgement ##{acknowledgement_dto[:tracking_number]} in LIMS")
31
34
  response = lims_api.acknowledge(acknowledgement_dto)
32
35
  Rails.logger.info("Info #{response}")
33
- if ['results already delivered for test name given', 'test result acknowledged successfully', 'test result already acknowledged electronically at facility'].include?(response['message'])
36
+ if ['results already delivered for test name given', 'test result acknowledged successfully',
37
+ 'test result already acknowledged electronically at facility'].include?(response['message'])
34
38
  acknowledgement.pushed = true
35
39
  acknowledgement.date_pushed = Time.now
36
40
  acknowledgement.save!
@@ -34,10 +34,11 @@ module Lab
34
34
 
35
35
  unless specimen_type
36
36
  return ActiveRecord::Base.connection.select_all <<~SQL
37
- SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
37
+ SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
38
38
  FROM concept_attribute ca
39
39
  INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
40
40
  AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
41
+ INNER JOIN concept c ON c.concept_id = ca.concept_id
41
42
  WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
42
43
  AND ca.concept_id IN (#{test_types.select(:concept_id).to_sql})
43
44
  GROUP BY ca.concept_id
@@ -56,10 +57,11 @@ module Lab
56
57
  )
57
58
 
58
59
  return ActiveRecord::Base.connection.select_all <<~SQL
59
- SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
60
+ SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
60
61
  FROM concept_attribute ca
61
62
  INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
62
63
  AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
64
+ INNER JOIN concept c ON c.concept_id = ca.concept_id
63
65
  WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
64
66
  AND ca.concept_id IN (#{concept_set.select(:concept_set).to_sql})
65
67
  GROUP BY ca.concept_id
@@ -72,10 +74,11 @@ module Lab
72
74
 
73
75
  unless test_type
74
76
  return ActiveRecord::Base.connection.select_all <<~SQL
75
- SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
77
+ SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
76
78
  FROM concept_attribute ca
77
79
  INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
78
80
  AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
81
+ INNER JOIN concept c ON c.concept_id = ca.concept_id
79
82
  WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
80
83
  AND ca.concept_id IN (#{specimen_types.select(:concept_id).to_sql})
81
84
  GROUP BY ca.concept_id
@@ -94,10 +97,11 @@ module Lab
94
97
  )
95
98
 
96
99
  return ActiveRecord::Base.connection.select_all <<~SQL
97
- SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
100
+ SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
98
101
  FROM concept_attribute ca
99
102
  INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
100
103
  AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
104
+ INNER JOIN concept c ON c.concept_id = ca.concept_id
101
105
  WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
102
106
  AND ca.concept_id IN (#{concept_set.pluck(:concept_id).push(0).join(',')})
103
107
  GROUP BY ca.concept_id
@@ -114,15 +118,16 @@ module Lab
114
118
  measures = ConceptSet.find_members_by_name(Lab::Metadata::TEST_RESULT_INDICATOR_CONCEPT_NAME)
115
119
  .select(:concept_id)
116
120
 
117
- sets = ConceptSet.where(concept_set: measures, concept_id: test)
121
+ sets = ConceptSet.where(concept_set: test, concept_id: measures)
118
122
 
119
123
  return ActiveRecord::Base.connection.select_all <<~SQL
120
- SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code
124
+ SELECT ca.concept_id, ca.value_reference as name, ca2.value_reference as nlims_code, c.uuid
121
125
  FROM concept_attribute ca
122
126
  INNER JOIN concept_attribute ca2 ON ca.concept_id = ca2.concept_id
123
127
  AND ca2.attribute_type_id = #{ConceptAttributeType.nlims_code.concept_attribute_type_id}
128
+ INNER JOIN concept c ON c.concept_id = ca.concept_id
124
129
  WHERE ca.attribute_type_id = #{ConceptAttributeType.test_catalogue_name.concept_attribute_type_id}
125
- AND ca.concept_id IN (#{sets.pluck(:concept_set).push(0).join(',')})
130
+ AND ca.concept_id IN (#{sets.pluck(:concept_id).push(0).join(',')})
126
131
  GROUP BY ca.concept_id
127
132
  SQL
128
133
  end
@@ -4,20 +4,22 @@ module Lab
4
4
  module Lims
5
5
  # This class is responsible for handling the acknowledgement of lab orders
6
6
  class AcknowledgementWorker
7
- attr_reader :lims_api
7
+ attr_reader :lims_api, :start_date
8
8
 
9
9
  include Utils # for logger
10
10
 
11
11
  SECONDS_TO_WAIT_FOR_ORDERS = 30
12
12
 
13
- def initialize(lims_api)
13
+ def initialize(lims_api, start_date: nil)
14
14
  @lims_api = lims_api
15
+ @start_date = start_date
15
16
  end
16
17
 
17
18
  def push_acknowledgement(batch_size: 1000, wait: false)
18
19
  loop do
19
20
  logger.info('Looking for new acknowledgements to push to LIMS...')
20
- acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size).all
21
+ acknowledgements = Lab::AcknowledgementService.acknowledgements_pending_sync(batch_size,
22
+ start_date: start_date).all
21
23
 
22
24
  logger.debug("Found #{acknowledgements.size} acknowledgements...")
23
25
  acknowledgements.each do |acknowledgement|
@@ -74,8 +74,8 @@ module Lab
74
74
  { tracking_number: order_dto[:tracking_number] }
75
75
  end
76
76
 
77
- def consume_orders(*_args, patient_id: nil, **_kwargs)
78
- orders_pending_updates(patient_id).each do |order|
77
+ def consume_orders(*_args, patient_id: nil, start_date: nil, **_kwargs)
78
+ orders_pending_updates(patient_id, start_date: start_date).each do |order|
79
79
  order_dto = Lab::Lims::OrderSerializer.serialize_order(order)
80
80
  if order_dto['priority'].nil? || order_dto['sample_type'].casecmp?('not_specified')
81
81
  patch_order_dto_with_lims_order!(order_dto, find_lims_order(order.accession_number))
@@ -510,43 +510,47 @@ module Lab
510
510
  }
511
511
  end
512
512
 
513
- def orders_pending_updates(patient_id = nil)
513
+ def orders_pending_updates(patient_id = nil, start_date: nil)
514
514
  Rails.logger.info('Looking for orders that need to be updated...')
515
515
  orders = {}
516
516
 
517
- orders_without_specimen(patient_id).each { |order| orders[order.order_id] = order }
518
- orders_without_results(patient_id).each { |order| orders[order.order_id] = order }
519
- orders_without_reason(patient_id).each { |order| orders[order.order_id] = order }
517
+ orders_without_specimen(patient_id, start_date: start_date).each { |order| orders[order.order_id] = order }
518
+ orders_without_results(patient_id, start_date: start_date).each { |order| orders[order.order_id] = order }
519
+ orders_without_reason(patient_id, start_date: start_date).each { |order| orders[order.order_id] = order }
520
520
 
521
521
  orders.values
522
522
  end
523
523
 
524
- def orders_without_specimen(patient_id = nil)
524
+ def orders_without_specimen(patient_id = nil, start_date: nil)
525
525
  Rails.logger.debug('Looking for orders without a specimen')
526
526
  unknown_specimen = ConceptName.where(name: Lab::Metadata::UNKNOWN_SPECIMEN)
527
527
  .select(:concept_id)
528
528
  orders = Lab::LabOrder.where(concept_id: unknown_specimen)
529
529
  .where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id))
530
530
  orders = orders.where(patient_id:) if patient_id
531
+ orders = orders.where('orders.date_created >= ?', start_date) if start_date
531
532
 
532
533
  orders
533
534
  end
534
535
 
535
- def orders_without_results(patient_id = nil)
536
+ def orders_without_results(patient_id = nil, start_date: nil)
536
537
  Rails.logger.debug('Looking for orders without a result')
537
538
  # Lab::OrdersSearchService.find_orders_without_results(patient_id: patient_id)
538
539
  # .where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id).where("pulled_at IS NULL"))
539
- Lab::OrdersSearchService.find_orders_without_results(patient_id:)
540
- .where(order_id: Lab::LimsOrderMapping.select(:order_id))
540
+ orders = Lab::OrdersSearchService.find_orders_without_results(patient_id:)
541
+ .where(order_id: Lab::LimsOrderMapping.select(:order_id))
542
+ orders = orders.where('orders.date_created >= ?', start_date) if start_date
543
+ orders
541
544
  end
542
545
 
543
- def orders_without_reason(patient_id = nil)
546
+ def orders_without_reason(patient_id = nil, start_date: nil)
544
547
  Rails.logger.debug('Looking for orders without a reason for test')
545
548
  orders = Lab::LabOrder.joins(:reason_for_test)
546
549
  .merge(Observation.where(value_coded: nil, value_text: nil))
547
550
  .limit(1000)
548
551
  .where.not(accession_number: Lab::LimsOrderMapping.select(:lims_id))
549
552
  orders = orders.where(patient_id:) if patient_id
553
+ orders = orders.where('orders.date_created >= ?', start_date) if start_date
550
554
 
551
555
  orders
552
556
  end
@@ -109,6 +109,7 @@ module Lab
109
109
  end
110
110
 
111
111
  def format_sample_type(name)
112
+ return 'not_specified' if name.nil?
112
113
  return 'not_specified' if name.casecmp?('Unknown')
113
114
 
114
115
  return 'CSF' if name.casecmp?('Cerebrospinal Fluid')
@@ -5,14 +5,15 @@ module Lab
5
5
  ##
6
6
  # Pulls orders from a Lims API object and saves them to the local database.
7
7
  class PullWorker
8
- attr_reader :lims_api
8
+ attr_reader :lims_api, :start_date
9
9
 
10
10
  include Utils # for logger
11
11
 
12
12
  LIMS_LOG_PATH = Rails.root.join('log', 'lims')
13
13
 
14
- def initialize(lims_api)
14
+ def initialize(lims_api, start_date: nil)
15
15
  @lims_api = lims_api
16
+ @start_date = start_date
16
17
  end
17
18
 
18
19
  ##
@@ -20,7 +21,7 @@ module Lab
20
21
  def pull_orders(batch_size: 10_000, **)
21
22
  logger.info("Retrieving LIMS orders starting from #{last_seq}")
22
23
 
23
- lims_api.consume_orders(from: last_seq, limit: batch_size, **) do |order_dto, context|
24
+ lims_api.consume_orders(from: last_seq, limit: batch_size, start_date: start_date, **) do |order_dto, context|
24
25
  logger.debug("Retrieved order ##{order_dto[:tracking_number]}: #{order_dto}")
25
26
 
26
27
  patient = find_patient_by_nhid(order_dto[:patient][:id], order_dto[:tracking_number])
@@ -5,15 +5,16 @@ module Lab
5
5
  ##
6
6
  # Pushes all local orders to a LIMS Api object.
7
7
  class PushWorker
8
- attr_reader :lims_api
8
+ attr_reader :lims_api, :start_date
9
9
 
10
10
  include Utils # for logger
11
11
 
12
12
  SECONDS_TO_WAIT_FOR_ORDERS = 30
13
13
  START_DATE = Time.parse('2024-09-03').freeze
14
14
 
15
- def initialize(lims_api)
15
+ def initialize(lims_api, start_date: nil)
16
16
  @lims_api = lims_api
17
+ @start_date = start_date
17
18
  end
18
19
 
19
20
  def push_orders(batch_size: 1000, wait: false)
@@ -81,8 +82,8 @@ module Lab
81
82
 
82
83
  def void_order_in_lims(order_id)
83
84
  order = Lab::LabOrder.joins(order_type: { name: 'Lab' })
84
- .unscoped
85
- .find(order_id)
85
+ .unscoped
86
+ .find(order_id)
86
87
  order_dto = Lab::Lims::OrderSerializer.serialize_order(order)
87
88
  Rails.logger.info("Deleting order ##{order_dto[:accession_number]} from LIMS")
88
89
  lims_api.delete_order('', order_dto)
@@ -100,10 +101,16 @@ module Lab
100
101
 
101
102
  def new_orders
102
103
  Rails.logger.debug('Looking for new orders that need to be created in LIMS...')
103
- Lab::LabOrder.where.not(order_id: Lab::LimsOrderMapping.all.select(:order_id))
104
- .where("accession_number IS NOT NULL AND accession_number !=''")
105
- .where(date_created: START_DATE..(Date.today + 1.day))
106
- .order(date_created: :desc)
104
+ query = Lab::LabOrder.where.not(order_id: Lab::LimsOrderMapping.all.select(:order_id))
105
+ .where("accession_number IS NOT NULL AND accession_number !=''")
106
+
107
+ query = if start_date
108
+ query.where('orders.date_created >= ?', start_date)
109
+ else
110
+ query.where('orders.date_created >= ? AND orders.date_created <= ?', START_DATE, Date.today + 1.day)
111
+ end
112
+
113
+ query.order(date_created: :desc)
107
114
  end
108
115
 
109
116
  def updated_orders
@@ -111,23 +118,26 @@ module Lab
111
118
  last_updated = Lab::LimsOrderMapping.select('MAX(updated_at) AS last_updated')
112
119
  .first
113
120
  .last_updated
121
+ last_updated = start_date if start_date && last_updated < start_date
114
122
 
115
123
  Lab::LabOrder.left_joins(:results)
116
124
  .joins(:mapping)
117
- .where('orders.discontinued_date > :last_updated
118
- OR obs.date_created > orders.date_created AND lab_lims_order_mappings.result_push_status = 0',
125
+ .where('(orders.discontinued_date > :last_updated
126
+ OR (obs.date_created > orders.date_created AND orders.date_created >= :last_updated)) AND lab_lims_order_mappings.result_push_status = 0',
119
127
  last_updated:)
120
128
  .group('orders.order_id')
121
129
  .order(discontinued_date: :desc, date_created: :desc)
122
130
  end
123
131
 
124
132
  def voided_orders
133
+ # add date filter to avoid pushing voided orders that were created a long time ago
125
134
  Rails.logger.debug('Looking for voided orders that are being tracked by LIMS...')
126
- Lab::LabOrder.unscoped
135
+ orders = Lab::LabOrder.unscoped
127
136
  .where(order_type: OrderType.where(name: Lab::Metadata::ORDER_TYPE_NAME),
128
137
  order_id: Lab::LimsOrderMapping.all.select(:order_id),
129
138
  voided: 1)
130
- .order(date_voided: :desc)
139
+ orders = orders.where('orders.date_created >= ?', start_date) if start_date
140
+ orders.order(date_voided: :desc)
131
141
  end
132
142
 
133
143
  ##
@@ -9,43 +9,43 @@ module Lab
9
9
  ##
10
10
  # Pull/Push orders from/to the LIMS queue (Oops meant CouchDB).
11
11
  module Worker
12
- def self.start
12
+ def self.start(start_date: nil)
13
13
  User.current = Utils.lab_user
14
14
 
15
- fork(&method(:start_push_worker))
16
- fork(&method(:start_pull_worker))
17
- fork(&method(:start_acknowledgement_worker))
18
- fork(&method(:start_realtime_pull_worker)) if realtime_updates_enabled?
15
+ fork { start_push_worker(start_date: start_date) }
16
+ fork { start_pull_worker(start_date: start_date) }
17
+ fork { start_acknowledgement_worker(start_date: start_date) }
18
+ fork { start_realtime_pull_worker(start_date: start_date) } if realtime_updates_enabled?
19
19
 
20
20
  Process.waitall
21
21
  end
22
22
 
23
- def self.start_push_worker
23
+ def self.start_push_worker(start_date: nil)
24
24
  start_worker('push_worker') do
25
- worker = PushWorker.new(lims_api)
25
+ worker = PushWorker.new(lims_api, start_date: start_date)
26
26
 
27
27
  worker.push_orders # (wait: true)
28
28
  end
29
29
  end
30
30
 
31
- def self.start_acknowledgement_worker
31
+ def self.start_acknowledgement_worker(start_date: nil)
32
32
  start_worker('acknowledgement_worker') do
33
- worker = AcknowledgementWorker.new(lims_api)
33
+ worker = AcknowledgementWorker.new(lims_api, start_date: start_date)
34
34
  worker.push_acknowledgement
35
35
  end
36
36
  end
37
37
 
38
- def self.start_pull_worker
38
+ def self.start_pull_worker(start_date: nil)
39
39
  start_worker('pull_worker') do
40
- worker = PullWorker.new(lims_api)
40
+ worker = PullWorker.new(lims_api, start_date: start_date)
41
41
 
42
42
  worker.pull_orders
43
43
  end
44
44
  end
45
45
 
46
- def self.start_realtime_pull_worker
46
+ def self.start_realtime_pull_worker(start_date: nil)
47
47
  start_worker('realtime_pull_worker') do
48
- worker = PullWorker.new(Lims::Api::WsApi.new(Lab::Lims::Config.updates_socket))
48
+ worker = PullWorker.new(Lims::Api::WsApi.new(Lab::Lims::Config.updates_socket), start_date: start_date)
49
49
 
50
50
  worker.pull_orders
51
51
  end
@@ -260,7 +260,8 @@ module Lab
260
260
  order.date_created = params[:date]&.to_date || Date.today if order.respond_to?(:date_created)
261
261
  order.start_date = params[:date]&.to_date || Date.today if order.respond_to?(:start_date)
262
262
  order.auto_expire_date = params[:end_date]
263
- order.comment_to_fulfiller = params[:comment_to_fulfiller] if params[:comment_to_fulfiller]
263
+ # Note: comment_to_fulfiller is a has_one association, not a field
264
+ # It will be created via add_comment_to_fulfiller method
264
265
  order.accession_number = access_number
265
266
  order.orderer = User.current&.user_id
266
267
 
@@ -43,7 +43,11 @@ module Lab
43
43
  ActiveRecord::Base.connection.commit_db_transaction
44
44
 
45
45
  # Execute job synchronously
46
- ProcessLabResultJob.perform_now(results_obs.id, serializer, result_enter_by)
46
+ begin
47
+ ProcessLabResultJob.perform_now(results_obs.id, serializer, result_enter_by)
48
+ rescue StandardError => e
49
+ Rails.logger.error("Lab::ResultsService: Error processing lab result job for test #{test_id}: #{e.message}")
50
+ end
47
51
 
48
52
  Rails.logger.info("Lab::ResultsService: Result created for test #{test_id} #{serializer}")
49
53
  serializer
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.1.8.4'
4
+ VERSION = '2.1.8.6'
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.1.8.4
4
+ version: 2.1.8.6
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-03-13 00:00:00.000000000 Z
11
+ date: 2026-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: couchrest