meta-edc 0.3.29__py3-none-any.whl → 0.3.30__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 (51) hide show
  1. meta_ae/action_items.py +2 -2
  2. meta_edc/settings/defaults.py +0 -1
  3. {meta_edc-0.3.29.dist-info → meta_edc-0.3.30.dist-info}/METADATA +2 -2
  4. {meta_edc-0.3.29.dist-info → meta_edc-0.3.30.dist-info}/RECORD +51 -36
  5. {meta_edc-0.3.29.dist-info → meta_edc-0.3.30.dist-info}/WHEEL +1 -1
  6. meta_reports/admin/__init__.py +4 -3
  7. meta_reports/admin/{unmanaged → dbviews}/__init__.py +1 -0
  8. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +1 -0
  9. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +13 -0
  10. meta_reports/admin/modeladmin_mixins.py +1 -5
  11. meta_reports/migrations/0041_auto_20240828_2229.py +14 -0
  12. meta_reports/migrations/0042_onstudymissinglabvalues.py +43 -0
  13. meta_reports/migrations/0043_auto_20240828_2309.py +87 -0
  14. meta_reports/migrations/0044_auto_20240828_2323.py +93 -0
  15. meta_reports/migrations/0045_auto_20240829_0248.py +54 -0
  16. meta_reports/migrations/0046_auto_20240829_0250.py +54 -0
  17. meta_reports/models/__init__.py +1 -0
  18. meta_reports/models/dbviews/__init__.py +1 -0
  19. meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +1 -0
  20. meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +53 -0
  21. meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +20 -0
  22. meta_reports/models/dbviews/on_study_missing_lab_values/view_definition.py +17 -0
  23. meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +25 -23
  24. meta_reports/models/dbviews/on_study_missing_values/view_definition.py +2 -5
  25. meta_reports/tests/test_sql_gen.py +5 -0
  26. meta_subject/action_items.py +2 -2
  27. meta_subject/admin/__init__.py +1 -0
  28. meta_subject/admin/blood_results/__init__.py +1 -1
  29. meta_subject/admin/blood_results/{blood_results_lipid_admin.py → blood_results_lipids_admin.py} +7 -7
  30. meta_subject/forms/__init__.py +1 -1
  31. meta_subject/forms/blood_results/__init__.py +1 -1
  32. meta_subject/forms/blood_results/{blood_results_lipid_form.py → blood_results_lipids_form.py} +5 -5
  33. meta_subject/migrations/0212_auto_20240827_2222.py +23 -0
  34. meta_subject/migrations/0213_rename_bloodresultslipid_bloodresultslipids_and_more.py +35 -0
  35. meta_subject/models/__init__.py +1 -1
  36. meta_subject/models/blood_results/__init__.py +1 -1
  37. meta_subject/models/blood_results/{blood_results_lipid.py → blood_results_lipids.py} +3 -3
  38. meta_visit_schedule/visit_schedules/phase_three/crfs.py +6 -6
  39. {meta_edc-0.3.29.dist-info → meta_edc-0.3.30.dist-info}/AUTHORS +0 -0
  40. {meta_edc-0.3.29.dist-info → meta_edc-0.3.30.dist-info}/LICENSE +0 -0
  41. {meta_edc-0.3.29.dist-info → meta_edc-0.3.30.dist-info}/top_level.txt +0 -0
  42. /meta_reports/admin/{unmanaged → dbviews}/glucose_summary_admin.py +0 -0
  43. /meta_reports/admin/{unmanaged → dbviews}/missing_screening_ogtt_admin/__init__.py +0 -0
  44. /meta_reports/admin/{unmanaged → dbviews}/missing_screening_ogtt_admin/note_model_admin.py +0 -0
  45. /meta_reports/admin/{unmanaged → dbviews}/missing_screening_ogtt_admin/unmanaged_model_admin.py +0 -0
  46. /meta_reports/admin/{unmanaged → dbviews}/on_study_missing_values_admin/__init__.py +0 -0
  47. /meta_reports/admin/{unmanaged → dbviews}/on_study_missing_values_admin/unmanaged_model_admin.py +0 -0
  48. /meta_reports/admin/{unmanaged → dbviews}/patient_history_missing_baseline_cd4_admin.py +0 -0
  49. /meta_reports/admin/{unmanaged → dbviews}/unattended_three_in_row2_admin.py +0 -0
  50. /meta_reports/admin/{unmanaged → dbviews}/unattended_three_in_row_admin.py +0 -0
  51. /meta_reports/admin/{unmanaged → dbviews}/unattended_two_in_row_admin.py +0 -0
