From 5bcd72ebc47563ed341cf02c88ad9b131e190502 Mon Sep 17 00:00:00 2001 From: Thomas Leese Date: Fri, 27 Sep 2024 12:12:22 +0100 Subject: [PATCH] Add team to consents To be able to compare vaccination records across teams under the same programme, the programme table is going to be made global, removing a reference to the team. To support this we need to change consents to be linked to the team so we only display them relevant to the current team. --- app/controllers/manage_consents_controller.rb | 1 + app/models/consent.rb | 10 +++++++--- app/models/team.rb | 1 + app/policies/consent_policy.rb | 2 +- .../20240927111052_add_team_to_consents.rb | 17 +++++++++++++++++ db/schema.rb | 5 ++++- erd.pdf | Bin 64797 -> 64437 bytes spec/factories/consents.rb | 5 +++++ spec/factories/patients.rb | 6 ++++++ spec/models/consent_spec.rb | 3 +++ 10 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20240927111052_add_team_to_consents.rb diff --git a/app/controllers/manage_consents_controller.rb b/app/controllers/manage_consents_controller.rb index 0dd8aaa97..abe36cbc1 100644 --- a/app/controllers/manage_consents_controller.rb +++ b/app/controllers/manage_consents_controller.rb @@ -239,6 +239,7 @@ def create_params { patient: @patient, programme: @session.programmes.first, # TODO: handle multiple programmes + team: @session.team, recorded_by: current_user }.tap do |attrs| attrs[:route] = :self_consent if @patient_session.gillick_competent? diff --git a/app/models/consent.rb b/app/models/consent.rb index 927cdd13d..42023f8b4 100644 --- a/app/models/consent.rb +++ b/app/models/consent.rb @@ -17,6 +17,7 @@ # patient_id :bigint not null # programme_id :bigint not null # recorded_by_user_id :bigint +# team_id :bigint not null # # Indexes # @@ -24,6 +25,7 @@ # index_consents_on_patient_id (patient_id) # index_consents_on_programme_id (programme_id) # index_consents_on_recorded_by_user_id (recorded_by_user_id) +# index_consents_on_team_id (team_id) # # Foreign Keys # @@ -31,6 +33,7 @@ # fk_rails_... (patient_id => patients.id) # fk_rails_... (programme_id => programmes.id) # fk_rails_... (recorded_by_user_id => users.id) +# fk_rails_... (team_id => teams.id) # class Consent < ApplicationRecord @@ -44,6 +47,9 @@ class Consent < ApplicationRecord attr_reader :new_or_existing_parent attr_accessor :triage + belongs_to :team + belongs_to :programme + has_one :consent_form belongs_to :parent, -> { recorded }, optional: true belongs_to :draft_parent, @@ -52,14 +58,11 @@ class Consent < ApplicationRecord optional: true, foreign_key: :parent_id belongs_to :patient - belongs_to :programme belongs_to :recorded_by, class_name: "User", optional: true, foreign_key: :recorded_by_user_id - has_one :team, through: :programme - enum :response, %w[given refused not_provided], prefix: true enum :reason_for_refusal, %w[ @@ -169,6 +172,7 @@ def self.from_consent_form!(consent_form, patient_session) consent = create!( consent_form:, + team: consent_form.session.team, programme: consent_form.programme, patient:, parent:, diff --git a/app/models/team.rb b/app/models/team.rb index 3d08ce47c..a80ae695d 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -27,6 +27,7 @@ class Team < ApplicationRecord has_many :cohort_imports has_many :cohorts + has_many :consents has_many :locations has_many :programmes has_many :schools, -> { school }, class_name: "Location" diff --git a/app/policies/consent_policy.rb b/app/policies/consent_policy.rb index ec30f4ec1..9a05824f2 100644 --- a/app/policies/consent_policy.rb +++ b/app/policies/consent_policy.rb @@ -8,7 +8,7 @@ def initialize(user, scope) end def resolve - @scope.joins(:programme).where(programme: { team_id: @user.teams.ids }) + @scope.where(team: @user.teams) end end end diff --git a/db/migrate/20240927111052_add_team_to_consents.rb b/db/migrate/20240927111052_add_team_to_consents.rb new file mode 100644 index 000000000..5a180c595 --- /dev/null +++ b/db/migrate/20240927111052_add_team_to_consents.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddTeamToConsents < ActiveRecord::Migration[7.2] + def up + add_reference :consents, :team, foreign_key: true + + Consent.all.find_each do |consent| + consent.update!(team_id: consent.programme.team_id) + end + + change_column_null :consents, :team_id, false + end + + def down + remove_reference :consents, :team + end +end diff --git a/db/schema.rb b/db/schema.rb index 25b610f25..68407e98a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_09_27_085819) do +ActiveRecord::Schema[7.2].define(version: 2024_09_27_111052) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -147,10 +147,12 @@ t.jsonb "health_answers", default: [] t.bigint "recorded_by_user_id" t.bigint "parent_id" + t.bigint "team_id", null: false t.index ["parent_id"], name: "index_consents_on_parent_id" t.index ["patient_id"], name: "index_consents_on_patient_id" t.index ["programme_id"], name: "index_consents_on_programme_id" t.index ["recorded_by_user_id"], name: "index_consents_on_recorded_by_user_id" + t.index ["team_id"], name: "index_consents_on_team_id" end create_table "dps_exports", force: :cascade do |t| @@ -624,6 +626,7 @@ add_foreign_key "consents", "parents" add_foreign_key "consents", "patients" add_foreign_key "consents", "programmes" + add_foreign_key "consents", "teams" add_foreign_key "consents", "users", column: "recorded_by_user_id" add_foreign_key "dps_exports", "programmes" add_foreign_key "gillick_assessments", "patient_sessions" diff --git a/erd.pdf b/erd.pdf index 8b050b80209911bf9bafd1c4082c7b0a87f2ec63..4627d2190550721e2114f411612dc6bf39bb0608 100644 GIT binary patch delta 22859 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 delta 23222 zcmZsiV{@QEn?_^Xo@ioDY))*O6Wh)c+qP{R6K7)E=ET;{ySrbuYJWgib#+yD-F=pzfST#4nGZ_1qMb31-!jpko99z z?Y=lSK0Fm(GnC+_j^ECU9Syrm%w_Gd&uhl!a&K@aNBvLL)5xoBZ`^Yh@XtHS0^0nq-_9=& zv38#y%U?m$6|bvb&$%avUk(Ic%Adu?VcRz;y=06YR0I{bf0~yqn(w$hgQxAh*4Zxj zdQYzaAp7vO5-1A&6vqA%{rcLx&IEd+mTzud74{DSog}#twC+a$2Q{ z@-cx%@0{D+*VAgcgiC0)fNR$KZZvcM6m;F)rHX;PdC#JHu4@M4w`2e?zul3aN6dI( zUZ}r6)_(uQ{M^mm&Y>nNMY`D#C3Wad>^2ZF43lu?Nw14_yi5S?d8+%n$n%$ zI`PbLFSY>&st2$Iq|W7%nwM>O|FQx*6#KKKrxic2SLB~Vzu$c1KEKfw+X=eIPWN{1 z;uJYx5A1vQv@qj5e8Rcu6m7P3_SHE(qD*t(y8gLj41~v>G%b=@zq&qNZV-@peUG&Z z!4&c-|6rjk>wX2#`a%jgUBWUw%RC+%O(be)#@J|$=qa^og4oW^?Ul;W^a^vckDiMyy=(WIQcmr%z#2-GVuqc=6HRCr5qaU_Tw=H5{ zx!l#a2-HzH64K-H0-NR}Pc{gbOkU`_D{Wl*fMwvWE+I)nYBjrl=`maGaG=2NDcbds zF7?btA8p6h&4wt8M(fb-Oa!24hu!Rl9>dX<(JN)q z$|fpmMf*j`>*q0&5`AvlwdCksL2thrzE0Gfu}!HmYOyxu7Ym(= zdYwsFL9DAb=aUr|B#Yu|Dat5p>MqTH8*|3^He5O1rN9u@i2+poHu9-qt(L^)U~;i4 zzGS0{BXvnuKcS@L&`hn-lR5Bb-~5%G20?alGBrm5mdI32qDPr_bDBLxy@DZO#bnsQ z-+DN26bpw(Y3Z^!91)!Eeh)fbQdxl9o%*EtY1*`m0XEx%zm(I1Uly(5ZehlxK8Nff z>3S4#Q)~`TJOpIwvCw#a|?{o&x^P%97Af*v8gEy;q7m|IU60XOg8X!JD_iXdxo5q=kt* z5j7`JmNf2$iG}frA|PwXmKZdTTixOjN$iW4Xv%?076jaWNSVt_Nr)6;pwhu?Dy!Nb zuB*26@61q*V8Y9aP|+R?rmWu2zpE=z5^a^eBl8&Y8{|KKMn^Q+nXlxXqG>@V`j)x9 zFLMwfYp%V7Bfsn-UyIeW+gA7)xokE~#mGBt8u*@X{OGhH-)I;)4DQ7Jn;}%tXvlnX znJHvD_YR;Flnl{1fH$V7{`|9QvpgSzEFV|A&Q7-F#t*kz-dpkG0;8r@ej~|c!3N~2 zZV7g`R&&y$2ISp%X|f#TjK8wP#^&wT8QwLU{sX+@jDjW~cZ8xf8_QL2aeX?tmj4zepR_NhE-g$w(kdVGhRnU`dfJ0dQ7Bu{?6+7A~a6hkZ~c*2<&JOm#NlmMiRomY>P-ujl=NLCF`TgKHmLDGGzBh5^9 zp_4}2guMQzOzZn4>xtRQ{9Z`W5ZSXdX*Rh<%O1pBnQR1;Db%Mdq)E-1B@WA`%ffC! zS0uU>#ri7B7UV#K(nVR|D${IjVc^X`gg?e?w-!Fvh?eMk?Yd22fg6{&_luEk1W-iN z{@Zj};-Y&*Hs(tv-uFh!x@Da5N)2&ftn)jbhz=8PJ-E3WZ{XOLTRZ9n zpB8x=aSR%#dGja!m1Y2P>i6gj)LQOzLO6Kz&-zsx)`uVeu0oc{*hd1pGr7s$#hI^T zb?5Y)+MI)!dcUgp30`Yg$4K)j06dWB7+r_R$5~bp^Sf>q-p*MP0-p3 z74>!Tu1;P&8(o>R0eBUzC_ENN?hPLToChD^bY+Vp<3&a`s`~E{$iW1>z?W&BI;+?D z`k{;sT0<4`T~e7(s)aaWP1rGxIGL=|spYW4qQFwh#pg^h2eR%s3-%ThkX3mNfse%e z<%yXS{%is1V%rV5J)t$T+B=O*4Bvza@x-YtFpzx>+l{$fwvKCeRWWtPN0*+TiK{xG zcqv0k`d)*_yH$fXl2g78ktsz!#;|XOhey#bWzk{IFR!8Nw@fBPJRKiDYqM~5?L~`g zQAXQ>7jF!KF2m@AH0>XS47Tyl6n2?Jh^252w~XWVK1#0Tz`o_dM|h)zPvyB z@v!eq;;xpL@$)m(uFk(#{6qRi?_=c#)g-GUt|yyZQO!GeIxkU~ZAn z;2ygh6(5rWd)5>lIQ`KtKP~ScUQu@FwXtz_AJ8>f{r#%=!$_!9#M_t1l+^h0sKK48 z{MJJlB4ae2ZbR6Dg~7H)o-sWTrOC$X1SvMRuO_4j3{nMO4tpk|v5Lr`8d=?nNhYaH zGJz2YvM*kQWw&Hx{)#vz9?7ch^rj0e+7WY7or?6&%wgUGu-de8SI$KSW@y?l=P>K! z_Z~F)y~P(!YNsNm%_s6-Eq@6hHH)E_;`P1BZRkj$j-z^5-)nqxWTbmK$WRp;c$Av% zV~!xU|0PJyS&VXu_zl<3TI}%FiF$_E0M`5f5(4_3@VHiT9tHPQ{jmYp%+sPWsd3}e zgo#=_F*7~|@D%-+rj|=K_@wXu7=rDen%NZ9CFAJZWFxsQ>6f3BOwKbxk)O|+6DTe) zQu^f7F_VJ{?h|hNmeMpgQGM=JkakLl5Xaht44;2&BS*bl?B95v?^QHf?%fRIxJ4M6 zExQ!6h*-UcKwoyp_R)L6VkAE6W=AdxY{1RdUP?a#XW|IUOZe%|Gy1csg6v2H>AI{_-N#o6gh_x9OH3MI~lUql;6>d0e--4Q2u%v0bgKBx5`Sztn$9IR? z8nE{qZ=0K40wh?PkMC}0NI$g8xWDq2HshuNZI&(u%WLjl%GF^CN1>jQ&T#YlYSG5N zTg0M$@i|oiF;458GlE22=YECvl_M1eEPQVV66^Y}0Nfk&-93yO#W_qff>0T$tE*^(b1b1d@n76>w`8Sunx@6sYa+(2vo=k)cP9nr$c~??dhcwV)Uqz(XPCKZSB53Z@Af{X1K%I|3_nR zyS9v+x|wb?_lD6mW?D`KOtYqLXvWf#SD_bEOl}6japR|`eB{HYqF!%#*R8(X4F#RR9lwZo<>eoDPlMQI&)o9mALyHH9SYuMlzx9v?(-=EgtWF7Ry|7q)U;=6 z?cZ2-)2N$ANN=^%gce&>)hM;hOVc4O%+_@uq>8@i4h{6Xi;#30_}@%!8fV^x@meXA zI50Y!pJ}Ux%sRKL!);t^9qv8aHt9viO;QU?V7L*IP6&7>J}q^L0}{G^a;C*2o64dc zGc$RM`$Zv&qK~vSj85G@8oBrah*{i)4wuw5vID~&ZQuPJO0x<;EuN)?8pnm;4TxBU zb{4sePjQ=fH(FCTW${{PGYrsL!Kke+=x54yoIR%XS;of4XUy9k)rq?C%{`+gs2qrh z6LE#CZo2KzK@`jz@w>KuK~}11in_?bFejHD6-hA_&Ch21`x<;GgHS^Q)Br({;(xAm z9)tFbBP|ER6{BGmO4nqn9uDntay2fAeoD$D!}+Bqx5$eQ>UI@!45d~@%QZEo@O?auD52@uz$k%bWdTGXtE8hL-?isga;ZdgV8mE^~9e33Z zG!D>wX2|GnKxs`!y{YlMO0wuMW8kg>)vBqMzYf{WkF3ukLuk?aDTr=M&N>%4C&tl@ zmDd!q*E(`(R?qZ1qP4!R+nK@NHFV{jZjd0Mitml*HX5`A#R>56%h%5k>A5N`;#i!V zhSDAHT$<#$e8F{PF_v*~&<;scFcy=@RZtj8Mb60#dV`01i%2inN^*4O4R?~mIag*; z`tDv+<0sX}BK4J|o+J6PPaGvog@6S%f#IZOakTWnC$~1w6IU5*{&8zaa^E#ceb~Wj z@5<*Ki@}v#ivp+&=dJ9=6;gxQGEN5WVrUyWs?|TGdATfQc-8LGS za@Y|qy$ZR^irb$8)?ot5p>J#@s+%4(JJneHYVthl zR7ej;;(|3#zQe{R~>u=jhPuN!swdOwH3F4vBFBG#-cyW zWHFz=VX<*X71JKbW{#fWi%dF4$(5Lmq0)8vBce=aF%$1JQ9hcfO`6mguNX@f%#8Z& znYEIwCNf>abxbz|zAuc!1m}_`z={-ZJaJIBmjm9c1tD}W!PUZTj79mgQUfhDxFl|# z;&Il?@0eP?3e1cWQllCc&v|I_f9UF`3UJ&gb3>Un-Kr zbL3wx{8H(gerx+e^oNtRsk>wh3a5m!GJT)un4t0F`@QYn%KyYv4yehJCaJYs6=`M zzfN?sdn$%darc~q;7SLPIG!IoS_>ALWw}$f(03^ULA5RYy-{YE!}joaBy(C@ARduuS(C7x}0SPb=$ioiPU zvp=^`Zy_^Bt-Qad(Q19S%98+=C|~J@kbLVC+I-HoB)I%Y20lnv%4-ulyd(^ zUC|PSAL7r`^+uwkupZJ#}Aw zt(J0~);()09pPEsYdT`N6vu3wk6^OQv1{C@q$A=$8M6T8B@LvPLG+h#BSiEvrMqgGsHDpR@qWXz10sK^x4)fYlTh{L(Ivgb+&L=S{KWzV_2-5iHSUzmbX3kjr3rLWB5Mkn zl1x0VSh#)S`7_01;SLCU6VFgdpN^tpr4zA#P-CHpOXG__W6AFf%!Muo?XU(K2;B3f zT7-(gOlr`=MQzy?9QFQ)lT2`zecC#F`w4FExf;?0Tk3`!bM^9i*z_N{~t5=I$LH zcBM+x$gtwoNVQ`La+_vWcRH@1Y(@Z;$AAqnJ>B5B(J#?(!uW~)V+__SSQ zv-P%yXOa_|$eO0PG^NBBl|U44wt8-PUgI-~_OyZM;T-&@3Pn?dvKMBPzNhXcHROlQ zVu~$(%*ZIIcm!bCo6+rE%6>0n?(|@8#G-V(9%T+Ua%ZUlBpn{K@jgXJ^it&VToPB* z#Cpl}%G|7lOSo0Y^g=Kc3-8RK9_hLBZP2oQ^jLm}$CxjuJEW++gmRI9t2Jf6#OVIS;B(RT8FW58bi;eKCykSaxS0fzDUq5(YGt&hXbiLS zbbjte2ni2=M9HmX4|AunsA2d@D-w_uJR4MO99gl-xTCsnxBI3+{P6hKtWdze-63{F z|DHXxK}K8JAoXOnDZb<2rq;!GR0K;@fW9;R+ZI%F(Hc$oXYJ z3h*I@OM5L6#oL4+Id$RQWX5_r0Ekgi_d_l3=NTjv<-R_QR(5?bhRW8vU1sWjf z%B(?nN>FS>lPGzEbWd?@DZ^RE9p_=s$mPbyb1xCM-)+cND>ylam%l(Yvn=`; zFn4>{uO5ynfAJDHETyQNtWrMOYy}Y92~*$~`)wajQ=qr~7~G1UBVO@@P;7lLc}_gN z*a=Q4m;+O6F5`ub>3f)gQNP7GW-(iY|U{*&JlY8L6PVa(Gd`jEnIv z9q%iX#kA?!O&J&lRd|vkBLXHMy7ypdKUhSMX_~I|25j+qt}B7A_oD*F&+XHzR`3~c zI%0e>dlt;PPXEKv6po#RJ_0auS;S18rqLNS?9g%$cs+=yC}Nlf7iLg(rT8tw_8eqm z(Yeg%1t~Sxm`Yp%NvM-0xr7HreQ8kH`JqvTtcUcFt#Dzl_CqS2kS>cR(phz&P=|`U9>-kHB z9zP8Jz%JjxZjcCc2jFaLmvABPAbk&%u9lvAu2l03xO8McDUG)i4JVQ7<^W~N5e55Q zYT~T$tN_M>tGKcT%X>05;3mQmu`(L*IY*XV1d8%S+@b-GcB(1_jmlQxc8>Z}So2vq zkpWzs3JoH{OnLez5uu*4Kqav`*3?@hyrroiR7{{c1z7=p0ubO7(WzQIdprM-&utoh z0Qt;DGuPnewOKP7^&n6sAlupm$fsbeiTG~#^2BxrQtMVn%}K#`_OIieDQ zN9HBt-*-!vrOH}{Cb=+so`6=_=0p-(T%_nB=fLHRra$LD0-|JuP9f<5CT2h0G9NVa z5{4(T;5Ihf3>cmOgOSFhlo{0SWMX;DzT9Bt>a1i{PNfiHCfSLsa8pc2uN06zW&V^r zo%9DZdwA#`QlMMy3q-l|Au$j^x;u*u)KBOcWB(Y3xh{ywiN+-PuCrLB%@(OWxcI&q z2W~l&Uhg(c@*i9a^CZ#$$b7E~xEk-yF*O_lyhB)G;48o66J7iC%=~X<6Kl~|D#xfc zTGbbj4_smc)4&%d6>)3|vmJe@ZNJj>%#%h5VN=_DC$~0X3+!gSH`S`6lEy1L>`(HQ zsh-Y*TQ;gwbV*O9+lx)*%x&zk$U2t8!5cW3yV{tKz~LRzlGX z16Lg2qqzOJlurV`Y@Lv~a=2sO*w;OozNC$>BxdBDR~)a5-^Bp)tS8qPXR1*$f#KOX z#8yenF9mDOF#m_8;4L zkE|4fXwLCd5hXu;0;YnWjf@S9nxZHJ8Gh`5nwSZ_+&k;s->jdLBv0l%>pxHtk&U|I zlu!r^@hmiW=8nB^;e77*>BEeG(t%2k76jLM3?-G3^8)QFn4I{&r{I7gM!i9ho7HC>h04f%2Iy*|ohbG3zVs8`d$>a#;sq?La#gPQ*X6`N zR!I|M>-(u(Wz}G>QR+y23@K@4*9M^VQTQJd6GE48kodtvoSQ3!r=7E~+0_=!Jw1#M){Nm%vvXlOWvh6X*W-z zY^0%}!Vbz{E+Q{Hs|KOWNRZLzEm|IuE# zx{1B;>_TO~*mn$XYzCQ|+KlaX-NhM}A>3nH_LXYfe+==WSmbi}FQgp{6D=Qx(DY$FCemDOU1Tw+G4CO^+W1Qs+mYF{;-IG%u3zHrWJZ|_WEPPkoT z!8luqRVwGVZl`1$CE6Yl@9{u#CJOQX_hlO~h0Aj4ax~I%X*?1TW#KQGFd1rnF=~VM z{~fW;=-UDR^VBEevOia>G7h+J4x#isv=fk&*5!~a-F zND;+Eqi#lhFrLrr`2vmj8-9JWwt8f|wR^)WBv^^e6Y$)VkKk5VPKBEuicf>v)EML9 z$~O#LSV63%Nn|!b=n=Iz{^q}LRFF5_rNp>HO3e*Tb4W>xNd&+7_04pk+n{<=B{WCo z`TKfq`i3OSidMa;_@7qHFncST_Q{Nnfn5(P8fsftW9aiC1)f8Dxu?+d1v$F${Oo#h zJo}6!l&juinn|cg*2mHiVx2y^Ow@ZBpQ#Yw-v^J`BZs_cGwX>3zs9+T%GsLgz4!8| zMQU;n5BP;x(`{^v#;xuS(}Nt_VpZzicV9ujs9a31KUE)iDX<6<+>DyEj=+fuD^SLlBstAl zhsRdq`G{>&rdIC?jEscX*_x_Aim6^+H63y`!9bAwtTk)`E9Jk*QiHWj`~2}J2VY1{U=&GB%uX; z6FZvBF1@;6>B%Y8He+P-1(j*4v?06Zhi?X&QJ1DJCHMJ=4DC3|Ze_HOS~y6w(R6V= z{)IQzF)_Ilzhn}d@0s;Dc>?(Wk^FIVZkih9Tjwdk*wKn^=;nMznYH3ls|F`f9qp+*9Etb1(8!$uU)>W@GYxigXf&fdNlz6tiBQ5tt2Qex~}jBm#&xLIiJiv_+A-O07%(+0xum4xh3 z%HXib*)cW|-2^R4TTM?Z?FQ)MyoYRk9$9S|T{aDE;kIUTI10>0H^2fPr5)WqV5L@* zcB?ygcWD~zH8pV4ZhEZZJIfbcf-KXj?81C(HV(kT&%P2ndQ?4z`r!72xWuduD+4WA zm>dln?_57AuPCmc;rsdG z$sg@cY~c(8Qnz6+1$+UailBg00kZq)UodaChhX;l>6IYQ!Adu`(%{RCr~VQhE?=Fv zJQMHUtNusJ`27c;Yh|l0Uc`~6W%^b9nJ#?}&{9R1WXQXO7w?p9ihf8Kv2bL0VNgPJDhUq@?)Xb3T2M0(N0V%&MrD_CQXUD@d#U+J!U%k-sd!x3sNSBW)h7ZZ#KG z&%N`ABBWQFvjvR%KzF?bTW2z7V12etZh9!cGIw3EXQ~HG^w8~099P0^GOZilkj11mteWH4s2PF86w}mx@bV>@e}<<{h~|B2?W`xos@~YcZcYI51)3Qkx^GmpV+4mmpkfZb-`2}#GtB*w+I!VY5)-)CVHl$%k zGwYAPOdnCd8DEHV9_sY2H?kh3l=$lSMv>}+V2rBx2X+E2>#+|V3`bla42KV;z@~}9 zcLDVMic9FK7Bi(lKpk06?noQ@oD{IeS(U+NYS#v8uhQxt&w;c#}ISs46LhIUZ8`o zB_L-Bf&OD`I_ihV7?sfCpKoRY>J(AvVAilsS~f?+Y*AQSa#!|>G-pZwP1wcC{}J~2 z^L*fc3HuV^2qIh$t&!y%ZkWK=1Qev}?p^HDqRH0?ME1=hPNe zv@#Lan2@oDDEWfba%c!`C}}cKJ{k#H&}wt=*_N_S;&DWb$@gu> zI5hYE&yHJc#Bg3iE8@mND{+py9dvq?%buyE5l}+*If0shv@gJp28V2U(H*%JSq*vE z@?BrU&v)#*pcw3eH|tqLizVy#+tx>C3c{N8G)pqHB`uB`qaN3A8bpsc#;<dfF?Hk&n}UfmDzTiVU#^13wDXL>c~c@W#F6DvS#8R z-txsB?$l6xnWMZ)YqymzOKVMj{~8mb}z~0l>hjU7}S>RZ#nBHTS4tB_!#*0!rhL zRHaklaAHn%W9t|$Z5JjuF6<}7Z4f9_gOK)x7z>z>Md+uq8h3L z^uNhC#(Y1YEIABBtgAEBou3?jy47AfN4;OqxI`!*(fs|*P@ev6%T5f3qx;y#Wsj~R z&|CH4^-o6{;NtXP%6aL2**X6}wEoRRI&Bon1nY5bj9-rZRjpyw@QrtsyfGcbL5JOY z=gqJJ<0vge$KmL*CHhDcpLVb1-Jd;+f{N#LQe$^N0L>=-UzXm_?vFn3>Ma7be)z~6 zU)Gdf=hC;#qUE>8g6dBye{QterJeyCY37ys3r*vE=Q&?eJmfx2%X1Hd~l=L zfssXMH~@b6(;xQSsJxa`mw)AAxjk~ZzO=cn_=s|7&l4x;(G_R^7;?NtnytSrKAdWT zPJvuJLi77>$)S84HOy(b@97;InbU8)JRi50^zn7qSASH$JZXt8se4$TGZZ!8?oCI{ z-6Bo_E~%62)BFr=CH{?ur^sZ@TMDhoV&G?Rv^aQKNZ1{_cvZu@5mQf`l$E2&D;joD zWSzB3=k15wJyMxQJqi-If!G-qe;{j)OC+&_jR~RPkDa($4+q?6zrhyuYasqT36q_; zwm_M+lagS!@YGk>J&OXjIB4BNr;Xi0q(ct^YN%xeG6!V}=ju?!`K|9_G*iRIm2HqJ^LdK5@l0pJ)qr4MN13HLdvjctupe{2waQ~ zm;f!JiCw?(L7*&c+9;(jxTlMz7!~BAHU7&N&&d^Siv|y!rt6XL`b!24G10(cZtgn^ zTJsNwg>m-aaqT;a+$~ep5_^cfq=GcZ-XcUo>i%C?{cyzq6IA9E4V`Fg2C3nHA~9ck zx&K6B5+Al1z4Mu2*c3@u>cYnVTm<01WrTkvsQiun(ri)$q-e(#-=ZYjdIaWMd%el; z?`BY2>1)xiT8n7Tdp&8G&0Eq07lT5bzpi;VwU*&7^Pc57WlDajblu{0M zxjFs?D(Vi-wUD*!kS1%;MOJpz6WKb)hkvYi2ctLYrPvIPbcuiv^f1gDoLW?=R?rzC zl%E9oj^UfOuW*J`I|>x$fL6#o7PrX`5uf6HYpl$yu840hbH+BZN@dV8#o&8G&a^!z z=TwwGtyN@BuX~D$S)r3Dlu=ypE|;XH{+vz=Rh6dJx8v4e0**=Xa@-+|Lq|D$ZZr_w z=ceYoe>w=oKOF?50_y+jATtMWN0$`Ifz{(r_(1*-E;7VuCDA(Kji(~Iw%bb@Z9{wW zr2UFUA<%n**2`#uD=g2u2(>CVG74>J#R00{{@V`3?olfN+gh0YjhWcXIP_`v9m~YgwI?-{OyUL`t32jyjJ?n3jZ?z4{i9 zVs%@5Pz$1}YO(4AG+5D`=8skGwY;(!Zg1|*b%{pYxAp!$w%%%Wzd1SX#SVJKzujIk z4S0EG&ad-YN%|>Y=M2R5@s3pDYu*fL{{As7I#3U?V(&S@@1Gpn_oF;xN8jSz@C8V= z$Ee#S>WRgx?xdTcPdtpnT-eetkeUE)!a%=Up!H5q{P1F-SGMwk7V6$Zop zKo9s`P?n}A64xMO`ez=XLFbV>lOPiQWpi-t7mSYk?mK3I@weDE!W6YFJD-W`Jwubb9-RU_BltQVE)9_0RxfMwTV{@T4#XhJ70g{;VwWYl2Ioj zmag73ZiqGqlN9v>W4#%lY>$JygEmO~NqHT?JztDs%A*8RW3YH+1N-VmZ(tzJykiin zmd~5x6fes0YUhvA#b!~BVJsnm5=EUlU0lpGC1Zy7g~Iu((?M-xYo#LsM8qsqc=RD2 zb__p~c#7i*6Q<@KYJc38LlltZ|5w}u{lKLbe#iqCegcn;u$H2J4-}G)UZ&?sv|#>M z)1ClXcfj}h+Y`c8qEB9}AB1j5vZzX87=Hr=F|=LH)ncJ0&>=yOx|WRgyeezBtzTYO zHi*T4j}iv@DyQ&y5jFFR=><=i4`G01NYOm4@2z(BQS}uRaU~k}A7cQ(LV*^r(f0!tWV@h)1cy=V^vbOLbISMJV%Jv0rr(K z5}`utT?3f7R(RdQmYfvPKb*DQv`K}q$26}~rggaUOI;-0%&pg&!b)l8o9&o2bx=YUe7 z3=_+TQJY4LP{3mz zX4?E7BZMbl?-V)T@;=Ev0I0)yR$^`@Qo73p$wssajb=SUSePuKW5-hATAv*aJP3Hm>t#8m)$VM@e?Li-V@aYcL5qj zG?K}khZM`5c=1?}N|+(OU7a8im=TRJ4prWUWsrl1gknN(HQbLl;f$~Dp=x@Q< zYYx%3J33{CGC7{qf{RA>O&Ci)F$|-6mbFn+m@~sEthi4C1JrPC4zBMm3{rGHno8{n ztOEh26_4=S;_1Quv*6fja#O*~nrtGqPQrAW?Y$}1^MzkUUY|V(Db`|qW@%GV{9K)i zku%?^s-vicO zPTkNt;kmW!&*Z;q(A-3@a_6|#w8c`BT*_y&AST@4Kom$Ke8C$Zdj}qf=_xj-zA{kP zsue^-dXH|#Skz-A9dwh&>oTh$*FKTe5CX}{G={Ye6ybcqC8AY}IJJ+Vb@r`@I&9~{ zTHL}^ge`HtG$I;E?)#|^0=CK_XrP>(lWj8LhC+&t61sCCIYonB%|$XqgL#NG#-JiJ zP)J^MRi+8{+=b0zc1q-0sQ54U>}!NSwSq&%EV8C7MC8X3G?XZiv0&A(Do#@Q9+T>Z zG-5b`L3{))Tg=&`WrdO#n0|hB{t|Ea^W)CqheoR^nWa$4C)i7S-h$dG!{`~yIl@*4 zI^Q(SglU9ev&Bys%3OYQ8yfOR6SwT<{d{Xq*%uQfG9n!A-0|oFSBXA>xvbp$rybaj z3w!gG)8ivbUIj;Q`aNfj-_YB`%0bnq5|zHd>L#K=N4LeMl7CNis($KD;@Un(Mja>I zKT9KZGf*LrBjgck?_8c^WiW>M-U6+|Kp|j&HkVyPSwXJB_r47B_Gb*}Z&y|4gFO~% zb{HHqiS)4Vs-_P?LE?s2d-(Zk0;2;n$&#Vys{d-IF_;b=j0aAiZUbxcoT3SE(2V{7 z(_{{Y5*44jqy=XiwMwlZ+hJs{JP! zfz8k8QTrzdYQ`>Lh>Ho)9UBWj>Rp%b?nXB}k5m&9T521^1FLk|n7LT>7Bma&F(;L~ z?72)hB|k@P9Gx1!Ke?`JGyd9tB8{;HN6L$;Ts6!@*w|ne^)lC7jjtLmepAUK{7K7B z3x=COQa7+TK#&=*yQm7fU}~!t#GxN$MAH{7JKl@_4MivJ0xMM8(D2uBoT&nORq92y z5)rk?sN`_MBtXL5RAZcZD2r9{19rmFz?fq8O6-4T>g_9pUHu=Sj+?9|aq z`Xv(A0FAkxae_%aPK;YXCq+1>Iwhy`UNDAli@YQG!eAP^eHfA!p&|OA1n3&lh&?RT zYJA#v4~iIEa}CHxxo7x^kCcIFu;{c|WbBsmNd2EP`+%QRDf{exMmC+La%SgDZECnkb1USB0{SF2LAucqhSxmOW z#q-`j1py|WTPQ;e9vR}iB+y;bk&Z6$PYM>%XfaJ`)S2791V~}y(0vQ?O3}!#T>6|D zY?|62Z10{cnGv9lW|CXSjH|q4G zjEghzzbXCI^_^3dDHTrWR1s5PG@(tL8dT$n5D}Q74F-WGwdjKmBe?B<+-JR;ZE(Q3 zoUiK`_+(_louTu$PMs;OyE8V3Fy*tg402EXR!>Kg@VgEyv=2vv_L$fAuN;2khws8( zc2e0t6BcF>zMxv;;QKg)upkPlyY(o=mLIe^3MmG{8hxj%wCp#=2Mg6Pc+9TW3y2V} z1XjQfgGscg*xU679&5nQIxORI5Z>Yv5t@Pos2Z2BA37x$W8u{o zP`F}7)mR%6KTCTEz#87;KFv!9z0b2doZWmYPu~qGe{VQ#kH9G-uvwYL4W_ArCJ*O6 z9TlY`1@D4?a`Mq(6ZgSMh#86=*ao2CdG(<$83s~dmm3`_co!O7iC|bhJXtDNc&BcK zEO5wXs7(ZsG6V-rSvcV4C>IWqvKe-@;H4Xa&LjE{|Tr#0BSP0no=Csnxt!oS>AE$SC zErr?3hlSAdHlx(*(!lBU&^=P+l)qX9IqQz&#s&_U6I&(r=}GSP#5GB)j9{n~1B2T) zLX2|HmJy<~F^CTQ(Dhg-A^*pW5Du{^rQmVcgwl9%`@J_6U3HJoU!3{A>p#rVe=Ycp zPiIF$Jeq%;p`T$#Nji>URT^8Y&skN_dk`*&GMv!6o%0;A1KdasvqWef_HEA!)g}fQ z-RC&;&0E9P1E_Ul;)pQP4>{@(R&XeIkyZlQx$%0jf-fFjRkeM_H6xXm4?IBEQ8};x zx0FZPL6SFO%S#_OIu>t(yuc}Oe~i%Ci_^3`?b+C?+qb(7ealG2c{C|zgoa=xxKEEj z%Ycr8`nVkI%Ljw7?Q21X3gGMbMkVVeYU|=G2tNYHqStUjUCtRS!R50EU-nLtj(kl> zo0CXg43hk^ML;!yaWoSe5t0y~TucbI===*(A<*`Ta5^q+m~SbB?kP;ve|(S0gi&_X z!eA!w7CNJ~c5V{xp@*iP#F5P=Q+$4^5GsQUQYDmj7Q)a8qurDRRzF_lKJS_1+k8@E zEd#IY<~ILtZxlO6zjRTs_wVOP6pQtuwKe6Pyz8>`q@6q>0Z!ti;C$QKA;0Oj?wYZD z-ujPd)&p#u8G>|d(S92Gf9XV=I3aHAV{hvw+LsM)ph3A9(Fb6?wYutOYDQd0Yb|QJ^UQS%{-%6(zQsY|EDWGtWXf!=93SdF@aHZV^{cuM+@kOV>m@~mJG{N{ zK-2ya;Jp?Yy%P30vpl@5^SYbN!>nS(ZgH3AsWmtn6;VIhpw9r^ebPgSwb>Xu=k`!H z5_6dEicI1&J7_E$f7j#f`P@1Pr-a>|_(s7ifQc?b-QnT(@hjFFKBilEg}memyU0

~53nPkV`vuJRco*;;93w$& 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 FMhXXj!t4M5 diff --git a/spec/factories/consents.rb b/spec/factories/consents.rb index 4d3abf332..320461f57 100644 --- a/spec/factories/consents.rb +++ b/spec/factories/consents.rb @@ -17,6 +17,7 @@ # patient_id :bigint not null # programme_id :bigint not null # recorded_by_user_id :bigint +# team_id :bigint not null # # Indexes # @@ -24,6 +25,7 @@ # index_consents_on_patient_id (patient_id) # index_consents_on_programme_id (programme_id) # index_consents_on_recorded_by_user_id (recorded_by_user_id) +# index_consents_on_team_id (team_id) # # Foreign Keys # @@ -31,6 +33,7 @@ # fk_rails_... (patient_id => patients.id) # fk_rails_... (programme_id => programmes.id) # fk_rails_... (recorded_by_user_id => users.id) +# fk_rails_... (team_id => teams.id) # FactoryBot.define do factory :consent do @@ -39,6 +42,8 @@ end programme + team { programme.team } + patient parent { patient.parents.first } diff --git a/spec/factories/patients.rb b/spec/factories/patients.rb index 954703a69..ff231a7c7 100644 --- a/spec/factories/patients.rb +++ b/spec/factories/patients.rb @@ -96,6 +96,7 @@ :given, :from_mum, patient: instance, + team:, programme: ) ] @@ -112,6 +113,7 @@ :from_mum, :health_question_notes, patient: instance, + team:, programme: ) ] @@ -127,6 +129,7 @@ :refused, :from_mum, patient: instance, + team:, programme: ) ] @@ -142,6 +145,7 @@ :refused, :from_mum, patient: instance, + team:, programme:, reason_for_refusal: "already_vaccinated", reason_for_refusal_notes: "Already had the vaccine at the GP" @@ -159,6 +163,7 @@ :refused, :from_mum, patient: instance, + team:, programme: ), association( @@ -167,6 +172,7 @@ :given, :from_dad, patient: instance, + team:, programme: ) ] diff --git a/spec/models/consent_spec.rb b/spec/models/consent_spec.rb index 55e0f4e4d..6c8092a78 100644 --- a/spec/models/consent_spec.rb +++ b/spec/models/consent_spec.rb @@ -17,6 +17,7 @@ # patient_id :bigint not null # programme_id :bigint not null # recorded_by_user_id :bigint +# team_id :bigint not null # # Indexes # @@ -24,6 +25,7 @@ # index_consents_on_patient_id (patient_id) # index_consents_on_programme_id (programme_id) # index_consents_on_recorded_by_user_id (recorded_by_user_id) +# index_consents_on_team_id (team_id) # # Foreign Keys # @@ -31,6 +33,7 @@ # fk_rails_... (patient_id => patients.id) # fk_rails_... (programme_id => programmes.id) # fk_rails_... (recorded_by_user_id => users.id) +# fk_rails_... (team_id => teams.id) # describe Consent do