Skip to content

Commit e8624fb

Browse files
committed
Add can_self_consent_after_gillick_assessment?
This adds a method on the `Patient` model that can be used to determine if a child can self-consent, following a competent Gillick assessment. Jira-Issue: MAV-5915
1 parent f35d9bb commit e8624fb

3 files changed

Lines changed: 113 additions & 10 deletions

File tree

app/controllers/draft_consents_controller.rb

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -231,16 +231,10 @@ def is_who_step? = current_step == :who
231231
def set_new_or_existing_contact_options
232232
@new_or_existing_contact_options = []
233233

234-
is_gillick_competent =
235-
@patient
236-
.gillick_assessments
237-
.order(created_at: :desc)
238-
.for_session(@session)
239-
.for_programme(@programme)
240-
&.first
241-
&.gillick_competent?
242-
243-
if is_gillick_competent
234+
if @patient.can_self_consent_after_gillick_assessment?(
235+
session: @session,
236+
programme_type: @programme.type
237+
)
244238
@new_or_existing_contact_options << NewOrExistingContactOption.new(
245239
value: "patient",
246240
label: "Child (Gillick competent)"

app/models/patient.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,15 @@ def show_year_group?(team:)
547547
end
548548
end
549549

550+
def can_self_consent_after_gillick_assessment?(session:, programme_type:)
551+
gillick_assessments
552+
.for_session(session)
553+
.where(programme_type:)
554+
.order(created_at: :desc)
555+
&.first
556+
&.gillick_competent? || false
557+
end
558+
550559
def programme_status(programme, academic_year:)
551560
# TODO: Update this method to accept the `programme_type` so that we can
552561
# then determine the right programme variant from the `disease_types` on

spec/models/patient_spec.rb

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,106 @@
908908
it { should eq("JD") }
909909
end
910910

911+
describe "#can_self_consent_after_gillick_assessment?" do
912+
subject(:can_self_consent_after_gillick_assessment) do
913+
patient.can_self_consent_after_gillick_assessment?(
914+
session:,
915+
programme_type: programme.type
916+
)
917+
end
918+
919+
let(:programme) { Programme.sample }
920+
let(:session) { create(:session, programmes: [programme]) }
921+
let(:patient) { create(:patient) }
922+
923+
context "when patient has no Gillick assessments" do
924+
it { should be(false) }
925+
end
926+
927+
context "when patient has a Gillick assessment for a different programme" do
928+
before do
929+
create(
930+
:gillick_assessment,
931+
:competent,
932+
patient:,
933+
programme_type: "hpv",
934+
session:
935+
)
936+
end
937+
938+
let(:programme) { Programme.flu }
939+
940+
it { should be(false) }
941+
end
942+
943+
context "when patient has a Gillick assessment for a different session" do
944+
let(:other_session) { create(:session, programmes: [programme]) }
945+
946+
before do
947+
create(
948+
:gillick_assessment,
949+
:competent,
950+
patient:,
951+
programme_type: programme.type,
952+
session: other_session
953+
)
954+
end
955+
956+
it { should be(false) }
957+
end
958+
959+
context "when patient has a not competent Gillick assessment" do
960+
before do
961+
create(
962+
:gillick_assessment,
963+
:not_competent,
964+
patient:,
965+
programme_type: programme.type,
966+
session:
967+
)
968+
end
969+
970+
it { should be(false) }
971+
end
972+
973+
context "when patient has a competent Gillick assessment" do
974+
before do
975+
create(
976+
:gillick_assessment,
977+
:competent,
978+
patient:,
979+
programme_type: programme.type,
980+
session:
981+
)
982+
end
983+
984+
it { should be(true) }
985+
end
986+
987+
context "when patient has multiple Gillick assessments" do
988+
before do
989+
create(
990+
:gillick_assessment,
991+
:not_competent,
992+
patient:,
993+
programme_type: programme.type,
994+
session:
995+
)
996+
create(
997+
:gillick_assessment,
998+
:competent,
999+
patient:,
1000+
programme_type: programme.type,
1001+
session:
1002+
)
1003+
end
1004+
1005+
it "returns the result of the most recent assessment" do
1006+
expect(can_self_consent_after_gillick_assessment).to be(true)
1007+
end
1008+
end
1009+
end
1010+
9111011
describe "#has_patient_specific_direction?" do
9121012
subject { patient.has_patient_specific_direction?(team:) }
9131013

0 commit comments

Comments
 (0)