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.util.Pair ; import java.util.ArrayList ; global java.util.List myGlobalList; global java.util.List l ; ############################################### ########## Rules that cross domains ########## ############################################### #### Content Consumer Rules on Required Options #### ## PCC TF-1: SEC X.3 (Options table in each profile) rule "CONTENT_CONSUMER/APE requires CONTENT_CONSUMER/APE/PCC_VIEW | CONTENT_CONSUMER/APE/PCC_DOC_IMPORT | CONTENT_CONSUMER/APE/PCC_SECTION_IMPORT | CONTENT_CONSUMER/APE/PCC_DISCRETE_DATA_IMPORT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == "APE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == "APE", integrationProfileOption.keyword == "PCC_VIEW") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == "APE", integrationProfileOption.keyword == "PCC_DOC_IMPORT") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == "APE", integrationProfileOption.keyword == "PCC_SECTION_IMPORT") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == "APE", integrationProfileOption.keyword == "PCC_DISCRETE_DATA_IMPORT") ) then l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER/APE requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","APE" , "PCC_VIEW") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or CONTENT_CONSUMER/APE requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","APE" , "PCC_DOC_IMPORT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or CONTENT_CONSUMER/APE requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","APE" , "PCC_SECTION_IMPORT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or CONTENT_CONSUMER/APE requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","APE" , "PCC_DISCRETE_DATA_IMPORT") ) ) ; myGlobalList.add(l); end ################################ ########## PCC Rules ########## ################################ #### Multiple PCC Content Profiles #### #### Reference: PCC TF-1: Table 2.4-1 #### rule "CONTENT_CREATOR/* requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR' , actorIntegrationProfile.integrationProfile.keyword == 'APE' || == 'APHP' || == 'APL' || == 'APS' || == 'CTNN' || == 'EDPN' || == 'EDR' || == 'ENS' || == 'ETS' || == 'IC' || == 'ITS' || == 'LDHP' || == 'LDS' || == 'MDS' || == 'NDS' || == 'NN' || == 'PPOC' || == 'RECON' || == 'TN' || == 'XPHR' ) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "CONTENT_CREATOR/APE|APHP|APL|APS|CTNN|EDPN|EDR|ENS|ETS|IC|ITS|LDHP|LDS|MDS|NDS|NN|PPOC|RECON|TN|XPHR requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR actors in PCC profiles require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### Multiple PCC Content Profiles #### #### Reference: PCC TF-1: Table 2.4-1 #### rule "CONTENT_CONSUMER/* requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER' , actorIntegrationProfile.integrationProfile.keyword == 'APE' || == 'APHP' || == 'APL' || == 'APS' || == 'CTNN' || == 'EDPN' || == 'EDR' || == 'ENS' || == 'ETS' || == 'IC' || == 'ITS' || == 'LDHP' || == 'LDS' || == 'MDS' || == 'NDS' || == 'NN' || == 'PPOC' || == 'RECON' || == 'TN' || == 'XPHR' ) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "CONTENT_CONSUMER/APE|APHP|APL|APS|CTNN|EDPN|EDR|ENS|ETS|IC|ITS|LDHP|LDS|MDS|NDS|NN|PPOC|RECON|TN|XPHR requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER actors in PCC profiles require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### APE, APHP, APL, APS #### #### No additional rules #### #### CM #### # Reference: IHE PCC Care Management CM Supplement TI - Section 2.17 rule "CARE_MGR|CLIN_DATA_SOURCE|GUIDELINE_MGR/CM requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CARE_MGR' || == 'CLIN_DATA_SOURCE' || == 'GUIDELINE_MGR', actorIntegrationProfile.integrationProfile.keyword == 'CM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then # myGlobalList.add( "CARE_MGR|CLIN_DATA_SOURCE|GUIDELINE_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 actors in CM require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### EDR #### #### Reference: PCC TF-1: 5.7.1 #### rule "CONTENT_CREATOR/EDR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'EDR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CREATOR/EDR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in EDR requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in EDR requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### Reference: PCC TF-1: 5.7.2 #### rule "CONTENT_CONSUMER/EDR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'EDR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CONSUMER/EDR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in EDR requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in EDR requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### Emerg Dept Encounter Summary profiles: CTNN, EDPN, NN, TN #### #### Reference: EDES TI Suppl W.6, X.6, Y.6, Z.6, #### rule "CONTENT_CREATOR/TN|NN|CTNN|EDPN requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'TN' ||== 'NN' || == 'CTNN' || == 'EDPN') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CREATOR/TN|NN|CTNN|EDPN requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in TN, NN, CTNN or EDPN requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in TN, NN, CTNN or EDPN requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### Reference: EDES TI Suppl W.5.2, X.5.2, Y.5.2, Z.5.2, #### rule "CONTENT_CONSUMER/TN|NN|CTNN|EDPN requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'TN' ||== 'NN' || == 'CTNN' || == 'EDPN') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CONSUMER/TN|NN|CTNN|EDPN requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in TN, NN, CTNN or EDPN requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in TN, NN, CTNN or EDPN requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### Reference: EDES TI Suppl W.5.2, X.5.2, Y.5.2, Z.5.2, #### rule "CONTENT_CREATOR/TN|NN|CTNN|EDPN requires DOC_SOURCE/XDS.b|XDR or PMC/XDM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'TN' ||== 'NN' || == 'CTNN' || == 'EDPN') 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/TN|NN|CTNN|EDPN requires DOC_SOURCE/XDS.b|XDR or PMC/XDM"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in TN, NN, CTNN, EDPN requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in TN, NN, CTNN, EDPN requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in TN, NN, CTNN, EDPN requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #### Reference: EDES TI Suppl W.5.2, X.5.2, Y.5.2, Z.5.2, #### rule "CONTENT_CONSUMER/TN|NN|CTNN|EDPN requires DOC_CONSUMER|XDS.b or DOC_RECIPIENT/XDR or PMI/XDM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'TN' ||== 'NN' || == 'CTNN' || == 'EDPN') 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/TN|NN|CTNN|EDPN requires DOC_CONSUMER/XDS.b or DOC_RECIPIENT/XDR or PMI/XDM"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in TN, NN, CTNN, EDPN requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in TN, NN, CTNN, EDPN requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in TN, NN, CTNN, EDPN requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null ) ) ) ; myGlobalList.add( l ) ; end #### ENS #### # No add'l rules # #### IC #### # No add'l Rules # #### Transport Summary profiles: ITS, ETS #### # No add'l Rules # #### Labor & Delivery profiles: LDHP, LDS, MDS #### # No add'l Rules # #### NDS #### # No add'l Rules # #### PPOC #### # No add'l Rules # #### PPVS #### # No add'l Rules # #### PW #### ## Reference: PW TI supplement, Vol 1 Sec 2..4 ## ## To be completed ## #### 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 CLIN_DATA_CONSUMER or CLIN_DATA_SOURCE in QED requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: PCC TF1 Table 2.5-1 rule "CLIN_DATA_CONSUMER|CLIN_DATA_SOURCE/QED requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CLIN_DATA_CONSUMER" || == "CLIN_DATA_SOURCE", actorIntegrationProfile.integrationProfile.keyword == 'QED') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "TIME_CLIENT", actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "CLIN_DATA_CONSUMER|CLIN_DATA_SOURCE/QED requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("CLIN_DATA_CONSUMER or CLIN_DATA_SOURCE in QED requires" , new ActorIntegrationProfileOption("TIME_CLIENT","CT", null ) ) ) ; myGlobalList.add( l ); end #### RCG #### # Reference: RCG TI Supplement: Vol 1 Sec 2.5 # rule "*/RCG requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RCG', actorIntegrationProfile.actor.keyword == 'CARE_MGR' || == 'DECISION_SUPPORT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "CARE_MGR|DECISION_SUPPORT/RCG requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in RCG require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### RECON #### # Reference: RECON TI Supplement: Vol 1 Sec X.3.1 # rule "CONTENT_CONSUMER/RECON requires CONTENT_CONSUMER/XDS-MS" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RECON', actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS') then #myGlobalList.add( "CONTENT_CONSUMER/RECON requires CONTENT_CONSUMER/XDS-MS"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CONSUMER in RECON requires" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","XDS-MS" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: RECON TI Supplement: Vol 1 Sec X.3.1 # rule "CONTENT_CREATOR/RECON requires CONTENT_CREATOR/XDS-MS" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'RECON', actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS') then #myGlobalList.add( "CONTENT_CREATOR/RECON requires CONTENT_CREATOR/XDS-MS"); l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR in RECON requires" , new ActorIntegrationProfileOption( "CONTENT_CREATOR","XDS-MS" , null ) ) ) ; myGlobalList.add( l ) ; end #### XBeR-WD #### #### Reference: XBeR-WD TI SUPPLEMENT TABLE X.4.3-1 #### rule "REFERRAL_REQUESTER|REFERRAL_SCHEDULER|REFERRAL_PERFORMER|WORKFLOW_MONITOR/XBeR-WD requires CONTENT_UPDATER/XDW" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "REFERRAL_REQUESTER" || == "REFERRAL_SCHEDULER" || == "REFERRAL_PERFORMER" || == "WORKFLOW_MONITOR", actorIntegrationProfile.integrationProfile.keyword == 'XBeR-WD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_UPDATER", actorIntegrationProfile.integrationProfile.keyword == 'XDW' ) then #myGlobalList.add( "System implementing the REFERRAL_REQUESTER|REFERRAL_SCHEDULER|REFERRAL_PERFORMER|WORKFLOW_MONITOR/XBeR-WD requires CONTENT_UPDATER/XDW"); l = new ArrayList>() ; l.add( new Pair("All actors in XBeR-WD require" , new ActorIntegrationProfileOption( "CONTENT_UPDATER","XDW" , null ) ) ) ; myGlobalList.add( l ) ; end rule "REFERRAL_REQUESTER|REFERRAL_SCHEDULER|REFERRAL_PERFORMER|WORKFLOW_MONITOR/XBeR-WD requires CONTENT_CONSUMER/XDW" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "REFERRAL_REQUESTER" || == "REFERRAL_SCHEDULER" || == "REFERRAL_PERFORMER" || == "WORKFLOW_MONITOR", actorIntegrationProfile.integrationProfile.keyword == 'XBeR-WD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == 'XDW' ) then #myGlobalList.add( "System implementing the REFERRAL_REQUESTER|REFERRAL_SCHEDULER|REFERRAL_PERFORMER|WORKFLOW_MONITOR/XBeR-WD requires CONTENT_CONSUMER/XDW"); l = new ArrayList>() ; l.add( new Pair("All actors in XBeR-WD require" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","XDW" , null ) ) ) ; myGlobalList.add( l ) ; end rule "REFERRAL_REQUESTER/XBeR-WD requires CONTENT_CREATOR/XDW" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "REFERRAL_REQUESTER" , actorIntegrationProfile.integrationProfile.keyword == 'XBeR-WD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CREATOR", actorIntegrationProfile.integrationProfile.keyword == 'XDW' ) then #myGlobalList.add( "System implementing the REFERRAL_REQUESTER/XBeR-WD requires CONTENT_CREATOR/XDW"); l = new ArrayList>() ; l.add( new Pair("A REFERRAL_REQUESTER in XBeR-WD requires" , new ActorIntegrationProfileOption( "CONTENT_CREATOR","XDW" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDS-MS #### #### Reference: PCC TF-1: 3.9.1 #### rule "CONTENT_CREATOR/XDS-MS requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CREATOR/XDS-MS requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in XDS-MS requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in XDS-MS requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDS-MS Rules on Required Options #### ## PCC TF-1: Sec 3.4 rule "CONTENT_CREATOR/XDS-MS requires CONTENT_CREATOR/XDS-MS/DISCHARGE_SUMMARY | CONTENT_CREATOR/XDS-MS/REFERRAL" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CREATOR", actorIntegrationProfile.integrationProfile.keyword == "XDS-MS") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CREATOR", actorIntegrationProfile.integrationProfile.keyword == "XDS-MS", integrationProfileOption.keyword == "DISCHARGE_SUMMARY") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CREATOR", actorIntegrationProfile.integrationProfile.keyword == "XDS-MS", integrationProfileOption.keyword == "REFERRAL") ) then l = new ArrayList>() ; l.add( new Pair("CONTENT_CREATOR/XDS-MS requires" , new ActorIntegrationProfileOption( "CONTENT_CREATOR","XDS-MS" , "DISCHARGE_SUMMARY") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or CONTENT_CREATOR/XDS-MS requires" , new ActorIntegrationProfileOption( "CONTENT_CREATOR","XDS-MS" , "REFERRAL") ) ) ; myGlobalList.add(l); end #### Reference: PCC TF-1: 3.9.2 #### rule "CONTENT_CONSUMER/XDS-MS requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-MS') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CONSUMER/XDS-MS requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in XDS-MS requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in XDS-MS requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XPHR #### #### Reference: PCC TF-1: 5.7.1 #### rule "CONTENT_CREATOR/XPHR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'XPHR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CREATOR/XPHR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in XPHR requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in XPHR requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### Reference: PCC TF-1: 5.7.2 #### rule "CONTENT_CONSUMER/XPHR requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XPHR') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "CONTENT_CONSUMER/XPHR requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in XPHR requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in XPHR requires" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XTHM-WD #### #### Reference: XTHM-WD TI SUPPLEMENT TABLE X.4.3-1 #### rule "CARE_MGR|CONSULT_MGR/XTHM-WD requires CONTENT_UPDATER/XDW" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CARE_MGR" || == "CONSULT_MGR", actorIntegrationProfile.integrationProfile.keyword == 'XTHM-WD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_UPDATER", actorIntegrationProfile.integrationProfile.keyword == 'XDW' ) then #myGlobalList.add( "System implements the CARE_MGR|CONSULT_MGR/XTHM-WD requires CONTENT_UPDATER/XDW"); l = new ArrayList>() ; l.add( new Pair("CARE_MGR and CONSULT_MGR in XTHM-WD require" , new ActorIntegrationProfileOption( "CONTENT_UPDATER","XDW" , null ) ) ) ; myGlobalList.add( l ) ; end rule "CARE_MGR|CONSULT_MGR|GENL_CLINICIAN_MGR/XTHM-WD requires CONTENT_CONSUMER/XDW" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CARE_MGR" || == "GENL_CLINICIAN_MGR" || == "CONSULT_MGR", actorIntegrationProfile.integrationProfile.keyword == 'XTHM-WD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == 'XDW' ) then #myGlobalList.add( "System implements the CARE_MGR|GENL_CLINICIAN_MGR|CONSULT_MGR/XTHM-WD requires CONTENT_CONSUMER/XDW"); l = new ArrayList>() ; l.add( new Pair("All actors in XTHM-WD require" , new ActorIntegrationProfileOption( "CONTENT_CONSUMER","XDW" , null ) ) ) ; myGlobalList.add( l ) ; end rule "GENL_CLINICIAN_MGR/XTHM-WD requires CONTENT_CREATOR/XDW" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "GENL_CLINICIAN_MGR" , actorIntegrationProfile.integrationProfile.keyword == 'XTHM-WD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CREATOR", actorIntegrationProfile.integrationProfile.keyword == 'XDW' ) then #myGlobalList.add( "System implements the GENL_CLINICIAN_MGR/XTHM-WD requires CONTENT_CREATOR/XDW"); l = new ArrayList>() ; l.add( new Pair("A GENL_CLINICIAN_MGR in XTHM-WD requires" , new ActorIntegrationProfileOption( "CONTENT_CREATOR","XDW" , 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_COMMUNICATOR' || == 'ALRM_MGR' || == 'ALRM_RPT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "ALRM_COMMUNICATOR|ALRM_MGR|ALRM_RPT/ACM requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in ACM require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### DEC #### # Reference: PCC TF-1: Table 2.1-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 DEC require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### IDCO #### # No Rules #### IPEC #### # Reference: IPEC TI Supplement, Vol 1 Sec 2.1 # rule "*/IPEC requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IPEC', actorIntegrationProfile.actor.keyword == 'DEV_OBS_CONSUMER' || == 'DEV_OBS_REPORTER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "DEV_OBS_CONSUMER|DEV_OBS_REPORTER/IPEC requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in IPEC require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### PIV #### # Reference: PCC TF-1: Table 2.1-1 # 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 PIV require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### RDQ #### # No rules # ################################################### ################### LAB ########################### ################################################### #### LBL #### #IHE Laboratory Technical Framework, Vol. 1: Profiles Table 3-1 rule "LIP/LBL requires OF|OP/LTW" when $xds : ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'LIP', actorIntegrationProfile.integrationProfile.keyword == 'LBL') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF' || == 'OP', actorIntegrationProfile.integrationProfile.keyword == 'LTW' ) then #myGlobalList.add( "LIP/LBL requires OF|OP/LTW"); l = new ArrayList>() ; l.add( new Pair("LIP/LBL requires" , new ActorIntegrationProfileOption( "OF","LTW" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("LIP/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("A CONTENT_CREATOR in XD-LAB requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in XD-LAB requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR in 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("A CONTENT_CONSUMER in XD-LAB requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in XD-LAB requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CONSUMER in 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("A CONTENT_CREATOR or CONTENT_CONSUMER in XD-LAB requires" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CONTENT_CREATOR or CONTENT_CONSUMER in 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("An 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("An 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("Am 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("An 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 l = new ArrayList>() ; l.add( new Pair("An 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("An 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("A 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("An 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("A 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("An 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("An 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("A 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("A PC in CPI requires" , new ActorIntegrationProfileOption( "EC","CPI" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or PC in CPI requires" , new ActorIntegrationProfileOption( "MOD","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 #### CXCAD #### #No rules #### DIFF #### #No rules #### ED #### #No rules #### FUS #### #No rules #### IOCM #### # Reference: IOCM TI Supplement, Vol 1 Sec 2.5 and Sec 28.3 # rule "CHANGE_REQUESTER/IOCM requires EC|MOD|IM/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'CHANGE_REQUESTER', actorIntegrationProfile.integrationProfile.keyword == 'IOCM') not ( ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'EC', actorIntegrationProfile.integrationProfile.keyword == 'SWF') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'MOD', actorIntegrationProfile.integrationProfile.keyword == 'SWF') or ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF')) then #myGlobalList.add( "CHANGE_REQUESTER/IOCM requires EC|MOD|IM/SWF"); l = new ArrayList>() ; l.add( new Pair("A CHANGE_REQUESTER in IOCM requires" , new ActorIntegrationProfileOption( "EC","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CHANGE_REQUESTER in IOCM requires" , new ActorIntegrationProfileOption( "MOD","SWF" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or CHANGE_REQUESTER in IOCM requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### IRWF.b Rules #### ## Reference: RAD TF1 Table 2-1 ## rule "IMPORTER/IRWF.b requires PDC/PDQ" ## when ## ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IRWF.b', actorIntegrationProfile.actor.keyword == 'IMPORTER') ## not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PDC', actorIntegrationProfile.integrationProfile.keyword == 'PDQ') ## then ## # myGlobalList.add( "IMPORTER/IRWF.b requires PDC/PDQ"); ## l = new ArrayList>() ; ## l.add( new Pair("An IMPORTER in IRWF.b requires" , new ActorIntegrationProfileOption( "PDC","PDQ" , null ) ) ) ; ## ## myGlobalList.add( l ) ; ## end ## rule "IMPORTER/IRWF.b requires PAT_IDENTITY_CONSUMER/PIX" ## when ## ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IRWF.b', actorIntegrationProfile.actor.keyword == 'IMPORTER') ## not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PAT_IDENTITY_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'PIX') ## then ## # myGlobalList.add( "IMPORTER/IRWF.b requires PAT_IDENTITY_CONSUMER/PIX"); ## l = new ArrayList>() ; ## l.add( new Pair("An IMPORTER in IRWF.b requires" , new ActorIntegrationProfileOption( "PAT_IDENTITY_CONSUMER","PIX" , null ) ) ) ; ## myGlobalList.add( l ) ; ## end ## rule "OF|IM/IRWF.b requires PPSM/IRWF.b" ## when ## $of : ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'IRWF.b', actorIntegrationProfile.actor.keyword == 'OF' || == 'IM') ## not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'IRWF.b') ## then ## #myGlobalList.add( "OF|IM/IRWF.b requires PPSM/IRWF.b"); ## l = new ArrayList>() ; ## l.add( new Pair("An OF or IM in IRWF.b requires" , new ActorIntegrationProfileOption( "PPSM","IRWF.b" , null ) ) ) ; ## 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("A 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( "MOD","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("An 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("A 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("An 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("An 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("An 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("An 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 #### PAWF #### # Reference: RAD TF-1: 30.3-1 # rule "WORKITEM_CREATOR|WORKITEM_MANAGER|WORKITEM_PERFORMER/PAWF requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'WORKITEM_CREATOR' || == 'WORKITEM_MANAGER' || == 'WORKITEM_PERFORMER', actorIntegrationProfile.integrationProfile.keyword == 'PAWF' ) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "WORKITEM_CREATOR|WORKITEM_MANAGER|WORKITEM_PERFORMER/PAWF requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("WORKITEM_CREATOR and WORKITEM_MANAGER and WORKITEM_PERFORMER actors in PAWF require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: RAD TF-1: 30.3-1 # rule "IM/PAWF requires IM/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PAWF', actorIntegrationProfile.actor.keyword == 'IM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "IM/PAWF requires IM/SWF"); l = new ArrayList>() ; l.add( new Pair("An IM in PWF requires" , new ActorIntegrationProfileOption( "IM","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: RAD TF-1: 30.3-1 # rule "OF/PAWF requires OF/SWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PAWF', actorIntegrationProfile.actor.keyword == 'OF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'OF', actorIntegrationProfile.integrationProfile.keyword == 'SWF') then # myGlobalList.add( "OF/PAWF requires OF/SWF"); l = new ArrayList>() ; l.add( new Pair("An OF in PWF requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end #### PDI #### #No rules #### PERF #### #No rules #### 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("A 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("An 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("An 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 #### 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 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("An 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("An 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("An OF in PIR requires" , new ActorIntegrationProfileOption( "OF","SWF" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: RAD TF1 Table 2-1 rule "RM/PIR requires RM/RWF" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PIR', actorIntegrationProfile.actor.keyword == 'RM') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RM', actorIntegrationProfile.integrationProfile.keyword == 'RWF') then # myGlobalList.add( "RM/PIR requires RM/RWF"); l = new ArrayList>() ; l.add( new Pair("A RM in PIR requires" , new ActorIntegrationProfileOption( "RM","RWF" , 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("An 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("A 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("An IM in PIR with the MULT_IDENTITY_RESOLUTION option requires" , new ActorIntegrationProfileOption( "IM","SWF" , "MULT_IDENTITY_RESOLUTION" ) ) ) ; myGlobalList.add( l ) ; end #### REM #### #No rules #### RWF #### ## 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("An 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("An 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("A 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("A RM in RWF requires" , new ActorIntegrationProfileOption( "RM","SINR" , null ) ) ) ; myGlobalList.add( l ) ; end #### 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("An IM in SWF with the 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("An IM in SWF with the MULT_IDENTITY_RESOLUTION option requires" , new ActorIntegrationProfileOption( "PAT_IDENTITY_CONSUMER","PIX" , null ) ) ) ; myGlobalList.add( l ) ; end #### TCE #### #No rules #### XCA-I #### # Reference: XCA-I TI Supplement, Vol 1 Table 2-1 rule "XCA-I requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XCA-I') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "XCA-I requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All XCA-I actors require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all XCA-I actors require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #Reference RAD TF-1:29.1 and Table 2.1 rule "IMG_DOC_CONSUMER/XCA-I requires DOC_CONSUMER/XDS.b" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IMG_DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XCA-I') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) then #myGlobalList.add( "IMG_DOC_CONSUMER/XCA-I requires DOC_CONSUMER/XDS.b"); l = new ArrayList>() ; l.add( new Pair("An IMG_DOC_CONSUMER in XCA-I requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDR-I #### # Reference: RAD TF-1: 31.3-1 # rule "IMG_DOC_SOURCE/XDR-I requires DOC_SOURCE/XDR" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XDR-I', actorIntegrationProfile.actor.keyword == 'IMG_DOC_SOURCE') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_SOURCE', actorIntegrationProfile.integrationProfile.keyword == 'XDR') then # myGlobalList.add( "IMG_DOC_SOURCE/XDR-I requires DOC_SOURCE/XDR"); l = new ArrayList>() ; l.add( new Pair("An IMG_DOC_SOURCE in XDR-I requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: RAD TF-1: 31.3-1 # rule "IMG_DOC_RECIPIENT/XDR-I requires DOC_RECIPIENT/XDR" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XDR-I', actorIntegrationProfile.actor.keyword == 'IMG_DOC_RECIPIENT') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_RECIPIENT', actorIntegrationProfile.integrationProfile.keyword == 'XDR') then # myGlobalList.add( "IMG_DOC_RECIPIENT/XDR-I requires DOC_RECIPIENT/XDR"); l = new ArrayList>() ; l.add( new Pair("An IMG_DOC_RECIPIENT in XDR-I requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDR-I Rules on Required Options #### ## ITI TF-1: Table 31.2-1 rule "IMG_DOC_SOURCE/XDR-I requires IMG_DOC_SOURCE/XDR-I/SHARING_DICOM_SOP_INST | IMG_DOC_SOURCE/XDR-I/PDF_REPORT | IMG_DOC_SOURCE/XDR-I/TEXT_REPORT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDR-I") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDR-I", integrationProfileOption.keyword == "SHARING_DICOM_SOP_INST") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDR-I", integrationProfileOption.keyword == "PDF_REPORT") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDR-I", integrationProfileOption.keyword == "TEXT_REPORT") ) then l = new ArrayList>() ; l.add( new Pair("IMG_DOC_SOURCE/XDR-I requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDR-I" , "SHARING_DICOM_SOP_INST") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or IMG_DOC_SOURCE/XDR-I requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDR-I" , "PDF_REPORT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or IMG_DOC_SOURCE/XDR-I requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDR-I" , "TEXT_REPORT") ) ) ; myGlobalList.add(l); end rule "IMG_DOC_RECIPIENT/XDR-I requires IMG_DOC_SOURCE/XDR-I/SHARING_DICOM_SOP_INST | IMG_DOC_RECIPIENT/XDR-I/PDF_REPORT | IMG_DOC_RECIPIENT/XDR-I/TEXT_REPORT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_RECIPIENT", actorIntegrationProfile.integrationProfile.keyword == "XDR-I") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_RECIPIENT", actorIntegrationProfile.integrationProfile.keyword == "XDR-I", integrationProfileOption.keyword == "SHARING_DICOM_SOP_INST") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_RECIPIENT", actorIntegrationProfile.integrationProfile.keyword == "XDR-I", integrationProfileOption.keyword == "PDF_REPORT") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_RECIPIENT", actorIntegrationProfile.integrationProfile.keyword == "XDR-I", integrationProfileOption.keyword == "TEXT_REPORT") ) then l = new ArrayList>() ; l.add( new Pair("IMG_DOC_RECIPIENT/XDR-I requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDR-I" , "SHARING_DICOM_SOP_INST") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or IMG_DOC_RECIPIENT/XDR-I requires" , new ActorIntegrationProfileOption( "IMG_DOC_RECIPIENT","XDR-I" , "PDF_REPORT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or IMG_DOC_SOURCE/XDR-I requires" , new ActorIntegrationProfileOption( "IMG_DOC_RECIPIENT","XDR-I" , "TEXT_REPORT") ) ) ; myGlobalList.add(l); end #### XDS-I.b #### # Reference: IHE RAD 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 #Reference RAD TF-1:18.1 and Table 2.1 rule "IMG_DOC_CONSUMER/XDS-I.b requires DOC_CONSUMER/XDS.b" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'IMG_DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS-I.b') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) then #myGlobalList.add( "IMG_DOC_CONSUMER/XDS-I.b requires DOC_CONSUMER/XDS.b"); l = new ArrayList>() ; l.add( new Pair("An IMG_DOC_CONSUMER in XDS-I.b requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; end #### XDS-I.b Rules on Required Options #### ## ITI TF-1: Table 18.2-1 rule "IMG_DOC_SOURCE/XDS-I.b requires IMG_DOC_SOURCE/XDS-I.b/SET_OF_DICOM_INSTANCES | IMG_DOC_SOURCE/XDS-I.b/PDF_REPORT | IMG_DOC_SOURCE/XDS-I.b/TEXT_REPORT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS-I.b") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS-I.b", integrationProfileOption.keyword == "SET_OF_DICOM_INSTANCES") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS-I.b", integrationProfileOption.keyword == "PDF_REPORT") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "IMG_DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS-I.b", integrationProfileOption.keyword == "TEXT_REPORT") ) then l = new ArrayList>() ; l.add( new Pair("IMG_DOC_SOURCE/XDS-I.b requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDS-I.b" , "SET_OF_DICOM_INSTANCES") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or IMG_DOC_SOURCE/XDS-I.b requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDS-I.b" , "PDF_REPORT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" and/or IMG_DOC_SOURCE/XDS-I.b requires" , new ActorIntegrationProfileOption( "IMG_DOC_SOURCE","XDS-I.b" , "TEXT_REPORT") ) ) ; 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 #### CIRC #### #Reference CIRC TI Supplement Table 2.1-1 rule "CONTENT_CREATOR/CIRC requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'CIRC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "CONTENT_CREATOR/CIRC requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in CIRC requires" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end #### CRC #### #Reference CRC TI Supplement Vol 1 Sec 12.3 rule "CONTENT_CREATOR/CRC requires TIME_CLIENT/CT" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', actorIntegrationProfile.integrationProfile.keyword == 'CRC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT' ) then #myGlobalList.add( "CONTENT_CREATOR/CRC requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in CRC requires" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , 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("An 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("An 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("An 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("A 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("An 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("An 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("A 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("An 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("An 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("An ID in STRESS requires" , new ActorIntegrationProfileOption( "ID","NMI" , "CARDIAC_NM" ) ) ) ; myGlobalList.add( l ) ; end rule "MOD/STRESS requires MOD/STRESS/NUCLEAR_MEDICINE | MOD/STRESS/STRESS_ECHO | MOD/STRESS/STRESS_ECG" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "STRESS") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "STRESS", integrationProfileOption.keyword == "NUCLEAR_MEDICINE") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "STRESS", integrationProfileOption.keyword == "STRESS_ECHO") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "STRESS", integrationProfileOption.keyword == "STRESS_ECG")) then l = new ArrayList>() ; l.add( new Pair("A MOD actor in STRESS requires" , new ActorIntegrationProfileOption( "MOD","STRESS" , "NUCLEAR_MEDICINE") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" or MOD/STRESS requires" , new ActorIntegrationProfileOption( "MOD","STRESS" , "STRESS_ECHO") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" or MOD/STRESS requires" , new ActorIntegrationProfileOption( "MOD","STRESS" , "STRESS_ECG") ) ) ; myGlobalList.add(l); end ############################################################ ######################## Eyecare ########################### ############################################################ #### A-EYECARE #### # IHE Eye Care Technical Framework, vol. I: Integration Profiles Section 2.5 rule "OF|IM/A-EYECARE requires PPSM/A-EYECARE" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'OF' || == 'IM', actorIntegrationProfile.integrationProfile.keyword == 'A-EYECARE') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PPSM', actorIntegrationProfile.integrationProfile.keyword == 'A-EYECARE') then #myGlobalList.add( "OF|IM/A-EYECARE requires PPSM/A-EYECARE"); l = new ArrayList>() ; l.add( new Pair("An OF or IM in A-EYECARE requires" , new ActorIntegrationProfileOption( "PPSM","A-EYECARE" , null ) ) ) ; myGlobalList.add( l ) ; end # EYE TF-1: TABLE 7.2 rule "MOD/A-EYECARE requires MOD/A-EYECARE/PAT_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE", integrationProfileOption.keyword == "PAT_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("A MOD in A-EYECARE requires" , new ActorIntegrationProfileOption( "MOD","A-EYECARE" , "PAT_QUERY") ) ) ; myGlobalList.add(l); end rule "MOD/A-EYECARE requires MOD/A-EYECARE/BROAD_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE", integrationProfileOption.keyword == "BROAD_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("A MOD in A-EYECARE requires" , new ActorIntegrationProfileOption( "MOD","A-EYECARE" , "BROAD_QUERY") ) ) ; myGlobalList.add(l); end rule "ACQ_MOD_IMPORTER/A-EYECARE requires ACQ_MOD_IMPORTER/A-EYECARE/PAT_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE", integrationProfileOption.keyword == "PAT_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("An ACQ_MOD_IMPORTER in A-EYECARE requires" , new ActorIntegrationProfileOption( "ACQ_MOD_IMPORTER","A-EYECARE" , "PAT_QUERY") ) ) ; myGlobalList.add(l); end rule "ACQ_MOD_IMPORTER/A-EYECARE requires ACQ_MOD_IMPORTER/A-EYECARE/BROAD_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "A-EYECARE", integrationProfileOption.keyword == "BROAD_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("An ACQ_MOD_IMPORTER in A-EYECARE requires" , new ActorIntegrationProfileOption( "ACQ_MOD_IMPORTER","A-EYECARE" , "BROAD_QUERY") ) ) ; myGlobalList.add(l); end #### B-EYECARE rules #### # IHE B-EYECARE SUPPLEMENT, vol. I: Figure 7.1-1 rule "OF|OP/B-EYECARE requires PEC/B-EYECARE" when $of : ActorIntegrationProfileOption ( actorIntegrationProfile.actor.keyword == 'OF' || == 'OP', actorIntegrationProfile.integrationProfile.keyword == 'B-EYECARE') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'PEC', actorIntegrationProfile.integrationProfile.keyword == 'B-EYECARE') then #myGlobalList.add( "OF|IM/B-EYECARE requires PEC/B-EYECARE"); l = new ArrayList>() ; l.add( new Pair("An OF or OP in B-EYECARE requires" , new ActorIntegrationProfileOption( "PEC","B-EYECARE" , null ) ) ) ; myGlobalList.add( l ) ; end # B-EYECARE PROFILE, VOL 1: ACTOR & OPTIONS TABLE rule "MOD/B-EYECARE requires MOD/B-EYECARE/PAT_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE", integrationProfileOption.keyword == "PAT_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("A MOD in B-EYECARE requires" , new ActorIntegrationProfileOption( "MOD","B-EYECARE" , "PAT_QUERY") ) ) ; myGlobalList.add(l); end rule "MOD/B-EYECARE requires MOD/B-EYECARE/BROAD_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "MOD", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE", integrationProfileOption.keyword == "BROAD_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("A MOD in B-EYECARE requires" , new ActorIntegrationProfileOption( "MOD","B-EYECARE" , "BROAD_QUERY") ) ) ; myGlobalList.add(l); end rule "ACQ_MOD_IMPORTER/B-EYECARE requires ACQ_MOD_IMPORTER/B-EYECARE/PAT_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE", integrationProfileOption.keyword == "PAT_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("An ACQ_MOD_IMPORTER in B-EYECARE requires" , new ActorIntegrationProfileOption( "ACQ_MOD_IMPORTER","B-EYECARE" , "PAT_QUERY") ) ) ; myGlobalList.add(l); end rule "ACQ_MOD_IMPORTER/B-EYECARE requires ACQ_MOD_IMPORTER/B-EYECARE/BROAD_QUERY " when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "ACQ_MOD_IMPORTER", actorIntegrationProfile.integrationProfile.keyword == "B-EYECARE", integrationProfileOption.keyword == "BROAD_QUERY") ) then l = new ArrayList>() ; l.add( new Pair("An ACQ_MOD_IMPORTER in B-EYECARE requires" , new ActorIntegrationProfileOption( "ACQ_MOD_IMPORTER","B-EYECARE" , "BROAD_QUERY") ) ) ; myGlobalList.add(l); end #### ECAS rules #### # No rules #### EC-CHG rules #### # No rules #### ECDR rules #### # No rules #### ECED rules ##### # No rules #### GEE RULES #### # 8-Aug-2012 (Lynn): Although the profile currently documents ATNA & CT as a dependency, this was done because Eye Care thought this was a PCC rqmt, and it is generally not. It will be updated by CP. Should be "No rules" ############################## ######## 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("A 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("A 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("A 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 #### DEN rules #### # No rules #### 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("A 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("A 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("A 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("A 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 #### MHD 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("A 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("A 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 #### MPQ #### # Reference: IHE TF Supplement XCA 18.4.2 rule "DOC_CONSUMER|DOC_REGISTRY/MPQ requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_CONSUMER' || == 'DOC_REGISTRY', actorIntegrationProfile.integrationProfile.keyword == 'MPQ') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA' ) then # myGlobalList.add( "DOC_CONSUMER|DOC_REGISTRY/MPQ requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in MPQ require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all actors in MPQ require" , 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("A 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 #### XCF #### # Reference: XCF TI Supplement, Vol 1 Table 2-1 rule "XCF requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XCF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "XCF requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All XCF actors require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all XCF actors require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: XCF TI Supplement, Vol 1 Table 2-1 rule "INIT_GATEWAY/XCF requires X-SERVICE-USER/XUA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'INIT_GATEWAY', actorIntegrationProfile.integrationProfile.keyword == 'XCF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-USER', actorIntegrationProfile.integrationProfile.keyword == 'XUA' ) then #myGlobalList.add( "INIT_GATEWAY/XCF requires X-SERVICE-USER/XUA"); l = new ArrayList>() ; l.add( new Pair("An INIT_GATEWAY in XCF requires" , new ActorIntegrationProfileOption( "X-SERVICE-USER","XUA" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: XCF TI Supplement, Vol 1 Table 2-1 rule "RESP_GATEWAY/XCF requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'RESP_GATEWAY', actorIntegrationProfile.integrationProfile.keyword == 'XCF') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA' ) then #myGlobalList.add( "RESP_GATEWAY/XCF requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("An RESP_GATEWAY in XCF requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER","XUA" , null ) ) ) ; myGlobalList.add( l ) ; end #### XCPD #### ## 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 #### XDS.b Registry Rules on Required Options #### ## ITI TF-1: Table 10.2-1b rule "DOC_REGISTRY/XDS.b requires DOC_REGISTRY/XDS.b/PAT_IDENTITY_FEED_HL7V2 | DOC_REGISTRY/XDS.b/PAT_IDENTITY_FEED_HL7V3" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_REGISTRY", actorIntegrationProfile.integrationProfile.keyword == "XDS.b") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_REGISTRY", actorIntegrationProfile.integrationProfile.keyword == "XDS.b", integrationProfileOption.keyword == "PAT_IDENTITY_FEED_HL7V2") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_REGISTRY", actorIntegrationProfile.integrationProfile.keyword == "XDS.b", integrationProfileOption.keyword == "PAT_IDENTITY_FEED_HL7V3") ) then l = new ArrayList>() ; l.add( new Pair("DOC_REGISTRY/XDS.b requires" , new ActorIntegrationProfileOption( "DOC_REGISTRY","XDS.b" , "PAT_IDENTITY_FEED_HL7V2") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair(" or DOC_REGISTRY/XDS.b requires" , new ActorIntegrationProfileOption( "DOC_REGISTRY","XDS.b" , "PAT_IDENTITY_FEED_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("A 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("A 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 #### XDW rules #### ## Reference: XDW ITI Supplement Vol 1 30.1 Line 380; 420 IHE_ITI_Suppl_XDW_Rev2-1_TI_2011-10-03.pdf rule "CONTENT_CREATOR/XDW requires DOC_SOURCE/XDS.b/FOLDER_MGT | DOC_SOURCE/XDR | PMC/XDM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CREATOR", actorIntegrationProfile.integrationProfile.keyword == "XDW") not ( ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS.b", integrationProfileOption.keyword == "FOLDER_MGT") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDR") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "PMC", actorIntegrationProfile.integrationProfile.keyword == "XDM") ) then l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in XDW requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , "FOLDER_MGT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in XDW requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null) ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in XDW requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null) ) ) ; myGlobalList.add(l); end #### XDW rules #### ## Reference: XDW ITI Supplement Vol 1 30.1 Line 380; 420 IHE_ITI_Suppl_XDW_Rev2-1_TI_2011-10-03.pdf rule "CONTENT_UPDATER/XDW requires DOC_SOURCE/XDS.b/FOLDER_MGT && DOC_REPLACE | DOC_SOURCE/XDR | PMC/XDM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_UPDATER", actorIntegrationProfile.integrationProfile.keyword == "XDW") not ( (ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS.b", integrationProfileOption.keyword == "FOLDER_MGT") and ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDS.b", integrationProfileOption.keyword == "DOC_REPLACE")) or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "DOC_SOURCE", actorIntegrationProfile.integrationProfile.keyword == "XDR") or ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "PMC", actorIntegrationProfile.integrationProfile.keyword == "XDM") ) then l = new ArrayList>() ; l.add( new Pair("A CONTENT_UPDATER in XDW requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , "FOLDER_MGT") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_UPDATER in XDW requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDS.b" , "DOC_REPLACE") ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_UPDATER in XDW requires" , new ActorIntegrationProfileOption( "DOC_SOURCE","XDR" , null) ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_UPDATER in XDW requires" , new ActorIntegrationProfileOption( "PMC","XDM" , null) ) ) ; myGlobalList.add(l); end #### XDW rules #### ## Reference: XDW ITI Supplement Vol 1 30.1 Line 380 IHE_ITI_Suppl_XDW_Rev2-1_TI_2011-10-03.pdf rule "CONTENT_CONSUMER/XDW requires DOC_CONSUMER/XDS.b | DOC_RECIPIENT/XDR | PMI/XDM" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == "CONTENT_CONSUMER", actorIntegrationProfile.integrationProfile.keyword == "XDW") 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 l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in XDW requires" , new ActorIntegrationProfileOption( "DOC_CONSUMER","XDS.b" , null) ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in XDW requires" , new ActorIntegrationProfileOption( "DOC_RECIPIENT","XDR" , null) ) ) ; myGlobalList.add(l); l = new ArrayList>() ; l.add( new Pair("A CONTENT_CONSUMER in XDW requires" , new ActorIntegrationProfileOption( "PMI","XDM" , null) ) ) ; myGlobalList.add(l); end #### XPID #### # Reference: XPID TI Supplement, Vol 1 Table 2-1 rule "XPID requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'XPID') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "XPID requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All XPID actors require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all XPID actors require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end # Reference: XPID TI Supplement, Vol 1 Table 2-1 rule "DOC_REGISTRY/XPID requires DOC_REGISTRY/XDS.b" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REGISTRY', actorIntegrationProfile.integrationProfile.keyword == 'XPID') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'DOC_REGISTRY', actorIntegrationProfile.integrationProfile.keyword == 'XDS.b' ) then #myGlobalList.add( "DOC_REGISTRY/XPID requires DOC_REGISTRY/XDS.b"); l = new ArrayList>() ; l.add( new Pair("A DOC_REGISTRY in XPID requires" , new ActorIntegrationProfileOption( "DOC_REGISTRY","XDS.b" , null ) ) ) ; myGlobalList.add( l ) ; end #### XUA #### # No Rules ########################################################## ############# Anatomic Pathology Rules ################### ########################################################## #### APSR #### # No 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 ################### ############################################ #### BFDR Rules #### # No rules (per BFDR 2012 TI supplement sec X.3) #### CRD Rules #### ## Reference: CRD TI Profile Vol 1 TABLE X.3-1 (2012) rule "CRD requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "CRD requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All CRD actors require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all CRD actors require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: CRD TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_FILLER/CRD requires X-SERVICE-USER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_FILLER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-USER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_FILLER/CRD requires X-SERVICE-USER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_FILLER in CRD requires" , new ActorIntegrationProfileOption( "X-SERVICE-USER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: CRD TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_MANAGER/CRD requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_MANAGER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_MANAGER/CRD requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_MANAGER in CRD requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: CRD TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_RECEIVER/CRD requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_RECEIVER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_RECEIVER/CRD requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_RECEIVER in CRD requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: CRD TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_ARCHIVER/CRD requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'CRD', actorIntegrationProfile.actor.keyword == 'FORM_ARCHIVER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_ARCHIVER/CRD requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_ARCHIVER in CRD requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end #### CRPC Rules #### # Rules not clearly documented in 2012 TI version; CP submitted; no rules implemented here. #### DSC #### # DSC TI Supplement, Sept 2012, Sec X.3 rule "DSC requires SN/SA|SA/ATNA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then #myGlobalList.add( "DSC requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All DSC actors require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or all DSC actors require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end # DSC TI Supplement, Sept 2012, Sec X.3 rule "FORM_FILLER/DSC requires X-SERVICE-USER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC', actorIntegrationProfile.actor.keyword == 'FORM_FILLER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-USER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_FILLER/DSC requires X-SERVICE-USER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_FILLER in DSC requires" , new ActorIntegrationProfileOption( "X-SERVICE-USER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSC TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_MANAGER/DSC requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC', actorIntegrationProfile.actor.keyword == 'FORM_MANAGER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_MANAGER/DSC requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_MANAGER in DSC requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSC TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_RECEIVER/DSC requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC', actorIntegrationProfile.actor.keyword == 'FORM_RECEIVER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_RECEIVER/DSC requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_RECEIVER in DSC requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end ## Reference: DSC TI Profile Vol 1 TABLE X.3-1 (2012) rule "FORM_ARCHIVER/DSC requires X-SERVICE-PROVIDER/XUA" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'DSC', actorIntegrationProfile.actor.keyword == 'FORM_ARCHIVER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'X-SERVICE-PROVIDER', actorIntegrationProfile.integrationProfile.keyword == 'XUA') then # myGlobalList.add( "FORM_ARCHIVER/DSC requires X-SERVICE-PROVIDER/XUA"); l = new ArrayList>() ; l.add( new Pair("A FORM_ARCHIVER in DSC requires" , new ActorIntegrationProfileOption( "X-SERVICE-PROVIDER", "XUA" , null ) ) ) ; myGlobalList.add( l ) ; end #### EHCP #### #No rules #### NANI #### # NANI TI profile 2012. Vol 1 Sec X.3 rule "*/NANI requires TIME_CLIENT/CT" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'NANI', actorIntegrationProfile.actor.keyword == 'ADMISSION_INFO_SRC' || == 'NEWBORN_ADMIT_NOTIF_MGR' || == 'NEWBORN_ADMIT_NOTIF_SUBSCRIBER') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'TIME_CLIENT', actorIntegrationProfile.integrationProfile.keyword == 'CT') then #myGlobalList.add( "ADMISSION_INFO_SRC|NEWBORN_ADMIT_NOTIF_MGR|NEWBORN_ADMIT_NOTIF_SUBSCRIBER/NANI requires TIME_CLIENT/CT"); l = new ArrayList>() ; l.add( new Pair("All actors in NANI require" , new ActorIntegrationProfileOption( "TIME_CLIENT","CT" , null ) ) ) ; myGlobalList.add( l ) ; end rule "*/NANI requires SN|SA/ATNA" when ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'ADMISSION_INFO_SRC' || == 'NEWBORN_ADMIT_NOTIF_MGR' || == 'NEWBORN_ADMIT_NOTIF_SUBSCRIBER', actorIntegrationProfile.integrationProfile.keyword == 'NANI') not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'SN' || == 'SA', actorIntegrationProfile.integrationProfile.keyword == 'ATNA') then # myGlobalList.add( "ADMISSION_INFO_SRC|NEWBORN_ADMIT_NOTIF_MGR|NEWBORN_ADMIT_NOTIF_SUBSCRIBER/NANI requires SN|SA/ATNA"); l = new ArrayList>() ; l.add( new Pair("All actors in NANI require" , new ActorIntegrationProfileOption( "SN","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; l = new ArrayList>() ; l.add( new Pair("or actors in NANI require" , new ActorIntegrationProfileOption( "SA","ATNA" , null ) ) ) ; myGlobalList.add( l ) ; end #### PRPH-Ca (2011) #### #PRPH-Ca profile, Vol 1 Sec X.5.2" rule "CONTENT_CREATOR/PRPH_Ca/PREPOP requires FORM_FILLER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PRPH-Ca', actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', integrationProfileOption != null && (integrationProfileOption.keyword == 'PREPOP')) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_FILLER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in PRPH-Ca with the PREPOP option requires" , new ActorIntegrationProfileOption( "FORM_FILLER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end #PRPH-Ca profile, Vol 1 Sec X.5.3" rule "CONTENT_CREATOR/PRPH_Ca/RECEIVE_FROM requires FORM_RECEIVER/RFD" when ActorIntegrationProfileOption ( actorIntegrationProfile.integrationProfile.keyword == 'PRPH-Ca', actorIntegrationProfile.actor.keyword == 'CONTENT_CREATOR', integrationProfileOption != null && (integrationProfileOption.keyword == 'RECEIVE_FROM')) not ActorIntegrationProfileOption (actorIntegrationProfile.actor.keyword == 'FORM_RECEIVER', actorIntegrationProfile.integrationProfile.keyword == 'RFD') then l = new ArrayList>() ; l.add( new Pair("A CONTENT_CREATOR in PRPH-Ca with the RECEIVE_FORM option requires" , new ActorIntegrationProfileOption( "FORM_RECEIVER","RFD" , null ) ) ) ; myGlobalList.add( l ) ; end #### QME-EH #### ## No rules: 2012 TI version Sec X.3 #### RPE #### ## No rules.