meta-edc 1.0.7__py3-none-any.whl → 1.1.0__py3-none-any.whl
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.
- meta_ae/action_items.py +10 -2
- meta_ae/baker_recipes.py +1 -2
- meta_ae/tests/tests/test_actions.py +1 -2
- meta_analytics/notebooks/anu.ipynb +95 -0
- meta_analytics/notebooks/appointment_planning.ipynb +329 -0
- meta_analytics/notebooks/arvs.ipynb +103 -0
- meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb +227 -0
- meta_analytics/notebooks/cleaning/offschedule_eos.ipynb +353 -0
- meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb +435 -0
- meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb +664 -0
- meta_analytics/notebooks/followup_examination.ipynb +141 -0
- meta_analytics/notebooks/hba1c.ipynb +136 -0
- meta_analytics/notebooks/hiv_regimens.ipynb +122 -118
- meta_analytics/notebooks/incidence.ipynb +232 -0
- meta_analytics/notebooks/liver.ipynb +389 -0
- meta_analytics/notebooks/magreth.ipynb +645 -0
- meta_analytics/notebooks/monitoring_report.ipynb +435 -245
- meta_analytics/notebooks/pharmacy.ipynb +405 -306
- meta_analytics/notebooks/pharmacy_stock_202410.ipynb +306 -0
- meta_analytics/notebooks/steering.ipynb +61 -0
- meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb +1176 -0
- meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb +519 -0
- meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb +964 -0
- meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb +296 -0
- meta_analytics/notebooks/undiagnosed/screening.ipynb +273 -0
- meta_analytics/notebooks/undiagnosed/screening2.ipynb +958 -0
- meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb +958 -0
- meta_analytics/notebooks/ven.ipynb +191 -0
- meta_analytics/notebooks/vitals.ipynb +263 -0
- meta_edc/settings/debug.py +3 -2
- meta_edc/urls.py +1 -0
- {meta_edc-1.0.7.dist-info → meta_edc-1.1.0.dist-info}/METADATA +3 -3
- {meta_edc-1.0.7.dist-info → meta_edc-1.1.0.dist-info}/RECORD +55 -28
- {meta_edc-1.0.7.dist-info → meta_edc-1.1.0.dist-info}/WHEEL +1 -1
- meta_labs/reportables.py +14 -11
- meta_labs/tests/test_reportables.py +33 -12
- meta_pharmacy/notebooks/pharmacy.ipynb +41 -0
- meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
- meta_prn/models/end_of_study.py +2 -0
- meta_prn/models/off_study_medication.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +59 -47
- meta_screening/form_validators/screening_part_three.py +6 -1
- meta_screening/tests/meta_test_case_mixin.py +3 -0
- meta_screening/tests/tests/test_forms.py +9 -2
- meta_screening/tests/tests/test_screening_part_three.py +11 -14
- meta_subject/action_items.py +1 -2
- meta_subject/choices.py +2 -1
- meta_subject/forms/blood_results/blood_results_rft_form.py +60 -3
- meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
- meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
- meta_subject/tests/tests/test_egfr.py +5 -5
- meta_analytics/dataframes/enrolled/__init__.py +0 -0
- {meta_edc-1.0.7.dist-info → meta_edc-1.1.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {meta_edc-1.0.7.dist-info → meta_edc-1.1.0.dist-info}/licenses/LICENSE +0 -0
- {meta_edc-1.0.7.dist-info → meta_edc-1.1.0.dist-info}/top_level.txt +0 -0
@@ -1,8 +1,8 @@
|
|
1
1
|
meta_ae/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
meta_ae/action_items.py,sha256=
|
2
|
+
meta_ae/action_items.py,sha256=JnJ2_JbnrMh6zNpXgWxQGAAfImShlELcc9-a_1GDdF4,11383
|
3
3
|
meta_ae/admin_site.py,sha256=5nx3fbd14u5KJbpFXow_XpG9gfYhdoYe4NFasFVKMMs,159
|
4
4
|
meta_ae/apps.py,sha256=tSj7MhDY6SxB0f1nXGPvodeTPiGFoRtrQGQd6M42egI,284
|
5
|
-
meta_ae/baker_recipes.py,sha256=
|
5
|
+
meta_ae/baker_recipes.py,sha256=TPJeXRMgUYjcfTVFj084VQFyoLBT9SyXg9vOCJYekAw,1148
|
6
6
|
meta_ae/choices.py,sha256=uPs2jdXEoS4eeTJAJlQ-_cFiMQESNJecwUChxv5mHX0,756
|
7
7
|
meta_ae/constants.py,sha256=_x4gMjI0PflPZo9X2NOAitPGh-pOZn4oYBf-_bDlGQ8,36
|
8
8
|
meta_ae/list_data.py,sha256=liF-AksUZkDoIcgHqtXNR7a3YOWGGrD2JFTlwJUDcXk,1416
|
@@ -80,7 +80,7 @@ meta_ae/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
80
|
meta_ae/tests/holidays.csv,sha256=Ywr5pK_caGUJMgRwLzjMeSEUuyEpUWyJE5aJkfbg3bg,539
|
81
81
|
meta_ae/tests/urls.py,sha256=BKiCB7JZCxtZFh6Ym-Y-Hdq92NECIt-GqMDyt6_B7o0,260
|
82
82
|
meta_ae/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
|
-
meta_ae/tests/tests/test_actions.py,sha256=
|
83
|
+
meta_ae/tests/tests/test_actions.py,sha256=BrSbtCudm0ZZ8KGHA36exOx9mYfCslPk3JMRlcAOB8s,4879
|
84
84
|
meta_analytics/README.rst,sha256=x5KDks1P2bSPdyq3f9CNkynAAgJaXl7AX_3rnmC16HU,357
|
85
85
|
meta_analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
86
86
|
meta_analytics/constants.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -94,7 +94,6 @@ meta_analytics/dataframes/get_glucose_fbg_df.py,sha256=iVWHRDwUeSt1PuUBRgJOyZKIV
|
|
94
94
|
meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py,sha256=ouRXlQKOws1CK38OgnKjGGEKf3sgG4e8Ktf9MP_SYzU,669
|
95
95
|
meta_analytics/dataframes/get_last_imp_visits_df.py,sha256=cScwy_nBGHg04_AYpjz_pTq13Q4iyb33SiKk6CltbyQ,3803
|
96
96
|
meta_analytics/dataframes/utils.py,sha256=NNJ2EZmpSXJqa7jCoNgqd4F3irQ_93ZsNnv6PPIm7S8,2383
|
97
|
-
meta_analytics/dataframes/enrolled/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
98
97
|
meta_analytics/dataframes/glucose_endpoints/__init__.py,sha256=a9RlAnFM0Z4AKw-WztBvnGMo3tLLe1dx3292A2n_CnA,107
|
99
98
|
meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py,sha256=4Qd3i9hfSSkn_El7QAjuJDUbzQ1LBpkmFw0rHSlBfG0,6531
|
100
99
|
meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=Nr92PmfmaS_OPPp6hmK1OWZsOr3eQ5FMD5u_oDF8Ylk,13682
|
@@ -102,10 +101,33 @@ meta_analytics/dataframes/glucose_endpoints/utils.py,sha256=47DEQpj8HBSa-_TImW-5
|
|
102
101
|
meta_analytics/dataframes/screening/__init__.py,sha256=onGpmB4474gu_JcyRGdRy09YQyP2Np-mX-rYZTFdJoA,114
|
103
102
|
meta_analytics/dataframes/screening/get_glucose_tested_only_df.py,sha256=0oMJIsIJRjurfpPONuJ4Aoab1UJikezGe3lQNWRoOo4,660
|
104
103
|
meta_analytics/dataframes/screening/get_screening_df.py,sha256=t_xxr7YId3QsXbwjPpi7nIgkleKprmZSqAin2cuB2Vc,6273
|
105
|
-
meta_analytics/notebooks/
|
106
|
-
meta_analytics/notebooks/
|
107
|
-
meta_analytics/notebooks/
|
104
|
+
meta_analytics/notebooks/anu.ipynb,sha256=zrkC0tzKZqDRD310BW1ua8cwdSa6qQzOF2vzmUFKnSc,2263
|
105
|
+
meta_analytics/notebooks/appointment_planning.ipynb,sha256=RUI2h4Bd67hgUH9qof356XybZIStwsRNzy2BMKQAUlE,13100
|
106
|
+
meta_analytics/notebooks/arvs.ipynb,sha256=NSxKb0c9w-kN9WRx4ixNlNOHcD4BJ-1SxFQXR9cehQI,2390
|
107
|
+
meta_analytics/notebooks/followup_examination.ipynb,sha256=Ng90rFarYCBzqj3VzOPqyNLMmP0JvCSCN-mRHR_pw-A,3986
|
108
|
+
meta_analytics/notebooks/hba1c.ipynb,sha256=qrajG5zoAjT1scxAh_6C069VAHqugQnYZRg-VLzZFuo,2756
|
109
|
+
meta_analytics/notebooks/hiv_regimens.ipynb,sha256=qqRq5befPPiPQ8sheFhe6iGxPicajQBw46Kwnya77Dk,14908
|
110
|
+
meta_analytics/notebooks/incidence.ipynb,sha256=-kd0Mp67dk8ECoNEcKMTn92iBxuNLBIOC6-qLvz-31U,8101
|
111
|
+
meta_analytics/notebooks/liver.ipynb,sha256=s19AAV6vmtGqYAfN1cqVIcBeU7ptSGU94uZaeaz32qU,13985
|
112
|
+
meta_analytics/notebooks/magreth.ipynb,sha256=u4BWz6swBFLXcrOQDi_iSuFkp9NiISFk5uPahh7iXug,20773
|
113
|
+
meta_analytics/notebooks/monitoring_report.ipynb,sha256=skRJrbuLSoQcKRdy-aYV--7lN0QfkCiQ0nOUmFbZWo4,74734
|
114
|
+
meta_analytics/notebooks/pharmacy.ipynb,sha256=rAxMyPDZIyx-Qizgrdueq-rUYyeN3zMYVqDPkbjtnSs,34298
|
115
|
+
meta_analytics/notebooks/pharmacy_stock_202410.ipynb,sha256=Kx9QVmiDW-5DWuaoSvLM2vJGHRCam-im9ZVdJsOBFfs,8823
|
116
|
+
meta_analytics/notebooks/steering.ipynb,sha256=pqJrH_Zdwp7sPgHwhahKK-XmNMQjk7bHJv7vHJaeTek,1112
|
117
|
+
meta_analytics/notebooks/ven.ipynb,sha256=JR1_BW2QGqsqteCSORS7Zz7yD3u8JeU9r4H7KJ6nRN4,5182
|
118
|
+
meta_analytics/notebooks/vitals.ipynb,sha256=mHlO6QbhD28aGUhVI0tF06MJm_JjUsKLdSpnz5NhbQI,5787
|
108
119
|
meta_analytics/notebooks/cleaning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
120
|
+
meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb,sha256=HIo8lKtyAs3blx-UXEJful5iXT-0fGQcb5vAT-o7umk,6403
|
121
|
+
meta_analytics/notebooks/cleaning/offschedule_eos.ipynb,sha256=U5KS7GzWKsWkJWIN4pXhKN9GJMCpkGVxrIEBaRoaah8,10620
|
122
|
+
meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb,sha256=vy40GuSA2HH3OoCBLaHx5fxYzS3mOV5C2L7BqSUGemM,11116
|
123
|
+
meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb,sha256=4UxnO4ijILwKlRvYd2D7_XE5fqBj3puQqYbggu4Ouf0,22526
|
124
|
+
meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb,sha256=B79ZyqWzsxhrBJZhajyqjJ3vP10eNzX2C3_ojc3jOIY,34653
|
125
|
+
meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb,sha256=MmyQzBCR63GAQlKsQ1CPxmPtgMlJYWggfEBDI81me64,11912
|
126
|
+
meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb,sha256=bRoJbboAnkfXo6MeKmedP4j6eAVHdH4q62o35p9--No,36421
|
127
|
+
meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb,sha256=JJkQKVOSrDqqLecM-5OOrVgqe-TshdK4q52DU1zWUtU,6984
|
128
|
+
meta_analytics/notebooks/undiagnosed/screening.ipynb,sha256=8v5FPvJYTo1N4zTP1nwA0uJoaWlLEs3RsY7_I3fXdLY,6769
|
129
|
+
meta_analytics/notebooks/undiagnosed/screening2.ipynb,sha256=r4QMsNfuLMzFgTorVLY-doB32fAvl4zCfCKbujRbH38,24794
|
130
|
+
meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb,sha256=GiATH1CyZaS3kXvcT9aYpbCO4VPmPkBWPOtz67j4Y-Y,22182
|
109
131
|
meta_analytics/tables/__init__.py,sha256=mhESCt0Lq4RJU-lbQ5fVfIbXzrEsootGYp7EzQIqDBI,70
|
110
132
|
meta_analytics/tables/eligible.py,sha256=2q-SMbAsrBgOVc4Ttq5P3bpjsUKwP5hYhJBMgyH6GGI,3389
|
111
133
|
meta_analytics/tables/has_dm.py,sha256=W6pObFI7k2hpL46Q7t2QIfYDVfo7-PHJMdCv6Q5EUQk,1739
|
@@ -244,7 +266,7 @@ meta_edc/meta_version.py,sha256=8IASYGnr43t18oDhNAPNnQoKvFYVAUnPILl6a05HAoc,211
|
|
244
266
|
meta_edc/model_callers.py,sha256=PjQEW7Kp5HHcUMdmz7dvxg53HvGJHXUKr6QTd-4hsyE,1339
|
245
267
|
meta_edc/models.py,sha256=DLA-hDdFszAVNCe1sZqVoLmIXifFW0HeZsipP9D1Ic4,46
|
246
268
|
meta_edc/navbars.py,sha256=XOuo4QEUCBtabYpW0IorT4Hs6GtJgVk7NkB0H_Bb7Vs,1191
|
247
|
-
meta_edc/urls.py,sha256=
|
269
|
+
meta_edc/urls.py,sha256=vTpmCfcRTaYo_kv2zmuPMLh-EO5MlwzcKc2PV-0eWd8,3624
|
248
270
|
meta_edc/utils.py,sha256=FdGGHT0zCUM9FLovLanH_ultcxbVitCvvPAwq0U3yYc,342
|
249
271
|
meta_edc/wsgi.py,sha256=Ns9vu_jcEqpOLM5tb-hwVUh3ciInocrG3kUPAxh7nJg,165
|
250
272
|
meta_edc/wsgi_live.py,sha256=EprgdsDiEvNN033w6lUQHaS8Y3ntpPrWHDTOgZcjaCQ,164
|
@@ -254,7 +276,7 @@ meta_edc/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
|
|
254
276
|
meta_edc/management/commands/update_forms_reference.py,sha256=jvCU9YdMtp9wbmjqKQsB9gxNw4DcAP97sZD-kfIxOns,1071
|
255
277
|
meta_edc/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
256
278
|
meta_edc/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
257
|
-
meta_edc/settings/debug.py,sha256=
|
279
|
+
meta_edc/settings/debug.py,sha256=t44__VfifcaagPTcm7lUVcjaIsBuM4IRyWz9xyNubDg,1297
|
258
280
|
meta_edc/settings/defaults.py,sha256=USh91oF6HKdUXWZ5xf5dDCwAYINSIdOPkgHCxDCsGP4,19633
|
259
281
|
meta_edc/settings/live.py,sha256=uLTlsIc3H6gdE_7pkL6vyOVa6V_74hnXFkiojqGFAYY,264
|
260
282
|
meta_edc/settings/logging.py,sha256=6qVUE37OMkf5rzwTmMq4krFsZ2jcyCpWdFtGih_Cs4U,1938
|
@@ -267,8 +289,8 @@ meta_edc/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
267
289
|
meta_edc/tests/tests/test_endpoints.py,sha256=5FdIHTd1xhUIgQLBzMV-Ml3VoFrlBrLLUbNarme5raw,23541
|
268
290
|
meta_edc/views/__init__.py,sha256=TBXTih4Mpsg5Oh2jbyXqL9kH7bu3vWNRgVe93hvLCl8,32
|
269
291
|
meta_edc/views/home_view.py,sha256=BXydy77TcdcM0-R3S_uHI4DtfnLMIzPJMyqjFJZFSsA,916
|
270
|
-
meta_edc-1.0.
|
271
|
-
meta_edc-1.0.
|
292
|
+
meta_edc-1.1.0.dist-info/licenses/AUTHORS.rst,sha256=wL4KUOd7FAFThhkLAJxSLQ2BPzd3ikG9q0UVZr3BbLg,244
|
293
|
+
meta_edc-1.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
272
294
|
meta_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
273
295
|
meta_export/admin_site.py,sha256=CiKAf0gDFvBKVc-1VM6KwM905ayVZuiY1tgaTeUeCi0,167
|
274
296
|
meta_export/apps.py,sha256=3_5LB1MLtzfKekI2vT9Cm6puAx6t6AjtIfTTVdItdKg,226
|
@@ -280,10 +302,10 @@ meta_labs/lab_profiles.py,sha256=I3s07bzAQaRzNSAqBuprx6uIO048ovffL5gD28ZE2N0,957
|
|
280
302
|
meta_labs/labs.py,sha256=0mpfORDUsjxBeyJdEC5NiF4kQHSQTfKiQuMKZ9Svaqw,128
|
281
303
|
meta_labs/list_data.py,sha256=ZWvQ7ZuOgNZ8Cz-y5lzrAYCZC2HarlnlleFXdsI1P9c,477
|
282
304
|
meta_labs/processing_profiles.py,sha256=fRX72FOl2rsnOJYhgup5QacfGSXKtWqn2gD3Giz2GDA,500
|
283
|
-
meta_labs/reportables.py,sha256=
|
305
|
+
meta_labs/reportables.py,sha256=OX1rxiWKmsi7_ODxH1O8yBGgOq56HAaiG1XTEDGaOhM,586
|
284
306
|
meta_labs/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
285
307
|
meta_labs/tests/test_labs.py,sha256=49COK2X8F5kvwsIuuPaxBSzDo665J2ctd1DZzo-O4Cs,967
|
286
|
-
meta_labs/tests/test_reportables.py,sha256=
|
308
|
+
meta_labs/tests/test_reportables.py,sha256=nmNR7wumpkI84BqE3pCRqz7TuvprJXv9Kbtxs8P8U90,1302
|
287
309
|
meta_labs/tests/urls.py,sha256=_sVCnQeiAFRYKhxga3_DjoKj_4bgs1s2gjcynDiapvA,111
|
288
310
|
meta_lists/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
289
311
|
meta_lists/admin.py,sha256=g05vpXfVIEBVG03aiPD8Vn-AnR7gL60MbPJAfzsO6R8,2157
|
@@ -352,6 +374,7 @@ meta_pharmacy/models/label_data.py,sha256=dV8fpmJ6QpKidHVRfN3IdWEciEGQch8Q8jqJgq
|
|
352
374
|
meta_pharmacy/models/rx.py,sha256=cx0T9j2Vb-6tEotWA7ohsn2OGHnQpxiFQnu7__hx7Ts,379
|
353
375
|
meta_pharmacy/models/rx_label.py,sha256=iBqy3c-DvoPnw1g8BAVGQcY5OpI9Ie2YT78rYY0G7WM,1202
|
354
376
|
meta_pharmacy/models/substitutions.py,sha256=9FjjD4x66B8SxABZR5atan2S5uE4nJH0tn0ujB4xEbA,3071
|
377
|
+
meta_pharmacy/notebooks/pharmacy.ipynb,sha256=QK7Uaqr-3MbCmzaHq4PhTd4Xn4R3JLG3TjZZ3g5Cz3I,697
|
355
378
|
meta_pharmacy/utils/__init__.py,sha256=PiPRCZqgxPiudXWEvQmXOqFZMoj56NEiOeRuYEyE_9w,71
|
356
379
|
meta_pharmacy/utils/update_initial_pharmacy_data.py,sha256=Od0QL41unsDEGDBYsVCe8k-T3GpMae0DtHt61vz4sYM,4621
|
357
380
|
meta_prn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -454,12 +477,14 @@ meta_prn/migrations/0059_alter_historicaloffstudymedication_reason_and_more.py,s
|
|
454
477
|
meta_prn/migrations/0060_alter_onschedule_managers_and_more.py,sha256=zTlobJgliy-LuQ3z_BE_cwpdVddrvpHRvhDH4Hj64zY,1791
|
455
478
|
meta_prn/migrations/0061_auto_20250115_2025.py,sha256=u7F2GsXo-9pIN5z0VM1aXW_KoRjS82BaBqqj2xWwWzo,1937
|
456
479
|
meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py,sha256=L1ZDX1IMS0nIs77lF4QZ0SX-ye4rXvouTLnijob8SAQ,2421
|
480
|
+
meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py,sha256=l8pNm7G0O_7hWMb7smU5wbbsjE7es-WZfCkET7zyuXw,1081
|
481
|
+
meta_prn/migrations/0064_auto_20250602_2143.py,sha256=S8-7kSWfJSFtzKrq5_puYIC0UA32wRZH_-xnQ6mt--w,512
|
457
482
|
meta_prn/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
458
483
|
meta_prn/models/__init__.py,sha256=l06P7L2_Aye2h2VmAyb1XRcIbQAOyxws08IMc8sIops,717
|
459
484
|
meta_prn/models/dm_referral.py,sha256=XyyB5ylcaMRCumGRFPlh2Op5VvT9ROJ1A9x5q55vUuc,1096
|
460
|
-
meta_prn/models/end_of_study.py,sha256=
|
485
|
+
meta_prn/models/end_of_study.py,sha256=wg2Y8Q_via6GozskaCzqkky_jOrtSLNek77-X2KLJME,5444
|
461
486
|
meta_prn/models/loss_to_followup.py,sha256=qo2RrK5cVC1wLE7DdE6rTCCtYn7iAMomov9IbSCFuWg,2397
|
462
|
-
meta_prn/models/off_study_medication.py,sha256=
|
487
|
+
meta_prn/models/off_study_medication.py,sha256=7PzUkyrBWTybTWcNMU5EioApbOoiIaUDnCiEcjgX-II,1779
|
463
488
|
meta_prn/models/offschedule.py,sha256=DjQvXteecXJOzN6ijdH36FCxXoR1halzxl9EliqQJk8,1717
|
464
489
|
meta_prn/models/onschedule.py,sha256=xAlKzvcM5VzVfzaayjUEvUSL6rsALQQSm9iFCs1rnWc,930
|
465
490
|
meta_prn/models/pregnancy_notification.py,sha256=HqRsonJ0F1nxLczVtgPkvGb7kWQOkJDz3w67jOxi5j4,3090
|
@@ -648,11 +673,11 @@ meta_screening/eligibility/eligibility.py,sha256=he-5p7hzUY0Apd98TSTUgzHSosgW6ff
|
|
648
673
|
meta_screening/eligibility/eligibility_part_one.py,sha256=5SMmVx17lUonfcItUepapJmZnbiF2dZ4WrwGllhoKl0,1769
|
649
674
|
meta_screening/eligibility/eligibility_part_two.py,sha256=xyCPn4wUQZu0uvBSpFSpSMsB_80IPI1PRC2wOQWB1Uk,1808
|
650
675
|
meta_screening/eligibility/eligibility_part_three/__init__.py,sha256=UfdNfJ7SW5wTvYo_0KUxn1KrlgjCwOmY539VXQvU-rE,79
|
651
|
-
meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py,sha256
|
676
|
+
meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py,sha256=vGloYoc6VhROst_idpwmULvik9mRPjAWo2Z3ZE2IxNk,6224
|
652
677
|
meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py,sha256=9YOPxMH8jdOeEljCNcNB_i2e69HJOnMLtPSkhCtRewo,4296
|
653
678
|
meta_screening/form_validators/__init__.py,sha256=42qN1LhCpXvgA0WhzmXfSVaESp9DaHnlQDrE0sjmo-A,308
|
654
679
|
meta_screening/form_validators/screening_part_one.py,sha256=-CCe24UPhgFusVOkWzGJZ1uMszqmePkKsfF0hN54y0A,1213
|
655
|
-
meta_screening/form_validators/screening_part_three.py,sha256=
|
680
|
+
meta_screening/form_validators/screening_part_three.py,sha256=6i_uoMMpVWZ0EElaM3dGELBOHLud09y2MoeQGugdklU,7815
|
656
681
|
meta_screening/form_validators/screening_part_two.py,sha256=ZR9ApZfhXDOfmwxqsX-UkaN4FXVMVHVzklVp3CxNg34,4738
|
657
682
|
meta_screening/form_validators/subject_refusal.py,sha256=QGIUkCobHEAlE1R1gDmPfAIlBBQqpzpIuArUkop8yDk,322
|
658
683
|
meta_screening/form_validators/subject_screening.py,sha256=F4m8CrhQW2O1AmdkuvlJRki39Ha_XYGyxczP2-TBE_A,309
|
@@ -746,12 +771,12 @@ meta_screening/models/subject_refusal.py,sha256=oLC9FKR1C01pwy5fEM_35itOYCDQZXmW
|
|
746
771
|
meta_screening/models/subject_screening.py,sha256=j-0U5zcErwEv0qYEn9ktaPiNfce-CFe67NpaYyX1lew,2269
|
747
772
|
meta_screening/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
748
773
|
meta_screening/tests/holidays.csv,sha256=Ywr5pK_caGUJMgRwLzjMeSEUuyEpUWyJE5aJkfbg3bg,539
|
749
|
-
meta_screening/tests/meta_test_case_mixin.py,sha256=
|
774
|
+
meta_screening/tests/meta_test_case_mixin.py,sha256=dBdYp1U9mW9J7ghrgchXOOWeZPhiVcQ09mV3GHbiors,8949
|
750
775
|
meta_screening/tests/options.py,sha256=VpRQWWPwlVUReFi4KHuJdHXTBCsWvR2IlHs4yTDxQVA,4097
|
751
776
|
meta_screening/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
752
|
-
meta_screening/tests/tests/test_forms.py,sha256=
|
777
|
+
meta_screening/tests/tests/test_forms.py,sha256=wTR3fe4-v6L5sw_eApdcCn6xnu_I6Q6fpOIZlUVvcXA,16903
|
753
778
|
meta_screening/tests/tests/test_screening_part_one.py,sha256=EyG3SRVpR6-bFB0bn9UEA4hL8638e-Kx7K0_AeaBntE,4723
|
754
|
-
meta_screening/tests/tests/test_screening_part_three.py,sha256=
|
779
|
+
meta_screening/tests/tests/test_screening_part_three.py,sha256=OWzfonzIgl-g59oK33VCcRuUnjzDbd2uUKRv7XHNiyM,16739
|
755
780
|
meta_screening/tests/tests/test_screening_part_two.py,sha256=BjPJKwujqlKO-bHhMIS5OFAomInKm34fKjU6d-8QlTY,3126
|
756
781
|
meta_sites/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
757
782
|
meta_sites/apps.py,sha256=tFzSEULZZYXupXrO7B2RAh_N--joVS4E_UOykXoOKNA,278
|
@@ -768,11 +793,11 @@ meta_stats/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
768
793
|
meta_stats/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
769
794
|
meta_stats/tests/tests/test_incidence.py,sha256=Uxv05_xZ0hZKtTBDow3goRcQrK5644j9NQwyW9d_CX8,313
|
770
795
|
meta_subject/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
771
|
-
meta_subject/action_items.py,sha256=
|
796
|
+
meta_subject/action_items.py,sha256=3wwqxwxYGApbfucy1hmemG6H-HzZNTMkwnOV_8Q4cYk,6869
|
772
797
|
meta_subject/admin_site.py,sha256=fxUn5QKgo6wYUG18HW11kVrPqWvmWV2_PzKbgZQM4pU,169
|
773
798
|
meta_subject/apps.py,sha256=iAQ8lizUpKa4gJnCGkTsuRQPtGWmSjnshZn8rZUguO8,289
|
774
799
|
meta_subject/baker_recipes.py,sha256=C8ag5z5MRczzb3MkYGL37DccQg1FykiLgxepBlitlh0,2741
|
775
|
-
meta_subject/choices.py,sha256=
|
800
|
+
meta_subject/choices.py,sha256=lFseBsxliIRshCmqsIwdPnYXs1p_WT5D_Dfn2PcWONs,6754
|
776
801
|
meta_subject/constants.py,sha256=6rpHsHj3CPV7ntdWxYScRhPVoj4YIxX2lUZdZ9lrFN0,704
|
777
802
|
meta_subject/identifiers.py,sha256=pBYvMFXK7N2oNDMJJM2xLCvk0NuzLzzm15VqQ2Cp7Og,325
|
778
803
|
meta_subject/urls.py,sha256=v2fM0R9gvt8MWdZj9cRnYU8xvqecLK5b_8leYVEtYZI,206
|
@@ -867,7 +892,7 @@ meta_subject/forms/blood_results/blood_results_hba1c_form.py,sha256=IoQSS8MnK8C9
|
|
867
892
|
meta_subject/forms/blood_results/blood_results_ins_form.py,sha256=zKwobon8wRBrwpAMxonbXtR-Bg2wsJbcHraLjsqcAhY,722
|
868
893
|
meta_subject/forms/blood_results/blood_results_lft_form.py,sha256=WKCGZXTk9ndlASymnKKIAo0rBtE9uoE_gzKsx19p-LQ,714
|
869
894
|
meta_subject/forms/blood_results/blood_results_lipids_form.py,sha256=YcqETGjN1LH_kKTGVD0a-gW4z6X3PmM8z1xQmI0-Yfg,735
|
870
|
-
meta_subject/forms/blood_results/blood_results_rft_form.py,sha256=
|
895
|
+
meta_subject/forms/blood_results/blood_results_rft_form.py,sha256=UVVfDpwdUskiV6ut-cJdzec_jHamsBNdPajzJwZ3vdg,3459
|
871
896
|
meta_subject/forms/diabetes/__init__.py,sha256=oOtxUWSSI4aZVk5BBSKV44SGMwpw7zKZGrAk-dljPSk,90
|
872
897
|
meta_subject/forms/diabetes/dm_endpoint_form.py,sha256=ngmDqAauO_oLsTxEVtbT9-2jWFYYagSXAcBf66pT81I,349
|
873
898
|
meta_subject/forms/diabetes/dm_followup_form.py,sha256=ToJwQ1NViZn_CX-0YUyLQ5SSiDayKpp6bb16NBp-cKU,828
|
@@ -1104,6 +1129,8 @@ meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_inter
|
|
1104
1129
|
meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py,sha256=6TT5p5hQAhkL-vc3mo7xAAoZlQSoPAQ_KBTWNxYkr-0,34009
|
1105
1130
|
meta_subject/migrations/0221_auto_20250402_1913.py,sha256=4quuKgAvnd-_yRhyC211x6bMsCCI7csioPJoImrVn24,1486
|
1106
1131
|
meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py,sha256=hxGQ5E2_DG8RmBeg7rRxtODsigUOZANop8GJYHPNVqg,1544
|
1132
|
+
meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py,sha256=twzCzmB230Fd2Os2WOkLHyodfWGgHPBYBkDas7lhG7A,2714
|
1133
|
+
meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py,sha256=U_-nNqH6AHwGDoCEqogGZ9GMdPK92s_hCrJWVeUMyrY,5471
|
1107
1134
|
meta_subject/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1108
1135
|
meta_subject/model_mixins/__init__.py,sha256=6DdDDOwDdagrz6Q7X9lxuAVszsFWFhwPqLz4JOD85Wo,286
|
1109
1136
|
meta_subject/model_mixins/arv_history_model_mixin.py,sha256=6ILacF2koyYmwZIFHmmQO1uIT1eWzrahXxhAlxpQiX0,2898
|
@@ -1168,7 +1195,7 @@ meta_subject/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
1168
1195
|
meta_subject/tests/holidays.csv,sha256=Ywr5pK_caGUJMgRwLzjMeSEUuyEpUWyJE5aJkfbg3bg,539
|
1169
1196
|
meta_subject/tests/urls.py,sha256=LBuQGFG4-omBramGVGmKFtRTQosQhZLx-vBvZipMujw,1109
|
1170
1197
|
meta_subject/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1171
|
-
meta_subject/tests/tests/test_egfr.py,sha256=
|
1198
|
+
meta_subject/tests/tests/test_egfr.py,sha256=m4-9I3g5tue6Ed5ggI2EJwxagd009Gxxv7Ex09AfH-Q,9994
|
1172
1199
|
meta_subject/tests/tests/test_fixes.py,sha256=2jOB0lcEonJft5rWEbrDEtGCuGLaaUN8zAj2qZjQwoU,2454
|
1173
1200
|
meta_subject/tests/tests/test_followup.py,sha256=rembohm-ecEp9rGFdjc2CkvXGfYZ8A8BOX0MdBBZSF0,1871
|
1174
1201
|
meta_subject/tests/tests/test_manager_order.py,sha256=wmVxMd85mJ6HGAL_3Z_mSp_mqeNQvK7MW_6mvQPDeO8,454
|
@@ -1211,7 +1238,7 @@ tests/etc/user-rsa-restricted-private.pem,sha256=CUcHW9bznWdmmASN00hCzvxFPAFl4N2
|
|
1211
1238
|
tests/etc/user-rsa-restricted-public.pem,sha256=mt84djoL-uHw6Wc5SJh0zml6VzXulnf8eQSFg7-fheg,450
|
1212
1239
|
tests/etc/user-salt-local.key,sha256=x5anBw9fvbHurczouT3CjrkWb_xs7Ypm1htIJsgiuiw,256
|
1213
1240
|
tests/etc/user-salt-restricted.key,sha256=pxmpcfBRNB-4C6wTvHXz-9fOfJgKIFOjaAF8ZFfa4q4,256
|
1214
|
-
meta_edc-1.0.
|
1215
|
-
meta_edc-1.0.
|
1216
|
-
meta_edc-1.0.
|
1217
|
-
meta_edc-1.0.
|
1241
|
+
meta_edc-1.1.0.dist-info/METADATA,sha256=y4ko2psjFD5hmV78bD3F57hp9ijr8ftfVDLjneZqm5I,43555
|
1242
|
+
meta_edc-1.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1243
|
+
meta_edc-1.1.0.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
|
1244
|
+
meta_edc-1.1.0.dist-info/RECORD,,
|
meta_labs/reportables.py
CHANGED
@@ -1,16 +1,19 @@
|
|
1
|
-
from edc_reportable import
|
2
|
-
from edc_reportable.grading_data.daids_july_2017 import chemistries, dummies, hematology
|
3
|
-
from edc_reportable.normal_data.africa import normal_data
|
1
|
+
from edc_reportable.data import africa, daids_july_2017
|
4
2
|
|
5
3
|
grading_data = {}
|
6
|
-
grading_data.update(**dummies)
|
7
|
-
grading_data.update(**chemistries)
|
8
|
-
grading_data.update(**hematology)
|
4
|
+
grading_data.update(**daids_july_2017.dummies)
|
5
|
+
grading_data.update(**daids_july_2017.chemistries)
|
6
|
+
grading_data.update(**daids_july_2017.hematology)
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
collection_name = "meta"
|
9
|
+
normal_data = africa.normal_data
|
10
|
+
reportable_grades = [3, 4]
|
11
|
+
reportable_grades_exceptions = {}
|
12
|
+
|
13
|
+
reference_range_options = dict(
|
14
|
+
collection_name=collection_name,
|
15
|
+
normal_data=africa.normal_data,
|
13
16
|
grading_data=grading_data,
|
14
|
-
reportable_grades=
|
15
|
-
reportable_grades_exceptions=
|
17
|
+
reportable_grades=reportable_grades,
|
18
|
+
reportable_grades_exceptions=reportable_grades_exceptions,
|
16
19
|
)
|
@@ -1,16 +1,37 @@
|
|
1
|
-
from tempfile import mkdtemp
|
2
|
-
|
3
1
|
from django.test import TestCase
|
4
|
-
from edc_reportable import
|
2
|
+
from edc_reportable.models import GradingData, NormalData, ReferenceRangeCollection
|
3
|
+
from edc_reportable.utils import load_reference_ranges
|
5
4
|
|
6
5
|
|
7
6
|
class TestReportables(TestCase):
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
def test_load_reference_ranges(self):
|
8
|
+
|
9
|
+
from meta_labs.reportables import (
|
10
|
+
collection_name,
|
11
|
+
grading_data,
|
12
|
+
normal_data,
|
13
|
+
reportable_grades,
|
14
|
+
reportable_grades_exceptions,
|
15
|
+
)
|
16
|
+
|
17
|
+
load_reference_ranges(
|
18
|
+
collection_name=collection_name,
|
19
|
+
grading_data=grading_data,
|
20
|
+
normal_data=normal_data,
|
21
|
+
reportable_grades=reportable_grades,
|
22
|
+
reportable_grades_exceptions=reportable_grades_exceptions,
|
23
|
+
)
|
24
|
+
self.assertTrue(ReferenceRangeCollection.objects.filter(name=collection_name).exists())
|
25
|
+
reference_range_collection = ReferenceRangeCollection.objects.get(name=collection_name)
|
26
|
+
self.assertEqual(
|
27
|
+
NormalData.objects.filter(
|
28
|
+
reference_range_collection=reference_range_collection
|
29
|
+
).count(),
|
30
|
+
82,
|
31
|
+
)
|
32
|
+
self.assertEqual(
|
33
|
+
GradingData.objects.filter(
|
34
|
+
reference_range_collection=reference_range_collection
|
35
|
+
).count(),
|
36
|
+
172,
|
37
|
+
)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "code",
|
5
|
+
"execution_count": null,
|
6
|
+
"id": "0",
|
7
|
+
"metadata": {},
|
8
|
+
"outputs": [],
|
9
|
+
"source": []
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"cell_type": "code",
|
13
|
+
"execution_count": null,
|
14
|
+
"id": "1",
|
15
|
+
"metadata": {},
|
16
|
+
"outputs": [],
|
17
|
+
"source": []
|
18
|
+
}
|
19
|
+
],
|
20
|
+
"metadata": {
|
21
|
+
"kernelspec": {
|
22
|
+
"display_name": "Python 3",
|
23
|
+
"language": "python",
|
24
|
+
"name": "python3"
|
25
|
+
},
|
26
|
+
"language_info": {
|
27
|
+
"codemirror_mode": {
|
28
|
+
"name": "ipython",
|
29
|
+
"version": 2
|
30
|
+
},
|
31
|
+
"file_extension": ".py",
|
32
|
+
"mimetype": "text/x-python",
|
33
|
+
"name": "python",
|
34
|
+
"nbconvert_exporter": "python",
|
35
|
+
"pygments_lexer": "ipython2",
|
36
|
+
"version": "2.7.6"
|
37
|
+
}
|
38
|
+
},
|
39
|
+
"nbformat": 4,
|
40
|
+
"nbformat_minor": 5
|
41
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Generated by Django 5.2.1 on 2025-06-02 18:20
|
2
|
+
|
3
|
+
from django.db import migrations, models
|
4
|
+
|
5
|
+
|
6
|
+
class Migration(migrations.Migration):
|
7
|
+
|
8
|
+
dependencies = [
|
9
|
+
("meta_prn", "0062_alter_endofstudy_offstudy_reason_and_more"),
|
10
|
+
]
|
11
|
+
|
12
|
+
operations = [
|
13
|
+
migrations.AddField(
|
14
|
+
model_name="historicaloffstudymedication",
|
15
|
+
name="singleton_field",
|
16
|
+
field=models.CharField(
|
17
|
+
db_index=True,
|
18
|
+
editable=False,
|
19
|
+
help_text="auto updated for unique constraint",
|
20
|
+
max_length=50,
|
21
|
+
null=True,
|
22
|
+
verbose_name="subject identifier",
|
23
|
+
),
|
24
|
+
),
|
25
|
+
migrations.AddField(
|
26
|
+
model_name="offstudymedication",
|
27
|
+
name="singleton_field",
|
28
|
+
field=models.CharField(
|
29
|
+
editable=False,
|
30
|
+
help_text="auto updated for unique constraint",
|
31
|
+
max_length=50,
|
32
|
+
null=True,
|
33
|
+
unique=True,
|
34
|
+
verbose_name="subject identifier",
|
35
|
+
),
|
36
|
+
),
|
37
|
+
]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Generated by Django 5.2.1 on 2025-06-02 18:43
|
2
|
+
|
3
|
+
from django.db import migrations
|
4
|
+
from django.db.models import F
|
5
|
+
|
6
|
+
|
7
|
+
def update_singeton_field(apps, schema_editor):
|
8
|
+
model_cls = apps.get_model("meta_prn.offstudymedication")
|
9
|
+
model_cls.objects.update(singleton_field=F("subject_identifier"))
|
10
|
+
|
11
|
+
|
12
|
+
class Migration(migrations.Migration):
|
13
|
+
|
14
|
+
dependencies = [
|
15
|
+
("meta_prn", "0063_historicaloffstudymedication_singleton_field_and_more"),
|
16
|
+
]
|
17
|
+
|
18
|
+
operations = [migrations.RunPython(update_singeton_field)]
|
meta_prn/models/end_of_study.py
CHANGED
@@ -32,6 +32,8 @@ from ..constants import CLINICAL_WITHDRAWAL, COMPLETED_FOLLOWUP_48
|
|
32
32
|
# TODO: take off study meds but coninue followup (WITHDRAWAL)
|
33
33
|
# TODO: follow on new schedule, if permanently off drug (Single 36m visit)
|
34
34
|
|
35
|
+
# TODO: add label for "End of followup as per protocol FEB2026"
|
36
|
+
|
35
37
|
|
36
38
|
class EndOfStudy(ActionModelMixin, SiteModelMixin, OffstudyModelMixin, BaseUuidModel):
|
37
39
|
action_name = END_OF_STUDY_ACTION
|
@@ -3,6 +3,7 @@ from edc_action_item.models import ActionModelMixin
|
|
3
3
|
from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
|
4
4
|
from edc_model.models import BaseUuidModel
|
5
5
|
from edc_pharmacy.models import Medication
|
6
|
+
from edc_prn.models import SingletonPrnModelMixin
|
6
7
|
from edc_sites.model_mixins import SiteModelMixin
|
7
8
|
from edc_utils import get_utcnow
|
8
9
|
|
@@ -16,6 +17,7 @@ class OffStudyMedication(
|
|
16
17
|
NonUniqueSubjectIdentifierFieldMixin,
|
17
18
|
SiteModelMixin,
|
18
19
|
ActionModelMixin,
|
20
|
+
SingletonPrnModelMixin,
|
19
21
|
BaseUuidModel,
|
20
22
|
):
|
21
23
|
action_name = OFFSTUDY_MEDICATION_ACTION
|
@@ -1,15 +1,12 @@
|
|
1
1
|
from edc_constants.constants import NEG, NO, NOT_APPLICABLE
|
2
2
|
from edc_egfr import EgfrCkdEpi
|
3
3
|
from edc_egfr.calculators import EgfrCalculatorError
|
4
|
-
from edc_reportable import
|
5
|
-
|
6
|
-
|
7
|
-
ConversionNotHandled,
|
8
|
-
calculate_bmi,
|
9
|
-
convert_units,
|
10
|
-
)
|
4
|
+
from edc_reportable.exceptions import ConversionNotHandled
|
5
|
+
from edc_reportable.units import MICROMOLES_PER_LITER, MILLIMOLES_PER_LITER
|
6
|
+
from edc_reportable.utils import convert_units
|
11
7
|
from edc_screening.fc import FC
|
12
8
|
from edc_screening.screening_eligibility import ScreeningEligibility
|
9
|
+
from edc_vitals.calculators import calculate_bmi
|
13
10
|
|
14
11
|
|
15
12
|
class BaseEligibilityPartThree(ScreeningEligibility):
|
@@ -82,64 +79,79 @@ class BaseEligibilityPartThree(ScreeningEligibility):
|
|
82
79
|
|
83
80
|
@property
|
84
81
|
def converted_creatinine_value(self):
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
82
|
+
value = None
|
83
|
+
if self.creatinine_value and self.creatinine_units:
|
84
|
+
try:
|
85
|
+
value = convert_units(
|
86
|
+
label="creatinine",
|
87
|
+
value=self.creatinine_value,
|
88
|
+
units_from=self.creatinine_units,
|
89
|
+
units_to=MICROMOLES_PER_LITER,
|
90
|
+
)
|
91
|
+
except ConversionNotHandled as e:
|
92
|
+
raise ConversionNotHandled(f"Creatinine. {e}")
|
93
93
|
if value and float(value) > 999999.9999:
|
94
94
|
raise ConversionNotHandled("Creatinine value is absurd.")
|
95
95
|
return value
|
96
96
|
|
97
97
|
@property
|
98
98
|
def converted_fbg_value(self):
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
99
|
+
value = None
|
100
|
+
if self.fbg_value and self.fbg_units:
|
101
|
+
try:
|
102
|
+
value = convert_units(
|
103
|
+
label="glucose",
|
104
|
+
value=self.fbg_value,
|
105
|
+
units_from=self.fbg_units,
|
106
|
+
units_to=MILLIMOLES_PER_LITER,
|
107
|
+
)
|
108
|
+
except ConversionNotHandled as e:
|
109
|
+
raise ConversionNotHandled(f"FBG. {e}")
|
107
110
|
return value
|
108
111
|
|
109
112
|
@property
|
110
113
|
def converted_fbg2_value(self):
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
114
|
+
value = None
|
115
|
+
if self.fbg2_value and self.fbg2_units:
|
116
|
+
try:
|
117
|
+
value = convert_units(
|
118
|
+
label="glucose",
|
119
|
+
value=self.fbg2_value,
|
120
|
+
units_from=self.fbg2_units,
|
121
|
+
units_to=MILLIMOLES_PER_LITER,
|
122
|
+
)
|
123
|
+
except ConversionNotHandled as e:
|
124
|
+
raise ConversionNotHandled(f"FBG2. {e}")
|
119
125
|
return value
|
120
126
|
|
121
127
|
@property
|
122
128
|
def converted_ogtt_value(self):
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
129
|
+
value = None
|
130
|
+
if self.ogtt_value and self.ogtt_units:
|
131
|
+
try:
|
132
|
+
value = convert_units(
|
133
|
+
label="glucose",
|
134
|
+
value=self.ogtt_value,
|
135
|
+
units_from=self.ogtt_units,
|
136
|
+
units_to=MILLIMOLES_PER_LITER,
|
137
|
+
)
|
138
|
+
except ConversionNotHandled as e:
|
139
|
+
raise ConversionNotHandled(f"OGTT. {e}")
|
131
140
|
return value
|
132
141
|
|
133
142
|
@property
|
134
143
|
def converted_ogtt2_value(self):
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
144
|
+
value = None
|
145
|
+
if self.ogtt2_value and self.ogtt2_units:
|
146
|
+
try:
|
147
|
+
value = convert_units(
|
148
|
+
label="glucose",
|
149
|
+
value=self.ogtt2_value,
|
150
|
+
units_from=self.ogtt2_units,
|
151
|
+
units_to=MILLIMOLES_PER_LITER,
|
152
|
+
)
|
153
|
+
except ConversionNotHandled as e:
|
154
|
+
raise ConversionNotHandled(f"OGTT2. {e}")
|
143
155
|
return value
|
144
156
|
|
145
157
|
def set_eligible_model_field(self):
|
@@ -74,7 +74,12 @@ class ScreeningPartThreeFormValidator(
|
|
74
74
|
self.validate_creatinine_required_fields()
|
75
75
|
self.required_if(YES, field="hba1c_performed", field_required="hba1c_datetime")
|
76
76
|
self.required_if(YES, field="hba1c_performed", field_required="hba1c_value")
|
77
|
-
self.validate_egfr(
|
77
|
+
self.validate_egfr(
|
78
|
+
gender=self.instance.gender,
|
79
|
+
age_in_years=self.instance.age_in_years,
|
80
|
+
weight_in_kgs=self.cleaned_data.get("weight"),
|
81
|
+
ethnicity=self.instance.ethnicity,
|
82
|
+
)
|
78
83
|
self.validate_suitability_for_study()
|
79
84
|
|
80
85
|
@property
|
@@ -14,6 +14,7 @@ from edc_list_data.site_list_data import site_list_data
|
|
14
14
|
from edc_metadata import REQUIRED
|
15
15
|
from edc_metadata.models import CrfMetadata
|
16
16
|
from edc_randomization.site_randomizers import site_randomizers
|
17
|
+
from edc_reportable.utils import load_reference_ranges
|
17
18
|
from edc_sites.site import sites
|
18
19
|
from edc_sites.utils import add_or_update_django_sites
|
19
20
|
from edc_visit_tracking.constants import SCHEDULED
|
@@ -21,6 +22,7 @@ from model_bakery import baker
|
|
21
22
|
|
22
23
|
from meta_consent.models import SubjectConsent, SubjectConsentV1Ext
|
23
24
|
from meta_edc.meta_version import PHASE_THREE
|
25
|
+
from meta_labs.reportables import reference_range_options
|
24
26
|
from meta_pharmacy.prepare_meta_pharmacy import prepare_meta_pharmacy
|
25
27
|
from meta_sites.sites import domain_suffix
|
26
28
|
from meta_subject.models import SubjectVisit
|
@@ -53,6 +55,7 @@ class MetaTestCaseMixin(AppointmentTestCaseMixin):
|
|
53
55
|
|
54
56
|
@classmethod
|
55
57
|
def setUpTestData(cls):
|
58
|
+
load_reference_ranges(**reference_range_options)
|
56
59
|
import_holidays(test=True)
|
57
60
|
add_or_update_django_sites(single_sites=sites.get_by_country("tanzania", aslist=True))
|
58
61
|
if cls.import_randomization_list:
|
@@ -3,7 +3,8 @@ from random import choices
|
|
3
3
|
|
4
4
|
from dateutil.relativedelta import relativedelta
|
5
5
|
from django.test import TestCase
|
6
|
-
from edc_constants.constants import FEMALE, MALE, NO, NOT_APPLICABLE, POS, YES
|
6
|
+
from edc_constants.constants import BLACK, FEMALE, MALE, NO, NOT_APPLICABLE, POS, YES
|
7
|
+
from edc_reportable import MILLIGRAMS_PER_DECILITER
|
7
8
|
from edc_utils.date import get_utcnow
|
8
9
|
|
9
10
|
from meta_screening.forms import (
|
@@ -394,4 +395,10 @@ class TestForms(ScreeningTestMixin, TestCase):
|
|
394
395
|
def test_screening_creatinine(self):
|
395
396
|
instance = self.complete_part_one(hospital_identifier="9678281237")
|
396
397
|
_, instance = self.complete_part_two(instance=instance)
|
397
|
-
self.complete_part_three(
|
398
|
+
self.complete_part_three(
|
399
|
+
instance=instance,
|
400
|
+
verbose=True,
|
401
|
+
ethnicity=BLACK,
|
402
|
+
creatinine_value=1.5,
|
403
|
+
creatinine_units=MILLIGRAMS_PER_DECILITER,
|
404
|
+
)
|