meta-edc 1.1.14__py3-none-any.whl → 1.1.17__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.

Files changed (68) hide show
  1. meta_ae/templatetags/meta_ae_extras.py +2 -2
  2. meta_analytics/dataframes/get_last_imp_visits_df.py +2 -2
  3. meta_analytics/tables/enrolled/glucose.py +1 -2
  4. meta_consent/models/subject_consent_v1.py +0 -1
  5. meta_edc/admin.py +1 -1
  6. meta_edc/celery.py +2 -1
  7. meta_edc/celery_live.py +2 -1
  8. meta_edc/celery_uat.py +2 -1
  9. meta_edc/meta_version.py +2 -2
  10. meta_edc/navbars.py +7 -5
  11. meta_edc/settings/defaults.py +3 -3
  12. meta_edc/urls.py +1 -1
  13. meta_edc/utils.py +3 -1
  14. {meta_edc-1.1.14.dist-info → meta_edc-1.1.17.dist-info}/METADATA +10 -11
  15. {meta_edc-1.1.14.dist-info → meta_edc-1.1.17.dist-info}/RECORD +68 -67
  16. meta_pharmacy/admin/substitutions_admin.py +1 -1
  17. meta_pharmacy/forms/rx_form.py +0 -1
  18. meta_pharmacy/management/commands/update_initial_pharmacy_data.py +4 -3
  19. meta_pharmacy/models/rx_label.py +0 -1
  20. meta_prn/action_items.py +23 -31
  21. meta_prn/admin/end_of_study_admin.py +2 -2
  22. meta_prn/admin/offschedule_dm_referral_admin.py +0 -1
  23. meta_prn/admin/offschedule_postnatal_admin.py +0 -1
  24. meta_prn/admin/offschedule_pregnancy_admin.py +0 -1
  25. meta_prn/choices.py +6 -6
  26. meta_prn/form_validators/end_of_study.py +9 -8
  27. meta_prn/forms/dm_referral_form.py +2 -8
  28. meta_prn/forms/end_of_study_form.py +1 -1
  29. meta_prn/forms/off_study_medication_form.py +2 -2
  30. meta_prn/forms/pregnancy_notification_form.py +14 -16
  31. meta_prn/list_data.py +2 -2
  32. meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
  33. meta_prn/models/dm_referral.py +2 -2
  34. meta_prn/models/end_of_study.py +7 -7
  35. meta_prn/models/loss_to_followup.py +6 -6
  36. meta_prn/models/off_study_medication.py +3 -2
  37. meta_prn/models/pregnancy_notification.py +3 -3
  38. meta_prn/models/protocol_incident.py +4 -1
  39. meta_prn/models/signals.py +15 -13
  40. meta_prn/models/subject_transfer.py +0 -1
  41. meta_reports/admin/dbviews/imp_substitutions_admin.py +1 -1
  42. meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
  43. meta_reports/admin/endpoints_all_admin.py +0 -1
  44. meta_reports/admin/modeladmin_mixins.py +1 -1
  45. meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +0 -1
  46. meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +0 -1
  47. meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
  48. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
  49. meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
  50. meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
  51. meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
  52. meta_screening/admin/fieldsets.py +0 -1
  53. meta_screening/admin/screening_part_one_admin.py +0 -1
  54. meta_screening/forms/field_lists.py +0 -1
  55. meta_subject/admin/birth_outcome_admin.py +4 -2
  56. meta_subject/admin/fields.py +5 -5
  57. meta_subject/admin/fieldsets.py +5 -5
  58. meta_subject/admin/glucose_admin.py +2 -4
  59. meta_subject/admin/glucose_fbg_admin.py +5 -7
  60. meta_subject/admin/list_filters.py +3 -3
  61. meta_subject/admin/next_appointment_admin.py +0 -1
  62. meta_subject/form_validators/glucose_form_validator.py +7 -5
  63. meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
  64. meta_subject/forms/subject_requisition_form.py +1 -1
  65. meta_subject/models/blood_results/__init__.py +0 -1
  66. meta_subject/models/next_appointment.py +0 -1
  67. {meta_edc-1.1.14.dist-info → meta_edc-1.1.17.dist-info}/WHEEL +0 -0
  68. {meta_edc-1.1.14.dist-info → meta_edc-1.1.17.dist-info}/licenses/LICENSE +0 -0