@@ -0,0 +1,54 @@
1
+ # Generated by Django 5.0.8 on 2024-08-28 23:50
2
+
3
+ import django_db_views.migration_functions
4
+ import django_db_views.operations
5
+ from django.db import migrations
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ("meta_reports", "0045_auto_20240829_0248"),
12
+ ]
13
+
14
+ operations = [
15
+ django_db_views.operations.ViewRunPython(
16
+ code=django_db_views.migration_functions.ForwardViewMigration(
17
+ "select *, uuid() as id, now() as `created`, 'onstudy_missing_values_view' as `report_model` from (SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No HIV Diagnosis date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.hiv_diagnosis_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL value or VL date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load IS NULL OR crf.viral_load_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No CD4 value or CD4 date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.cd4 IS NULL OR crf.cd4_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date but previous ARV is YES' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.has_previous_arv_regimen = 'Yes' AND crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'Other current ARV regimen missing' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id LEFT JOIN meta_lists_arvregimens AS arvregimen ON crf.current_arv_regimen_id = arvregimen.id WHERE crf.other_current_arv_regimen IS NULL AND arvregimen.name = 'OTHER' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.glucose' AS label_lower, 'FBG/OGTT: missing OGTT' AS label, COUNT(*) AS records FROM meta_subject_glucose AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE (NOT crf.fbg_value IS NULL AND crf.ogtt_value IS NULL) AND ogtt_performed = 'Yes' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id",
18
+ "onstudy_missing_values_view",
19
+ engine="django.db.backends.mysql",
20
+ ),
21
+ reverse_code=django_db_views.migration_functions.BackwardViewMigration(
22
+ "select *, uuid() as id, now() as `created`, 'onstudy_missing_values_view' as `report_model` from (SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No HIV Diagnosis date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.hiv_diagnosis_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL value' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No CD4 value' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.cd4 IS NULL OR crf.cd4_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date but previous ARV is YES' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.has_previous_arv_regimen = 'Yes' AND crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'Other current ARV regimen missing' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id LEFT JOIN meta_lists_arvregimens AS arvregimen ON crf.current_arv_regimen_id = arvregimen.id WHERE crf.other_current_arv_regimen IS NULL AND arvregimen.name = 'OTHER' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.glucose' AS label_lower, 'FBG/OGTT: missing OGTT' AS label, COUNT(*) AS records FROM meta_subject_glucose AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE (NOT crf.fbg_value IS NULL AND crf.ogtt_value IS NULL) AND ogtt_performed = 'Yes' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id",
23
+ "onstudy_missing_values_view",
24
+ engine="django.db.backends.mysql",
25
+ ),
26
+ atomic=False,
27
+ ),
28
+ django_db_views.operations.ViewRunPython(
29
+ code=django_db_views.migration_functions.ForwardViewMigration(
30
+ "select *, get_random_uuid() as id, now() as created, 'onstudy_missing_values_view' as report_model from (SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No HIV Diagnosis date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.hiv_diagnosis_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL value or VL date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load IS NULL OR crf.viral_load_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No CD4 value or CD4 date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.cd4 IS NULL OR crf.cd4_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date but previous ARV is YES' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.has_previous_arv_regimen = 'Yes' AND crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'Other current ARV regimen missing' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id LEFT JOIN meta_lists_arvregimens AS arvregimen ON crf.current_arv_regimen_id = arvregimen.id WHERE crf.other_current_arv_regimen IS NULL AND arvregimen.name = 'OTHER' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.glucose' AS label_lower, 'FBG/OGTT: missing OGTT' AS label, COUNT(*) AS records FROM meta_subject_glucose AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE (NOT crf.fbg_value IS NULL AND crf.ogtt_value IS NULL) AND ogtt_performed = 'Yes' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id",
31
+ "onstudy_missing_values_view",
32
+ engine="django.db.backends.postgresql",
33
+ ),
34
+ reverse_code=django_db_views.migration_functions.BackwardViewMigration(
35
+ "select *, get_random_uuid() as id, now() as created, 'onstudy_missing_values_view' as report_model from (SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No HIV Diagnosis date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.hiv_diagnosis_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL value' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No CD4 value' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.cd4 IS NULL OR crf.cd4_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date but previous ARV is YES' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.has_previous_arv_regimen = 'Yes' AND crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'Other current ARV regimen missing' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id LEFT JOIN meta_lists_arvregimens AS arvregimen ON crf.current_arv_regimen_id = arvregimen.id WHERE crf.other_current_arv_regimen IS NULL AND arvregimen.name = 'OTHER' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.glucose' AS label_lower, 'FBG/OGTT: missing OGTT' AS label, COUNT(*) AS records FROM meta_subject_glucose AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE (NOT crf.fbg_value IS NULL AND crf.ogtt_value IS NULL) AND ogtt_performed = 'Yes' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id",
36
+ "onstudy_missing_values_view",
37
+ engine="django.db.backends.postgresql",
38
+ ),
39
+ atomic=False,
40
+ ),
41
+ django_db_views.operations.ViewRunPython(
42
+ code=django_db_views.migration_functions.ForwardViewMigration(
43
+ "select *, uuid() as id, datetime() as created, 'onstudy_missing_values_view' as report_model from (SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No HIV Diagnosis date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.hiv_diagnosis_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL value or VL date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load IS NULL OR crf.viral_load_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No CD4 value or CD4 date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.cd4 IS NULL OR crf.cd4_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date but previous ARV is YES' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.has_previous_arv_regimen = 'Yes' AND crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'Other current ARV regimen missing' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id LEFT JOIN meta_lists_arvregimens AS arvregimen ON crf.current_arv_regimen_id = arvregimen.id WHERE crf.other_current_arv_regimen IS NULL AND arvregimen.name = 'OTHER' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.glucose' AS label_lower, 'FBG/OGTT: missing OGTT' AS label, COUNT(*) AS records FROM meta_subject_glucose AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE (NOT crf.fbg_value IS NULL AND crf.ogtt_value IS NULL) AND ogtt_performed = 'Yes' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id",
44
+ "onstudy_missing_values_view",
45
+ engine="django.db.backends.sqlite3",
46
+ ),
47
+ reverse_code=django_db_views.migration_functions.BackwardViewMigration(
48
+ "select *, uuid() as id, datetime() as created, 'onstudy_missing_values_view' as report_model from (SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No HIV Diagnosis date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.hiv_diagnosis_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL value' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No VL date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No CD4 value' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.cd4 IS NULL OR crf.cd4_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'No current ARV start date but previous ARV is YES' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.has_previous_arv_regimen = 'Yes' AND crf.current_arv_regimen_start_date IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.patienthistory' AS label_lower, 'Other current ARV regimen missing' AS label, COUNT(*) AS records FROM meta_subject_patienthistory AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id LEFT JOIN meta_lists_arvregimens AS arvregimen ON crf.current_arv_regimen_id = arvregimen.id WHERE crf.other_current_arv_regimen IS NULL AND arvregimen.name = 'OTHER' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'meta_subject.glucose' AS label_lower, 'FBG/OGTT: missing OGTT' AS label, COUNT(*) AS records FROM meta_subject_glucose AS crf LEFT JOIN meta_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE (NOT crf.fbg_value IS NULL AND crf.ogtt_value IS NULL) AND ogtt_performed = 'Yes' GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id",
49
+ "onstudy_missing_values_view",
50
+ engine="django.db.backends.sqlite3",
51
+ ),
52
+ atomic=False,
53
+ ),
54
+ ]
@@ -3,6 +3,7 @@ from .dbviews import (
3
3
  GlucoseSummary,
4
4
  MissingOgttNote,
5
5
  MissingScreeningOgtt,
6
+ OnStudyMissingLabValues,
6
7
  OnStudyMissingValues,
7
8
  PatientHistoryMissingBaselineCd4,
8
9
  UnattendedThreeInRow,
@@ -1,5 +1,6 @@
1
1
  from .glucose_summary import GlucoseSummary
2
2
  from .missing_screening_ogtt import NOTE_STATUSES, MissingOgttNote, MissingScreeningOgtt
3
+ from .on_study_missing_lab_values import OnStudyMissingLabValues
3
4
  from .on_study_missing_values import OnStudyMissingValues
4
5
  from .patient_history_missing_baseline_cd4 import PatientHistoryMissingBaselineCd4
5
6
  from .unattended_three_in_row import UnattendedThreeInRow
@@ -0,0 +1 @@
1
+ from .unmanged_model import OnStudyMissingLabValues
@@ -0,0 +1,53 @@
1
+ from edc_lab_panel.constants import FBC, LFT, LIPIDS, RFT
2
+ from edc_lab_panel.panels import fbc_panel, lft_panel, lipids_panel, rft_panel
3
+ from edc_qareports.sql_generator import CrfCase, RequisitionCase
4
+
5
+ qa_cases = [
6
+ RequisitionCase(
7
+ label="FBC requisitioned but not entered",
8
+ dbtable="meta_subject_bloodresultsfbc",
9
+ label_lower="meta_subject.bloodresultsfbc",
10
+ panel=FBC,
11
+ ),
12
+ RequisitionCase(
13
+ label="RFT requisitioned but not entered",
14
+ dbtable="meta_subject_bloodresultsrft",
15
+ label_lower="meta_subject.bloodresultsrft",
16
+ panel=RFT,
17
+ ),
18
+ RequisitionCase(
19
+ label="LFT requisitioned but not entered",
20
+ dbtable="meta_subject_bloodresultslft",
21
+ label_lower="meta_subject.bloodresultslft",
22
+ panel=LFT,
23
+ ),
24
+ RequisitionCase(
25
+ label="LIPIDS requisitioned but not entered",
26
+ dbtable="meta_subject_bloodresultslipids",
27
+ label_lower="meta_subject.bloodresultslipids",
28
+ panel=LIPIDS,
29
+ ),
30
+ ]
31
+
32
+ panels = {FBC: fbc_panel, RFT: rft_panel, LFT: lft_panel, LIPIDS: lipids_panel}
33
+ for abbrev, panel in panels.items():
34
+ for utest_id in panel.utest_ids:
35
+ try:
36
+ utest_id, _ = utest_id
37
+ except ValueError:
38
+ pass
39
+ qa_cases.append(
40
+ CrfCase(
41
+ label=f"{abbrev.upper()}: missing {utest_id} value/units",
42
+ dbtable=f"meta_subject_bloodresults{abbrev.lower()}",
43
+ label_lower=f"meta_subject.bloodresults{abbrev.lower()}",
44
+ where=f"crf.{utest_id}_value is null or crf.{utest_id}_units is null",
45
+ )
46
+ )
47
+
48
+ CrfCase(
49
+ label="No UREA value",
50
+ dbtable="meta_subject_bloodresultsrft",
51
+ label_lower="meta_subject.bloodresultsrft",
52
+ where="crf.urea_value is null or crf.urea_units is null",
53
+ ),
@@ -0,0 +1,20 @@
1
+ from django_db_views.db_view import DBView
2
+ from edc_qareports.model_mixins import (
3
+ OnStudyMissingValuesModelMixin,
4
+ QaReportModelMixin,
5
+ qa_reports_permissions,
6
+ )
7
+
8
+ from .view_definition import get_view_definition
9
+
10
+
11
+ class OnStudyMissingLabValues(OnStudyMissingValuesModelMixin, QaReportModelMixin, DBView):
12
+
13
+ view_definition = get_view_definition()
14
+
15
+ class Meta:
16
+ managed = False
17
+ db_table = "onstudy_missing_lab_values_view"
18
+ verbose_name = "Missing Lab values for on-study patient"
19
+ verbose_name_plural = "Missing Lab values for on-study patients"
20
+ default_permissions = qa_reports_permissions
@@ -0,0 +1,17 @@
1
+ from edc_qareports.sql_generator import SqlViewGenerator
2
+
3
+ from .qa_cases import qa_cases
4
+
5
+
6
+ def get_view_definition() -> dict:
7
+ subquery = " UNION ".join([qa_case.sql for qa_case in qa_cases])
8
+ sql_view = SqlViewGenerator(
9
+ report_model="onstudy_missing_lab_values_view",
10
+ ordering=["subject_identifier", "site_id"],
11
+ )
12
+
13
+ return {
14
+ "django.db.backends.mysql": sql_view.as_mysql(subquery),
15
+ "django.db.backends.postgresql": sql_view.as_postgres(subquery),
16
+ "django.db.backends.sqlite3": sql_view.as_sqlite(subquery),
17
+ }
@@ -1,53 +1,55 @@
1
+ from edc_constants.constants import OTHER, YES
2
+ from edc_qareports.sql_generator import CrfCase
3
+
1
4
  qa_cases = [
2
- dict(
5
+ CrfCase(
3
6
  label="No HIV Diagnosis date",
4
7
  dbtable="meta_subject_patienthistory",
5
8
  label_lower="meta_subject.patienthistory",
6
9
  fld_name="hiv_diagnosis_date",
7
10
  ),
8
- dict(
9
- label="No VL value",
10
- dbtable="meta_subject_patienthistory",
11
- label_lower="meta_subject.patienthistory",
12
- fld_name="viral_load",
13
- ),
14
- dict(
15
- label="No VL date",
11
+ CrfCase(
12
+ label="No VL value or VL date",
16
13
  dbtable="meta_subject_patienthistory",
17
14
  label_lower="meta_subject.patienthistory",
18
15
  fld_name="viral_load_date",
16
+ where="crf.viral_load is null or crf.viral_load_date is null",
19
17
  ),
20
- dict(
21
- label="No CD4 value",
18
+ CrfCase(
19
+ label="No CD4 value or CD4 date",
22
20
  dbtable="meta_subject_patienthistory",
23
21
  label_lower="meta_subject.patienthistory",
24
- fld_name="cd4",
22
+ where="crf.cd4 is null or crf.cd4_date is null",
25
23
  ),
26
- dict(
27
- label="No CD4 date",
28
- dbtable="meta_subject_patienthistory",
29
- label_lower="meta_subject.patienthistory",
30
- fld_name="cd4_date",
31
- ),
32
- dict(
24
+ CrfCase(
33
25
  label="No current ARV start date",
34
26
  dbtable="meta_subject_patienthistory",
35
27
  label_lower="meta_subject.patienthistory",
36
28
  fld_name="current_arv_regimen_start_date",
37
29
  ),
38
- dict(
30
+ CrfCase(
39
31
  label="No current ARV start date but previous ARV is YES",
40
32
  dbtable="meta_subject_patienthistory",
41
33
  label_lower="meta_subject.patienthistory",
42
34
  where=(
43
- 'crf.has_previous_arv_regimen="YES" and crf.current_arv_regimen_start_date is null'
35
+ f"crf.has_previous_arv_regimen ='{YES}' and "
36
+ "crf.current_arv_regimen_start_date is null"
44
37
  ),
45
38
  ),
46
- dict(
39
+ CrfCase(
47
40
  label="Other current ARV regimen missing",
48
41
  dbtable="meta_subject_patienthistory",
49
42
  label_lower="meta_subject.patienthistory",
50
- where='crf.other_current_arv_regimen is null and arvregimen.name="OTHER"',
43
+ where=f"crf.other_current_arv_regimen is null and arvregimen.name='{OTHER}'",
51
44
  list_tables=[("current_arv_regimen_id", "meta_lists_arvregimens", "arvregimen")],
52
45
  ),
46
+ CrfCase(
47
+ label="FBG/OGTT: missing OGTT",
48
+ dbtable="meta_subject_glucose",
49
+ label_lower="meta_subject.glucose",
50
+ where=(
51
+ "(crf.fbg_value is not null and crf.ogtt_value is null) "
52
+ f"and ogtt_performed='{YES}'"
53
+ ),
54
+ ),
53
55
  ]
@@ -1,13 +1,10 @@
1
- from edc_qareports.sql_generator import (
2
- SqlViewGenerator,
3
- generate_subquery_for_missing_values,
4
- )
1
+ from edc_qareports.sql_generator import SqlViewGenerator
5
2
 
6
3
  from .qa_cases import qa_cases
7
4
 
8
5
 
9
6
  def get_view_definition() -> dict:
10
- subquery = generate_subquery_for_missing_values(qa_cases)
7
+ subquery = " UNION ".join([qa_case.sql for qa_case in qa_cases])
11
8
  sql_view = SqlViewGenerator(
12
9
  report_model="onstudy_missing_values_view",
13
10
  ordering=["subject_identifier", "site_id"],
@@ -0,0 +1,5 @@
1
+ from django.test import TestCase
2
+
3
+
4
+ class TestSqlGen(TestCase):
5
+ pass
@@ -8,7 +8,7 @@ from edc_lab_results.action_items import (
8
8
  BloodResultsFbcAction,
9
9
  BloodResultsHba1cAction,
10
10
  BloodResultsLftAction,
11
- BloodResultsLipidAction,
11
+ BloodResultsLipidsAction,
12
12
  )
13
13
  from edc_lab_results.action_items import (
14
14
  BloodResultsRftAction as BaseBloodResultsRftAction,
@@ -175,7 +175,7 @@ class DmFollowAction(ActionWithNotification):
175
175
  def register_actions():
176
176
  for action_item_cls in [
177
177
  BloodResultsFbcAction,
178
- BloodResultsLipidAction,
178
+ BloodResultsLipidsAction,
179
179
  BloodResultsLftAction,
180
180
  BloodResultsRftAction,
181
181
  BloodResultsHba1cAction,
@@ -3,6 +3,7 @@ from .birth_outcome_admin import BirthOutcomesAdmin
3
3
  from .blood_results import (
4
4
  BloodResultsFbcAdmin,
5
5
  BloodResultsLftAdmin,
6
+ BloodResultsLipidsAdmin,
6
7
  BloodResultsRftAdmin,
7
8
  )
8
9
  from .complications_admin import ComplicationsAdmin
@@ -2,5 +2,5 @@ from .blood_results_fbc_admin import BloodResultsFbcAdmin
2
2
  from .blood_results_hba1c_admin import BloodResultsHba1cAdmin
3
3
  from .blood_results_ins_admin import BloodResultsInsAdmin
4
4
  from .blood_results_lft_admin import BloodResultsLftAdmin
5
- from .blood_results_lipid_admin import BloodResultsLipidAdmin
5
+ from .blood_results_lipids_admin import BloodResultsLipidsAdmin
6
6
  from .blood_results_rft_admin import BloodResultsRftAdmin
@@ -5,19 +5,19 @@ from edc_lab_results.fieldsets import BloodResultFieldset
5
5
  from edc_model_admin.history import SimpleHistoryAdmin
6
6
 
7
7
  from ...admin_site import meta_subject_admin
8
- from ...forms import BloodResultsLipidForm
9
- from ...models import BloodResultsLipid
8
+ from ...forms import BloodResultsLipidsForm
9
+ from ...models import BloodResultsLipids
10
10
  from ..modeladmin import CrfModelAdminMixin
11
11
 
12
12
 
13
- @admin.register(BloodResultsLipid, site=meta_subject_admin)
14
- class BloodResultsLipidAdmin(
13
+ @admin.register(BloodResultsLipids, site=meta_subject_admin)
14
+ class BloodResultsLipidsAdmin(
15
15
  BloodResultsModelAdminMixin, CrfModelAdminMixin, SimpleHistoryAdmin
16
16
  ):
17
- form = BloodResultsLipidForm
17
+ form = BloodResultsLipidsForm
18
18
  fieldsets = BloodResultFieldset(
19
- BloodResultsLipid.lab_panel,
20
- model_cls=BloodResultsLipid,
19
+ BloodResultsLipids.lab_panel,
20
+ model_cls=BloodResultsLipids,
21
21
  extra_fieldsets=[
22
22
  (-1, action_fieldset_tuple),
23
23
  ],
@@ -4,7 +4,7 @@ from .blood_results import (
4
4
  BloodResultsHba1cForm,
5
5
  BloodResultsInsForm,
6
6
  BloodResultsLftForm,
7
- BloodResultsLipidForm,
7
+ BloodResultsLipidsForm,
8
8
  BloodResultsRftForm,
9
9
  )
10
10
  from .complications_glycemia_form import ComplicationsGlycemiaForm
@@ -2,5 +2,5 @@ from .blood_results_fbc_form import BloodResultsFbcForm
2
2
  from .blood_results_hba1c_form import BloodResultsHba1cForm
3
3
  from .blood_results_ins_form import BloodResultsInsForm
4
4
  from .blood_results_lft_form import BloodResultsLftForm
5
- from .blood_results_lipid_form import BloodResultsLipidForm
5
+ from .blood_results_lipids_form import BloodResultsLipidsForm
6
6
  from .blood_results_rft_form import BloodResultsRftForm
@@ -5,16 +5,16 @@ from edc_crf.modelform_mixins import CrfModelFormMixin
5
5
  from edc_lab_panel.panels import lipids_panel
6
6
  from edc_lab_results.form_validator_mixins import BloodResultsFormValidatorMixin
7
7
 
8
- from ...models import BloodResultsLipid
8
+ from ...models import BloodResultsLipids
9
9
 
10
10
 
11
- class BloodResultsLipidFormValidator(BloodResultsFormValidatorMixin, CrfFormValidator):
11
+ class BloodResultsLipidsFormValidator(BloodResultsFormValidatorMixin, CrfFormValidator):
12
12
  panel = lipids_panel
13
13
 
14
14
 
15
- class BloodResultsLipidForm(ActionItemCrfFormMixin, CrfModelFormMixin, forms.ModelForm):
16
- form_validator_cls = BloodResultsLipidFormValidator
15
+ class BloodResultsLipidsForm(ActionItemCrfFormMixin, CrfModelFormMixin, forms.ModelForm):
16
+ form_validator_cls = BloodResultsLipidsFormValidator
17
17
 
18
18
  class Meta(ActionItemCrfFormMixin.Meta):
19
- model = BloodResultsLipid
19
+ model = BloodResultsLipids
20
20
  fields = "__all__"
@@ -0,0 +1,23 @@
1
+ # Generated by Django 5.0.8 on 2024-08-27 19:22
2
+
3
+ from django.db import migrations
4
+ from django.db.migrations import RunPython
5
+ from edc_constants.constants import NO, YES
6
+
7
+
8
+ def update_old_fasting_choices(apps, schema_editor):
9
+ result = {"fasting": 0, "non_fasting": 0}
10
+ model_cls = apps.get_model("meta_subject.glucosefbg")
11
+ result["fasting"] = model_cls.objects.filter(fasting="fasting").update(fasting=YES)
12
+ result["non_fasting"] = model_cls.objects.filter(fasting="non_fasting").update(fasting=NO)
13
+ print(f"Updated: results are {result}")
14
+ print("Done.")
15
+
16
+
17
+ class Migration(migrations.Migration):
18
+
19
+ dependencies = [
20
+ ("meta_subject", "0211_dmendpoint_endpoint_reached_and_more"),
21
+ ]
22
+
23
+ operations = [RunPython(update_old_fasting_choices)]
@@ -0,0 +1,35 @@
1
+ # Generated by Django 5.0.8 on 2024-08-28 19:54
2
+
3
+ from django.conf import settings
4
+ from django.db import migrations
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("edc_action_item", "0037_remove_actionitem_reference_model_and_more"),
11
+ ("meta_subject", "0212_auto_20240827_2222"),
12
+ ("sites", "0002_alter_domain_unique"),
13
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.RenameModel(
18
+ old_name="BloodResultsLipid",
19
+ new_name="BloodResultsLipids",
20
+ ),
21
+ migrations.RenameModel(
22
+ old_name="HistoricalBloodResultsLipid",
23
+ new_name="HistoricalBloodResultsLipids",
24
+ ),
25
+ migrations.RenameIndex(
26
+ model_name="bloodresultslipids",
27
+ new_name="meta_subjec_subject_eff3e6_idx",
28
+ old_name="meta_subjec_subject_296de9_idx",
29
+ ),
30
+ migrations.RenameIndex(
31
+ model_name="bloodresultslipids",
32
+ new_name="meta_subjec_subject_49b971_idx",
33
+ old_name="meta_subjec_subject_9692a2_idx",
34
+ ),
35
+ ]
@@ -4,7 +4,7 @@ from .blood_results import (
4
4
  BloodResultsHba1c,
5
5
  BloodResultsIns,
6
6
  BloodResultsLft,
7
- BloodResultsLipid,
7
+ BloodResultsLipids,
8
8
  BloodResultsRft,
9
9
  )
10
10
  from .complications import Complications
@@ -2,5 +2,5 @@ from .blood_results_fbc import BloodResultsFbc
2
2
  from .blood_results_hba1c import BloodResultsHba1c
3
3
  from .blood_results_ins import BloodResultsIns
4
4
  from .blood_results_lft import BloodResultsLft
5
- from .blood_results_lipid import BloodResultsLipid
5
+ from .blood_results_lipids import BloodResultsLipids
6
6
  from .blood_results_rft import BloodResultsRft
@@ -2,7 +2,7 @@ from django.db import models
2
2
  from edc_crf.model_mixins import CrfStatusModelMixin
3
3
  from edc_lab.model_mixins import CrfWithRequisitionModelMixin, requisition_fk_options
4
4
  from edc_lab_panel.panels import lipids_panel
5
- from edc_lab_results import BLOOD_RESULTS_LIPID_ACTION
5
+ from edc_lab_results import BLOOD_RESULTS_LIPIDS_ACTION
6
6
  from edc_lab_results.model_mixins import (
7
7
  BloodResultsModelMixin,
8
8
  CholModelMixin,
@@ -15,7 +15,7 @@ from edc_model.models import BaseUuidModel
15
15
  from ...model_mixins import CrfWithActionModelMixin
16
16
 
17
17
 
18
- class BloodResultsLipid(
18
+ class BloodResultsLipids(
19
19
  CrfWithActionModelMixin,
20
20
  HdlModelMixin,
21
21
  LdlModelMixin,
@@ -26,7 +26,7 @@ class BloodResultsLipid(
26
26
  CrfStatusModelMixin,
27
27
  BaseUuidModel,
28
28
  ):
29
- action_name = BLOOD_RESULTS_LIPID_ACTION
29
+ action_name = BLOOD_RESULTS_LIPIDS_ACTION
30
30
  tracking_identifier_prefix = "LP"
31
31
  lab_panel = lipids_panel
32
32
 
@@ -7,7 +7,7 @@ crfs_prn = CrfCollection(
7
7
  Crf(show_order=235, model="meta_subject.bloodresultshba1c"),
8
8
  Crf(show_order=245, model="meta_subject.bloodresultsrft"),
9
9
  Crf(show_order=255, model="meta_subject.bloodresultslft"),
10
- Crf(show_order=265, model="meta_subject.bloodresultslipid"),
10
+ Crf(show_order=265, model="meta_subject.bloodresultslipids"),
11
11
  Crf(show_order=275, model="meta_subject.hepatitistest"),
12
12
  Crf(show_order=285, model="meta_subject.malariatest"),
13
13
  Crf(show_order=295, model="meta_subject.urinedipsticktest"),
@@ -40,7 +40,7 @@ crfs_d1 = CrfCollection(
40
40
  Crf(show_order=230, model="meta_subject.bloodresultsrft"),
41
41
  Crf(show_order=240, model="meta_subject.bloodresultslft"),
42
42
  Crf(show_order=250, model="meta_subject.bloodresultsfbc"),
43
- Crf(show_order=260, model="meta_subject.bloodresultslipid"),
43
+ Crf(show_order=260, model="meta_subject.bloodresultslipids"),
44
44
  Crf(show_order=360, model="meta_subject.malariatest"),
45
45
  Crf(show_order=370, model="meta_subject.urinedipsticktest"),
46
46
  Crf(show_order=400, model="meta_subject.studymedication"),
@@ -128,7 +128,7 @@ crfs_12m = CrfCollection(
128
128
  Crf(show_order=220, model="meta_subject.bloodresultsrft"),
129
129
  Crf(show_order=230, model="meta_subject.bloodresultslft"),
130
130
  Crf(show_order=240, model="meta_subject.bloodresultsfbc"),
131
- Crf(show_order=250, model="meta_subject.bloodresultslipid"),
131
+ Crf(show_order=250, model="meta_subject.bloodresultslipids"),
132
132
  Crf(show_order=300, model="meta_subject.studymedication"),
133
133
  Crf(show_order=310, model="meta_subject.medicationadherence"),
134
134
  Crf(show_order=460, model="meta_subject.eq5d3l", required=False),
@@ -185,7 +185,7 @@ crfs_24m = CrfCollection(
185
185
  Crf(show_order=220, model="meta_subject.bloodresultsrft"),
186
186
  Crf(show_order=230, model="meta_subject.bloodresultslft"),
187
187
  Crf(show_order=240, model="meta_subject.bloodresultsfbc"),
188
- Crf(show_order=250, model="meta_subject.bloodresultslipid"),
188
+ Crf(show_order=250, model="meta_subject.bloodresultslipids"),
189
189
  Crf(show_order=300, model="meta_subject.studymedication"),
190
190
  Crf(show_order=310, model="meta_subject.medicationadherence"),
191
191
  Crf(show_order=460, model="meta_subject.eq5d3l", required=False),
@@ -239,7 +239,7 @@ crfs_36m = CrfCollection(
239
239
  Crf(show_order=220, model="meta_subject.bloodresultsrft"),
240
240
  Crf(show_order=230, model="meta_subject.bloodresultslft"),
241
241
  Crf(show_order=240, model="meta_subject.bloodresultsfbc"),
242
- Crf(show_order=250, model="meta_subject.bloodresultslipid"),
242
+ Crf(show_order=250, model="meta_subject.bloodresultslipids"),
243
243
  Crf(show_order=300, model="meta_subject.studymedication"),
244
244
  Crf(show_order=310, model="meta_subject.medicationadherence"),
245
245
  Crf(show_order=460, model="meta_subject.eq5d3l", required=False),
@@ -293,7 +293,7 @@ crfs_48m = CrfCollection(
293
293
  Crf(show_order=220, model="meta_subject.bloodresultsrft"),
294
294
  Crf(show_order=230, model="meta_subject.bloodresultslft"),
295
295
  Crf(show_order=240, model="meta_subject.bloodresultsfbc"),
296
- Crf(show_order=250, model="meta_subject.bloodresultslipid"),
296
+ Crf(show_order=250, model="meta_subject.bloodresultslipids"),
297
297
  Crf(show_order=300, model="meta_subject.studymedication"),
298
298
  Crf(show_order=310, model="meta_subject.medicationadherence"),
299
299
  Crf(show_order=460, model="meta_subject.eq5d3l", required=False),