class ChildVisitReqRuleGroup(RequisitionRuleGroup): # for dna_pcr and stool sample if the mother is positive dna_pcr_panel_rule = RequisitionRule( predicate=pc.func_hiv_exposed, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[dna_pcr_panel, stool_sample_panel]) # stool sample for 2000D if the mother is negative stool_sample_panel_rule = RequisitionRule(predicate=pc.func_2000D, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[ stool_sample_panel, ]) plasma_store_panel_rule = RequisitionRule(predicate=pc.version_2_1, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[ infant_pl_cytokines_panel, ]) class Meta: app_label = app_label source_model = f'{app_label}.childvisit' requisition_model = f'{app_label}.childrequisition'
class QpcrRequisitionRuleGroup(RequisitionRuleGroup): require_qpcr_blood = RequisitionRule( predicate=pc.func_require_qpcr_requisition, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[qpcr_blood_panel], ) require_qpcr24_blood = RequisitionRule( predicate=pc.func_require_qpcr_requisition, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[qpcr24_blood_panel], ) require_qpcr_csf = RequisitionRule( predicate=pc.func_require_qpcr_requisition, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[qpcr_csf_panel], ) class Meta: app_label = app_label requisition_model = f"{app_label}.subjectrequisition"
class MaternalRequisitionRuleGroup(RequisitionRuleGroup): require_vl_prn = RequisitionRule( predicate=pc.func_mother_pos_vl, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[viral_load_panel]) require_pbmc_vl = RequisitionRule( predicate=pc.func_mother_pos, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[pbmc_vl_panel]) require_pbmc_storage = RequisitionRule( predicate=pc.func_mother_neg, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[pbmc_pl_panel]) require_elisa_status_ind = RequisitionRule( predicate=pc.func_show_elisa_requisition, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[elisa_panel]) class Meta: app_label = app_label source_model = f'{app_label}.maternalvisit' requisition_model = f'{app_label}.maternalrequisition'
class BaseRequisitionRuleGroup(RequisitionRuleGroup): """Ensures an RBD requisition if HIV result is POS. """ rbd = RequisitionRule( predicate=pc.func_requires_rbd, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[rdb_panel], ) vl_for_pos = RequisitionRule( predicate=pc.func_requires_vl, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[viral_load_panel], ) microtube = RequisitionRule( predicate=pc.func_requires_microtube, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[microtube_panel], ) venous = RequisitionRule( predicate=pc.func_requires_venous, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[venous_panel], ) class Meta: abstract = True
class ViralloadCD4RequisitionRuleGroup(RequisitionRuleGroup): require_cd4 = RequisitionRule( predicate=pc.func_require_cd4, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[cd4_panel], ) require_vl = RequisitionRule( predicate=pc.func_require_vl, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[viral_load_panel], ) class Meta: app_label = app_label source_model = f"{app_label}.patienthistory" requisition_model = f"{app_label}.subjectrequisition"
class MaternalRequisitionRuleGroupCD4(RequisitionRuleGroup): require_vl_prn = RequisitionRule(predicate=pc.func_require_cd4, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[cd4_panel]) class Meta: app_label = app_label source_model = f'{app_label}.maternalinterimidcc' requisition_model = f'{app_label}.maternalrequisition'
class CsfStopCmRequisitionRuleGroup(RequisitionRuleGroup): require_csf_stop = RequisitionRule( predicate=pc.func_require_pkpd_stopcm, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[csf_stop_panel], ) class Meta: app_label = app_label requisition_model = f"{app_label}.subjectrequisition"
class InfantRequisitionRuleGroup(RequisitionRuleGroup): require_dna_pcr = RequisitionRule(predicate=pc.func_infant_heu_require_pcr, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[dna_pcr]) require_dbs = RequisitionRule(predicate=pc.func_require_infant_dbs, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[dbs_panel]) require_elisa = RequisitionRule(predicate=pc.func_require_infant_elisa, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[infant_elisa_panel]) class Meta: app_label = app_label source_model = f'{app_label}.infantvisit' requisition_model = f'{app_label}.infantrequisition'
class VisitRequisitionRuleGroup(RequisitionRuleGroup): require_microtube = RequisitionRule( predicate=pc.func_requires_microtube, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[microtube_panel]) vl_for_pos = RequisitionRule( predicate=pc.func_requires_vl, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[viral_load_panel], ) rbd = RequisitionRule( predicate=pc.func_requires_rbd, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[rdb_panel], ) class Meta: app_label = app_label requisition_model = f'{app_label}.subjectrequisition'
class RequisitionRuleGroup1(BaseRequisitionRuleGroup): """Ensures an ELISA blood draw requisition if HIV result is IND. """ elisa_for_ind = RequisitionRule( predicate=P('hiv_result', 'eq', IND), consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[elisa_panel]) class Meta: app_label = app_label source_model = f'{app_label}.hivresult' requisition_model = f'{app_label}.subjectrequisition'
class MaternalVisitReqRuleGroup(RequisitionRuleGroup): # Make VL Required regardless the pregnancy status viral_load_panel = RequisitionRule(predicate=pc.viral_load, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[ viral_load_panel, ]) class Meta: app_label = app_label source_model = f'{app_label}.maternalvisit' requisition_model = f'{app_label}.caregiverrequisition'
class QuestionnaireRequisitionRuleGroup(RequisitionRuleGroup): initiation = RequisitionRule( predicate=PF('registration_type', func=lambda x: True if x in [INITIATION, OTHER] else False), consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[panel_vl], ) class Meta: source_model = 'bcpp_clinic_subject.questionnaire' requisition_model = f'{app_label}.subjectrequisition' app_label = app_label
class KaraboRequisitionRuleGroup(RequisitionRuleGroup): show_infant_paxgene = RequisitionRule( predicate=pc.func_show_infant_paxgene_panel, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[infant_paxgene_panel]) show_karabo_pbmc_pl = RequisitionRule( predicate=pc.func_show_karabo_pbmc_pl_panel, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[karabo_pbmc_pl_panel]) show_karabo_wb_pbmc_pl_panel = RequisitionRule( predicate=pc.func_show_karabo_wb_pbmc_pl_panel, consequence=REQUIRED, alternative=NOT_REQUIRED, target_panels=[karabo_wb_pbmc_pl_panel]) class Meta: app_label = app_label source_model = f'{app_label}.infantvisit' requisition_model = f'{app_label}.infantrequisition'