@@ -20,7 +20,7 @@ class SubstitutionsAdmin(
20
20
 
21
21
  form = SubstitutionsForm
22
22
 
23
- autocomplete_fields = ["rx"]
23
+ autocomplete_fields = ("rx",)
24
24
 
25
25
  add_instructions = "This form is used to record any substitions made for IMP refills"
26
26
 
@@ -4,7 +4,6 @@ from ..models import Rx
4
4
 
5
5
 
6
6
  class RxForm(forms.ModelForm):
7
-
8
7
  subject_identifier = forms.CharField(
9
8
  label="Subject Identifier",
10
9
  required=False,
@@ -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
- print("Done")
11
+ sys.stdout.write("Done\n")
@@ -13,7 +13,6 @@ class LabelIdentifier(SimpleUniqueIdentifier):
13
13
 
14
14
 
15
15
  class RxLabel(BaseUuidModel):
16
-
17
16
  identifier_cls = LabelIdentifier
18
17
 
19
18
  rx = models.ForeignKey(Rx, on_delete=models.PROTECT)
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
- next_actions = [END_OF_STUDY_ACTION]
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
- next_actions = [END_OF_STUDY_ACTION]
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 = [MISSED_VISIT_ACTION]
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
- next_actions = [self.get_next_offschedule_action(), OFFSTUDY_MEDICATION_ACTION]
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 = [URINE_PREGNANCY_ACTION]
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 = [OFFSTUDY_MEDICATION_ACTION]
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
- next_actions = [DM_FOLLOWUP_ACTION]
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
- next_actions = []
214
- next_actions = self.append_to_next_if_required(
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 = [UNBLINDING_REQUEST_ACTION]
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
- next_actions = []
239
- next_actions = self.append_to_next_if_required(
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 + ("__str__",)
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, ...]:
@@ -1,4 +1,3 @@
1
-
2
1
  from django.contrib import admin
3
2
  from django.template.loader import render_to_string
4
3
  from django.utils.safestring import mark_safe
@@ -1,4 +1,3 @@
1
-
2
1
  from django.contrib import admin
3
2
  from django.template.loader import render_to_string
4
3
  from django.utils.safestring import mark_safe
@@ -1,4 +1,3 @@
1
-
2
1
  from django.contrib import admin
3
2
  from django.template.loader import render_to_string
4
3
  from django.utils.safestring import mark_safe
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 " "consent"),
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 " "protocol not done",
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 " "work required not done",
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 " "patient",
63
+ "Incorrect research treatment given to patient",
64
64
  ),
65
65
  (
66
66
  "procedure_not_completed",
67
- "On-study procedure required by protocol not " "completed",
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 " "regulations not met",
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 self.cleaned_data.get("offstudy_datetime") and self.cleaned_data.get(
290
- "last_seen_date"
291
- ):
292
- if (
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
- raise forms.ValidationError(
297
- {"last_seen_date": "Invalid. May not be after termination date"}
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
  }
@@ -28,4 +28,4 @@ class EndOfStudyForm(
28
28
  class Meta:
29
29
  model = EndOfStudy
30
30
  fields = "__all__"
31
- labels = {"offstudy_datetime": "Date patient terminated from study:"}
31
+ labels = {"offstudy_datetime": "Date patient terminated from study:"} # noqa: RUF012
@@ -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
- if (
52
- not UrinePregnancy.objects.filter(
53
- subject_visit__subject_identifier=self.subject_identifier,
54
- notified=False,
55
- assay_date=self.cleaned_data.get("bhcg_date"),
56
- )
57
- .exclude(subject_visit__visit_code=DAY1, subject_visit__visit_code_sequence=0)
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 " "consent"),
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 " "consent"),
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
+ ]