package net.ihe.gazelle.tf; import net.ihe.gazelle.tf.model.Actor; import net.ihe.gazelle.tf.model.IntegrationProfile ; import net.ihe.gazelle.tf.model.IntegrationProfileOption ; import net.ihe.gazelle.tf.model.ActorIntegrationProfileOption ; import net.ihe.gazelle.common.util.Pair ; import java.util.ArrayList ; global java.util.List myGlobalList; global java.util.List l ; ################################ ########## PCC Rules ########## ################################ #### APR|EDES|XPHR|EDR|IC|FSA rules #### ## Reference: PCC TF1 Table 2.5-1, PCC TF1 6.9.1, PCC TF1 7.9.1, PCC TF1 4.9.1, PCC TF1 4.18.1, 4.18.2anager rule "CONTENT_CREATOR/APR|EDES|XPHR|EDR|IC|FSA requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'APR' || == 'EDES' || == 'XPHR' || == 'EDR'|| == 'IC' || == 'FSA') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "CONTENT_CREATOR/APR|EDES|XPHR|EDR|IC|FSA requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in APR|EDES|XPHR|EDR|IC|FSA requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in APR|EDES|XPHR|EDR|IC|FSA requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: PCC TF1 6.9.1, PCC TF1 7.9.1, PCC TF1 4.9.1, PCC TF1 4.18.1, 4.18.2 rule "CONTENT_CONSUMER/APR|EDES|XPHR|EDR|IC|FSA requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'APR' || == 'EDES' || == 'XPHR' || == 'EDR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "CONTENT_CONSUMER/APR|EDES|XPHR|EDR|IC|FSA requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in APR|EDES|XPHR|EDR|IC|FSA requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in APR|EDES|XPHR|EDR|IC|FSA requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### PPHP rules #### rule "CONTENT_CREATOR|CONTENT_CONSUMER/PPHP requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR' || == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'PPHP') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "CONTENT_CREATOR|CONTENT_CONSUMER/PPHP requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR or CONTENT_CONSUMER in PPHP requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR or CONTENT_CONSUMER in PPHP requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### Removed for NA2011 #### #### Manager Rules: Content Profile requires XD* Transport #### /* rule "CONTENT_CREATOR/XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires DOC_SOURCE/XDS.b|XDR or PMC/XDM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS' || == 'EDR' || == 'XPHR' || == 'APS' || == 'APHP' || == 'APE' || == 'APL' || == 'TN' || == 'NN' || == 'CTNN' || == 'EDPN' || == 'LDHP' || == 'LDS' || == 'MDS' || == 'IC' || == 'ETC' || == 'PPOC' || == 'XDS-SD' || == 'BPPC') not (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' || == 'XDR' ) or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PMC', actorIntegrationProfile.integrationProfile.keyword == 'XDM' )) then #myGlobalList.add( "A CONTENT_CREATOR for any IHE Content Profile: XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC, also needs to implement DOC_SOURCE/XDS.b|XDR or PMI/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end */ #### Removed for NA2011 #### #### Manager Rules - Content Profile requires XD* Transport #### /* rule "CONTENT_CONSUMER/XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires DOC_CONSUMER/XDS.b or PMI/XDM or DOC_RECIPIENT/XDR" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS' || == 'EDR' || == 'XPHR' || == 'APS' || == 'APHP' || == 'APE' || == 'APL' || == 'TN' || == 'NN' || == 'CTNN' || == 'EDPN' || == 'LDHP' || == 'LDS' || == 'MDS' || == 'IC' || == 'ETC' || == 'PPOC' || == 'XDS-SD' || == 'BPPC') not (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM' ) or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR' )) then # myGlobalList.add( "A CONTENT_CONSUMER for any IHE Content Profile: XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC, also needs to implement DOC_CONSUMER/XDS.b or PMI/XDM or DOC_RECIPIENT/XDR"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in XDS-MS|EDR|XPHR|APS|APHP|APE|APL|TN|NN|CTNN|EDPN|LDHP|LDS|MDS|IC|ETC|PPOC|XDS-SD|BPPC requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; end */ #### CM #### # Reference: IHE PCC Care Management CM Supplement TI - Table 2.11 rule "CARE_MGR|CLIN_DATA_SOURCE|GUIDLINE_MGR/CM requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CARE_MGR' || == 'CLIN_DATA_SOURCE' || == 'GUIDLINE_MGR', actorIntegrationProfile.integrationProfile.keyword == 'CM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then # myGlobalList.add( "CARE_MGR|CLIN_DATA_SOURCE|GUIDLINE_MGR|CM requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in CM require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in CM require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### QED rules #### ## Reference: PCC TF1 Table 2.5-1 rule "CLIN_DATA_CONSUMER|CLIN_DATA_SOURCE/QED requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CLIN_DATA_CONSUMER' || == 'CLIN_DATA_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'QED') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "CLIN_DATA_CONSUMER|CLIN_DATA_SOURCE/QED requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CLIN_DATA_CONSUMER or CLIN_DATA_SOURCE in QED requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or a CLIN_DATA_CONSUMER or CLIN_DATA_SOURCE in QED requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ############################## ########## PCD ############### ############################## #### ACM #### ## Reference: PCD TF1 2.1-Table 1 rule "*/ACM requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ACM', actorIntegrationProfile.actor.keyword == 'ALRM_ARCHIVER' || == 'ALRM_COMMUNICATOR' || == 'ALRM_MGR' || == 'ALRM_RPT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "ALRM_ARCHIVER|ALRM_COMMUNICATOR|ALRM_MGR|ALRM_RPT/ACM requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in the ACM profile require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### DEC #### ## Reference: PCD TF1 2.1-Table 1 rule "*/DEC requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DEC', actorIntegrationProfile.actor.keyword == 'DEV_OBS_CONSUMER' || == 'DEV_OBS_FILTER' || == 'DEV_OBS_REPORTER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "DEV_OBS_CONSUMER|DEV_OBS_FILTER|DEV_OBS_REPORTER/DEC requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in the DEC profile require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### IDCO #### # No Rules #### PIV #### # Reference: IHE Technical Framework - Point-of-Care Infusion Verification rule "*/PIV requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IOC' || == 'IOP' , actorIntegrationProfile.integrationProfile.keyword == 'PIV') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "IOC|IOP/PIV requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in the PIV profile require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end ################################################### ################### LAB ########################### ################################################### #### LBL #### #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "LIB/LBL requires OF|OP/LTW" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'LIB', actorIntegrationProfile.integrationProfile.keyword == 'LBL') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF' || == 'OP', actorIntegrationProfile.integrationProfile.keyword == 'LTW' ) then #myGlobalList.add( "LIB/LBL requires OF|OP/LTW"); l = new ArrayList>() ; l.add( new Pair("LIB/LBL requires" , new ActorIntegrationProfileOption( "OF","LTW" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("LIB/LBL requires" , new ActorIntegrationProfileOption( "OP","LTW" , null ) ) ) ; myGlobalList.add( l ) ; end #### LCSD #### #No Rules #### LDA #### #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "AM/LDA requires AM/LTW" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'AM', actorIntegrationProfile.integrationProfile.keyword == 'LDA') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'AM', actorIntegrationProfile.integrationProfile.keyword == 'LTW' ) then #myGlobalList.add( "AM/LDA requires AM/LTW"); l = new ArrayList>() ; l.add( new Pair("AM/LDA requires" , new ActorIntegrationProfileOption( "AM","LTW" , null ) ) ) ; myGlobalList.add( l ) ; end #### LPOCT #### #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "OF/LPOCT requires OF/LTW" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'LPOCT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'LTW' ) then # myGlobalList.add( "OF/LPOCT requires OF/LTW"); l = new ArrayList>() ; l.add( new Pair("OF/LPOCT requires" , new ActorIntegrationProfileOption( "OF","LTW" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "POCDM/LPOCT requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'POCDM', actorIntegrationProfile.integrationProfile.keyword == 'LPOCT') not ( (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDS', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PEC', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PDQ') ) then #myGlobalList.add( "POCDM/LPOCT requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ"); l = new ArrayList>() ; l.add( new Pair("POCDM/LPOCT requires" , new ActorIntegrationProfileOption( "PDS","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("POCDM/LPOCT requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("POCDM/LPOCT requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PEC","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("POCDM/LPOCT requires" , new ActorIntegrationProfileOption( "PDC","PDQ" , null ) ) ) ; myGlobalList.add( l ) ; end #### LTW #### # From KUDU #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "OP|OF|ORT/LTW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OP' || == 'OF' || == 'ORT', actorIntegrationProfile.integrationProfile.keyword == 'LTW') not ( (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDS', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PEC', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PDQ') ) then #myGlobalList.add( "OP|OF|ORT/LTW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ"); l = new ArrayList>() ; l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "PDS","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PEC","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "PDC","PDQ" , null ) ) ) ; myGlobalList.add( l ) ; end # EP : I have commented out this rules that is too restrictive. CP in process #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 #rule "OP|OF|ORT/LTW requires SN|SA/ATNA" # when # $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OP' || == 'OF' || == 'ORT', actorIntegrationProfile.integrationProfile.keyword == 'LTW') # not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) # then # #myGlobalList.add( "OP|OF|ORT/LTW requires SN|SA/ATNA"); # l = new ArrayList>() ; # l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; # myGlobalList.add( l ) ; # # l = new ArrayList>() ; # l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; # myGlobalList.add( l ) ; #end #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 #rule "OP|OF|ORT/LTW requires TIME_CLIENT/CT" # when # $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OP' || == 'OF' || == 'ORT', actorIntegrationProfile.integrationProfile.keyword == 'LTW') # not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) # then # #myGlobalList.add( "OP|OF|ORT/LTW requires TIME_CLIENT/CT"); # l = new ArrayList>() ; # l.add( new Pair("OP|OF|ORT/LTW requires" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; # myGlobalList.add( l ) ; #end #### XD-Lab #### #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "CONTENT_CREATOR/XD-Lab requires DOC_SOURCE/XDS.b|XDR or PMC/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XD-Lab') not (ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' || == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMC', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "CONTENT_CREATOR/XD-Lab requires DOC_SOURCE/XDS.b|XDR or PMC/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR/XD-Lab requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR/XD-Lab requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR/XD-Lab requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "CONTENT_CONSUMER/XD-Lab requires DOC_CONSUMER|XDS.b or DOC_RECIPIENT/XDR or PMI/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XD-Lab') not (ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "CONTENT_CONSUMER/XD-Lab requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER/XD-Lab requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER/XD-Lab requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER/XD-Lab requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "CONTENT_CREATOR|CONTENT_CONSUMER/XD-Lab requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR' || == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XD-Lab') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "CONTENT_CREATOR|CONTENT_CONSUMER/XD-Lab requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR|CONTENT_CONSUMER/XD-Lab requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR|CONTENT_CONSUMER/XD-Lab requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ######################################################### #################### Radiology rules #################### ######################################################### #### ARI #### ## Reference: RAD TF-1:Table 2-1 and RAD TF-1:2.5 rule "ID/ARI requires ID/SWF|ID/CPI|ID/ED|ID/KIN" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ARI', actorIntegrationProfile.actor.keyword == 'ID') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'CPI' || == 'ED' || == 'KIN') then #myGlobalList.add( "ID/ARI requires ID/SWF|ID/CPI|ID/ED|ID/KIN"); l = new ArrayList>() ; l.add( new Pair("ID in ARI requires" , new ActorIntegrationProfileOption( "ID","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ID in ARI requires" , new ActorIntegrationProfileOption( "ID","CPI" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ID in ARI requires" , new ActorIntegrationProfileOption( "ID","ED" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ID in ARI requires" , new ActorIntegrationProfileOption( "ID","KIN" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "IM/ARI requires IM/SWF|IM/CPI|IM/ED|IM/KIN|IM" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ARI', actorIntegrationProfile.actor.keyword == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'CPI' || == 'ED' || == 'KIN') then # myGlobalList.add( "IM/ARI requires IM/SWF|IM/CPI|IM/ED|IM/KIN"); l = new ArrayList>() ; l.add( new Pair("IM in ARI requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or IM in ARI requires" , new ActorIntegrationProfileOption( "IM","CPI" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or IM in ARI requires" , new ActorIntegrationProfileOption( "IM","ED" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or IM in ARI requires" , new ActorIntegrationProfileOption( "IM","KIN" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RRP/ARI requires RRP/SINR" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ARI', actorIntegrationProfile.actor.keyword == 'RRP') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RRP', actorIntegrationProfile.integrationProfile.keyword == 'SINR') then # myGlobalList.add( "RRP/ARI requires RRP/SINR"); l = new ArrayList>() ; l.add( new Pair("RRP in ARI requires" , new ActorIntegrationProfileOption( "RRP","SINR" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RRD/ARI requires RRD/SINR" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ARI', actorIntegrationProfile.actor.keyword == 'RRD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RRD', actorIntegrationProfile.integrationProfile.keyword == 'SINR') then # myGlobalList.add( "RRD/ARI requires RRD/SINR"); l = new ArrayList>() ; l.add( new Pair("RRD in ARI requires" , new ActorIntegrationProfileOption( "RRD","SINR" , null ) ) ) ; myGlobalList.add( l ) ; end #### BIR #### #No rules #### CHG #### ## Reference: RAD TF1 Table 2-1 rule "OF/CHG requires OF/SWF | OF/PWF | OF/RWF | OF/IRWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'PWF' || == 'RWF' || == 'IRWF') then myGlobalList.add( "OF/CHG requires OF/SWF | OF/PWF | OF/RWF | OF/IRWF"); l = new ArrayList>() ; l.add( new Pair("OF in CHG requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OF in CHG requires" , new ActorIntegrationProfileOption( "OF","PWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OF in CHG requires" , new ActorIntegrationProfileOption( "OF","RWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OF in CHG requires" , new ActorIntegrationProfileOption( "OF","IRWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "ADT/CHG requires ADT/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'ADT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ADT', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then #myGlobalList.add( "ADT/CHG requires ADT/SWF"); l = new ArrayList>() ; l.add( new Pair("ADT in CHG requires" , new ActorIntegrationProfileOption( "ADT","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "PPM/CHG requires PPM/PWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'PPM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPM', actorIntegrationProfile.integrationProfile.keyword == 'PWF') then #myGlobalList.add( "PPM/CHG requires PPM/PWF"); l = new ArrayList>() ; l.add( new Pair("PPM in CHG requires" , new ActorIntegrationProfileOption( "PPM","PWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "EC/CHG requires EC/SWF | EC/PWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'EC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'EC', actorIntegrationProfile.integrationProfile.keyword == 'PWF' || == 'SWF') then # myGlobalList.add( "EC/CHG requires EC/SWF | EC/PWF"); l = new ArrayList>() ; l.add( new Pair("EC in CHG requires" , new ActorIntegrationProfileOption( "EC","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or EC in CHG requires" , new ActorIntegrationProfileOption( "EC","PWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "MOD/CHG requires MOD/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'MOD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then #myGlobalList.add( "MOD/CHG requires MOD/SWF"); l = new ArrayList>() ; l.add( new Pair("MOD in CHG requires" , new ActorIntegrationProfileOption( "MOD","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "IMPORTER/CHG requires IMPORTER/IRWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'IMPORTER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IMPORTER', actorIntegrationProfile.integrationProfile.keyword == 'IRWF') then # myGlobalList.add( "IMPORTER/CHG requires IMPORTER/IRWF"); l = new ArrayList>() ; l.add( new Pair("IMPORTER in CHG requires" , new ActorIntegrationProfileOption( "IMPORTER","IRWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-5 rule "OF/CHG requires PPSM/CHG" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'CHG') then # myGlobalList.add( "OF/CHG requires PPSM/CHG"); l = new ArrayList>() ; l.add( new Pair("OF in CHG requires" , new ActorIntegrationProfileOption( "PPSM","CHG" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RM/CHG requires RM/RWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CHG', actorIntegrationProfile.actor.keyword == 'RM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RM', actorIntegrationProfile.integrationProfile.keyword == 'RWF') then # myGlobalList.add( "RM/CHG requires RM/RWF"); l = new ArrayList>() ; l.add( new Pair("RM in CHG requires" , new ActorIntegrationProfileOption( "RM","RWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### CPI #### ## Reference: RAD TF-1:2.5 rule "PC/CPI requires EC|MOD|IM|ID/CPI" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PC', actorIntegrationProfile.integrationProfile.keyword == 'CPI') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'EC', actorIntegrationProfile.integrationProfile.keyword == 'CPI') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'CPI')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'CPI')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'CPI')) then #myGlobalList.add( "PC/CPI requires EC|MOD|IM|ID/CPI"); l = new ArrayList>() ; l.add( new Pair("PC in CPI requires" , new ActorIntegrationProfileOption( "EC","PCI" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "MOC","CPI" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "IM","CPI" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "ID","CPI" , null ) ) ) ; myGlobalList.add( l ) ; end #### DIFF #### #No rules #### ED #### #No rules #### FUS #### #No rules #### IRWF Rules #### ## Reference: RAD TF1 Table 2-1 rule "IM|OF/IRWF requires PPSM/IRWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IRWF', actorIntegrationProfile.actor.keyword == 'IM' || == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'IRWF') then # myGlobalList.add( "IM|OF/IRWF requires PPSM/IRWF"); l = new ArrayList>() ; l.add( new Pair("IM or OF in IRWF requires" , new ActorIntegrationProfileOption( "PPSM","IRWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### IRWF Rules with Option dependency #### ## Reference: RAD TF1 Table 21.2-1 rule "IMPORTER/IRWF/UNSCHED_IMPORT requires PDC/PDQ" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IRWF', actorIntegrationProfile.actor.keyword == 'IMPORTER', integrationProfileOption != null && (integrationProfileOption.keyword == 'UNSCHED_IMPORT')) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PDQ' ) then l = new ArrayList>() ; l.add( new Pair("IMPORTER in IRWF with UNSCHED_IMPORT option requires" , new ActorIntegrationProfileOption( "PDC","PDQ" , null ) ) ) ; myGlobalList.add( l ) ; end /* Commented out in the 20-Sep-2010 version of the drools file. This syntax is incorrect #### IRWF Rules on Required Options #### ## Reference: RAD TF1 Table 21.2-1 rule "IMPORTER/IRWF requires option SCHED_IMPORT or UNSCHED_IMPORT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IRWF', actorIntegrationProfile.actor.keyword == 'IMPORTER') not ActorIntegrationProfileOption (integrationProfileOption != null && (integrationProfileOption.keyword == 'SCHED_IMPORT' || == 'UNSCHED_IMPORT')) then l = new ArrayList>() ; l.add( new Pair("IMPORTER in IRWF requires" , new ActorIntegrationProfileOption( "IMPORTER","IRWF" , "SCHED_IMPORT" ) ) ) ; l = new ArrayList>() ; l.add( new Pair("or IMPORTER in IRWF requires" , new ActorIntegrationProfileOption( "IMPORTER","IRWF" , "UNSCHED_IMPORT" ) ) ) ; myGlobalList.add( l ) ; end */ #### KIN #### #NO RULES #### MAMMO #### ## Reference: RAD TF-1:2.5 rule "PC/MAMMO requires EC|MOD|IM|ID/MAMMO" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PC', actorIntegrationProfile.integrationProfile.keyword == 'MAMMO') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'EC', actorIntegrationProfile.integrationProfile.keyword == 'MAMMO') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'MAMMO')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'MAMMO')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'MAMMO')) then #myGlobalList.add( "PC/MAMMO requires EC|MOD|IM|ID/MAMMO"); l = new ArrayList>() ; l.add( new Pair("PC in CPI requires" , new ActorIntegrationProfileOption( "EC","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "MOC","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "IM","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "ID","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; end #### MAWF #### #IHE Rad Technical Framework Supplement - MAWF Profile Draft for Trial Implementation Table 2-1 rule "OF/MAWF requires OF/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MAWF', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'OF') then # myGlobalList.add( "OF/MAWF requires OF/SWF"); l = new ArrayList>() ; l.add( new Pair("OF in MAWF requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Rad Technical Framework Supplement - MAWF Profile Draft for Trial Implementation Table 2-1 rule "MOD/MAWF requires MOD/SWF and MOD/MAMMO" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MAWF', actorIntegrationProfile.actor.keyword == 'MOD') not (ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF' , actorIntegrationProfile.actor.keyword == 'MOD') and ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'MAMMO' , actorIntegrationProfile.actor.keyword == 'MOD')) then # myGlobalList.add( "MOD/MAWF requires MOD/SWF and MOD/MAMMO"); l = new ArrayList>() ; l.add( new Pair("MOD in MAWF requires" , new ActorIntegrationProfileOption( "MOD","SWF" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "MOD","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Rad Technical Framework Supplement - MAWF Profile Draft for Trial Implementation Table 2-1 rule "IM/MAWF requires IM/SWF and IM/MAMMO" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MAWF', actorIntegrationProfile.actor.keyword == 'IM') not (ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF' , actorIntegrationProfile.actor.keyword == 'IM') and ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'MAMMO' , actorIntegrationProfile.actor.keyword == 'IM')) then # myGlobalList.add( "IM/MAWF requires IM/SWF and IM/MAMMO"); l = new ArrayList>() ; l.add( new Pair("IM in MAWF requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "IM","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Rad Technical Framework Supplement - MAWF Profile Draft for Trial Implementation Table 2-1 rule "ID/MAWF requires ID/SWF and ID/MAMMO" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MAWF', actorIntegrationProfile.actor.keyword == 'ID') not (ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'ID') and ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'MAMMO' , actorIntegrationProfile.actor.keyword == 'ID')) then # myGlobalList.add( "ID/MAWF requires ID/SWF and ID/MAMMO"); l = new ArrayList>() ; l.add( new Pair("ID in MAWF requires" , new ActorIntegrationProfileOption( "ID","SWF" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "ID","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Rad Technical Framework Supplement - MAWF Profile Draft for Trial Implementation Table 2-1 rule "PPSM/MAWF requires PPSM/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MAWF', actorIntegrationProfile.actor.keyword == 'PPSM') not ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'PPSM') then # myGlobalList.add( "OF/MAWF requires OF/SWF"); l = new ArrayList>() ; l.add( new Pair("OF in MAWF requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end #IHE Rad Technical Framework Supplement - MAWF Profile Draft for Trial Implementation Table 2-1 rule "EC/MAWF requires EC/SWF and EC/MAMMO" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MAWF', actorIntegrationProfile.actor.keyword == 'EC') not (ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF' , actorIntegrationProfile.actor.keyword == 'EC') and ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'MAMMO' , actorIntegrationProfile.actor.keyword == 'EC')) then #myGlobalList.add( "EC/MAWF requires EC/SWF and EC/MAMMO"); l = new ArrayList>() ; l.add( new Pair("EC in MAWF requires" , new ActorIntegrationProfileOption( "EC","SWF" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "EC","MAMMO" , null ) ) ) ; myGlobalList.add( l ) ; end #### NMI #### #No rules #### PDI #### ## Reference: RAD TF1 2.5 Product Implementations ## Commented on 10/31/2008 ## Steve to fix Radiology documentation #rule "PC/PDI requires ID/PDI" # when # ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PDI', actorIntegrationProfile.actor.keyword == 'PC') # not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'PDI') # then # myGlobalList.add( "The Print Composer shall be grouped with an Image Manager, an Acquisition Modality, an Image Display or an Evidence Creator."); #end ## Reference: RAD TF1 2.5 Product Implementations # rule "PMI/PDI requires EC/ED or MOD/SWF|KIN|ED or IM/SWF|CPI|KIN|ED or RC|RM|RRP/SINR or IMPORTER/IRWF" # when # ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PDI', actorIntegrationProfile.actor.keyword == 'PMI') # not ActorIntegrationProfileOption ((actorIntegrationProfile.integrationProfile.keyword == 'ED' && actorIntegrationProfile.actor.keyword == 'EC') || # (actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'KIN' || == 'ED' && actorIntegrationProfile.actor.keyword == 'MOD') || # (actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'CPI' || == 'KIN' || == 'ED' && actorIntegrationProfile.actor.keyword == 'IM') || # (actorIntegrationProfile.integrationProfile.keyword == 'SINR' && actorIntegrationProfile.actor.keyword == 'RC' || == 'RM' || == 'RRP') || # (actorIntegrationProfile.integrationProfile.keyword == 'IRWF' && actorIntegrationProfile.actor.keyword == 'IMPORTER')) # then # myGlobalList.add( "PMI/PDI requires EC/ED or MOD/SWF|KIN|ED or IM/SWF|CPI|KIN|ED or RC|RM|RRP/SINR or IMPORTER/IRWF."); #end #### PGP #### ## From KUDU rule "IM|OF/PGP requires PPSM/PGP" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PGP', actorIntegrationProfile.actor.keyword == 'IM' || == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'PGP') then #myGlobalList.add( "IM|OF/PGP requires PPSM/PGP"); l = new ArrayList>() ; l.add( new Pair("An IM or OF actor in PGP requires" , new ActorIntegrationProfileOption( "PPSM","PGP" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "MOD/PGP requires MOD/CPI" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PGP', actorIntegrationProfile.actor.keyword == 'MOD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'CPI') then # myGlobalList.add( "MOD/PGP requires MOD/CPI"); l = new ArrayList>() ; l.add( new Pair("MOD in PGP requires" , new ActorIntegrationProfileOption( "MOD","CPI" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 ## Because it already covers part of "IM|OF/PGP requires ID/CPI", so made change in IM|OF/PGP as well rule "OF/PGP requires OF/SWF and ID/CPI and ID/ARI" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PGP', actorIntegrationProfile.actor.keyword == 'OF') not (ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'OF') and ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'CPI', actorIntegrationProfile.actor.keyword == 'ID') and ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'ARI', actorIntegrationProfile.actor.keyword == 'ID')) then # myGlobalList.add( "OF/PGP requires OF/SWF and ID/CPI and ID/ARI"); l = new ArrayList>() ; l.add( new Pair("OF in PGP requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "ID","CPI" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "ID","ARI" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 ## Because it already covers part of "IM|OF/PGP requires ID/CPI", so made change in IM|OF/PGP as well rule "IM/PGP requires IM/SWF and IM/CPI and ID/CPI" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PGP', actorIntegrationProfile.actor.keyword == 'IM') not (ActorIntegrationProfileOption (actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'IM') and ActorIntegrationProfileOption(actorIntegrationProfile.integrationProfile.keyword == 'CPI', actorIntegrationProfile.actor.keyword == 'IM') and ActorIntegrationProfileOption(actorIntegrationProfile.integrationProfile.keyword == 'CPI', actorIntegrationProfile.actor.keyword == 'ID')) then # myGlobalList.add( "IM/PGP requires IM/SWF and IM/CPI and ID/CPI"); l = new ArrayList>() ; l.add( new Pair("IM in PGP requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "IM","CPI" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "ID","CPI" , null ) ) ) ; myGlobalList.add( l ) ; end #### PERF #### #No rules #### PIR #### ## From KUDU rule "IM|OF/PIR requires PPSM/PIR" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'OF' || == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'PIR') then # myGlobalList.add( "OF|IM/PIR requires PPSM/PIR"); l = new ArrayList>() ; l.add( new Pair("An OF or IM actor in PIR requires" , new ActorIntegrationProfileOption( "PPSM","PIR" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "ADT/PIR requires ADT/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'ADT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ADT', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "ADT/PIR requires ADT/SWF"); l = new ArrayList>() ; l.add( new Pair("ADT in PIR requires" , new ActorIntegrationProfileOption( "ADT","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "OP/PIR requires OP/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'OP') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OP', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then #myGlobalList.add( "OP/PIR requires OP/SWF"); l = new ArrayList>() ; l.add( new Pair("OP in PIR requires" , new ActorIntegrationProfileOption( "OP","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "OF/PIR requires OF/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "OF/PIR requires OF/SWF"); l = new ArrayList>() ; l.add( new Pair("OF in PIR requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RM/PIR requires RM/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'RM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RM', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "RM/PIR requires RM/SWF"); l = new ArrayList>() ; l.add( new Pair("RM in PIR requires" , new ActorIntegrationProfileOption( "RM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "IM/PIR requires IM/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "IM/PIR requires IM/SWF"); l = new ArrayList>() ; l.add( new Pair("IM in PIR requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "MOD/PIR requires MOD/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'MOD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then #myGlobalList.add( "MOD/PIR requires MOD/SWF"); l = new ArrayList>() ; l.add( new Pair("MOD in PIR requires" , new ActorIntegrationProfileOption( "MOD","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### PIR Rules with Option dependency #### ## Reference: MIMA Trial Implementation Profile, Vol 2.1, Table 2-1 rule "IM/PIR/MULT_IDENTITY_RESOLUTION requires IM/SWF/MULT_IDENTITY_RESOLUTION" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'IM', integrationProfileOption != null && (integrationProfileOption.keyword == 'MULT_IDENTITY_RESOLUTION')) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF', integrationProfileOption.keyword == 'MULT_IDENTITY_RESOLUTION') then l = new ArrayList>() ; l.add( new Pair("IM in PIR with MULT_IDENTITY_RESOLUTION option requires" , new ActorIntegrationProfileOption( "IM","SWF" , "MULT_IDENTITY_RESOLUTION" ) ) ) ; myGlobalList.add( l ) ; end #### PWF #### ## Reference: RAD TF1 Table 2-1 rule "OF/PWF requires OF/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PWF', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "OF/PWF requires OF/SWF"); l = new ArrayList>() ; l.add( new Pair("OF in PWF requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "IM/PWF requires IM/SWF | IM/ED | IM/NMI" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PWF', actorIntegrationProfile.actor.keyword == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'ED' || == 'NMI') then #myGlobalList.add( "IM/PWF requires IM/SWF | IM/ED | IM/NMI"); l = new ArrayList>() ; l.add( new Pair("IM in PWF requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or IM in PWF requires" , new ActorIntegrationProfileOption( "IM","ED" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or IM in PWF requires" , new ActorIntegrationProfileOption( "IM","NMI" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "EC/PWF requires EC/SWF | EC/ED | EC/NMI" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PWF', actorIntegrationProfile.actor.keyword == 'EC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'EC', actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'ED' || == 'NMI') then # myGlobalList.add( "EC/PWF requires EC/SWF | EC/ED | EC/NMI"); l = new ArrayList>() ; l.add( new Pair("EC in PWF requires" , new ActorIntegrationProfileOption( "EC","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or EC in PWF requires" , new ActorIntegrationProfileOption( "EC","ED" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or EC in PWF requires" , new ActorIntegrationProfileOption( "EC","NMI" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "ID/PWF requires ID/SWF | ID/ED | ID/NMI" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PWF', actorIntegrationProfile.actor.keyword == 'ID') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'SWF' || == 'ED' || == 'NMI') then #myGlobalList.add( "ID/PWF requires ID/SWF | ID/ED | ID/NMI"); l = new ArrayList>() ; l.add( new Pair("ID in PWF requires" , new ActorIntegrationProfileOption( "ID","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ID in PWF requires" , new ActorIntegrationProfileOption( "ID","ED" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ID in PWF requires" , new ActorIntegrationProfileOption( "ID","NMI" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 2.5 Product Implementations rule "PPM/PWF requires IM/PWF || OF/PWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PWF', actorIntegrationProfile.actor.keyword == 'PPM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'PWF') then # myGlobalList.add( "The Post-Processing Manager shall be grouped with either an Image Manager or a Department System Scheduler."); l = new ArrayList>() ; l.add( new Pair("PPM in PWF requires" , new ActorIntegrationProfileOption( "IM","PWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PPM in PWF requires" , new ActorIntegrationProfileOption( "OF","PWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 2.5 Product Implementations rule "EC/PWF requires ID/PWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PWF', actorIntegrationProfile.actor.keyword == 'EC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'EC', actorIntegrationProfile.integrationProfile.keyword == 'PWF') then # myGlobalList.add( "The Evidence Creator participating in Post-Processing Workflow shall be grouped with an Image Display."); l = new ArrayList>() ; l.add( new Pair("EC in PWF requires" , new ActorIntegrationProfileOption( "ID","PWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### REM rules #### ##No rules #### RWF #### ## From TF1 Table 13.1-1 ##rule "RC/RWF requires RRD/RWF" ## when ## ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RWF', actorIntegrationProfile.actor.keyword == 'RC') ## not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RRD', actorIntegrationProfile.integrationProfile.keyword == 'RWF') ## then ## #myGlobalList.add( "RC/RWF requires RRD/RWF"); ## l = new ArrayList>() ; ## l.add( new Pair("RC in RWF requires" , new ActorIntegrationProfileOption( "RRD","RWF" , null ) ) ) ; ## myGlobalList.add( l ) ; ##end ## Reference: RAD TF1 2.5 Product Implementations rule "IM|OF/RWF requires PPSM/RWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RWF', actorIntegrationProfile.actor.keyword == 'IM' || == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'RWF') then #myGlobalList.add( "IM|OF/RWF requires PPSM/RWF"); l = new ArrayList>() ; l.add( new Pair("An IM or OF in RWF requires" , new ActorIntegrationProfileOption( "PPSM","RWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "OF/RWF requires OF/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RWF', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "OF/RWF requires OF/SWF"); l = new ArrayList>() ; l.add( new Pair("OF in RWF requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "IM/RWF requires IM/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RWF', actorIntegrationProfile.actor.keyword == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then #myGlobalList.add( "IM/RWF requires IM/SWF"); l = new ArrayList>() ; l.add( new Pair("IM in RWF requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RRD/RWF requires RRD/SINR" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RWF', actorIntegrationProfile.actor.keyword == 'RRD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RRD', actorIntegrationProfile.integrationProfile.keyword == 'SINR') then #myGlobalList.add( "RRD/RWF requires RRD/SINR"); l = new ArrayList>() ; l.add( new Pair("RRD in RWF requires" , new ActorIntegrationProfileOption( "RRD","SINR" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RM/RWF requires RM/SINR" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RWF', actorIntegrationProfile.actor.keyword == 'RM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RM', actorIntegrationProfile.integrationProfile.keyword == 'SINR') then #myGlobalList.add( "RM/RWF requires RM/SINR"); l = new ArrayList>() ; l.add( new Pair("RM in RWF requires" , new ActorIntegrationProfileOption( "RM","SINR" , null ) ) ) ; myGlobalList.add( l ) ; end #### SEC #### # PROFILE DEPRECATED #### SINR #### # No Rules #### SWF #### rule "OF|IM/SWF requires PPSM/SWF" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'OF' || == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then #myGlobalList.add( "OF|IM/SWF requires PPSM/SWF"); l = new ArrayList>() ; l.add( new Pair("An OF or IM in SWF requires" , new ActorIntegrationProfileOption( "PPSM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### SWF Rules with Option dependency #### ## Reference: MIMA Trial Implementation Profile, Vol 2.1, Table 2-1 rule "IM/SWF/MULT_IDENTITY_RESOLUTION requires IM/PIR/MULT_IDENTITY_RESOLUTION" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'IM', integrationProfileOption != null && (integrationProfileOption.keyword == 'MULT_IDENTITY_RESOLUTION')) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'PIR', integrationProfileOption.keyword == 'MULT_IDENTITY_RESOLUTION') then l = new ArrayList>() ; l.add( new Pair("IM in SWF with MULT_IDENTITY_RESOLUTION option requires" , new ActorIntegrationProfileOption( "IM","PIR" , "MULT_IDENTITY_RESOLUTION" ) ) ) ; myGlobalList.add( l ) ; end ## Reference: MIMA Trial Implementation Profile, Vol 2.1, Table 2-1 rule "IM/SWF/MULT_IDENTITY_RESOLUTION requires PAT_IDENTITY_CONSUMER/PIX" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'SWF', actorIntegrationProfile.actor.keyword == 'IM', integrationProfileOption != null && (integrationProfileOption.keyword == 'MULT_IDENTITY_RESOLUTION')) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PAT_IDENTITY_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'PIX') then l = new ArrayList>() ; l.add( new Pair("IM in SWF with MULT_IDENTITY_RESOLUTION option requires" , new ActorIntegrationProfileOption( "PAT_IDENTITY_CONSUMER","PIX" , null ) ) ) ; myGlobalList.add( l ) ; end #### TCE #### #No rules #### XDS-I.b #### # Reference: IHE ITI TF-1: Table 2.1 rule "XDS-I.b requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XDS-I.b') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "XDS-I.b requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All XDS-I.b actors require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all XDS-I.b actors require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Manager Rule ## rule "DOC_REPOSITORY/XDS-I.b requires DOC_REPOSITORY/XDS.b" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REPOSITORY', actorIntegrationProfile.integrationProfile.keyword == 'XDS-I.b') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REPOSITORY', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) then #myGlobalList.add( "DOC_REPOSITORY/XDS-I.b requires DOC_REPOSITORY/XDS.b"); l = new ArrayList>() ; l.add( new Pair("DOC_REPOSITORY in XDS-I.b requires" , new ActorIntegrationProfileOption( "DOC_REPOSITORY","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; end ## Manager Rule ## rule "DOC_REGISTRY/XDS-I.b requires DOC_REGISTRY/XDS.b" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REGISTRY', actorIntegrationProfile.integrationProfile.keyword == 'XDS-I.b') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REGISTRY', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) then #myGlobalList.add( "DOC_REGISTRY/XDS-I.b requires DOC_REGISTRY/XDS.b"); l = new ArrayList>() ; l.add( new Pair("DOC_REGISTRY in XDS-I.b requires" , new ActorIntegrationProfileOption( "DOC_REGISTRY","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; end ########################################################## #################### Cardiology Rules #################### ########################################################## #### CATH #### ## CARD TF-1: Table 2.1 rule "MOD|OF/CATH requires TIME_CLIENT/CT" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'CATH') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "MOD|OF/CATH requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("A MOD or OF in CATH requires" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end ## CARD TF-1: Table 2.1 rule "IM|OF/CATH requires PPSM/CATH" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'CATH') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'CATH' ) then #myGlobalList.add( "IM|OF/CATH requires PPSM/CATH"); l = new ArrayList>() ; l.add( new Pair("An IM or OF in CATH requires" , new ActorIntegrationProfileOption( "PPSM","CATH" , null ) ) ) ; myGlobalList.add( l ) ; end #### DRPT #### ## Reference: CARD TF-1 Table 2.1 rule "RRP|INTEG_RM_RRP/DRPT requires INFO_SRC/RID" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RRP' || == 'INTEG_RM_RRP', actorIntegrationProfile.integrationProfile.keyword == 'DRPT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INFO_SRC', actorIntegrationProfile.integrationProfile.keyword == 'RID' ) then #myGlobalList.add( "RRP|INTEG_RM_RRP/DRPT requires INFO_SRC/RID"); l = new ArrayList>() ; l.add( new Pair("A RRP or INTEG_RM_RRP in DRPT requires" , new ActorIntegrationProfileOption("INFO_SRC","RID", null ) ) ) ; myGlobalList.add( l ); end #### ECHO #### ## CARD TF-1: Table 2.1 rule "IM|OF/ECHO requires PPSM/ECHO" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'ECHO') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'ECHO' ) then #myGlobalList.add( "IM|OF/ECHO requires PPSM/ECHO"); l = new ArrayList>() ; l.add( new Pair("An IM or OF in ECHO requires" , new ActorIntegrationProfileOption( "PPSM","ECHO" , null ) ) ) ; myGlobalList.add( l ) ; end #### ED-CARD #### # NO RULES #### IEO #### ## Reference: CARD TF-1 Table 2.1 rule "EHRS/IEO requires INFO_SRC/RID" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'EHRS', actorIntegrationProfile.integrationProfile.keyword == 'IEO') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INFO_SRC', actorIntegrationProfile.integrationProfile.keyword == 'RID' ) then #myGlobalList.add( "EHRS/IEO requires INFO_SRC/RID"); l = new ArrayList>() ; l.add( new Pair("EHRS in IEO requires" , new ActorIntegrationProfileOption("INFO_SRC","RID", null ) ) ) ; myGlobalList.add( l ); end ## CARD TF-1: Table 2.1 rule "INTEG_EHRS/IEO requires INFO_SRC/RID" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INTEG_EHRS', actorIntegrationProfile.integrationProfile.keyword == 'IEO') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INFO_SRC', actorIntegrationProfile.integrationProfile.keyword == 'RID' ) then #myGlobalList.add( "INTEG_EHR-S/IEO requires INFO_SRC/RID"); l = new ArrayList>() ; l.add( new Pair("INTEG_EHRS in IEO requires" , new ActorIntegrationProfileOption("INFO_SRC","RID", null ) ) ) ; myGlobalList.add( l ); end ## Reference: CARD TF-1: 10.1.1.2 rule "OF/IEO requires PPSM/IEO" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'OF' , actorIntegrationProfile.integrationProfile.keyword == 'IEO') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'IEO') then #myGlobalList.add( "OF/IEO requires PPSM/IEO"); l = new ArrayList>() ; l.add( new Pair("OF in IEO requires" , new ActorIntegrationProfileOption( "PPSM","IEO" , null ) ) ) ; myGlobalList.add( l ) ; end ## CARD TF-1: Table 2.1 rule "RC/IEO requires MOD|ID/IEO" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RC', actorIntegrationProfile.integrationProfile.keyword == 'IEO') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD' || == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'IEO' ) then #myGlobalList.add( "RC/IEO requires MOD/IEO or ID/IEO"); l = new ArrayList>() ; l.add( new Pair("RC in IEO requires" , new ActorIntegrationProfileOption( "MOD","IEO" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or RC in IEO requires" , new ActorIntegrationProfileOption( "ID","IEO" , null ) ) ) ; myGlobalList.add( l ) ; end #### REWF - Resting ECG #### ## Reference: CARD TF-1 Table 2.1 rule "OF/REWF requires RC/DRPT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'REWF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RC', actorIntegrationProfile.integrationProfile.keyword == 'DRPT' ) then #myGlobalList.add( "OF/REWF requires RC/DRPT"); l = new ArrayList>() ; l.add( new Pair("OF in REWF requires" , new ActorIntegrationProfileOption("RC","DRPT", null ) ) ) ; myGlobalList.add( l ); end rule "OF/REWF requires RC/REWF" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'REWF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RC', actorIntegrationProfile.integrationProfile.keyword == 'REWF' ) then #myGlobalList.add( "OF/REWF requires RC/REWF"); l = new ArrayList>() ; l.add( new Pair("OF in REWF requires" , new ActorIntegrationProfileOption("RC","REWF", null ) ) ) ; myGlobalList.add( l ); end ## CARD TF-1: Table 2.1 rule "MOD/REWF requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'REWF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "MOD/REWF requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("MOD in REWF requires" , new ActorIntegrationProfileOption("TIME_CLIENT","CT", null ) ) ) ; myGlobalList.add( l ); end rule "IM|OF/REWF requires PPSM/REWF" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'REWF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'REWF' ) then #myGlobalList.add( "IM|OF/REWF requires PPSM/REWF"); l = new ArrayList>() ; l.add( new Pair("An IM or OF in REWF requires" , new ActorIntegrationProfileOption( "PPSM","REWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### STRESS #### rule "IM|OF/STRESS requires PPSM/STRESS" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'STRESS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'STRESS' ) then #myGlobalList.add( "IM|OF/STRESS requires PPSM/STRESS"); l = new ArrayList>() ; l.add( new Pair("An IM or OF in STRESS requires" , new ActorIntegrationProfileOption( "PPSM","STRESS" , null ) ) ) ; myGlobalList.add( l ) ; end rule "MOD|OF/STRESS requires TIME_CLIENT/CT" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'MOD' || == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'STRESS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "MOD|OF/STRESS requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("A MOD or OF in STRESS requires" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end ## CARD TF-1: Table 2.1 rule "ID/STRESS requires ID/ECHO" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'STRESS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'ECHO' ) then #myGlobalList.add( "ID/STRESS requires ID/ECHO"); l = new ArrayList>() ; l.add( new Pair("ID in STRESS requires" , new ActorIntegrationProfileOption("ID","ECHO", null ) ) ) ; myGlobalList.add( l ); end ## CARD TF-1: Table 2.1 rule "IM/STRESS requires IM/ECHO" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'STRESS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'ECHO' ) then #myGlobalList.add( "IM/STRESS requires IM/ECHO"); l = new ArrayList>() ; l.add( new Pair("IM in STRESS requires" , new ActorIntegrationProfileOption("IM","ECHO", null ) ) ) ; myGlobalList.add( l ); end ## CARD TF-1: Table 2.1 rule "IM/STRESS requires IM/NMI" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'STRESS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'NMI' ) then #myGlobalList.add( "IM/STRESS requires IM/NMI"); l = new ArrayList>() ; l.add( new Pair("IM in STRESS requires" , new ActorIntegrationProfileOption("IM","NMI", null ) ) ) ; myGlobalList.add( l ); end #### STRESS Image Display must implement NMI/Image Display with Cardiac NM option #### ## CARD TF-1: Table 8.1-1 rule "ID/STRESS requires ID/NMI/CARDIAC_NM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'STRESS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ID', actorIntegrationProfile.integrationProfile.keyword == 'NMI' ) then l = new ArrayList>() ; l.add( new Pair("ID in STRESS requires" , new ActorIntegrationProfileOption( "ID","NMI" , "CARDIAC_NM" ) ) ) ; myGlobalList.add( l ) ; end /* Commented out in the 20-Sep-2010 version of the drools file. This syntax is incorrect #### STRESS Modality Rules on Required Options #### ## CARD TF-1: 8.2 rule "MOD/STESS requires option NUCLEAR_MEDICINE or STRESS_ECHO or STRESS_ECG" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'STRESS', actorIntegrationProfile.actor.keyword == 'MOD') not ActorIntegrationProfileOption (integrationProfileOption != null && (integrationProfileOption.keyword == 'NUCLEAR_MEDICINE' || == 'STRESS_ECHO' || == 'STRESS_ECG')) then l = new ArrayList>() ; l.add( new Pair("MOD in STRESS requires" , new ActorIntegrationProfileOption( "MOD","STRESS" , "NUCLEAR_MEDICINE" ) ) ) ; l = new ArrayList>() ; l.add( new Pair("or MOD in STRESS requires" , new ActorIntegrationProfileOption( "MOD","STRESS" , "STRESS_ECHO" ) ) ) ; l = new ArrayList>() ; l.add( new Pair("or MOD in STRESS requires" , new ActorIntegrationProfileOption( "MOD","STRESS" , "STRESS_ECG" ) ) ) ; myGlobalList.add( l ) ; end */ ############################################################ ######################## Eyecare ########################### ############################################################ #### ECAS rules #### # No rules #### EC-CHG rules #### # No rules #### ECDR rules #### # No rules #### ECED rules ##### # No rules #### EYECARE #### # IHE Eye Care Technical Framework, vol. I: Integration Profiles Section 2.5 rule "OF|IM/EYECARE requires PPSM/EYECARE" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'OF' || == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'EYECARE') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'EYECARE') then #myGlobalList.add( "OF|IM/EYECARE requires PPSM/EYECARE"); l = new ArrayList>() ; l.add( new Pair("OF or IM in EYECARE requires" , new ActorIntegrationProfileOption( "PPSM","EYECARE" , null ) ) ) ; myGlobalList.add( l ) ; end ############################## ######## ITI Rules ########### ############################## ### ATNA rules #### # Reference: IHE ITI TF-1: Table 2.1 rule "SN|SA|ARR/ATNA requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA' || == 'ARR' , actorIntegrationProfile.integrationProfile.keyword == "ATNA") not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "TIME_CLIENT", actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "SN|SA|ARR/ATNA requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in ATNA require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### BPPC rules #### # Reference: IHE ITI TF-1: Table 2-1 rule "CONTENT_CONSUMER/BPPC requires CONTENT_CONSUMER/XDS-SD" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'BPPC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-SD' ) then #myGlobalList.add( "CONTENT_CONSUMER/BPPC requires CONTENT_CONSUMER/XDS-SD"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in BPPC requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","XDS-SD" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: ITI TF-1: Table 2-1 rule "CONTENT_CREATOR/BPPC requires DOC_SOURCE/XDS.b|XDR or PMC/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'BPPC') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' || == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMC', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "CONTENT_CREATOR/BPPC requires DOC_SOURCE/XDS.b|XDR or PMC/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in BPPC requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in BPPC requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in BPPC requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: ITI TF-1: Table 2-1 rule "CONTENT_CONSUMER/BPPC requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'BPPC') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "CONTENT_CONSUMER/BPPC requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in BPPC requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in BPPC requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in BPPC requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #### CT rules #### # No rules #### DRR rules #### # Reference: DRR TI Supplement Vol 1 Table 2-1 rule "REFERRAL_REQUESTOR/DRR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'REFERRAL_REQUESTOR', actorIntegrationProfile.integrationProfile.keyword == 'DRR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "REFERRAL_REQUESTOR/DRR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("REFERRAL_REQUESTOR in DRR requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or REFERRAL_REQUESTOR in DRR requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: DRR TI Supplement Vol 1 Table 2-1 rule "REFERRAL_DISPATCHER/DRR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'REFERRAL_DISPATCHER', actorIntegrationProfile.integrationProfile.keyword == 'DRR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "REFERRAL_DISPATCHER/DRR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("REFERRAL_DISPATCHER in DRR requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or REFERRAL_DISPATCHER in DRR requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: DRR TI Supplement Vol 1 Table 2-1 rule "REFERRAL_REQUESTOR/DRR requires CONTENT_CREATOR/XDS-MS" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'REFERRAL_REQUESTOR', actorIntegrationProfile.integrationProfile.keyword == 'DRR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS' ) then #myGlobalList.add( "REFERRAL_REQUESTOR/DRR requires CONTENT_CREATOR/XDS-MS"); l = new ArrayList>() ; l.add( new Pair("REFERRAL_REQUESTOR in DRR requires" , new ActorIntegrationProfileOption( "CONTENT_CREATOR","XDS-MS" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: DRR TI Supplement Vol 1 Table 2-1 rule "REFERRAL_DISPATCHER/DRR requires CONTENT_CONSUMER/XDS-MS" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'REFERRAL_DISPATCHER', actorIntegrationProfile.integrationProfile.keyword == 'DRR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS' ) then #myGlobalList.add( "REFERRAL_DISPATCHER/DRR requires CONTENT_CONSUMER/XDS-MS"); l = new ArrayList>() ; l.add( new Pair("REFERRAL_DISPATCHER in DRR requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","XDS-MS" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: DRR TI Supplement Vol 1 Table 2-1 rule "REFERRAL_REQUESTOR/DRR requires DOC_SOURCE/XDS.b|XDR or PMC/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'REFERRAL_REQUESTOR', actorIntegrationProfile.integrationProfile.keyword == 'DRR') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' || == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMC', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "REFERRAL_REQUESTOR/DRR requires DOC_SOURCE/XDS.b|XDR or PMC/XDM"); l = new ArrayList>() ; l.add( new Pair("REFERRAL_REQUESTOR in DRR requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or REFERRAL_REQUESTOR in DRR requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or REFERRAL_REQUESTOR in DRR requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: DRR TI Supplement Vol 1 Table 2-1 rule "REFERRAL_DISPATCHER/DRR requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'REFERRAL_DISPATCHER', actorIntegrationProfile.integrationProfile.keyword == 'DRR') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "REFERRAL_DISPATCHER/DRR requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM"); l = new ArrayList>() ; l.add( new Pair("REFERRAL_DISPATCHER in DRR requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or REFERRAL_DISPATCHER in DRR requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or REFERRAL_DISPATCHER in DRR requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #### DSG rules #### # No Rules #### DSUB RULES #### ## Reference: DSUB Suppl. Vol 1 Table 2-1 rule "DM_NOTIF_BROKER/DSUB requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DM_NOTIF_BROKER', actorIntegrationProfile.integrationProfile.keyword == 'DSUB') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DM_NOTIF_BROKER/DSUB requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("DM_NOTIF_BROKER in DSUB requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or DM_NOTIF_BROKER in DSUB requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSUB Suppl. Vol 1 Table 2-1 rule "DM_PUBLISHER/DSUB requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DM_PUBLISHER', actorIntegrationProfile.integrationProfile.keyword == 'DSUB') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DM_PUBLISHER/DSUB requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("DM_PUBLISHER in DSUB requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or DM_PUBLISHER in DSUB requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSUB Suppl. Vol 1 Table 2-1 rule "DM_SUBSCRIBER/DSUB requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DM_SUBSCRIBER', actorIntegrationProfile.integrationProfile.keyword == 'DSUB') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DM_SUBSCRIBER/DSUB requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("DM_SUBSCRIBER in DSUB requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or DM_SUBSCRIBER in DSUB requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSUB Suppl. Vol 1 Table 2-1 rule "DM_NOTIF_RECIPIENT/DSUB requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DM_NOTIF_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'DSUB') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DM_NOTIF_RECIPIENT/DSUB requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("DM_NOTIF_RECIPIENT in DSUB requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or DM_NOTIF_RECIPIENT in DSUB requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### EUA rules #### # Reference: IHE ITI TF-1: Table 2-1 rule "CONTXT_MGR|KER_AUTH_SVR|KER_SVR|USER_CONTXT_PARTICIPANT|CAA/EUA requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTXT_MGR' || == 'KER_AUTH_SVR' || == 'KER_SVR' || == 'USER_CONTXT_PARTICIPANT' || == 'CAA', actorIntegrationProfile.integrationProfile.keyword == 'EUA') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "CONTXT_MGR|KER_AUTH_SVR|KER_SVR|USER_CONTXT_PARTICIPANT|CAA/EUA requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in EUA require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### HPD rules #### # No rules #### MPQ Rules #### ## Reference: MPQ TI Supplement Vol 1 Table 2.1 rule "DOC_CONSUMER/MPQ requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'MPQ') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DOC_CONSUMER/MPQ requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("DOC_CONSUMER in MPQ requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or DOC_CONSUMER in MPQ requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: MPQ TI Supplement Vol 1 Table 2.1 rule "DOC_REGISTRY/MPQ requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REGISTRY', actorIntegrationProfile.integrationProfile.keyword == 'MPQ') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DOC_REGISTRY/MPQ requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("DOC_REGISTRY in MPQ requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or DOC_REGISTRY in MPQ requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### NAV rules #### # No rules #### PAM rules #### # No rules #### PDQ rules #### # No rules #### PDQV3 rules #### # No rules #### PIX #### # Reference: IHE ITI TF-1: Table 2.1 rule "PAT_IDENTITY_CONSUMER|PAT_IDENTITY_SRC|PAT_IDENTITY_X_REF_MGR/PIX requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PAT_IDENTITY_CONSUMER' || == 'PAT_IDENTITY_SRC' || == 'PAT_IDENTITY_X_REF_MGR', actorIntegrationProfile.integrationProfile.keyword == 'PIX') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "PAT_IDENTITY_CONSUMER|PAT_IDENTITY_SRC|PAT_IDENTITY_X_REF_MGR/PIX requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in PIX require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### PIXV3 #### # Reference: IHE ITI TF-1: Table 2.1 rule "PAT_IDENTITY_CONSUMER|PAT_IDENTITY_SRC|PAT_IDENTITY_X_REF_MGR/PIXV3 requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PAT_IDENTITY_CONSUMER' || == 'PAT_IDENTITY_SRC' || == 'PAT_IDENTITY_X_REF_MGR', actorIntegrationProfile.integrationProfile.keyword == 'PIXV3') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "PAT_IDENTITY_CONSUMER|PAT_IDENTITY_SRC|PAT_IDENTITY_X_REF_MGR/PIXV3 requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in PIXV3 require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### PSA rules #### # No Rules #### PWP rules #### # No Rules #### RFD rules #### # No Rules #### RID rules #### # No Rules #### SVS #### # Reference: SVS TI Supplement Vol 1 Table 2-1 and Vol 2 3.48.6 rule "VALUE_SET_REPOSITORY/SVS requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'VALUE_SET_REPOSITORY', actorIntegrationProfile.integrationProfile.keyword == 'SVS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "VALUE_SET_REPOSITORY/SVS requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("VALUE_SET_REPOSITORY in SVS requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or VALUE_SET_REPOSITORY in SVS requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XCA #### # Reference: IHE TF Supplement XCA 18.4.2 rule "INIT_GATEWAY|RESP_GATEWAY/XCA requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INIT_GATEWAY' || == 'RESP_GATEWAY', actorIntegrationProfile.integrationProfile.keyword == 'XCA') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "INIT_GATEWAY|RESP_GATEWAY/XCA requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in XCA require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in XCA require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XCPD RULES #### ## Reference: XCPD TI Supplement Vol 1 Table 2.1 rule "INIT_GATEWAY|RESP_GATEWAY/XCPD requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INIT_GATEWAY' || == 'RESP_GATEWAY', actorIntegrationProfile.integrationProfile.keyword == 'XCPD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "INIT_GATEWAY|RESP_GATEWAY/XCPD requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in XCPD require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in XCPD require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDM #### # Reference IHE ITI TF-1: Table 2-1 rule "PMC|PMI/XDM requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PMC' || == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "XDM requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in XDM require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in XDM require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDR #### # Reference:ITI TF-1: Table 2.1 rule "DOC_RECIPIENT|DOC_SOURCE/XDR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT' || == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "DOC_RECIPIENT|DOC_SOURCE/XDR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in XDR require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in XDR require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDS.b #### # Reference: IHE ITI TF-1: Table 2.1 rule "XDS.b requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == "XDS.b") not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == "ATNA") then #myGlobalList.add( "XDS.b requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in XDS.b require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in XDS.b require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end /* Commented out in the 20-Sep-2010 version of the drools file. This syntax is incorrect #### XDS.b Registry Rules on Required Options #### ## ITI TF-1: Table 10.2-1b rule "DOC_REGISTRY/XDS.b requires option HL7_V2 or HL7v3" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XDS.b', actorIntegrationProfile.actor.keyword == 'DOC_REGISTRY') not ActorIntegrationProfileOption (integrationProfileOption != null && (integrationProfileOption.keyword == 'HL7_V2' || == 'HL7V3')) then l = new ArrayList>() ; l.add( new Pair("DOC_REGISTRY in XDS.b requires" , new ActorIntegrationProfileOption( "DOC_REGISTRY","XDS.b" , "HL7_V2" ) ) ) ; l = new ArrayList>() ; l.add( new Pair("or DOC_REGISTRY in XDS.b requires" , new ActorIntegrationProfileOption( "DOC_REGISTRY","XDS.b" , "HL7V3" ) ) ) ; myGlobalList.add( l ) ; end */ #### XDS-SD Rules #### # Reference: ITI TF-1: Table 2-1 rule "CONTENT_CREATOR/XDS-SD requires DOC_SOURCE/XDS.b|XDR or PMC/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XDS-SD') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' || == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMC', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "CONTENT_CREATOR/XDS-SD requires DOC_SOURCE/XDS.b|XDR or PMC/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in XDS-SD requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in XDS-SD requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in XDS-SD requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: ITI TF-1: Table 2-1 rule "CONTENT_CONSUMER/XDS-SD requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-SD') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR')or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM')) then #myGlobalList.add( "CONTENT_CONSUMER/XDS-SD requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in XDS-SD requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in XDS-SD requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in XDS-SD requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #### XUA rules #### # No Rules ########################################################## ############# Anatomic Pathology Rules ################### ########################################################## #### APW #### ## Reference: PAT TF-1: Table 1.17-1 (2008) rule "*/APW requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ARPH', actorIntegrationProfile.actor.keyword == 'OP' || == 'OF' || == 'MOD' || == 'IM' || == 'ID' || == 'EC' || == 'ORT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "OP|OF|MOD|IM|ID|EC|ORT/APW requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in APW require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### APW #### ## Reference: PAT TF-1: Table 1.17-1 (2008) ## "OP/APW requires [(PDS/PAM and PES/PAM) or (PDC/PAM and PES/PAM) or (PDC/PAM and PEC/PAM)]" rule "OP/APW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OP', actorIntegrationProfile.integrationProfile.keyword == 'APW') not ( (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDS', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PEC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') ) ) then #myGlobalList.add( "OP/APW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ"); l = new ArrayList>() ; l.add( new Pair("OP in APW requires" , new ActorIntegrationProfileOption( "PDS","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OP in APW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OP in APW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PEC","PAM" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: PAT TF-1: Table 1.17-1 (2008) ## "OF/APW requires [(PDS/PAM and PES/PAM) or (PDC/PAM and PES/PAM) or (PDC/PAM and PEC/PAM)]" rule "OF/APW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'APW') not ( (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDS', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PEC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') ) ) then #myGlobalList.add( "OF/APW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ"); l = new ArrayList>() ; l.add( new Pair("OF in APW requires" , new ActorIntegrationProfileOption( "PDS","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OF in APW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or OF in APW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PEC","PAM" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: PAT TF-1: Table 1.17-1 (2008) ## rule "orT/APW requires [(PDS/PAM and PES/PAM) or (PDC/PAM and PES/PAM) or (PDC/PAM and PEC/PAM)]" rule "orT/APW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ORT', actorIntegrationProfile.integrationProfile.keyword == 'APW') not ( (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDS', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PES', actorIntegrationProfile.integrationProfile.keyword == 'PAM')) or (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PEC', actorIntegrationProfile.integrationProfile.keyword == 'PAM') ) ) then #myGlobalList.add( "orT/APW requires PDS&PES/PAM OR PDC&PES/PAM OR PDC&PEC/PAM OR PDC/PDQ"); l = new ArrayList>() ; l.add( new Pair("orT in APW requires" , new ActorIntegrationProfileOption( "PDS","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ORT in APW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PES","PAM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or ORT in APW requires" , new ActorIntegrationProfileOption( "PDC","PAM" , null ) ) ) ; l.add( new Pair("and" , new ActorIntegrationProfileOption( "PEC","PAM" , null ) ) ) ; myGlobalList.add( l ) ; end #### ARPH #### ## Reference: ARPH Trial Implementation Supplement Section 1.7 rule "RPT_SENDER|RPT_RECEIVER/ARPH requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'ARPH', actorIntegrationProfile.actor.keyword == 'RPT_SENDER' || == 'RPT_RECEIVER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "RPT_SENDER|RPT_RECEIVER/ARPH requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("RPT_SENDER or RPT_RECEIVER in ARPH requires" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end ############################################ ############# QRPH Rules ################### ############################################ #### CRD #### ## Reference: CRD TI Profile Vol 1 Sec 1.1 (2009) rule "FORM_FILLER/CRD requires FORM_FILLER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_FILLER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_FILLER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "FORM_FILLER/CRD requires FORM_FILLER/RFD"); l = new ArrayList>() ; l.add( new Pair("FORM_FILLER in CRD requires" , new ActorIntegrationProfileOption( "FORM_FILLER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: CRD TI Profile Vol 1 Sec 1.1 (2009) rule "FORM_MANAGER/CRD requires FORM_MANAGER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_MANAGER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_MANAGER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "FORM_MANAGER/CRD requires FORM_MANAGER/RFD"); l = new ArrayList>() ; l.add( new Pair("FORM_MANAGER in CRD requires" , new ActorIntegrationProfileOption( "FORM_MANAGER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end /* Note Aug 2010: Expect the Archiver actor will be removed from the CRD profile ## Reference: CRD TI Profile Vol 1 Sec 1.1 (2009) rule "FORM_ARCHIVER/CRD requires FORM_ARCHIVER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_ARCHIVER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_ARCHIVER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "FORM_ARCHIVER/CRD requires FORM_ARCHIVER/RFD"); l = new ArrayList>() ; l.add( new Pair("FORM_ARCHIVER in CRD requires" , new ActorIntegrationProfileOption( "FORM_ARCHIVER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end */ #### DSC #### ## Reference: DSC TI Profile Vol 1 Sec 1.1 (2009) rule "FORM_FILLER/DSC requires FORM_FILLER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC', actorIntegrationProfile.actor.keyword == 'FORM_FILLER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_FILLER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "FORM_FILLER/DSC requires FORM_FILLER/RFD"); l = new ArrayList>() ; l.add( new Pair("FORM_FILLER in DSC requires" , new ActorIntegrationProfileOption( "FORM_FILLER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSC TI Profile Vol 1 Sec 1.1 (2009) rule "FORM_MANAGER/DSC requires FORM_MANAGER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC', actorIntegrationProfile.actor.keyword == 'FORM_MANAGER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_MANAGER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "FORM_MANAGER/DSC requires FORM_MANAGER/RFD"); l = new ArrayList>() ; l.add( new Pair("FORM_MANAGER in DSC requires" , new ActorIntegrationProfileOption( "FORM_MANAGER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end #### MCH rules #### rule "CONTENT_CREATOR|CONTENT_CONSUMER/MCH requires SN|SA/ATNA" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR' || == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'MCH') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then #myGlobalList.add( "CONTENT_CREATOR|CONTENT_CONSUMER/MCH requires SN/ATNA or SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in MCH require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in MCH require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end rule "CONTENT_CREATOR/MCH requires FORM_FILLER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MCH', actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_FILLER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "CONTENT_CREATOR/MCH requires FORM_FILLER/RFD"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in MCH requires" , new ActorIntegrationProfileOption( "FORM_FILLER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end rule "CONTENT_CONSUMER/MCH requires FORM_MANAGER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'MCH', actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_MANAGER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then # myGlobalList.add( "CONTENT_CONSUMER/MCH requires FORM_MANAGER/RFD"); l = new ArrayList>() ; l.add( new Pair("FORM_MANAGER in DSC requires" , new ActorIntegrationProfileOption( "FORM_MANAGER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end #### PRPH-Ca Rules #### #PRPH-Ca profile, Sec 2.5 and X.5 "Groupings" rule "CONTENT_CREATOR/PRPH requires DOC_SOURCE/XDS.b|XDR or PMC/XDM or FORM_FILLER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'PRPH') not (ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' || == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMC', actorIntegrationProfile.integrationProfile.keyword == 'XDM') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'FORM_FILLER', actorIntegrationProfile.integrationProfile.keyword == 'RFD')) then #myGlobalList.add( "CONTENT_CREATOR/PRPH requires DOC_SOURCE/XDS.b|XDR or PMC/XDM or FORM_FILLER/RFD"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in PRPH requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in PRPH requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in PRPH requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in PRPH requires" , new ActorIntegrationProfileOption( "FORM_FILLER","RFD" , null ) ) ) ; myGlobalList.add( l ) ;end #PRPH profile, Sec 2.5 and X.5 "Groupings" rule "CONTENT_CONSUMER/PRPH requires DOC_CONSUMER|XDS.b or DOC_RECIPIENT/XDR or PMI/XDM or FORM_MANAGER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'PRPH') not (ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'PMI', actorIntegrationProfile.integrationProfile.keyword == 'XDM') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'FORM_MANAGER', actorIntegrationProfile.integrationProfile.keyword == 'RFD')) then #myGlobalList.add( "CONTENT_CONSUMER/PRPH requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM or FORM_MANAGER/RFD"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in PRPH requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in PRPH requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in PRPH requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in PRPH requires" , new ActorIntegrationProfileOption( "FORM_MANAGER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end #### RPE #### ## No rules. #### RSP #### ## No rules.