Skip to content

Commit 1d14c5d

Browse files
committed
Set careplus dose number to 1B for second dose MMR vaccinations
1 parent 15eb7bc commit 1d14c5d

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

app/lib/reports/careplus_exporter.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# frozen_string_literal: true
22

33
class Reports::CareplusExporter
4+
MMR_DOSE_CODES = { 1 => "1P", 2 => "1B" }.freeze
5+
46
def initialize(team:, programme:, academic_year:, start_date:, end_date:)
57
@team = team
68
@programme = programme
@@ -167,7 +169,7 @@ def vaccine_fields(vaccination_records, index)
167169
[
168170
record.vaccine.snomed_product_code, # Vaccine X
169171
vaccine_code(record), # Code X field
170-
record.dose_sequence.present? ? "#{record.dose_sequence}P" : "", # Dose X field
172+
dose_field(record), # Dose X field
171173
"", # Reason Not Given X
172174
coded_site(record.delivery_site), # Site X; Coded value
173175
record.vaccine.manufacturer, # Manufacturer X
@@ -216,6 +218,18 @@ def coded_site(site)
216218
}.fetch(site.to_sym)
217219
end
218220

221+
def dose_field(record)
222+
return "" if record.dose_sequence.blank?
223+
224+
if record.programme.mmr?
225+
MMR_DOSE_CODES.fetch(record.dose_sequence) do
226+
raise "Unexpected MMR dose sequence: #{record.dose_sequence}"
227+
end
228+
else
229+
"#{record.dose_sequence}P"
230+
end
231+
end
232+
219233
def vaccine_code(vaccination_record)
220234
programme = vaccination_record.programme
221235

spec/lib/reports/careplus_exporter_spec.rb

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515

1616
let(:academic_year) { AcademicYear.current }
1717

18+
let(:parsed_csv) { CSV.parse(csv) }
19+
let(:headers) { parsed_csv.first }
20+
let(:data_rows) { parsed_csv[1..] }
21+
1822
shared_examples "generates a report" do
1923
let(:programmes) { [programme] }
2024
let(:team) do
@@ -34,9 +38,6 @@
3438
)
3539
end
3640
let(:session) { create(:session, team:, programmes:, location:) }
37-
let(:parsed_csv) { CSV.parse(csv) }
38-
let(:headers) { parsed_csv.first }
39-
let(:data_rows) { parsed_csv[1..] }
4041

4142
it "includes the expected headers" do
4243
expect(headers).to include(
@@ -378,6 +379,25 @@
378379

379380
include_examples "generates a report"
380381
end
382+
383+
context "with a second dose vaccination record" do
384+
let(:team) { create(:team, programmes: [programme]) }
385+
let(:session) { create(:session, team:, programmes: [programme]) }
386+
387+
it "outputs 1B for the dose field" do
388+
patient = create(:patient, session:)
389+
create(
390+
:vaccination_record,
391+
programme:,
392+
vaccine: Vaccine.find_by!(brand: "Priorix"),
393+
patient:,
394+
session:,
395+
dose_sequence: 2
396+
)
397+
398+
expect(data_rows.first[headers.index("Dose 1")]).to eq("1B")
399+
end
400+
end
381401
end
382402

383403
context "Td/IPV programme" do

0 commit comments

Comments
 (0)