meta-edc 1.1.14__py3-none-any.whl → 1.1.15__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.
Potentially problematic release.
This version of meta-edc might be problematic. Click here for more details.
- meta_ae/templatetags/meta_ae_extras.py +2 -2
- meta_analytics/dataframes/get_last_imp_visits_df.py +2 -2
- meta_analytics/tables/enrolled/glucose.py +1 -2
- meta_consent/models/subject_consent_v1.py +0 -1
- meta_edc/admin.py +1 -1
- meta_edc/celery.py +2 -1
- meta_edc/celery_live.py +2 -1
- meta_edc/celery_uat.py +2 -1
- meta_edc/meta_version.py +2 -2
- meta_edc/navbars.py +7 -5
- meta_edc/settings/defaults.py +3 -3
- meta_edc/urls.py +1 -1
- meta_edc/utils.py +3 -1
- {meta_edc-1.1.14.dist-info → meta_edc-1.1.15.dist-info}/METADATA +10 -11
- {meta_edc-1.1.14.dist-info → meta_edc-1.1.15.dist-info}/RECORD +68 -67
- meta_pharmacy/admin/substitutions_admin.py +1 -1
- meta_pharmacy/forms/rx_form.py +0 -1
- meta_pharmacy/management/commands/update_initial_pharmacy_data.py +4 -3
- meta_pharmacy/models/rx_label.py +0 -1
- meta_prn/action_items.py +23 -31
- meta_prn/admin/end_of_study_admin.py +2 -2
- meta_prn/admin/offschedule_dm_referral_admin.py +0 -1
- meta_prn/admin/offschedule_postnatal_admin.py +0 -1
- meta_prn/admin/offschedule_pregnancy_admin.py +0 -1
- meta_prn/choices.py +6 -6
- meta_prn/form_validators/end_of_study.py +9 -8
- meta_prn/forms/dm_referral_form.py +2 -8
- meta_prn/forms/end_of_study_form.py +1 -1
- meta_prn/forms/off_study_medication_form.py +2 -2
- meta_prn/forms/pregnancy_notification_form.py +14 -16
- meta_prn/list_data.py +2 -2
- meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
- meta_prn/models/dm_referral.py +2 -2
- meta_prn/models/end_of_study.py +7 -7
- meta_prn/models/loss_to_followup.py +6 -6
- meta_prn/models/off_study_medication.py +3 -2
- meta_prn/models/pregnancy_notification.py +3 -3
- meta_prn/models/protocol_incident.py +4 -1
- meta_prn/models/signals.py +15 -13
- meta_prn/models/subject_transfer.py +0 -1
- meta_reports/admin/dbviews/imp_substitutions_admin.py +1 -1
- meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
- meta_reports/admin/endpoints_all_admin.py +0 -1
- meta_reports/admin/modeladmin_mixins.py +1 -1
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
- meta_screening/admin/fieldsets.py +0 -1
- meta_screening/admin/screening_part_one_admin.py +0 -1
- meta_screening/forms/field_lists.py +0 -1
- meta_subject/admin/birth_outcome_admin.py +4 -2
- meta_subject/admin/fields.py +5 -5
- meta_subject/admin/fieldsets.py +5 -5
- meta_subject/admin/glucose_admin.py +2 -4
- meta_subject/admin/glucose_fbg_admin.py +5 -7
- meta_subject/admin/list_filters.py +3 -3
- meta_subject/admin/next_appointment_admin.py +0 -1
- meta_subject/form_validators/glucose_form_validator.py +7 -5
- meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
- meta_subject/forms/subject_requisition_form.py +1 -1
- meta_subject/models/blood_results/__init__.py +0 -1
- meta_subject/models/next_appointment.py +0 -1
- {meta_edc-1.1.14.dist-info → meta_edc-1.1.15.dist-info}/WHEEL +0 -0
- {meta_edc-1.1.14.dist-info → meta_edc-1.1.15.dist-info}/licenses/LICENSE +0 -0
meta_pharmacy/forms/rx_form.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
1
3
|
from django.core.management import BaseCommand
|
|
2
4
|
|
|
3
5
|
from meta_pharmacy.utils import update_initial_pharmacy_data
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
class Command(BaseCommand):
|
|
7
|
-
|
|
8
|
-
def handle(self, *args, **options):
|
|
9
|
+
def handle(self, *args, **options): # noqa: ARG002
|
|
9
10
|
update_initial_pharmacy_data()
|
|
10
|
-
|
|
11
|
+
sys.stdout.write("Done\n")
|
meta_pharmacy/models/rx_label.py
CHANGED
meta_prn/action_items.py
CHANGED
|
@@ -38,13 +38,13 @@ class OffscheduleAction(ActionWithNotification):
|
|
|
38
38
|
name = OFFSCHEDULE_ACTION
|
|
39
39
|
display_name = "Submit Off-Schedule"
|
|
40
40
|
notification_display_name = "Off-Schedule"
|
|
41
|
-
parent_action_names =
|
|
41
|
+
parent_action_names = (
|
|
42
42
|
UNBLINDING_REVIEW_ACTION,
|
|
43
43
|
DEATH_REPORT_ACTION,
|
|
44
44
|
LTFU_ACTION,
|
|
45
45
|
BLOOD_RESULTS_RFT_ACTION,
|
|
46
46
|
SUBJECT_TRANSFER_ACTION,
|
|
47
|
-
|
|
47
|
+
)
|
|
48
48
|
reference_model = "meta_prn.offschedule"
|
|
49
49
|
show_link_to_changelist = True
|
|
50
50
|
admin_site_name = "meta_prn_admin"
|
|
@@ -69,13 +69,13 @@ class OffschedulePregnancyAction(ActionWithNotification):
|
|
|
69
69
|
name = OFFSCHEDULE_PREGNANCY_ACTION
|
|
70
70
|
display_name = "Submit Off-Schedule (Pregnancy)"
|
|
71
71
|
notification_display_name = "Off-Schedule (Pregnancy)"
|
|
72
|
-
parent_action_names =
|
|
72
|
+
parent_action_names = (
|
|
73
73
|
UNBLINDING_REVIEW_ACTION,
|
|
74
74
|
DEATH_REPORT_ACTION,
|
|
75
75
|
LTFU_ACTION,
|
|
76
76
|
SUBJECT_TRANSFER_ACTION,
|
|
77
77
|
DELIVERY_ACTION,
|
|
78
|
-
|
|
78
|
+
)
|
|
79
79
|
reference_model = "meta_prn.offschedulepregnancy"
|
|
80
80
|
show_link_to_changelist = True
|
|
81
81
|
admin_site_name = "meta_prn_admin"
|
|
@@ -83,20 +83,19 @@ class OffschedulePregnancyAction(ActionWithNotification):
|
|
|
83
83
|
singleton = True
|
|
84
84
|
|
|
85
85
|
def get_next_actions(self):
|
|
86
|
-
|
|
87
|
-
return next_actions
|
|
86
|
+
return [END_OF_STUDY_ACTION]
|
|
88
87
|
|
|
89
88
|
|
|
90
89
|
class OffscheduleDmReferralAction(ActionWithNotification):
|
|
91
90
|
name = OFFSCHEDULE_DM_REFERRAL_ACTION
|
|
92
91
|
display_name = "Submit Off-Schedule (Diabetes Referral)"
|
|
93
92
|
notification_display_name = "Off-Schedule (Diabetes Referral)"
|
|
94
|
-
parent_action_names =
|
|
93
|
+
parent_action_names = (
|
|
95
94
|
DM_FOLLOWUP_ACTION,
|
|
96
95
|
DEATH_REPORT_ACTION,
|
|
97
96
|
LTFU_ACTION,
|
|
98
97
|
SUBJECT_TRANSFER_ACTION,
|
|
99
|
-
|
|
98
|
+
)
|
|
100
99
|
reference_model = "meta_prn.offscheduledmreferral"
|
|
101
100
|
show_link_to_changelist = True
|
|
102
101
|
admin_site_name = "meta_prn_admin"
|
|
@@ -104,20 +103,19 @@ class OffscheduleDmReferralAction(ActionWithNotification):
|
|
|
104
103
|
singleton = True
|
|
105
104
|
|
|
106
105
|
def get_next_actions(self):
|
|
107
|
-
|
|
108
|
-
return next_actions
|
|
106
|
+
return [END_OF_STUDY_ACTION]
|
|
109
107
|
|
|
110
108
|
|
|
111
109
|
class EndOfStudyAction(ActionWithNotification):
|
|
112
110
|
name = END_OF_STUDY_ACTION
|
|
113
111
|
display_name = "Submit End of Study Report"
|
|
114
112
|
notification_display_name = "End of Study Report"
|
|
115
|
-
parent_action_names =
|
|
113
|
+
parent_action_names = (
|
|
116
114
|
OFFSCHEDULE_ACTION,
|
|
117
115
|
OFFSTUDY_MEDICATION_ACTION,
|
|
118
116
|
OFFSCHEDULE_PREGNANCY_ACTION,
|
|
119
117
|
OFFSCHEDULE_DM_REFERRAL_ACTION,
|
|
120
|
-
|
|
118
|
+
)
|
|
121
119
|
reference_model = "meta_prn.endofstudy"
|
|
122
120
|
show_link_to_changelist = True
|
|
123
121
|
admin_site_name = "meta_prn_admin"
|
|
@@ -129,7 +127,7 @@ class LossToFollowupAction(PregnancyActionItemMixin, ActionWithNotification):
|
|
|
129
127
|
name = LTFU_ACTION
|
|
130
128
|
display_name = "Submit Loss to Follow Up Report"
|
|
131
129
|
notification_display_name = " Loss to Follow Up Report"
|
|
132
|
-
parent_action_names =
|
|
130
|
+
parent_action_names = (MISSED_VISIT_ACTION,)
|
|
133
131
|
reference_model = "meta_prn.losstofollowup"
|
|
134
132
|
show_link_to_changelist = True
|
|
135
133
|
show_link_to_add = True
|
|
@@ -138,15 +136,14 @@ class LossToFollowupAction(PregnancyActionItemMixin, ActionWithNotification):
|
|
|
138
136
|
singleton = True
|
|
139
137
|
|
|
140
138
|
def get_next_actions(self):
|
|
141
|
-
|
|
142
|
-
return next_actions
|
|
139
|
+
return [self.get_next_offschedule_action(), OFFSTUDY_MEDICATION_ACTION]
|
|
143
140
|
|
|
144
141
|
|
|
145
142
|
class PregnancyNotificationAction(ActionWithNotification):
|
|
146
143
|
name = PREGNANCY_NOTIFICATION_ACTION
|
|
147
144
|
display_name = "Submit Pregnancy Notification"
|
|
148
145
|
notification_display_name = "Pregnancy Notification"
|
|
149
|
-
parent_action_names =
|
|
146
|
+
parent_action_names = (URINE_PREGNANCY_ACTION,)
|
|
150
147
|
reference_model = "meta_prn.pregnancynotification"
|
|
151
148
|
show_link_to_changelist = True
|
|
152
149
|
show_link_to_add = True
|
|
@@ -160,7 +157,7 @@ class DmReferralAction(ActionWithNotification):
|
|
|
160
157
|
name = DM_REFFERAL_ACTION
|
|
161
158
|
display_name = "Diabetes referral"
|
|
162
159
|
notification_display_name = "Diabetes referral"
|
|
163
|
-
parent_action_names =
|
|
160
|
+
parent_action_names = (OFFSTUDY_MEDICATION_ACTION,)
|
|
164
161
|
reference_model = "meta_prn.dmreferral"
|
|
165
162
|
show_link_to_changelist = True
|
|
166
163
|
show_link_to_add = True
|
|
@@ -169,20 +166,19 @@ class DmReferralAction(ActionWithNotification):
|
|
|
169
166
|
singleton = True
|
|
170
167
|
|
|
171
168
|
def get_next_actions(self):
|
|
172
|
-
|
|
173
|
-
return next_actions
|
|
169
|
+
return [DM_FOLLOWUP_ACTION]
|
|
174
170
|
|
|
175
171
|
|
|
176
172
|
class OffStudyMedicationAction(ActionWithNotification):
|
|
177
173
|
name = OFFSTUDY_MEDICATION_ACTION
|
|
178
174
|
display_name = "Withdrawal Study Medication"
|
|
179
175
|
notification_display_name = "Withdrawal Study Medication"
|
|
180
|
-
parent_action_names =
|
|
176
|
+
parent_action_names = (
|
|
181
177
|
OFFSCHEDULE_ACTION,
|
|
182
178
|
LTFU_ACTION,
|
|
183
179
|
SUBJECT_TRANSFER_ACTION,
|
|
184
180
|
DEATH_REPORT_ACTION,
|
|
185
|
-
|
|
181
|
+
)
|
|
186
182
|
reference_model = "meta_prn.offstudymedication"
|
|
187
183
|
show_link_to_changelist = True
|
|
188
184
|
show_link_to_add = True
|
|
@@ -202,7 +198,7 @@ class UnblindingRequestAction(ActionWithNotification):
|
|
|
202
198
|
name = UNBLINDING_REQUEST_ACTION
|
|
203
199
|
display_name = "Unblinding request"
|
|
204
200
|
notification_display_name = " Unblinding request"
|
|
205
|
-
parent_action_names =
|
|
201
|
+
parent_action_names = ()
|
|
206
202
|
reference_model = "edc_unblinding.unblindingrequest"
|
|
207
203
|
show_link_to_changelist = True
|
|
208
204
|
show_link_to_add = True
|
|
@@ -210,20 +206,18 @@ class UnblindingRequestAction(ActionWithNotification):
|
|
|
210
206
|
priority = HIGH_PRIORITY
|
|
211
207
|
|
|
212
208
|
def get_next_actions(self):
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
next_actions=next_actions,
|
|
209
|
+
return self.append_to_next_if_required(
|
|
210
|
+
next_actions=[],
|
|
216
211
|
action_name=UNBLINDING_REVIEW_ACTION,
|
|
217
212
|
required=self.reference_obj.approved == TBD,
|
|
218
213
|
)
|
|
219
|
-
return next_actions
|
|
220
214
|
|
|
221
215
|
|
|
222
216
|
class UnblindingReviewAction(PregnancyActionItemMixin, ActionWithNotification):
|
|
223
217
|
name = UNBLINDING_REVIEW_ACTION
|
|
224
218
|
display_name = "Unblinding review pending"
|
|
225
219
|
notification_display_name = " Unblinding review needed"
|
|
226
|
-
parent_action_names =
|
|
220
|
+
parent_action_names = (UNBLINDING_REQUEST_ACTION,)
|
|
227
221
|
reference_model = "edc_unblinding.unblindingreview"
|
|
228
222
|
show_link_to_changelist = True
|
|
229
223
|
admin_site_name = "edc_unblinding_admin"
|
|
@@ -235,13 +229,11 @@ class UnblindingReviewAction(PregnancyActionItemMixin, ActionWithNotification):
|
|
|
235
229
|
)
|
|
236
230
|
|
|
237
231
|
def get_next_actions(self):
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
next_actions=next_actions,
|
|
232
|
+
return self.append_to_next_if_required(
|
|
233
|
+
next_actions=[],
|
|
241
234
|
action_name=self.get_next_offschedule_action(),
|
|
242
235
|
required=self.reference_obj.approved == YES,
|
|
243
236
|
)
|
|
244
|
-
return next_actions
|
|
245
237
|
|
|
246
238
|
|
|
247
239
|
class SubjectTransferAction(PregnancyActionItemMixin, BaseSubjectTransferAction):
|
|
@@ -111,7 +111,7 @@ class EndOfStudyAdmin(
|
|
|
111
111
|
audit_fieldset_tuple,
|
|
112
112
|
)
|
|
113
113
|
|
|
114
|
-
radio_fields = {
|
|
114
|
+
radio_fields = { # noqa: RUF012
|
|
115
115
|
"offstudy_reason": admin.VERTICAL,
|
|
116
116
|
"clinical_withdrawal_reason": admin.VERTICAL,
|
|
117
117
|
"toxicity_withdrawal_reason": admin.VERTICAL,
|
|
@@ -133,7 +133,7 @@ class EndOfStudyAdmin(
|
|
|
133
133
|
"reason",
|
|
134
134
|
)
|
|
135
135
|
return custom_fields + tuple(
|
|
136
|
-
f for f in list_display if f not in custom_fields
|
|
136
|
+
f for f in list_display if f not in (*custom_fields, "__str__")
|
|
137
137
|
)
|
|
138
138
|
|
|
139
139
|
def get_list_filter(self, request) -> tuple[str, ...]:
|
meta_prn/choices.py
CHANGED
|
@@ -48,30 +48,30 @@ LOSS_CHOICES = (
|
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
PROTOCOL_VIOLATION = (
|
|
51
|
-
("failure_to_obtain_informed_consent", "Failure to obtain informed
|
|
51
|
+
("failure_to_obtain_informed_consent", "Failure to obtain informed consent"),
|
|
52
52
|
("enrollment_of_ineligible_patient", "Enrollment of ineligible patient"),
|
|
53
53
|
(
|
|
54
54
|
"screening_procedure not done",
|
|
55
|
-
"Screening procedure required by
|
|
55
|
+
"Screening procedure required by protocol not done",
|
|
56
56
|
),
|
|
57
57
|
(
|
|
58
58
|
"screening_or_on-study_procedure",
|
|
59
|
-
"Screening or on-study procedure/lab
|
|
59
|
+
"Screening or on-study procedure/lab work required not done",
|
|
60
60
|
),
|
|
61
61
|
(
|
|
62
62
|
"incorrect_research_treatment",
|
|
63
|
-
"Incorrect research treatment given to
|
|
63
|
+
"Incorrect research treatment given to patient",
|
|
64
64
|
),
|
|
65
65
|
(
|
|
66
66
|
"procedure_not_completed",
|
|
67
|
-
"On-study procedure required by protocol not
|
|
67
|
+
"On-study procedure required by protocol not completed",
|
|
68
68
|
),
|
|
69
69
|
("visit_non-compliance", "Visit non-compliance"),
|
|
70
70
|
("medication_stopped_early", "Medication stopped early"),
|
|
71
71
|
("medication_noncompliance", "Medication_noncompliance"),
|
|
72
72
|
(
|
|
73
73
|
"national_regulations_not_met",
|
|
74
|
-
"Standard WPD, ICH-GCP, local/national
|
|
74
|
+
"Standard WPD, ICH-GCP, local/national regulations not met",
|
|
75
75
|
),
|
|
76
76
|
(OTHER, "Other"),
|
|
77
77
|
(NOT_APPLICABLE, "Not applicable"),
|
|
@@ -286,16 +286,17 @@ class EndOfStudyFormValidator(
|
|
|
286
286
|
self.raise_validation_error(str(e), INVALID_ERROR)
|
|
287
287
|
|
|
288
288
|
def validate_offstudy_datetime_against_last_seen_date(self):
|
|
289
|
-
if
|
|
290
|
-
"
|
|
291
|
-
|
|
292
|
-
|
|
289
|
+
if (
|
|
290
|
+
self.cleaned_data.get("offstudy_datetime")
|
|
291
|
+
and self.cleaned_data.get("last_seen_date")
|
|
292
|
+
and (
|
|
293
293
|
self.cleaned_data.get("last_seen_date")
|
|
294
294
|
> self.cleaned_data.get("offstudy_datetime").date()
|
|
295
|
-
)
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
295
|
+
)
|
|
296
|
+
):
|
|
297
|
+
raise forms.ValidationError(
|
|
298
|
+
{"last_seen_date": "Invalid. May not be after termination date"}
|
|
299
|
+
)
|
|
299
300
|
|
|
300
301
|
def validate_transfer(self):
|
|
301
302
|
if (
|
|
@@ -24,17 +24,11 @@ class DmReferralForm(
|
|
|
24
24
|
):
|
|
25
25
|
form_validator_cls = DmReferralFormValidator
|
|
26
26
|
|
|
27
|
-
# subject_identifier = forms.CharField(
|
|
28
|
-
# label="Subject Identifier",
|
|
29
|
-
# required=False,
|
|
30
|
-
# widget=forms.TextInput(attrs={"readonly": "readonly"}),
|
|
31
|
-
# )
|
|
32
|
-
|
|
33
27
|
class Meta:
|
|
34
28
|
model = DmReferral
|
|
35
29
|
fields = "__all__"
|
|
36
|
-
help_text = {"subject_identifier": "(read-only)", "action_identifier": "(read-only)"}
|
|
37
|
-
widgets = {
|
|
30
|
+
help_text = {"subject_identifier": "(read-only)", "action_identifier": "(read-only)"} # noqa: RUF012
|
|
31
|
+
widgets = { # noqa: RUF012
|
|
38
32
|
"subject_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
|
|
39
33
|
"action_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
|
|
40
34
|
}
|
|
@@ -52,8 +52,8 @@ class OffStudyMedicationForm(
|
|
|
52
52
|
class Meta:
|
|
53
53
|
model = OffStudyMedication
|
|
54
54
|
fields = "__all__"
|
|
55
|
-
help_text = {"subject_identifier": "(read-only)", "action_identifier": "(read-only)"}
|
|
56
|
-
widgets = {
|
|
55
|
+
help_text = {"subject_identifier": "(read-only)", "action_identifier": "(read-only)"} # noqa: RUF012
|
|
56
|
+
widgets = { # noqa: RUF012
|
|
57
57
|
"subject_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
|
|
58
58
|
"action_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
|
|
59
59
|
}
|
|
@@ -47,23 +47,21 @@ class PregnancyNotificationFormValidator(PrnFormValidatorMixin, FormValidator):
|
|
|
47
47
|
self.instance.id is None
|
|
48
48
|
and self.cleaned_data.get("bhcg_confirmed") == YES
|
|
49
49
|
and self.cleaned_data.get("bhcg_date")
|
|
50
|
+
and not UrinePregnancy.objects.filter(
|
|
51
|
+
subject_visit__subject_identifier=self.subject_identifier,
|
|
52
|
+
notified=False,
|
|
53
|
+
assay_date=self.cleaned_data.get("bhcg_date"),
|
|
54
|
+
)
|
|
55
|
+
.exclude(subject_visit__visit_code=DAY1, subject_visit__visit_code_sequence=0)
|
|
56
|
+
.exists()
|
|
50
57
|
):
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
.exists()
|
|
59
|
-
):
|
|
60
|
-
self.raise_validation_error(
|
|
61
|
-
"Invalid. A positive Urine βhCG cannot be found. "
|
|
62
|
-
"Ensure the UPT has been entered, the date matches, and the "
|
|
63
|
-
"UPT is not a baseline UPT. "
|
|
64
|
-
f"See also PRN CRF {UrinePregnancy._meta.verbose_name}",
|
|
65
|
-
INVALID_ERROR,
|
|
66
|
-
)
|
|
58
|
+
self.raise_validation_error(
|
|
59
|
+
"Invalid. A positive Urine βhCG cannot be found. "
|
|
60
|
+
"Ensure the UPT has been entered, the date matches, and the "
|
|
61
|
+
"UPT is not a baseline UPT. "
|
|
62
|
+
f"See also PRN CRF {UrinePregnancy._meta.verbose_name}",
|
|
63
|
+
INVALID_ERROR,
|
|
64
|
+
)
|
|
67
65
|
|
|
68
66
|
def validate_edd(self):
|
|
69
67
|
if (
|
meta_prn/list_data.py
CHANGED
|
@@ -2,7 +2,7 @@ from edc_constants.constants import NOT_APPLICABLE, OTHER
|
|
|
2
2
|
|
|
3
3
|
list_data = {
|
|
4
4
|
"edc_protocol_incident.protocolviolations": [
|
|
5
|
-
("failure_to_obtain_informed_consent", "Failure to obtain informed
|
|
5
|
+
("failure_to_obtain_informed_consent", "Failure to obtain informed consent"),
|
|
6
6
|
("enrollment_of_ineligible_patient", "Enrollment of ineligible patient"),
|
|
7
7
|
(
|
|
8
8
|
"screening_procedure_not_done",
|
|
@@ -31,7 +31,7 @@ list_data = {
|
|
|
31
31
|
(NOT_APPLICABLE, "Not applicable"),
|
|
32
32
|
],
|
|
33
33
|
"edc_protocol_incident.protocolincidents": [
|
|
34
|
-
("failure_to_obtain_informed_consent", "Failure to obtain informed
|
|
34
|
+
("failure_to_obtain_informed_consent", "Failure to obtain informed consent"),
|
|
35
35
|
("enrollment_of_ineligible_patient", "Enrollment of ineligible patient"),
|
|
36
36
|
(
|
|
37
37
|
"screening_procedure_not_done",
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Generated by Django 5.2.6 on 2025-09-29 21:51
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
("meta_prn", "0067_alter_offschedule_managers_and_more"),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterField(
|
|
14
|
+
model_name="dmreferral",
|
|
15
|
+
name="referral_note",
|
|
16
|
+
field=models.TextField(
|
|
17
|
+
default="",
|
|
18
|
+
verbose_name="Please provide a brief history of the diabetes diagnosis that lead to this referral",
|
|
19
|
+
),
|
|
20
|
+
),
|
|
21
|
+
migrations.AlterField(
|
|
22
|
+
model_name="endofstudy",
|
|
23
|
+
name="clinical_withdrawal_investigator_decision",
|
|
24
|
+
field=models.TextField(
|
|
25
|
+
blank=True,
|
|
26
|
+
default="",
|
|
27
|
+
max_length=500,
|
|
28
|
+
verbose_name="If withdrawl was an 'investigator decision', please explain ...",
|
|
29
|
+
),
|
|
30
|
+
),
|
|
31
|
+
migrations.AlterField(
|
|
32
|
+
model_name="endofstudy",
|
|
33
|
+
name="clinical_withdrawal_reason_other",
|
|
34
|
+
field=models.TextField(
|
|
35
|
+
blank=True,
|
|
36
|
+
default="",
|
|
37
|
+
max_length=500,
|
|
38
|
+
verbose_name="If withdrawn for 'other' condition, please explain",
|
|
39
|
+
),
|
|
40
|
+
),
|
|
41
|
+
migrations.AlterField(
|
|
42
|
+
model_name="endofstudy",
|
|
43
|
+
name="comment",
|
|
44
|
+
field=models.TextField(
|
|
45
|
+
blank=True,
|
|
46
|
+
default="",
|
|
47
|
+
max_length=500,
|
|
48
|
+
verbose_name="Please provide further details if possible",
|
|
49
|
+
),
|
|
50
|
+
),
|
|
51
|
+
migrations.AlterField(
|
|
52
|
+
model_name="endofstudy",
|
|
53
|
+
name="other_offstudy_reason",
|
|
54
|
+
field=models.TextField(
|
|
55
|
+
blank=True,
|
|
56
|
+
default="",
|
|
57
|
+
max_length=500,
|
|
58
|
+
verbose_name="If OTHER, please specify",
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
migrations.AlterField(
|
|
62
|
+
model_name="endofstudy",
|
|
63
|
+
name="toxicity_withdrawal_reason_other",
|
|
64
|
+
field=models.TextField(
|
|
65
|
+
blank=True,
|
|
66
|
+
default="",
|
|
67
|
+
max_length=500,
|
|
68
|
+
verbose_name="If 'other toxicity', please specify ...",
|
|
69
|
+
),
|
|
70
|
+
),
|
|
71
|
+
migrations.AlterField(
|
|
72
|
+
model_name="historicaldmreferral",
|
|
73
|
+
name="referral_note",
|
|
74
|
+
field=models.TextField(
|
|
75
|
+
default="",
|
|
76
|
+
verbose_name="Please provide a brief history of the diabetes diagnosis that lead to this referral",
|
|
77
|
+
),
|
|
78
|
+
),
|
|
79
|
+
migrations.AlterField(
|
|
80
|
+
model_name="historicalendofstudy",
|
|
81
|
+
name="clinical_withdrawal_investigator_decision",
|
|
82
|
+
field=models.TextField(
|
|
83
|
+
blank=True,
|
|
84
|
+
default="",
|
|
85
|
+
max_length=500,
|
|
86
|
+
verbose_name="If withdrawl was an 'investigator decision', please explain ...",
|
|
87
|
+
),
|
|
88
|
+
),
|
|
89
|
+
migrations.AlterField(
|
|
90
|
+
model_name="historicalendofstudy",
|
|
91
|
+
name="clinical_withdrawal_reason_other",
|
|
92
|
+
field=models.TextField(
|
|
93
|
+
blank=True,
|
|
94
|
+
default="",
|
|
95
|
+
max_length=500,
|
|
96
|
+
verbose_name="If withdrawn for 'other' condition, please explain",
|
|
97
|
+
),
|
|
98
|
+
),
|
|
99
|
+
migrations.AlterField(
|
|
100
|
+
model_name="historicalendofstudy",
|
|
101
|
+
name="comment",
|
|
102
|
+
field=models.TextField(
|
|
103
|
+
blank=True,
|
|
104
|
+
default="",
|
|
105
|
+
max_length=500,
|
|
106
|
+
verbose_name="Please provide further details if possible",
|
|
107
|
+
),
|
|
108
|
+
),
|
|
109
|
+
migrations.AlterField(
|
|
110
|
+
model_name="historicalendofstudy",
|
|
111
|
+
name="other_offstudy_reason",
|
|
112
|
+
field=models.TextField(
|
|
113
|
+
blank=True,
|
|
114
|
+
default="",
|
|
115
|
+
max_length=500,
|
|
116
|
+
verbose_name="If OTHER, please specify",
|
|
117
|
+
),
|
|
118
|
+
),
|
|
119
|
+
migrations.AlterField(
|
|
120
|
+
model_name="historicalendofstudy",
|
|
121
|
+
name="toxicity_withdrawal_reason_other",
|
|
122
|
+
field=models.TextField(
|
|
123
|
+
blank=True,
|
|
124
|
+
default="",
|
|
125
|
+
max_length=500,
|
|
126
|
+
verbose_name="If 'other toxicity', please specify ...",
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
migrations.AlterField(
|
|
130
|
+
model_name="historicallosstofollowup",
|
|
131
|
+
name="comment",
|
|
132
|
+
field=models.TextField(
|
|
133
|
+
default="",
|
|
134
|
+
verbose_name="Please give details of the circumstances that have led to this decision.",
|
|
135
|
+
),
|
|
136
|
+
),
|
|
137
|
+
migrations.AlterField(
|
|
138
|
+
model_name="historicallosstofollowup",
|
|
139
|
+
name="home_visit_detail",
|
|
140
|
+
field=models.TextField(
|
|
141
|
+
default="",
|
|
142
|
+
verbose_name="If YES, provide any further details of the home visit",
|
|
143
|
+
),
|
|
144
|
+
),
|
|
145
|
+
migrations.AlterField(
|
|
146
|
+
model_name="historicaloffstudymedication",
|
|
147
|
+
name="comment",
|
|
148
|
+
field=models.TextField(
|
|
149
|
+
blank=True, default="", verbose_name="Any additional comments"
|
|
150
|
+
),
|
|
151
|
+
),
|
|
152
|
+
migrations.AlterField(
|
|
153
|
+
model_name="historicaloffstudymedication",
|
|
154
|
+
name="reason_other",
|
|
155
|
+
field=models.TextField(
|
|
156
|
+
blank=True, default="", verbose_name="If other, please specify ..."
|
|
157
|
+
),
|
|
158
|
+
),
|
|
159
|
+
migrations.AlterField(
|
|
160
|
+
model_name="historicalpregnancynotification",
|
|
161
|
+
name="unconfirmed_details",
|
|
162
|
+
field=models.TextField(
|
|
163
|
+
blank=True, default="", verbose_name="If no, please provide details"
|
|
164
|
+
),
|
|
165
|
+
),
|
|
166
|
+
migrations.AlterField(
|
|
167
|
+
model_name="historicalprotocolincident",
|
|
168
|
+
name="action_required_old",
|
|
169
|
+
field=models.CharField(
|
|
170
|
+
choices=[
|
|
171
|
+
("remain_on_study", "Participant to remain on trial"),
|
|
172
|
+
("to_be_withdrawn", "Participant to be withdrawn from trial"),
|
|
173
|
+
(
|
|
174
|
+
"remain_on_study_modified",
|
|
175
|
+
"Patient remains on study but data analysis will be modified",
|
|
176
|
+
),
|
|
177
|
+
],
|
|
178
|
+
default="",
|
|
179
|
+
max_length=45,
|
|
180
|
+
),
|
|
181
|
+
),
|
|
182
|
+
migrations.AlterField(
|
|
183
|
+
model_name="losstofollowup",
|
|
184
|
+
name="comment",
|
|
185
|
+
field=models.TextField(
|
|
186
|
+
default="",
|
|
187
|
+
verbose_name="Please give details of the circumstances that have led to this decision.",
|
|
188
|
+
),
|
|
189
|
+
),
|
|
190
|
+
migrations.AlterField(
|
|
191
|
+
model_name="losstofollowup",
|
|
192
|
+
name="home_visit_detail",
|
|
193
|
+
field=models.TextField(
|
|
194
|
+
default="",
|
|
195
|
+
verbose_name="If YES, provide any further details of the home visit",
|
|
196
|
+
),
|
|
197
|
+
),
|
|
198
|
+
migrations.AlterField(
|
|
199
|
+
model_name="offstudymedication",
|
|
200
|
+
name="comment",
|
|
201
|
+
field=models.TextField(
|
|
202
|
+
blank=True, default="", verbose_name="Any additional comments"
|
|
203
|
+
),
|
|
204
|
+
),
|
|
205
|
+
migrations.AlterField(
|
|
206
|
+
model_name="offstudymedication",
|
|
207
|
+
name="reason_other",
|
|
208
|
+
field=models.TextField(
|
|
209
|
+
blank=True, default="", verbose_name="If other, please specify ..."
|
|
210
|
+
),
|
|
211
|
+
),
|
|
212
|
+
migrations.AlterField(
|
|
213
|
+
model_name="pregnancynotification",
|
|
214
|
+
name="unconfirmed_details",
|
|
215
|
+
field=models.TextField(
|
|
216
|
+
blank=True, default="", verbose_name="If no, please provide details"
|
|
217
|
+
),
|
|
218
|
+
),
|
|
219
|
+
migrations.AlterField(
|
|
220
|
+
model_name="protocolincident",
|
|
221
|
+
name="action_required_old",
|
|
222
|
+
field=models.CharField(
|
|
223
|
+
choices=[
|
|
224
|
+
("remain_on_study", "Participant to remain on trial"),
|
|
225
|
+
("to_be_withdrawn", "Participant to be withdrawn from trial"),
|
|
226
|
+
(
|
|
227
|
+
"remain_on_study_modified",
|
|
228
|
+
"Patient remains on study but data analysis will be modified",
|
|
229
|
+
),
|
|
230
|
+
],
|
|
231
|
+
default="",
|
|
232
|
+
max_length=45,
|
|
233
|
+
),
|
|
234
|
+
),
|
|
235
|
+
]
|