meta-edc 0.3.23__py3-none-any.whl → 0.3.24__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.
Files changed (53) hide show
  1. meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +156 -124
  2. meta_edc/__init__.py +3 -0
  3. meta_edc/celery/__init__.py +2 -0
  4. {meta_edc-0.3.23.dist-info → meta_edc-0.3.24.dist-info}/METADATA +2 -2
  5. {meta_edc-0.3.23.dist-info → meta_edc-0.3.24.dist-info}/RECORD +46 -34
  6. meta_prn/tests/tests/test_dm_referral.py +2 -2
  7. meta_reports/__init__.py +1 -1
  8. meta_reports/admin/__init__.py +1 -0
  9. meta_reports/admin/endpoints_admin.py +17 -7
  10. meta_reports/admin/list_filters.py +30 -0
  11. meta_reports/admin/unmanaged/__init__.py +1 -0
  12. meta_reports/admin/unmanaged/glucose_summary_admin.py +76 -0
  13. meta_reports/migrations/0024_glucosesummary.py +38 -0
  14. meta_reports/migrations/0025_auto_20240822_0115.py +87 -0
  15. meta_reports/migrations/0026_auto_20240822_0120.py +54 -0
  16. meta_reports/migrations/0027_auto_20240822_0140.py +54 -0
  17. meta_reports/migrations/0028_alter_glucosesummary_options.py +22 -0
  18. meta_reports/migrations/0029_auto_20240822_0149.py +54 -0
  19. meta_reports/models/__init__.py +1 -0
  20. meta_reports/models/dbviews/__init__.py +1 -0
  21. meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
  22. meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +31 -0
  23. meta_reports/models/dbviews/glucose_summary/view_definition.py +58 -0
  24. meta_reports/models/endpoints.py +3 -0
  25. meta_reports/tasks.py +1 -1
  26. meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -0
  27. meta_subject/admin/__init__.py +1 -1
  28. meta_subject/admin/diabetes/__init__.py +1 -1
  29. meta_subject/admin/diabetes/dm_endpoint_admin.py +35 -0
  30. meta_subject/form_validators/__init__.py +1 -1
  31. meta_subject/form_validators/dm_endpoint_form_validator.py +35 -0
  32. meta_subject/forms/__init__.py +1 -1
  33. meta_subject/forms/diabetes/__init__.py +1 -2
  34. meta_subject/forms/diabetes/dm_endpoint_form.py +13 -0
  35. meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +37 -0
  36. meta_subject/migrations/0210_remove_dmdxresult_dm_diagnosis_and_more.py +123 -0
  37. meta_subject/migrations/0211_dmendpoint_endpoint_reached_and_more.py +45 -0
  38. meta_subject/models/__init__.py +1 -1
  39. meta_subject/models/diabetes/__init__.py +1 -2
  40. meta_subject/models/diabetes/dm_endpoint.py +61 -0
  41. meta_subject/models/glucose.py +4 -1
  42. meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -1
  43. meta_subject/admin/diabetes/dm_diagnosis_admin.py +0 -89
  44. meta_subject/form_validators/dm_diagnosis_form_validator.py +0 -38
  45. meta_subject/form_validators/dm_dx_result_form_validator.py +0 -7
  46. meta_subject/forms/diabetes/dm_diagnosis_form.py +0 -13
  47. meta_subject/forms/diabetes/dm_dx_result_form.py +0 -11
  48. meta_subject/models/diabetes/dm_diagnosis.py +0 -50
  49. meta_subject/models/diabetes/dm_dx_result.py +0 -70
  50. {meta_edc-0.3.23.dist-info → meta_edc-0.3.24.dist-info}/AUTHORS +0 -0
  51. {meta_edc-0.3.23.dist-info → meta_edc-0.3.24.dist-info}/LICENSE +0 -0
  52. {meta_edc-0.3.23.dist-info → meta_edc-0.3.24.dist-info}/WHEEL +0 -0
  53. {meta_edc-0.3.23.dist-info → meta_edc-0.3.24.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,8 @@ from edc_pdutils.dataframes import (
10
10
  )
11
11
  from edc_utils import get_utcnow
12
12
 
13
+ from meta_reports.models import Endpoints
14
+
13
15
  from .constants import (
14
16
  CASE_EOS,
15
17
  CASE_FBG_ONLY,
@@ -31,68 +33,57 @@ class GlucoseEndpointsByDate:
31
33
  fbg_threshhold = 7.0
32
34
  ogtt_threshhold = 11.1
33
35
  endpoint_cls = EndpointByDate
36
+ keep_cols = [
37
+ "subject_visit_id",
38
+ "fasting",
39
+ "fasting_hrs",
40
+ "fbg_value",
41
+ "fbg_units",
42
+ "fbg_datetime",
43
+ "ogtt_value",
44
+ "ogtt_units",
45
+ "ogtt_datetime",
46
+ "source",
47
+ "report_datetime",
48
+ ]
49
+
50
+ visit_cols = [
51
+ "subject_visit_id",
52
+ "subject_identifier",
53
+ "visit_code",
54
+ "visit_datetime",
55
+ "site",
56
+ "baseline_datetime",
57
+ ]
34
58
 
35
59
  def __init__(
36
60
  self, subject_identifiers: list[str] | None = None, case_list: list[int] | None = None
37
61
  ):
62
+ self.subject_identifiers = subject_identifiers or []
63
+ if len(self.subject_identifiers) == Endpoints.objects.all().count():
64
+ self.subject_identifiers = []
38
65
  self.case_list = case_list or [CASE_OGTT, 2, 3, CASE_EOS]
39
66
  self.endpoint_cases = {k: v for k, v in endpoint_cases.items() if k in self.case_list}
40
- self.endpoint_only_df = None
41
- self.fbg_only_df = get_crf(
42
- model="meta_subject.glucosefbg", subject_identifiers=subject_identifiers
43
- )
44
- self.fbg_only_df["source"] = "meta_subject.glucosefbg"
45
- self.fbg_only_df.rename(
46
- columns={"fbg_fasting": "fasting", "subject_visit": "subject_visit_id"},
47
- inplace=True,
48
- )
49
- self.fbg_only_df.loc[(self.fbg_only_df["fasting"] == "fasting"), "fasting"] = YES
50
- self.fbg_only_df.loc[(self.fbg_only_df["fasting"] == "non_fasting"), "fasting"] = NO
67
+ self.endpoint_only_df = pd.DataFrame()
68
+
69
+ self.fbg_only_df = self.get_fbg_only_df()
51
70
 
52
71
  self.df = get_crf(
53
- model="meta_subject.glucose", subject_identifiers=subject_identifiers
72
+ model="meta_subject.glucose",
73
+ subject_identifiers=self.subject_identifiers,
54
74
  )
55
75
  self.df["source"] = "meta_subject.glucose"
56
76
 
57
- for dftmp in [self.fbg_only_df, self.df]:
58
- dftmp.loc[(dftmp["fasting"] == NO), "fasting_duration_delta"] = pd.NaT
59
- if dftmp.empty:
60
- dftmp["fasting_hrs"] = np.nan
61
- else:
62
- dftmp["fasting_hrs"] = (
63
- dftmp["fasting_duration_delta"].dt.total_seconds() / 3600
64
- )
77
+ self.calculate_fasting_hrs()
65
78
 
66
- keep_cols = [
67
- "subject_visit_id",
68
- "fasting",
69
- "fasting_hrs",
70
- "fbg_value",
71
- "fbg_units",
72
- "fbg_datetime",
73
- "ogtt_value",
74
- "ogtt_units",
75
- "ogtt_datetime",
76
- "source",
77
- "report_datetime",
78
- ]
79
79
  self.fbg_only_df = self.fbg_only_df[
80
- [col for col in keep_cols if not col.startswith("ogtt")]
80
+ [col for col in self.keep_cols if not col.startswith("ogtt")]
81
81
  ]
82
- self.df = self.df[keep_cols]
82
+ self.df = self.df[self.keep_cols]
83
83
  self.df.reset_index(drop=True)
84
84
  self.df = self.df.copy()
85
85
 
86
- # normalize dates
87
- for col in ["fbg_datetime", "report_datetime"]:
88
- if not self.fbg_only_df[col].empty:
89
- self.fbg_only_df[col] = self.fbg_only_df[col].dt.floor("d")
90
- if not self.df[col].empty:
91
- self.df[col] = self.df[col].dt.floor("d")
92
- if not self.df["ogtt_datetime"].empty:
93
- self.df["ogtt_datetime"] = self.df["ogtt_datetime"].dt.floor("d")
94
- else:
95
- self.df["ogtt_datetime"] = pd.NaT
86
+ self.normalize_dates()
96
87
 
97
88
  # same shape but fbg_only_df ogtt columns are null
98
89
  self.df = pd.merge(
@@ -104,7 +95,6 @@ class GlucoseEndpointsByDate:
104
95
  suffixes=("", "2"),
105
96
  )
106
97
  self.df.reset_index(drop=True, inplace=True)
107
-
108
98
  self.df_merged = self.df.copy()
109
99
 
110
100
  # right_only
@@ -121,16 +111,8 @@ class GlucoseEndpointsByDate:
121
111
  df_subject_visit = get_subject_visit(
122
112
  "meta_subject.subjectvisit", subject_identifiers=subject_identifiers
123
113
  )
124
- visit_cols = [
125
- "subject_visit_id",
126
- "subject_identifier",
127
- "visit_code",
128
- "visit_datetime",
129
- "site",
130
- "baseline_datetime",
131
- ]
132
114
  self.df = pd.merge(
133
- df_subject_visit[visit_cols], self.df, on="subject_visit_id", how="left"
115
+ df_subject_visit[self.visit_cols], self.df, on="subject_visit_id", how="left"
134
116
  )
135
117
  self.df = self.df.sort_values(by=["subject_identifier", "fbg_datetime"])
136
118
  self.df.reset_index(drop=True, inplace=True)
@@ -147,9 +129,10 @@ class GlucoseEndpointsByDate:
147
129
  self.df = self.df.sort_values(by=["subject_identifier", "fbg_datetime"])
148
130
  self.df.reset_index(drop=True, inplace=True)
149
131
 
150
- self.df["visit_days"] = (
151
- self.df["baseline_datetime"].rsub(self.df["visit_datetime"]).dt.days
152
- )
132
+ if not self.df.loc[self.df["visit_datetime"].notna()].empty:
133
+ self.df["visit_days"] = (
134
+ self.df["baseline_datetime"].rsub(self.df["visit_datetime"]).dt.days
135
+ )
153
136
  if not self.df.loc[self.df["fbg_datetime"].notna()].empty:
154
137
  self.df["fgb_days"] = (
155
138
  self.df.loc[self.df["fbg_datetime"].notna()]["baseline_datetime"]
@@ -167,12 +150,18 @@ class GlucoseEndpointsByDate:
167
150
  else:
168
151
  self.df["ogtt_days"] = np.nan
169
152
 
170
- self.df["visit_days"] = pd.to_numeric(self.df["visit_days"], downcast="integer")
171
- self.df["fgb_days"] = pd.to_numeric(self.df["fgb_days"], downcast="integer")
172
- self.df["ogtt_days"] = pd.to_numeric(self.df["ogtt_days"], downcast="integer")
153
+ if self.df.empty:
154
+ self.df["visit_days"] = np.nan
155
+ self.df["fgb_days"] = np.nan
156
+ self.df["ogtt_days"] = np.nan
157
+ self.df["test"] = np.nan
158
+ else:
159
+ self.df["visit_days"] = pd.to_numeric(self.df["visit_days"], downcast="integer")
160
+ self.df["fgb_days"] = pd.to_numeric(self.df["fgb_days"], downcast="integer")
161
+ self.df["ogtt_days"] = pd.to_numeric(self.df["ogtt_days"], downcast="integer")
173
162
 
174
- # label rows by type of glu tests (ones with value)
175
- self.df["test"] = self.df.apply(get_test_string, axis=1)
163
+ # label rows by type of glu tests (ones with value)
164
+ self.df["test"] = self.df.apply(get_test_string, axis=1)
176
165
 
177
166
  self.df = self.df.sort_values(by=["subject_identifier", "visit_code"])
178
167
  self.df = self.df.reset_index(drop=True)
@@ -232,6 +221,41 @@ class GlucoseEndpointsByDate:
232
221
  ].index
233
222
  )
234
223
 
224
+ def get_fbg_only_df(self) -> pd.DataFrame:
225
+ fbg_only_df = get_crf(
226
+ model="meta_subject.glucosefbg", subject_identifiers=self.subject_identifiers
227
+ )
228
+ fbg_only_df["source"] = "meta_subject.glucosefbg"
229
+ fbg_only_df.rename(
230
+ columns={"fbg_fasting": "fasting", "subject_visit": "subject_visit_id"},
231
+ inplace=True,
232
+ )
233
+ fbg_only_df.loc[(fbg_only_df["fasting"] == "fasting"), "fasting"] = YES
234
+ fbg_only_df.loc[(fbg_only_df["fasting"] == "non_fasting"), "fasting"] = NO
235
+ return fbg_only_df
236
+
237
+ def normalize_dates(self):
238
+ """Normalize dates"""
239
+ for col in ["fbg_datetime", "report_datetime"]:
240
+ if not self.fbg_only_df[col].empty:
241
+ self.fbg_only_df[col] = self.fbg_only_df[col].dt.floor("d")
242
+ if not self.df[col].empty:
243
+ self.df[col] = self.df[col].dt.floor("d")
244
+ if not self.df["ogtt_datetime"].empty:
245
+ self.df["ogtt_datetime"] = self.df["ogtt_datetime"].dt.floor("d")
246
+ else:
247
+ self.df["ogtt_datetime"] = pd.NaT
248
+
249
+ def calculate_fasting_hrs(self):
250
+ for dftmp in [self.fbg_only_df, self.df]:
251
+ dftmp.loc[(dftmp["fasting"] == NO), "fasting_duration_delta"] = pd.NaT
252
+ if dftmp.empty:
253
+ dftmp["fasting_hrs"] = np.nan
254
+ else:
255
+ dftmp["fasting_hrs"] = (
256
+ dftmp["fasting_duration_delta"].dt.total_seconds() / 3600
257
+ )
258
+
235
259
  def append_subject_to_endpoint_df(self, subject_df: pd.DataFrame) -> None:
236
260
  if self.endpoint_df.empty:
237
261
  self.endpoint_df = subject_df.copy()
@@ -303,40 +327,43 @@ class GlucoseEndpointsByDate:
303
327
 
304
328
  def merge_with_final_endpoints(self):
305
329
  # merge endpoint_df with original df
306
- self.endpoint_df["test"] = self.endpoint_df.apply(get_test_string, axis=1)
307
- self.endpoint_df.loc[self.endpoint_df["endpoint"] == 1, "days_to_endpoint"] = (
308
- self.endpoint_df["fbg_datetime"] - self.endpoint_df["baseline_datetime"]
309
- ).dt.days
310
-
311
- # print(f"Before dedup = {len(self.endpoint_df)}")
312
-
313
- df1 = self.endpoint_df.copy()
314
- df1 = df1[(df1["endpoint_type"] == CASE_EOS) & (df1["endpoint"] == 1)]
315
- df1 = df1.sort_values(["subject_identifier", "fbg_datetime"])
316
- df1 = df1.reset_index(drop=True)
317
- df1 = df1.set_index(["subject_identifier"])
318
- df1 = df1[~df1.index.duplicated(keep="last")]
319
- df1 = df1.reset_index(drop=False)
320
-
321
- df2 = self.endpoint_df.copy()
322
- df2 = df2[(df2["endpoint_type"] != CASE_EOS) & (df2["endpoint"] == 1)]
323
- df2 = df2.sort_values(["subject_identifier", "fbg_datetime"])
324
- df2 = df2.reset_index(drop=True)
325
- df2 = df2.set_index(["subject_identifier"])
326
- df2 = df2[~df2.index.duplicated(keep="first")]
327
- df2 = df2.reset_index(drop=False)
328
-
329
- self.endpoint_only_df = pd.concat([df1, df2])
330
- self.endpoint_only_df = self.endpoint_only_df.reset_index(drop=True)
331
- # print(f"After dedup = {len(self.endpoint_df)}")
332
-
333
- self.df = pd.merge(
334
- self.df,
335
- self.endpoint_only_df[["subject_identifier", "visit_code", "endpoint"]],
336
- on=["subject_identifier", "visit_code"],
337
- how="left",
338
- suffixes=("", "_y"),
339
- )
330
+ if self.endpoint_df.empty:
331
+ self.df = self.df[~(self.df["subject_identifier"].isin(self.subject_identifiers))]
332
+ else:
333
+ self.endpoint_df["test"] = self.endpoint_df.apply(get_test_string, axis=1)
334
+ self.endpoint_df.loc[self.endpoint_df["endpoint"] == 1, "days_to_endpoint"] = (
335
+ self.endpoint_df["fbg_datetime"] - self.endpoint_df["baseline_datetime"]
336
+ ).dt.days
337
+
338
+ # print(f"Before dedup = {len(self.endpoint_df)}")
339
+
340
+ df1 = self.endpoint_df.copy()
341
+ df1 = df1[(df1["endpoint_type"] == CASE_EOS) & (df1["endpoint"] == 1)]
342
+ df1 = df1.sort_values(["subject_identifier", "fbg_datetime"])
343
+ df1 = df1.reset_index(drop=True)
344
+ df1 = df1.set_index(["subject_identifier"])
345
+ df1 = df1[~df1.index.duplicated(keep="last")]
346
+ df1 = df1.reset_index(drop=False)
347
+
348
+ df2 = self.endpoint_df.copy()
349
+ df2 = df2[(df2["endpoint_type"] != CASE_EOS) & (df2["endpoint"] == 1)]
350
+ df2 = df2.sort_values(["subject_identifier", "fbg_datetime"])
351
+ df2 = df2.reset_index(drop=True)
352
+ df2 = df2.set_index(["subject_identifier"])
353
+ df2 = df2[~df2.index.duplicated(keep="first")]
354
+ df2 = df2.reset_index(drop=False)
355
+
356
+ self.endpoint_only_df = pd.concat([df1, df2])
357
+ self.endpoint_only_df = self.endpoint_only_df.reset_index(drop=True)
358
+ # print(f"After dedup = {len(self.endpoint_df)}")
359
+
360
+ self.df = pd.merge(
361
+ self.df,
362
+ self.endpoint_only_df[["subject_identifier", "visit_code", "endpoint"]],
363
+ on=["subject_identifier", "visit_code"],
364
+ how="left",
365
+ suffixes=("", "_y"),
366
+ )
340
367
  self.df = self.df.sort_values(by=["subject_identifier", "fbg_datetime"])
341
368
  self.df = self.df.reset_index(drop=True)
342
369
 
@@ -394,30 +421,35 @@ class GlucoseEndpointsByDate:
394
421
  model_cls.objects.filter(subject_identifier__in=subject_identifiers).delete()
395
422
  else:
396
423
  model_cls.objects.all().delete()
397
- data = [
398
- model_cls(
399
- subject_identifier=row["subject_identifier"],
400
- site_id=row["site"],
401
- baseline_datetime=(
402
- None if pd.isna(row["baseline_datetime"]) else row["baseline_datetime"]
403
- ),
404
- visit_code=None if pd.isna(row["visit_code"]) else row["visit_code"],
405
- fbg_value=(None if pd.isna(row["fbg_value"]) else row["fbg_value"]),
406
- ogtt_value=None if pd.isna(row["ogtt_value"]) else row["ogtt_value"],
407
- fbg_datetime=(None if pd.isna(row["fbg_datetime"]) else row["fbg_datetime"]),
408
- fasting=(None if pd.isna(row["fasting"]) else row["fasting"]),
409
- endpoint_label=(
410
- None if pd.isna(row["endpoint_label"]) else row["endpoint_label"]
411
- ),
412
- offstudy_datetime=(
413
- None if pd.isna(row["offstudy_datetime"]) else row["offstudy_datetime"]
414
- ),
415
- offstudy_reason=(
416
- None if pd.isna(row["offstudy_reason"]) else row["offstudy_reason"]
417
- ),
418
- report_model=model,
419
- created=now,
420
- )
421
- for _, row in df.iterrows()
422
- ]
423
- return len(model_cls.objects.bulk_create(data))
424
+ created = 0
425
+ if not df.empty:
426
+ data = [
427
+ model_cls(
428
+ subject_identifier=row["subject_identifier"],
429
+ site_id=row["site"],
430
+ baseline_datetime=(
431
+ None if pd.isna(row["baseline_datetime"]) else row["baseline_datetime"]
432
+ ),
433
+ visit_code=None if pd.isna(row["visit_code"]) else row["visit_code"],
434
+ fbg_value=(None if pd.isna(row["fbg_value"]) else row["fbg_value"]),
435
+ ogtt_value=None if pd.isna(row["ogtt_value"]) else row["ogtt_value"],
436
+ fbg_datetime=(
437
+ None if pd.isna(row["fbg_datetime"]) else row["fbg_datetime"]
438
+ ),
439
+ fasting=(None if pd.isna(row["fasting"]) else row["fasting"]),
440
+ endpoint_label=(
441
+ None if pd.isna(row["endpoint_label"]) else row["endpoint_label"]
442
+ ),
443
+ offstudy_datetime=(
444
+ None if pd.isna(row["offstudy_datetime"]) else row["offstudy_datetime"]
445
+ ),
446
+ offstudy_reason=(
447
+ None if pd.isna(row["offstudy_reason"]) else row["offstudy_reason"]
448
+ ),
449
+ report_model=model,
450
+ created=now,
451
+ )
452
+ for _, row in df.iterrows()
453
+ ]
454
+ created = len(model_cls.objects.bulk_create(data))
455
+ return created
meta_edc/__init__.py CHANGED
@@ -2,6 +2,9 @@ import os
2
2
  import sys
3
3
  from importlib.metadata import PackageNotFoundError, version
4
4
 
5
+ # celery_app loads settings before Django, so ensure
6
+ # it will load the correct settings module coming from
7
+ # systemd service
5
8
  if "meta_edc.celery.live:app" in sys.argv:
6
9
  from .celery.live import app as celery_app
7
10
  elif "meta_edc.celery.uat:app" in sys.argv:
@@ -0,0 +1,2 @@
1
+ # do not import modules
2
+ # see conditional import at root __init__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meta-edc
3
- Version: 0.3.23
3
+ Version: 0.3.24
4
4
  Summary: META Trial EDC (http://www.isrctn.com/ISRCTN76157257)
5
5
  Home-page: https://github.com/meta-trial/meta-edc
6
6
  Author: Erik van Widenfelt
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE
21
21
  License-File: AUTHORS
22
- Requires-Dist: edc ==0.6.1
22
+ Requires-Dist: edc ==0.6.2
23
23
  Requires-Dist: edc-microscopy
24
24
  Requires-Dist: beautifulsoup4
25
25
  Requires-Dist: edc-analytics
@@ -91,7 +91,7 @@ meta_analytics/dataframes/enrolled/get_glucose_df.py,sha256=L4gzszNjYzu-QmYu4gs1
91
91
  meta_analytics/dataframes/glucose_endpoints/__init__.py,sha256=a9RlAnFM0Z4AKw-WztBvnGMo3tLLe1dx3292A2n_CnA,107
92
92
  meta_analytics/dataframes/glucose_endpoints/constants.py,sha256=blebGukIVZk3ZRtnJnbKrLSInrX77wkLJMuzdJx4CEw,667
93
93
  meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py,sha256=MOIcrrdH26q2zrmQDXE-lxHg9klNuKjRjDAc4Elc9ZE,6506
94
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=e547PXMfjC8DJCCHAdiwDcjlrjUIAQGymNIUuPO2XcU,16961
94
+ meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=R0zcg-cwNJXJ3sxiHsWSucEUA64J9hzZM8J_zGC4moc,18170
95
95
  meta_analytics/dataframes/glucose_endpoints/utils.py,sha256=3IyzakJ-340Mie7ox5h35s4VeY4SNppdCAmoxrFRt2Y,2046
96
96
  meta_analytics/dataframes/screening/__init__.py,sha256=onGpmB4474gu_JcyRGdRy09YQyP2Np-mX-rYZTFdJoA,114
97
97
  meta_analytics/dataframes/screening/get_glucose_tested_only_df.py,sha256=0oMJIsIJRjurfpPONuJ4Aoab1UJikezGe3lQNWRoOo4,660
@@ -211,7 +211,7 @@ meta_data_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
211
211
  meta_data_manager/apps.py,sha256=xpcMy8CxRMgyWiKmD2JhbfKgPKTgs42wD4AdNwZJANI,233
212
212
  meta_data_manager/data_manager.py,sha256=T9SWFI0iTSDjff-WX-exBNa3I2d985o-JjyCkrHL1FM,167
213
213
  meta_data_manager/handlers.py,sha256=UMeO8WYs6aVVPtLmnyatT42N9zc7NZI9V1Y6Up08WDA,952
214
- meta_edc/__init__.py,sha256=H73G-wST8hMeV830NUVt8uxU66EOw-htCkSS2RjgD9M,474
214
+ meta_edc/__init__.py,sha256=eJj81bDocr5aG01KG8Ictg5oEnozqtpn6wFZ0Befwrw,600
215
215
  meta_edc/admin.py,sha256=pbISDsySzbQxK8VFvFncxDXy_ackWj6c7z2H0PYCQGA,845
216
216
  meta_edc/apps.py,sha256=vg5C0EBve4bOFwwPee-boI4qA5geShGcD-DHkpGkWTU,450
217
217
  meta_edc/asgi.py,sha256=jDODkEq-jgxRwl2BL1cDAjOAcoNtvlTIC7MlzBr7FS8,175
@@ -224,7 +224,7 @@ meta_edc/utils.py,sha256=FdGGHT0zCUM9FLovLanH_ultcxbVitCvvPAwq0U3yYc,342
224
224
  meta_edc/wsgi.py,sha256=Ns9vu_jcEqpOLM5tb-hwVUh3ciInocrG3kUPAxh7nJg,165
225
225
  meta_edc/wsgi_live.py,sha256=EprgdsDiEvNN033w6lUQHaS8Y3ntpPrWHDTOgZcjaCQ,164
226
226
  meta_edc/wsgi_uat.py,sha256=xZj3TGy1XEi-3OTYvyZzdhgWQu52sYZw-Gt3ZSMKQc4,163
227
- meta_edc/celery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
227
+ meta_edc/celery/__init__.py,sha256=yeeXVNISo_WG2xDNgPeSg10KyLBQ4btuGw4sSEznrTE,66
228
228
  meta_edc/celery/debug.py,sha256=zQsPL504VBSdqkSNYlBxldeSKflOj2O5THfvJwVd6bg,432
229
229
  meta_edc/celery/live.py,sha256=tNk-sb3B5rZb8Yh0lkeSwXx7QHJn-1SWKT7gJuYtvVE,431
230
230
  meta_edc/celery/uat.py,sha256=m2QXih9y2ePHF5ve84KQ_LunCpjxHNBW4IgAFw4ze6E,430
@@ -409,7 +409,7 @@ meta_prn/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
409
409
  meta_prn/tests/urls.py,sha256=JtaYMEhXBim3a2uPLNvyoulbEutvtbTlmH-ez9Ws8u8,270
410
410
  meta_prn/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
411
411
  meta_prn/tests/tests/test_actions.py,sha256=KjMznJALY4zB3-4WQHubum_B6sE6pyf0_pg9i57Ri9w,3811
412
- meta_prn/tests/tests/test_dm_referral.py,sha256=N0Mn788xzg-TDd5DENvmuocM9-7WCv5f1N4fqmeTOHE,8426
412
+ meta_prn/tests/tests/test_dm_referral.py,sha256=wHLVXUeyu0pGaHHnv5cTpD6FnnhGYSoFEuwxIv6mMcI,8424
413
413
  meta_prn/tests/tests/test_manager_order.py,sha256=KYda9YaWJNf761_YiMcXkxlllt2Al27MYgaWO859DWI,548
414
414
  meta_prn/tests/tests/test_pregnancy_notification.py,sha256=anAzrfIAEMles-IH-PGkVBCS0vyUzxBOJ2EQtQBbnOI,3982
415
415
  meta_rando/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -425,17 +425,19 @@ meta_rando/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
425
425
  meta_rando/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
426
426
  meta_rando/tests/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
427
427
  meta_rando/tests/tests/test_randomizers.py,sha256=jyL1cthsWLsPbLgq9jN6ROsNuUEUJaHyuX72G-MDLXM,2278
428
- meta_reports/__init__.py,sha256=aA-DDI8k9DYiH97slDG1A3pHankNAgLZiwvCmptj4yA,42
428
+ meta_reports/__init__.py,sha256=v2cQxPSMFtveBZVfjrFDnjOYrKJE3EPJYfrzcgKNUWU,42
429
429
  meta_reports/admin_site.py,sha256=xoA18u9f341iLxuuhUeSEwaP-r2j6NFO2iRnagL2KR8,169
430
430
  meta_reports/ae_report.py,sha256=K0DCdfVBOCqqWWvCsl-Tf8rRCnNv3W2xbUI10VCuEhI,154
431
431
  meta_reports/apps.py,sha256=uQb4mBQ94Ij0luH5yzMF-a5t2N418JHcovYovislwS4,194
432
432
  meta_reports/death_report.py,sha256=mJw08jMxOWIAtsKQN8zCP64HIrxW1fb48D9OXqEMpM0,4713
433
433
  meta_reports/pdf_report.py,sha256=9lWnRc_BNieDFXC4VgA0QHK6g_ct58u8tupPRsbRvV0,2395
434
- meta_reports/tasks.py,sha256=OlFRnzI-xObroxdW3lPeTSWBih7X4XJ7nciA-D9BB2k,339
434
+ meta_reports/tasks.py,sha256=dOVdhoYlV_V6W5q1pDtu-PUKxTyoT9OY8EnhXl1ErVg,339
435
435
  meta_reports/urls.py,sha256=_c6AMrK4U5MsyFSU2JSPNfiZlbhuw24C7CyPNYpqGd0,206
436
- meta_reports/admin/__init__.py,sha256=FkyW2qFaOHp9-XBqpM_TKUJYiOL_N8ARlNEUWyu1vrU,236
437
- meta_reports/admin/endpoints_admin.py,sha256=hKPxakVJNGkS65-FF1Sk8Ka3sCeV1RyHN2EsrFYSsUQ,3554
438
- meta_reports/admin/unmanaged/__init__.py,sha256=O_0kiC1BsgLyNKaJQ1NixmQ5kQwWv3KZy_ebXJr8_pY,376
436
+ meta_reports/admin/__init__.py,sha256=8OWU9SifeRRAJEPtSiYO5-kOy9xgBke_uKgS_MraJ-8,261
437
+ meta_reports/admin/endpoints_admin.py,sha256=lQCeOg1NFPDegVwW_8X4zxJdQt8bDyZEVqwMC5hVksA,3924
438
+ meta_reports/admin/list_filters.py,sha256=pByBzz9-qGwqBfdZFlByxJUZDTJQXOTWfNLjmK8KF00,870
439
+ meta_reports/admin/unmanaged/__init__.py,sha256=df6FzJNWtCS7KxPqxZ5cYWImRS3wUuXujJ9Tch57hr4,431
440
+ meta_reports/admin/unmanaged/glucose_summary_admin.py,sha256=XUZBloa4H3TOfe8dhV-S0oHKsAb6v3GwIaM_acKU2Ts,2669
439
441
  meta_reports/admin/unmanaged/missing_screening_ogtt_admin.py,sha256=rpT5j4DsIB_475B2joeDwCd3kOtgiMR0eJBroVwIFGA,1836
440
442
  meta_reports/admin/unmanaged/patient_history_missing_baseline_cd4_admin.py,sha256=XyroEqxlX816xrdi0IVSelNPxPBWi96niKa-MQVGkck,2058
441
443
  meta_reports/admin/unmanaged/unattended_three_in_row2_admin.py,sha256=0r13KRr0gsH2osmSlffRV11SpSBpWM612AYl-GOoYm0,1347
@@ -467,11 +469,20 @@ meta_reports/migrations/0020_auto_20240819_1811.py,sha256=CgjDxYzefPLngSZ8l4XSm3
467
469
  meta_reports/migrations/0021_auto_20240819_1817.py,sha256=mxG7O5rIWnPKgIrqf1uVK9X0VwpXDb2Mmnp8P9kBXVQ,6306
468
470
  meta_reports/migrations/0022_auto_20240819_1832.py,sha256=q4K8AerGx1NybqXrgGinfebtV1zGMWPTQqqzGfW_skU,6416
469
471
  meta_reports/migrations/0023_endpoints_meta_report_subject_a56b22_idx.py,sha256=dXEs6HN4SUlLnbXcMrqjNlXXzJi_wYJCO7I9S9FcfH4,501
472
+ meta_reports/migrations/0024_glucosesummary.py,sha256=kifUYURkCBqJoYfeDxYVnlmGlh1gIRDXPzBBAzpxisU,1421
473
+ meta_reports/migrations/0025_auto_20240822_0115.py,sha256=MbOSNzCDnZWLpb3IkXgO3KojR9pnJgajhLAat38R4bg,9596
474
+ meta_reports/migrations/0026_auto_20240822_0120.py,sha256=KiqQyxTZkgVnY8553cTc0L4LvEjT8-YzeSzuaKM9JCI,5660
475
+ meta_reports/migrations/0027_auto_20240822_0140.py,sha256=IT6cxVEnsGA037dUFwd4775ry2UfGQWlM4t-S-Da7Jg,6339
476
+ meta_reports/migrations/0028_alter_glucosesummary_options.py,sha256=xoJ7J_D1WUH1a21LEm4U2jj50XP8EUVEmN1Xnqlg-Zs,569
477
+ meta_reports/migrations/0029_auto_20240822_0149.py,sha256=7y4aEWd_6BAfJVfMOEyZBnu_Qv9h-u9XNKleVki-5gk,6617
470
478
  meta_reports/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
471
- meta_reports/models/__init__.py,sha256=eiE9YYOHn-wehWMDFpubxWspZY9_W0pwkKmvpyXl9hE,199
472
- meta_reports/models/endpoints.py,sha256=N0PbOd9Lb3lYtjencjezoH9XIwKK4O3_y7MGcUEGX0M,845
479
+ meta_reports/models/__init__.py,sha256=j-nnn9aBcSayjUXuw_VZzPhxB45KKbJiCO39WeheapE,219
480
+ meta_reports/models/endpoints.py,sha256=HfxQuKkzu883xbTeVfIEktN-ARoGe1qC6KgEAzRtV5E,925
473
481
  meta_reports/models/dbviews/README,sha256=GdeboB7Xqb-Qo_rE1ondcxP8Ps93MIjLzCePQCePig0,686
474
- meta_reports/models/dbviews/__init__.py,sha256=CGgxUrgQoptDKyGNkFHvEfxGg77GFgKlOV8GDnzNgzc,312
482
+ meta_reports/models/dbviews/__init__.py,sha256=ZbOD_j45lHNKJG7HZ7G3BL4hPLNbKVOsc8PhFQoxT9g,356
483
+ meta_reports/models/dbviews/glucose_summary/__init__.py,sha256=Tfgjso4TpxMCidAdRJp8g1Ykqqa43yWlQSotzAaORAo,93
484
+ meta_reports/models/dbviews/glucose_summary/unmanaged_model.py,sha256=NkD-pf81dFPW0pWH58eszXWA-41NnoqB2vQanVL7wXM,941
485
+ meta_reports/models/dbviews/glucose_summary/view_definition.py,sha256=vrMYgKNd9LN4x8rqt_-Z4U0wOOUnkRIZUMCrjfLona8,2692
475
486
  meta_reports/models/dbviews/missing_screening_ogtt/__init__.py,sha256=_-Sn6ArPFRyzYLA6WfGGzvq5UpYWExgTo2ELPVA_OGc,50
476
487
  meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py,sha256=68erN-uo085xBYekgPncNO-ZffGJ7gefdsh15Mk_yCM,1406
477
488
  meta_reports/models/dbviews/missing_screening_ogtt/view_definition.py,sha256=YBadEjekt58qKdLAQbDxPS9d6QPAIpcj6bAvKo-ERFA,2584
@@ -498,6 +509,7 @@ meta_reports/models/unmanaged/unattended_three_in_row2.sql,sha256=AUPfQt_RE1QSYU
498
509
  meta_reports/models/unmanaged/unattended_two_in_row.py,sha256=LofMGO9okr76riRXBxBqa25Y3SA-hkg7zMp87wzf6j0,681
499
510
  meta_reports/models/unmanaged/unattended_two_in_row.sql,sha256=cFBHrkbo5548JNXcHJnSZ66hvXYpAF9LADuy-EfZ9Bw,1176
500
511
  meta_reports/templates/meta_reports/endpoints_changelist_note.html,sha256=LL4W6F6ZRBNtt_dt-5jjheMoryz1eE2l8VP5rbZSvDw,473
512
+ meta_reports/templates/meta_reports/columns/subject_identifier_column.html,sha256=pNC7kYrmWdqzv_ORTvSPAV9At6wr6D4-qcCqczPCk7M,89
501
513
  meta_reports/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
502
514
  meta_reports/tests/test_reports.py,sha256=P8Myql_Pbx--OMHjRq_BbvTaawD4V_MHkeVa_S_grK8,1293
503
515
  meta_reports/tests/urls.py,sha256=_sVCnQeiAFRYKhxga3_DjoKj_4bgs1s2gjcynDiapvA,111
@@ -651,7 +663,7 @@ meta_subject/choices.py,sha256=LjKRsEG0uGJow2BHshV_oKXdNYktNGn1Xj9H8SbGtBA,6782
651
663
  meta_subject/constants.py,sha256=6rpHsHj3CPV7ntdWxYScRhPVoj4YIxX2lUZdZ9lrFN0,704
652
664
  meta_subject/identifiers.py,sha256=pBYvMFXK7N2oNDMJJM2xLCvk0NuzLzzm15VqQ2Cp7Og,325
653
665
  meta_subject/urls.py,sha256=v2fM0R9gvt8MWdZj9cRnYU8xvqecLK5b_8leYVEtYZI,206
654
- meta_subject/admin/__init__.py,sha256=iL8DYl6bC4-76ZcweHv6vWXNTX_N2XESVWSh69P61o4,1688
666
+ meta_subject/admin/__init__.py,sha256=C4SF3Rf9jD40e_5uX9vn19GGw3FxNN2RcV66XSUmoNA,1705
655
667
  meta_subject/admin/autocomplete_admin.py,sha256=bVxma7KTHhKHWqLPxbP2GwiGcHeBUyMutTDXZ2RomEY,1158
656
668
  meta_subject/admin/birth_outcome_admin.py,sha256=_gWrpNgb3tF6zNL9jbEpvHyu4blf4uRSZovpuPtHrRU,3211
657
669
  meta_subject/admin/complications_admin.py,sha256=qxaJVWW86Hg56T8IYfyM9SiP5IcPFNuMfIWBI9fqz90,1017
@@ -690,23 +702,22 @@ meta_subject/admin/blood_results/blood_results_ins_admin.py,sha256=hnxCgoGjFmM67
690
702
  meta_subject/admin/blood_results/blood_results_lft_admin.py,sha256=aPLnneUejBG_3lyQh54aRllPv1SV_fIQNAdtNX3-qmE,822
691
703
  meta_subject/admin/blood_results/blood_results_lipid_admin.py,sha256=u_K2lNK1GyzQcR-o-zyGPza5zm_wjm4ijrtBnrY9-uQ,836
692
704
  meta_subject/admin/blood_results/blood_results_rft_admin.py,sha256=eG-ZpIJQxBY7qZJDZH_Pv1D5YlhjIXvGU1OvVUoXLDs,5120
693
- meta_subject/admin/diabetes/__init__.py,sha256=N122LRwOr-PipuGYQAsZRAh-_h8V8GbFUnA9oo9x_6c,96
694
- meta_subject/admin/diabetes/dm_diagnosis_admin.py,sha256=jFKp42Z3NANQ-FSHrpYKEQm5LCrejvmJ0e8hpcYSgFk,2338
705
+ meta_subject/admin/diabetes/__init__.py,sha256=vWnGykomxyo1ShL7sGvh0A7lL9m3vZm0VgcLsPfUZTI,94
706
+ meta_subject/admin/diabetes/dm_endpoint_admin.py,sha256=YIbitcs6ximnAm8IYSMCFnnA47hTmFRgc00UfeN4v64,1009
695
707
  meta_subject/admin/diabetes/dm_followup_admin.py,sha256=W--PMIcXz6A8sJT9hwZWVC-UnlLCq3oWWf7ASvheqH0,2957
696
708
  meta_subject/admin/health_economics/__init__.py,sha256=H3b8hP5KN9oEmt7_-H6P4mD8C4rEKr9qy2LlyPG2O00,140
697
709
  meta_subject/admin/health_economics/health_economics_simple_admin.py,sha256=1pmgFhscPVvzAcbX9ZNvY-UN7JKALD1zRrvMjqSytkM,1037
698
710
  meta_subject/admin/health_economics/health_economics_update_admin.py,sha256=MGGm_mLlU8wd61TCvlMv6HPeNe6EAlDm0Yx5aDtMXc0,3889
699
- meta_subject/form_validators/__init__.py,sha256=3RF427j7kYcOushlMe6t0vrtNaC4Z9NlVJ3qeHGlV5I,557
711
+ meta_subject/form_validators/__init__.py,sha256=8RXC_zbXN7Q11qxuDP0ZegNSvjsL5UDhO9tao1dbUgc,555
700
712
  meta_subject/form_validators/birth_outcomes_form_validator.py,sha256=vujgXKIW4z8bJ536_9uBhETlbChhUvA3Rj5H8zR3UfI,349
701
713
  meta_subject/form_validators/delivery_form_validator.py,sha256=b1-B0KHjYoUyJ3WZ6KOz9YthxbPH-DJpQBEVmYnkQbM,3193
702
- meta_subject/form_validators/dm_diagnosis_form_validator.py,sha256=MBLW2ZB3Q-iDN1NVV7eZpvDVVnv6PGc7Z1pgkUBjhto,1400
703
- meta_subject/form_validators/dm_dx_result_form_validator.py,sha256=EbqgQliF2HDili49HrJcRew_5w2TmKwfg-ZeuzeirQo,298
714
+ meta_subject/form_validators/dm_endpoint_form_validator.py,sha256=aQOw7BoV-YxrZZjRWbeH0YhCMVdCc52Hi4-tsu0FHn0,1401
704
715
  meta_subject/form_validators/dm_followup_form_validator.py,sha256=2ssfqmC8eKK0pwvi64dr0zOpioaNmJRtBtkj_YzTZY4,7962
705
716
  meta_subject/form_validators/egfr_drop_notification_form_validator.py,sha256=y5MUdRriMo8C2Qj_yzebDWsDkjQsFhcqTGrP8tBuhfA,530
706
717
  meta_subject/form_validators/followup_examination_form_validator.py,sha256=NS3Sa-bwC_HEe-CmezkFrbbjPanLe9p1v5ZOFspqgxg,4241
707
718
  meta_subject/form_validators/glucose_form_validator.py,sha256=ebtWmJo_0z8mlZzH377q4aTa9kY2R3CfCT5WtRxARb8,3371
708
719
  meta_subject/form_validators/health_economics_form_validator.py,sha256=kp-LQU4ydBXlnYFt-0xKuVSb8Y4irlhz9d_X8ppvWgE,250
709
- meta_subject/forms/__init__.py,sha256=B3SBnRsSzYg0wxODvwpZb6_i5DH_m_5Jy4zXop0OTXE,1716
720
+ meta_subject/forms/__init__.py,sha256=-ywSHfxq8u568Ok4Olec7AYCk9ecpbX-YSLbnlqIoNU,1699
710
721
  meta_subject/forms/birth_outcomes_form.py,sha256=qqhZNQKiYk8C8CFebZTQB0hOm4ONrgkTG7hfuK7kW-o,374
711
722
  meta_subject/forms/complications_glycemia_form.py,sha256=yTm3qRDJ1wPuukmpf0s0lg-oXi8fZ5Y7D7T9V-CsOXk,375
712
723
  meta_subject/forms/concomitant_medication_form.py,sha256=eznM4YOSV0eSsc-qaQgkga76T76Oz6i8svyBaleW-gQ,375
@@ -742,9 +753,8 @@ meta_subject/forms/blood_results/blood_results_ins_form.py,sha256=zKwobon8wRBrwp
742
753
  meta_subject/forms/blood_results/blood_results_lft_form.py,sha256=WKCGZXTk9ndlASymnKKIAo0rBtE9uoE_gzKsx19p-LQ,714
743
754
  meta_subject/forms/blood_results/blood_results_lipid_form.py,sha256=8Y3Xde49JDAgI78HPj0Pt-oIIsmUCC0UJ_3MZhgW-eU,730
744
755
  meta_subject/forms/blood_results/blood_results_rft_form.py,sha256=y0pyR_Y2LTVhyVnf_VjpPAJhm2xDVuWwExhedfJrTYM,1362
745
- meta_subject/forms/diabetes/__init__.py,sha256=ayxrdZsrfM8W77HhcBDegUM1ksuBcXNB5HvP-xv5ylA,138
746
- meta_subject/forms/diabetes/dm_diagnosis_form.py,sha256=XBF-Skk4wZdGWaTifCL6P457XsWI29pKv46xonPA8lw,354
747
- meta_subject/forms/diabetes/dm_dx_result_form.py,sha256=mosvseGmFASk7Y_-gKwg-DP6uyT3-CB8S3FnV9uw72o,222
756
+ meta_subject/forms/diabetes/__init__.py,sha256=oOtxUWSSI4aZVk5BBSKV44SGMwpw7zKZGrAk-dljPSk,90
757
+ meta_subject/forms/diabetes/dm_endpoint_form.py,sha256=ngmDqAauO_oLsTxEVtbT9-2jWFYYagSXAcBf66pT81I,349
748
758
  meta_subject/forms/diabetes/dm_followup_form.py,sha256=ToJwQ1NViZn_CX-0YUyLQ5SSiDayKpp6bb16NBp-cKU,828
749
759
  meta_subject/forms/health_economics/__init__.py,sha256=xlJD5--IDyBs5lRrjpOpIgLHLmJgNdnR9vbwgGZbv-0,136
750
760
  meta_subject/forms/health_economics/health_economics_simple_form.py,sha256=MlPppvF8lrka9hAzmAV7aiyerjtVihxmOWpbTF-k5P8,392
@@ -964,6 +974,9 @@ meta_subject/migrations/0205_historicalsubjectrequisition_crf_status_and_more.py
964
974
  meta_subject/migrations/0206_bloodresultsfbc_crf_status_and_more.py,sha256=uS6dCCTwVUHRQD0Kw-h7klztzyYHZDzNJz-aivwiKa8,2250
965
975
  meta_subject/migrations/0207_alter_historicalphysicalexam_waist_circumference_and_more.py,sha256=_9vxtshgrnXGbae_9JgggCSmW3kAMmtMAC9nbZe4Io8,1446
966
976
  meta_subject/migrations/0208_birthoutcomes_crf_status_and_more.py,sha256=_9oJpn4_UYx7kb-dsMJEEgDePvKy3ifrp0EOKfz98no,2251
977
+ meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py,sha256=0m9ONqkmsH_gp1iGh22MqxRAqWo4xO4YvjyIMXOpF98,1168
978
+ meta_subject/migrations/0210_remove_dmdxresult_dm_diagnosis_and_more.py,sha256=_pbqJT7-O7RkPbIeQiKS9BaF3AysLQVTHiGrNkVwjeM,4106
979
+ meta_subject/migrations/0211_dmendpoint_endpoint_reached_and_more.py,sha256=e5lG4G_F4uPR862lOvR_rACONzyMpg5duH-39QXAxLA,1615
967
980
  meta_subject/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
968
981
  meta_subject/model_mixins/__init__.py,sha256=6DdDDOwDdagrz6Q7X9lxuAVszsFWFhwPqLz4JOD85Wo,286
969
982
  meta_subject/model_mixins/arv_history_model_mixin.py,sha256=2bcJDtp40IkTBtqQt3nUah43OC76xPrlrx-N5sQ_bnI,2904
@@ -971,7 +984,7 @@ meta_subject/model_mixins/crf_model_mixin.py,sha256=UK1ycbYwaZ8LSNTJm74QJ5c-01HD
971
984
  meta_subject/model_mixins/crf_with_action_model_mixin.py,sha256=q1Q16YyPjQlpDtCPOXRkO5C7Vr7JO_QL8xWC48Uz33M,298
972
985
  meta_subject/model_mixins/search_slug_model_mixin.py,sha256=r5KmTykU0qV4JymMMKP2IBwAP8Z5hDnVJix-rO2PvME,296
973
986
  meta_subject/model_mixins/vitals_fields_model_mixin.py,sha256=JYh0w1eEFLR_BCvzHb2ldwNIkyINbfvef-SL4_wA-NY,1160
974
- meta_subject/models/__init__.py,sha256=dmC3HyQ2DsNxWW-N-uh2CmfjyTuYzXNgS03FIWKQC6U,1720
987
+ meta_subject/models/__init__.py,sha256=3WYHv3NgJiY5IsUBrlzKZ8zR5AsJHa1IA4bOH9Fh5bA,1707
975
988
  meta_subject/models/birth_outcomes.py,sha256=zikxatYZvL1qvnJ6JtVZ5aw8LCKLwQNXi6cP5F-5Jj0,3124
976
989
  meta_subject/models/complications.py,sha256=lkUoM3wJ9GuCFkuBUVxbCRSWfl3UtiVNSoMmkPKQdzg,1849
977
990
  meta_subject/models/complications_glycemia.py,sha256=2wHind-dDsPY5J4M0pUbRzjp72Brz990oDzCbF-V1CM,6056
@@ -982,7 +995,7 @@ meta_subject/models/egfr_drop_notification.py,sha256=LSA0s4klzQ69CwPDI_q89eQ49Xb
982
995
  meta_subject/models/eq5d3l.py,sha256=itRrbfzL7Jsg9u7ml0SXwsw4nMoMcNyG0-YCD2VeXB0,291
983
996
  meta_subject/models/followup_examination.py,sha256=unmTcEgdxdak9R8HGfjL0Vi-UGCdjQ0Q7mSM1B8SKs4,8116
984
997
  meta_subject/models/followup_vitals.py,sha256=pBZt4xrw7eVUfHBRtotUh9orJdNjOGxSuNa6JeWQRqA,903
985
- meta_subject/models/glucose.py,sha256=Lj4GT0RjUUGg37lnbe9rvPKyBGgMHo8KBfWOsCuFqbs,2204
998
+ meta_subject/models/glucose.py,sha256=Jynmu6G86RMXytgaECkWd4aHxYzv4hgj5PYS9KV8mTE,2240
986
999
  meta_subject/models/glucose_fbg.py,sha256=YFrB52ASpf3oSpdkxdGcw4lz6Wdxd5Y9oBdaS8HulBg,1579
987
1000
  meta_subject/models/glucose_review.py,sha256=bCnSBe_C3LeBy1XrZpV9rv-hOk8onZ_Tl37t7dqm-sw,450
988
1001
  meta_subject/models/hepatitis_test.py,sha256=zhUhRDAD_rMu_8kyiA4LFYG7YEHTK2c8TpqQKiQpNfI,1850
@@ -1011,9 +1024,8 @@ meta_subject/models/blood_results/blood_results_ins.py,sha256=uHHFdry5s70UGTxllA
1011
1024
  meta_subject/models/blood_results/blood_results_lft.py,sha256=VRWKM5292AuHd-BZDC9RHA9sb_xdPwlj2OIKeQAzpRE,1235
1012
1025
  meta_subject/models/blood_results/blood_results_lipid.py,sha256=j1yua92nYFaS3OKS5ScnRALC4oP6dy2mPGaRIljtUpY,1168
1013
1026
  meta_subject/models/blood_results/blood_results_rft.py,sha256=QFwXCQ0mrfBAWHYGWjlYrNRzxX5a-80351Weu2xJtN4,1646
1014
- meta_subject/models/diabetes/__init__.py,sha256=1iJD1i8hQe6LovhnpxsqThKlUZslTIehc90dYnr7CYo,111
1015
- meta_subject/models/diabetes/dm_diagnosis.py,sha256=sw5GnzOl_nc-dhjYLPgQhJ4vgZ5Qe7urrOdUeUkuAZc,1602
1016
- meta_subject/models/diabetes/dm_dx_result.py,sha256=3ZHFV5fOJ_96eb4qSG6D5u9hVHES14xghe3E3qiCBdE,1974
1027
+ meta_subject/models/diabetes/__init__.py,sha256=d67PnZ0__BwYYosLc1f11Y0PzwKFKodt-hdrorzBRWg,72
1028
+ meta_subject/models/diabetes/dm_endpoint.py,sha256=n8RC3PkTjs0BI4QP_-HWIAtnBQlxjNcGhjVpK9dWsGI,1858
1017
1029
  meta_subject/models/diabetes/dm_followup.py,sha256=V-w8c90SctPSUFr4TtvZ1z3ybEddG4W_pTYFYDAn5EM,6400
1018
1030
  meta_subject/models/health_economics/__init__.py,sha256=rpJXKd-CSqHKbKBjaYfhyg5CYA0DodfL-cl0Mwzl22Q,164
1019
1031
  meta_subject/models/health_economics/health_economics.py,sha256=eYhijXALzTa0WioqxZj6kd6dVt1hlqZJKFiL6QcDZlw,9715
@@ -1053,7 +1065,7 @@ meta_visit_schedule/visit_schedules/phase_three/crfs.py,sha256=I1IrMPhxUDQIKUTug
1053
1065
  meta_visit_schedule/visit_schedules/phase_three/crfs_pregnancy.py,sha256=_I6IVLMC3-KlpI86eii790mlx-p2vxWxvNRKD927rXo,169
1054
1066
  meta_visit_schedule/visit_schedules/phase_three/requisitions.py,sha256=Noeki8zX2MCwQVmCCWfuOyh_aN4YC-cyhUmrAZP8d5g,4579
1055
1067
  meta_visit_schedule/visit_schedules/phase_three/schedule.py,sha256=J91AMawOdKWLJz_WAH897PJYr8264_Q_b8pZhI0Pj38,8228
1056
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py,sha256=zI6eVj7OIbtvm9ZkKJyGpVj1LWTgGO86rpUTVHGrX7s,1753
1068
+ meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py,sha256=Txnmf03jPyFhC2gOseywHyyaGJmJFKAET-x12hknW-I,1752
1057
1069
  meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py,sha256=0V2t68Moyla6MfmAyOU8c_bzN45ksADc-jDf8ZOB6Pw,1123
1058
1070
  meta_visit_schedule/visit_schedules/phase_three/visit_schedule.py,sha256=ak4qazeKlpIlvpqrK9hDDO0fwWuWyvb4Ec-JU31IJxc,654
1059
1071
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1069,9 +1081,9 @@ tests/etc/user-rsa-restricted-private.pem,sha256=CUcHW9bznWdmmASN00hCzvxFPAFl4N2
1069
1081
  tests/etc/user-rsa-restricted-public.pem,sha256=mt84djoL-uHw6Wc5SJh0zml6VzXulnf8eQSFg7-fheg,450
1070
1082
  tests/etc/user-salt-local.key,sha256=x5anBw9fvbHurczouT3CjrkWb_xs7Ypm1htIJsgiuiw,256
1071
1083
  tests/etc/user-salt-restricted.key,sha256=pxmpcfBRNB-4C6wTvHXz-9fOfJgKIFOjaAF8ZFfa4q4,256
1072
- meta_edc-0.3.23.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1073
- meta_edc-0.3.23.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1074
- meta_edc-0.3.23.dist-info/METADATA,sha256=c96qz0tA257oV6xA6JFB5n-X9Ys0RPKgfGIAWMPH6_8,2771
1075
- meta_edc-0.3.23.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
1076
- meta_edc-0.3.23.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
1077
- meta_edc-0.3.23.dist-info/RECORD,,
1084
+ meta_edc-0.3.24.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1085
+ meta_edc-0.3.24.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1086
+ meta_edc-0.3.24.dist-info/METADATA,sha256=WLQ2RHYyPS4gFoN-z6U6jVB9-bnVsDmI0Qk45kclsXE,2771
1087
+ meta_edc-0.3.24.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
1088
+ meta_edc-0.3.24.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
1089
+ meta_edc-0.3.24.dist-info/RECORD,,
@@ -18,7 +18,7 @@ from meta_prn.constants import (
18
18
  from meta_prn.models import DmReferral, OnScheduleDmReferral
19
19
  from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
20
20
  from meta_subject.constants import DM_FOLLOWUP_ACTION
21
- from meta_subject.models import DmDiagnosis, DmFollowup, SubjectVisit
21
+ from meta_subject.models import DmEndpoint, DmFollowup, SubjectVisit
22
22
  from meta_visit_schedule.constants import DM_BASELINE, DM_FOLLOWUP, SCHEDULE_DM_REFERRAL
23
23
 
24
24
 
@@ -146,7 +146,7 @@ class TestDmReferral(MetaTestCaseMixin, TestCase):
146
146
  info_source=PATIENT,
147
147
  )
148
148
 
149
- DmDiagnosis.objects.create(
149
+ DmEndpoint.objects.create(
150
150
  subject_visit=subject_visit,
151
151
  report_datetime=get_utcnow(),
152
152
  dx_date=referral_datetime.date(),
meta_reports/__init__.py CHANGED
@@ -1 +1 @@
1
- from .tasks import update_unmanaged_table
1
+ from .tasks import update_endpoints_table
@@ -1,5 +1,6 @@
1
1
  from .endpoints_admin import EndpointAdmin
2
2
  from .unmanaged import (
3
+ GlucoseSummaryAdmin,
3
4
  MissingScreeningOgttAdmin,
4
5
  PatientHistoryMissingBaselineCd4Admin,
5
6
  UnattendedThreeInRow2Admin,