source: ccr/trunk/nhin-vista/projects/NHINC/Current/Product/Production/Adapters/General/AdapterPolicyEngineBPEL/src/AdapterPolicyEngineInterimHelper.bpel@ 507

Last change on this file since 507 was 507, checked in by George Lilly, 15 years ago

NHIN gateway and adaptor for use on linux with VistA EHR and RPMS

File size: 52.3 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<process
3 name="AdapterPolicyEngineInterimHelper"
4 targetNamespace="urn:gov:hhs:fha:nhinc:adapters:general:adapterpolicyenginebpel:adapterpolicyengineinterimhelper"
5 xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
6 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
7 xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace"
8 xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor"
9 xmlns:sxat="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Attachment"
10 xmlns:sxeh="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/ErrorHandling"
11 xmlns:tns="urn:gov:hhs:fha:nhinc:adapters:general:adapterpolicyenginebpel:adapterpolicyengineinterimhelper" xmlns:ns0="urn:gov:hhs:fha:nhinc:common:nhinccommonadapter" xmlns:ns1="urn:oasis:names:tc:xacml:2.0:context:schema:os" xmlns:ns2="urn:oasis:names:tc:ebxml-regrep:xsd:query:3.0" xmlns:sxxf="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/XPathFunctions" xmlns:ns3="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0" xmlns:ihe="urn:ihe:iti:xds-b:2007">
12 <import namespace="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" location="Interfaces/wsdl/AdapterPolicyEngineInterimHelper.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
13 <import namespace="http://enterprise.netbeans.org/bpel/AdapterComponentDocRegistryWrapper" location="AdapterComponentDocRegistryWrapper.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
14 <import namespace="urn:ihe:iti:xds-b:2007" location="Interfaces/wsdl/AdapterComponentDocRegistry.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
15 <import namespace="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" location="Interfaces/wsdl/AdapterPolicyEngineTransform.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
16 <import namespace="http://enterprise.netbeans.org/bpel/AdapterComponentDocRepositoryWrapper" location="AdapterComponentDocRepositoryWrapper.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
17 <import namespace="urn:ihe:iti:xds-b:2007" location="Interfaces/wsdl/AdapterComponentDocRepository.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
18 <partnerLinks>
19 <partnerLink name="AdapterPolicyEngineInterimHelperInvokePL" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" partnerLinkType="tns:AdapterPolicyEngineInterimHelper" partnerRole="AdapterPolicyEngineInterimHelperPortTypeRole"/>
20 <partnerLink name="AdapterPolicyEngineTransformPL" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" partnerLinkType="tns:AdapterPolicyEngineTransform" partnerRole="AdapterPolicyEngineTransformPortTypeRole"/>
21 <partnerLink name="AdapterComponentDocRegistryPL" xmlns:tns="http://enterprise.netbeans.org/bpel/AdapterComponentDocRegistryWrapper" partnerLinkType="tns:DocumentRegistry_LinkType" partnerRole="DocumentRegistry_Role"/>
22 <partnerLink name="AdapterComponentDocRepositoryPL" xmlns:tns="http://enterprise.netbeans.org/bpel/AdapterComponentDocRepositoryWrapper" partnerLinkType="tns:DocumentRepository_LinkType" partnerRole="DocumentRepository_Role"/>
23 <partnerLink name="AdapterPolicyEngineInterimHelperPL" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" partnerLinkType="tns:AdapterPolicyEngineInterimHelper" myRole="AdapterPolicyEngineInterimHelperPortTypeRole"/>
24 </partnerLinks>
25 <variables>
26 <variable name="CheckPolicySubjDiscReIdentOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicySubjDiscReIdentResponseMessage"/>
27 <variable name="CheckPolicySubjDiscReIdentInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicySubjDiscReIdentRequestMessage"/>
28 <variable name="CheckPolicyDocRetrieveOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyDocRetrieveResponseMessage"/>
29 <variable name="CheckPolicyDocRetrieveInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyDocRetrieveRequestMessage"/>
30 <variable name="InvokeCheckPolicyPatientOptInOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyPatientOptInResponseMessage"/>
31 <variable name="InvokeCheckPolicyPatientOptInInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyPatientOptInRequestMessage"/>
32 <variable name="CheckPolicyBasedPatientIdExistenceInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyBasedPatientIdExistenceRequestMessage"/>
33 <variable name="CheckPolicyPatientOptInInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyPatientOptInRequestMessage"/>
34 </variables>
35 <sequence>
36 <scope name="ScopeAdapterPolicyEngineInterimHelper">
37 <variables>
38 <variable name="CheckPatientOptInOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:CheckPatientOptInResponseMessage"/>
39 <variable name="CheckPatientOptInInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:CheckPatientOptInRequestMessage"/>
40 <variable name="RetrieveDocumentSetOutput" xmlns:ihe="urn:ihe:iti:xds-b:2007" messageType="ihe:RetrieveDocumentSetResponse_Message"/>
41 <variable name="RetrieveDocumentSetInput" xmlns:ihe="urn:ihe:iti:xds-b:2007" messageType="ihe:RetrieveDocumentSet_Message"/>
42 <variable name="TransformAQRToCppRDSROutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformAQRToCppRDSRResponseMessage"/>
43 <variable name="TransformAQRToCppRDSRInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformAQRToCppRDSRRequestMessage"/>
44 <variable name="TransformXACMLRequestToCppAQROutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformXACMLRequestToCppAQRResponseMessage"/>
45 <variable name="TransformXACMLRequestToCppAQRInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformXACMLRequestToCppAQRRequestMessage"/>
46 <variable name="RegistryStoredQueryOutput" xmlns:ihe="urn:ihe:iti:xds-b:2007" messageType="ihe:RegistryStoredQueryResponse_Message"/>
47 <variable name="RegistryStoredQueryInput" xmlns:ihe="urn:ihe:iti:xds-b:2007" messageType="ihe:RegistryStoredQuery_Message"/>
48 <variable name="CheckPolicyBasedPatientIdExistenceOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyBasedPatientIdExistenceResponseMessage"/>
49 <variable name="CheckPolicyPatientOptInOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" messageType="tns:CheckPolicyPatientOptInResponseMessage"/>
50 <variable name="NumResourceAttributes" type="xsd:integer"/>
51 <variable name="ExistPatientIdAttribute" type="xsd:boolean"/>
52 </variables>
53 <pick name="PickAdapterPolicyEngineInterimHelper" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" createInstance="yes">
54 <onMessage partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicyPatientOptIn" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicyPatientOptInInput">
55 <sequence name="SequenceOuterCheckPolicyPatientOptIn">
56 <scope name="ScopeCheckPolicyPatientOptIn">
57 <variables>
58 <variable name="PatientOptInSetting" type="xsd:boolean"/>
59 </variables>
60 <faultHandlers>
61 <catch faultName="sxeh:systemFault" faultVariable="systemFaultPatientOptInVar" faultMessageType="sxeh:faultMessage">
62 <sequence name="SystemFaultPatientOptInSeq">
63 <assign name="AssignFaultCheckPolicyPatientOptIn">
64 <sxt:trace>
65 <sxt:log level="info" location="onStart">
66 <from>"CheckPolicyPatientOptIn: An unexpected error occurred. Returning policy: 'Deny'"</from>
67 </sxt:log>
68 <sxt:log level="warning" location="onStart">
69 <from variable="systemFaultPatientOptInVar"/>
70 </sxt:log>
71 </sxt:trace>
72 <copy>
73 <from>'Deny'</from>
74 <to>$CheckPolicyPatientOptInOutput.CheckPolicyPatientOptInResponse/ns0:response/ns1:Result/ns1:Decision</to>
75 </copy>
76 </assign>
77 </sequence>
78 </catch>
79 <catchAll>
80 <sequence name="CatchAllFaultPatientOptInSeq">
81 <assign name="AssignCatchAllFaultCheckPolicyPatientOptIn">
82 <sxt:trace>
83 <sxt:log level="warning" location="onStart">
84 <from>"CheckPolicyPatientOptIn: An unexpected error occurred. Returning policy: 'Deny'"</from>
85 </sxt:log>
86 <sxt:log level="info" location="onStart">
87 <from variable="CheckPolicyPatientOptInInput"/>
88 </sxt:log>
89 </sxt:trace>
90 <copy>
91 <from>'Deny'</from>
92 <to>$CheckPolicyPatientOptInOutput.CheckPolicyPatientOptInResponse/ns0:response/ns1:Result/ns1:Decision</to>
93 </copy>
94 </assign>
95 </sequence>
96 </catchAll>
97 </faultHandlers>
98 <sequence name="SequenceCheckPolicyPatientOptIn">
99 <assign name="AssignInputTransformXACMLtoCppAQR">
100 <sxt:trace>
101 <sxt:log level="warning" location="onStart">
102 <from>'CheckPolicyPatientOptIn Request:'</from>
103 </sxt:log>
104 <sxt:log level="info" location="onStart">
105 <from variable="CheckPolicyPatientOptInInput"/>
106 </sxt:log>
107 </sxt:trace>
108 <copy>
109 <from>$CheckPolicyPatientOptInInput.CheckPolicyPatientOptInRequest/ns0:request</from>
110 <to>$TransformXACMLRequestToCppAQRInput.TransformXACMLRequestToCppAQRRequest/ns0:request</to>
111 </copy>
112 </assign>
113 <invoke name="InvokeTransformXACMLtoCppAQR" partnerLink="AdapterPolicyEngineTransformPL" operation="TransformXACMLRequestToCppAQR" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" portType="tns:AdapterPolicyEngineTransformPortType" inputVariable="TransformXACMLRequestToCppAQRInput" outputVariable="TransformXACMLRequestToCppAQROutput"/>
114 <assign name="AssignInputCPPDocRegistryQuery">
115 <sxt:trace>
116 <sxt:log level="warning" location="onComplete">
117 <from>'Message Being sent to DocumentRegistry to retrieve CPP document:'</from>
118 </sxt:log>
119 <sxt:log level="info" location="onComplete">
120 <from variable="RegistryStoredQueryInput"/>
121 </sxt:log>
122 </sxt:trace>
123 <copy>
124 <from>$TransformXACMLRequestToCppAQROutput.TransformXACMLRequestToCppAQRResponse/ns2:AdhocQueryRequest</from>
125 <to variable="RegistryStoredQueryInput" part="body"/>
126 </copy>
127 </assign>
128 <invoke name="InvokeCPPRegistryQuery" partnerLink="AdapterComponentDocRegistryPL" operation="DocumentRegistry_RegistryStoredQuery" portType="ihe:DocumentRegistry_PortType" inputVariable="RegistryStoredQueryInput" outputVariable="RegistryStoredQueryOutput">
129 </invoke>
130 <assign name="AssignCppAQRtoRDSR">
131 <sxt:trace>
132 <sxt:log level="warning" location="onStart">
133 <from>'CheckPolicyPatientOptIn: Message received from Document Query to get CPP meta data:'</from>
134 </sxt:log>
135 <sxt:log level="info" location="onStart">
136 <from variable="RegistryStoredQueryOutput"/>
137 </sxt:log>
138 </sxt:trace>
139 <copy>
140 <from variable="RegistryStoredQueryOutput" part="body"/>
141 <to>$TransformAQRToCppRDSRInput.TransformAQRToCppRDSRRequest/ns2:AdhocQueryResponse</to>
142 </copy>
143 </assign>
144 <invoke name="InvokeTransformCppAQRtoRDSR" partnerLink="AdapterPolicyEngineTransformPL" operation="TransformAQRToCppRDSR" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" portType="tns:AdapterPolicyEngineTransformPortType" inputVariable="TransformAQRToCppRDSRInput" outputVariable="TransformAQRToCppRDSROutput">
145 </invoke>
146 <assign name="AssignInputRetrieveCPPDocument">
147 <sxt:trace>
148 <sxt:log level="warning" location="onStart">
149 <from>'checkPolicyPatientOptIn: Message being set to retrieve the CPP document:'</from>
150 </sxt:log>
151 <sxt:log level="info" location="onStart">
152 <from variable="TransformAQRToCppRDSROutput"/>
153 </sxt:log>
154 </sxt:trace>
155 <copy>
156 <from>$TransformAQRToCppRDSROutput.TransformAQRToCppRDSRResponse/ihe:RetrieveDocumentSetRequest</from>
157 <to variable="RetrieveDocumentSetInput" part="body"/>
158 </copy>
159 </assign>
160 <invoke name="InvokeDocRetrieve" partnerLink="AdapterComponentDocRepositoryPL" operation="DocumentRepository_RetrieveDocumentSet" portType="ihe:DocumentRepository_PortType" inputVariable="RetrieveDocumentSetInput" outputVariable="RetrieveDocumentSetOutput"/>
161 <assign name="AssignInputCheckPatientXACML">
162 <sxt:trace>
163 <sxt:log level="warning" location="onStart">
164 <from>'CheckPolicyPatientOptIn: CPP Message received from Document Repository'</from>
165 </sxt:log>
166 <sxt:log level="info" location="onStart">
167 <from variable="RetrieveDocumentSetOutput"/>
168 </sxt:log>
169 </sxt:trace>
170 <copy>
171 <from variable="RetrieveDocumentSetOutput" part="body"/>
172 <to>$CheckPatientOptInInput.CheckPatientOptInRequest/ihe:RetrieveDocumentSetResponse</to>
173 </copy>
174 </assign>
175 <invoke name="InvokeCheckPatientXACML" partnerLink="AdapterPolicyEngineTransformPL" operation="CheckPatientOptIn" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" portType="tns:AdapterPolicyEngineTransformPortType" inputVariable="CheckPatientOptInInput" outputVariable="CheckPatientOptInOutput"/>
176 <assign name="AssignPatientOptInSetting">
177 <sxt:trace>
178 <sxt:log level="warning" location="onStart">
179 <from>"CheckPolicyPatientOptIn: Message received from Transform of the CPP document to the patient's opt in preference:"</from>
180 </sxt:log>
181 <sxt:log level="info" location="onStart">
182 <from variable="CheckPatientOptInOutput"/>
183 </sxt:log>
184 </sxt:trace>
185 <copy>
186 <from>$CheckPatientOptInOutput.CheckPatientOptInResponse/ns0:patientOptedIn</from>
187 <to variable="PatientOptInSetting"/>
188 </copy>
189 </assign>
190 <if name="IfPatientOptedIn">
191 <condition>$PatientOptInSetting</condition>
192 <assign name="AssignReplyPatientOptedIn">
193 <copy>
194 <from>'Permit'</from>
195 <to>$CheckPolicyPatientOptInOutput.CheckPolicyPatientOptInResponse/ns0:response/ns1:Result/ns1:Decision</to>
196 </copy>
197 </assign>
198 <else>
199 <assign name="AssignPatientOptedOut">
200 <copy>
201 <from>'Deny'</from>
202 <to>$CheckPolicyPatientOptInOutput.CheckPolicyPatientOptInResponse/ns0:response/ns1:Result/ns1:Decision</to>
203 </copy>
204 </assign>
205 </else>
206 </if>
207 </sequence>
208 </scope>
209 <reply name="ReplyCheckPolicyPatientOptIn" partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicyPatientOptIn" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicyPatientOptInOutput">
210 <sxt:trace>
211 <sxt:log level="warning" location="onStart">
212 <from>'AdapterPolicyEngineInterimHelper::CheckPolicyPatientOptIn Response:'</from>
213 </sxt:log>
214 <sxt:log level="info" location="onStart">
215 <from variable="CheckPolicyPatientOptInOutput"/>
216 </sxt:log>
217 </sxt:trace>
218 </reply>
219 </sequence>
220 </onMessage>
221 <onMessage partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicyBasedPatientIdExistence" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyengineinterimhelper" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicyBasedPatientIdExistenceInput">
222 <sequence name="SequenceOuterCheckPolicyBasedPatientIdExistence">
223 <scope name="ScopeCheckPolicyBasedPatientIdExistence">
224 <faultHandlers>
225 <catch faultName="sxeh:systemFault" faultVariable="systemFaultPatientIdExistenceVar" faultMessageType="sxeh:faultMessage">
226 <sequence name="SystemFaultPatientIdExistenceSeq">
227 <assign name="AssignFaultCheckPolicyBasedPatientIdExistence">
228 <sxt:trace>
229 <sxt:log level="warning" location="onStart">
230 <from>'A fault occurred while processing AdapterPolicyEngineInterimHelper::CheckPolicyBasedPatientIdExistence - Returning "Deny".'</from>
231 </sxt:log>
232 <sxt:log level="info" location="onStart">
233 <from variable="CheckPolicyBasedPatientIdExistenceInput"/>
234 </sxt:log>
235 <sxt:log level="severe" location="onStart">
236 <from variable="systemFaultPatientIdExistenceVar"/>
237 </sxt:log>
238 </sxt:trace>
239 <copy>
240 <from>'Deny'</from>
241 <to>$CheckPolicyBasedPatientIdExistenceOutput.CheckPolicyBasedPatientIdExistenceResponse/ns0:response/ns1:Result/ns1:Decision</to>
242 </copy>
243 </assign>
244 </sequence>
245 </catch>
246 <catchAll>
247 <sequence name="CatchAllFaultPatientIdExistenceSeq">
248 <assign name="AssignCatchAllFaultCheckPolicyBasedPatientIdExistence">
249 <sxt:trace>
250 <sxt:log level="warning" location="onStart">
251 <from>'A fault occurred while processing AdapterPolicyEngineInterimHelper::CheckPolicyBasedPatientIdExistence - Returning "Deny".'</from>
252 </sxt:log>
253 <sxt:log level="info" location="onStart">
254 <from variable="CheckPolicyBasedPatientIdExistenceInput"/>
255 </sxt:log>
256 </sxt:trace>
257 <copy>
258 <from>'Deny'</from>
259 <to>$CheckPolicyBasedPatientIdExistenceOutput.CheckPolicyBasedPatientIdExistenceResponse/ns0:response/ns1:Result/ns1:Decision</to>
260 </copy>
261 </assign>
262 </sequence>
263 </catchAll>
264 </faultHandlers>
265 <sequence name="SequenceCheckPolicyBasedPatientIdExistence">
266 <assign name="AssignLoopSetup">
267 <sxt:trace>
268 <sxt:log level="warning" location="onStart">
269 <from>'CheckPolicyBasedPatientIdExistence request:'</from>
270 </sxt:log>
271 <sxt:log level="info" location="onStart">
272 <from variable="CheckPolicyBasedPatientIdExistenceInput"/>
273 </sxt:log>
274 </sxt:trace>
275 <copy>
276 <from>false()</from>
277 <to variable="ExistPatientIdAttribute"/>
278 </copy>
279 <copy>
280 <from>count($CheckPolicyBasedPatientIdExistenceInput.CheckPolicyBasedPatientIdExistenceRequest/ns0:request/ns1:Resource/ns1:Attribute)</from>
281 <to variable="NumResourceAttributes"/>
282 </copy>
283 </assign>
284 <forEach name="ForEachResourceAttribute" parallel="no" counterName="AttrIdx">
285 <startCounterValue>1</startCounterValue>
286 <finalCounterValue>$NumResourceAttributes</finalCounterValue>
287 <scope name="ScopeResourceAttributes">
288 <variables>
289 <variable name="AttributeId" type="xsd:string"/>
290 </variables>
291 <sequence name="SequenceResourceAttributes">
292 <assign name="AssignResourceAttribute">
293 <copy>
294 <from>string($CheckPolicyBasedPatientIdExistenceInput.CheckPolicyBasedPatientIdExistenceRequest/ns0:request/ns1:Resource/ns1:Attribute[$AttrIdx]/@AttributeId)
295 <sxed:editor>
296 <sxed:predicate path="$CheckPolicyBasedPatientIdExistenceInput.CheckPolicyBasedPatientIdExistenceInRequest/ns0:request/ns1:Resource/ns1:Attribute[$AttrIdx]" source="from"/>
297 </sxed:editor>
298 </from>
299 <to variable="AttributeId"/>
300 </copy>
301 </assign>
302 <if name="IfEqualPatientId">
303 <condition>'urn:oasis:names:tc:xacml:1.0:resource:resource-id' = $AttributeId</condition>
304 <assign name="AssignExistPatientId">
305 <copy>
306 <from>true()</from>
307 <to variable="ExistPatientIdAttribute"/>
308 </copy>
309 </assign>
310 </if>
311 </sequence>
312 </scope>
313 </forEach>
314 <if name="IFPatientIdExist">
315 <condition>$ExistPatientIdAttribute</condition>
316 <sequence name="SequencePatientIdExist">
317 <assign name="AssignInputCheckPolicyPatientOptIn">
318 <sxt:trace>
319 <sxt:log level="warning" location="onStart">
320 <from>'PatientId attribute existed in policy request - Checking OptIn preferences'</from>
321 </sxt:log>
322 </sxt:trace>
323 <copy>
324 <from>$CheckPolicyBasedPatientIdExistenceInput.CheckPolicyBasedPatientIdExistenceRequest/ns0:request</from>
325 <to>$InvokeCheckPolicyPatientOptInInput.CheckPolicyPatientOptInRequest/ns0:request</to>
326 </copy>
327 </assign>
328 <invoke name="InvokePatientOptIn" partnerLink="AdapterPolicyEngineInterimHelperInvokePL" operation="CheckPolicyPatientOptIn" portType="tns:AdapterPolicyEngineInterimHelperPortType" inputVariable="InvokeCheckPolicyPatientOptInInput" outputVariable="InvokeCheckPolicyPatientOptInOutput"/>
329 <assign name="AssignReplyCheckPolicyBasedPatientIdExistence">
330 <copy>
331 <from>$InvokeCheckPolicyPatientOptInOutput.CheckPolicyPatientOptInResponse/ns0:response</from>
332 <to>$CheckPolicyBasedPatientIdExistenceOutput.CheckPolicyBasedPatientIdExistenceResponse/ns0:response</to>
333 </copy>
334 </assign>
335 </sequence>
336 <else>
337 <assign name="AssignReplyNoPatientIdPermit">
338 <sxt:trace>
339 <sxt:log level="warning" location="onStart">
340 <from>'PatientId attribute did not exist in policy request - returning "Permit".'</from>
341 </sxt:log>
342 </sxt:trace>
343 <copy>
344 <from>'Permit'</from>
345 <to>$CheckPolicyBasedPatientIdExistenceOutput.CheckPolicyBasedPatientIdExistenceResponse/ns0:response/ns1:Result/ns1:Decision</to>
346 </copy>
347 </assign>
348 </else>
349 </if>
350 </sequence>
351 </scope>
352 <reply name="ReplyCheckPolicyBasedPatientIdExistence" partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicyBasedPatientIdExistence" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicyBasedPatientIdExistenceOutput">
353 <sxt:trace>
354 <sxt:log level="warning" location="onStart">
355 <from>'CheckPolicyBasedPatientIdExistence response:'</from>
356 </sxt:log>
357 <sxt:log level="info" location="onStart">
358 <from variable="CheckPolicyBasedPatientIdExistenceOutput"/>
359 </sxt:log>
360 </sxt:trace>
361 </reply>
362 </sequence>
363 </onMessage>
364 <onMessage partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicyDocRetrieve" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicyDocRetrieveInput">
365 <sequence name="SequenceOuterCheckPolicyDocRetrieve">
366 <scope name="ScopeCheckPolicyDocRetrieve">
367 <variables>
368 <variable name="TransformPatientIdAQRToCppXACMLOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformPatientIdAQRToCppXACMLResponseMessage"/>
369 <variable name="TransformPatientIdAQRToCppXACMLInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformPatientIdAQRToCppXACMLRequestMessage"/>
370 <variable name="GetPatientIdRegistryStoredQueryOutput" messageType="ihe:RegistryStoredQueryResponse_Message"/>
371 <variable name="GetPatientIdRegistryStoredQueryInput" messageType="ihe:RegistryStoredQuery_Message"/>
372 <variable name="TransformXACMLRequestToAQRForPatientIdOutput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformXACMLRequestToAQRForPatientIdResponseMessage"/>
373 <variable name="TransformXACMLRequestToAQRForPatientIdInput" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" messageType="tns:TransformXACMLRequestToAQRForPatientIdRequestMessage"/>
374 </variables>
375 <faultHandlers>
376 <catchAll>
377 <assign name="AssignFaultCheckPolicyDocRetrieve">
378 <sxt:trace>
379 <sxt:log level="warning" location="onStart">
380 <from>"CheckPolicyDocRetrieve: An unexpected error occurred. Sending response of 'Deny'."</from>
381 </sxt:log>
382 </sxt:trace>
383 <copy>
384 <from>'Deny'</from>
385 <to>$CheckPolicyDocRetrieveOutput.CheckPolicyDocRetrieveResponse/ns0:response/ns1:Result/ns1:Decision</to>
386 </copy>
387 </assign>
388 </catchAll>
389 </faultHandlers>
390 <sequence name="SequenceCheckPolicyDocRetrieve">
391 <assign name="AssignInputTransformToAQR">
392 <sxt:trace>
393 <sxt:log level="warning" location="onStart">
394 <from>'CheckPolicyDocRetrieve Request:'</from>
395 </sxt:log>
396 <sxt:log level="info" location="onStart">
397 <from variable="CheckPolicyDocRetrieveInput"/>
398 </sxt:log>
399 </sxt:trace>
400 <copy>
401 <from>$CheckPolicyDocRetrieveInput.CheckPolicyDocRetrieveRequest/ns0:request</from>
402 <to>$TransformXACMLRequestToAQRForPatientIdInput.TransformXACMLRequestToAQRForPatientIdRequest/ns0:request</to>
403 </copy>
404 </assign>
405 <invoke name="InvokeTransformGetAQR" partnerLink="AdapterPolicyEngineTransformPL" operation="TransformXACMLRequestToAQRForPatientId" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" portType="tns:AdapterPolicyEngineTransformPortType" inputVariable="TransformXACMLRequestToAQRForPatientIdInput" outputVariable="TransformXACMLRequestToAQRForPatientIdOutput">
406 <sxt:trace>
407 <sxt:log level="warning" location="onStart">
408 <from>'AdapterPolicyEngineInterimHelper::CheckPolicyDocRetrieve Invoking TransformXACMLRequestToAQRForPatientId'</from>
409 </sxt:log>
410 <sxt:log level="info" location="onStart">
411 <from variable="TransformXACMLRequestToAQRForPatientIdInput"/>
412 </sxt:log>
413 </sxt:trace>
414 </invoke>
415 <assign name="AssignInvokeDocRegistryToGetPatientId">
416 <copy>
417 <from>$TransformXACMLRequestToAQRForPatientIdOutput.TransformXACMLRequestToAQRForPatientIdResponse/ns2:AdhocQueryRequest</from>
418 <to variable="GetPatientIdRegistryStoredQueryInput" part="body"/>
419 </copy>
420 </assign>
421 <invoke name="InvokeDocRegistryToGetPatientId" partnerLink="AdapterComponentDocRegistryPL" operation="DocumentRegistry_RegistryStoredQuery" portType="ihe:DocumentRegistry_PortType" inputVariable="GetPatientIdRegistryStoredQueryInput" outputVariable="GetPatientIdRegistryStoredQueryOutput">
422 <sxt:trace>
423 <sxt:log level="warning" location="onStart">
424 <from>'AdapterPolicyEngineInterimHelper::CheckPolicyDocRetrieve: Calling Doc Registry to get the patient ID.'</from>
425 </sxt:log>
426 <sxt:log level="info" location="onStart">
427 <from variable="GetPatientIdRegistryStoredQueryInput"/>
428 </sxt:log>
429 </sxt:trace>
430 </invoke>
431 <assign name="AssignTransformGetXACMLForPatientOptIn">
432 <copy>
433 <from variable="GetPatientIdRegistryStoredQueryOutput" part="body"/>
434 <to>$TransformPatientIdAQRToCppXACMLInput.TransformPatientIdAQRToCppXACMLRequest/ns2:AdhocQueryResponse</to>
435 </copy>
436 </assign>
437 <invoke name="InvokeTransformGetXACMLtoRetrieveCPP" partnerLink="AdapterPolicyEngineTransformPL" operation="TransformPatientIdAQRToCppXACML" xmlns:tns="urn:gov:hhs:fha:nhinc:adapterpolicyenginetransform" portType="tns:AdapterPolicyEngineTransformPortType" inputVariable="TransformPatientIdAQRToCppXACMLInput" outputVariable="TransformPatientIdAQRToCppXACMLOutput">
438 <sxt:trace>
439 <sxt:log level="warning" location="onStart">
440 <from>'AdapterPolicyEngineInterimHelper::CheckPolicyDocRetrieve: Calling Transform to create XACML with patient ID to check CPP'</from>
441 </sxt:log>
442 <sxt:log level="info" location="onStart">
443 <from variable="TransformPatientIdAQRToCppXACMLInput"/>
444 </sxt:log>
445 </sxt:trace>
446 </invoke>
447 <assign name="AssignXACMLToCheckCPP">
448 <copy>
449 <from>$TransformPatientIdAQRToCppXACMLOutput.TransformPatientIdAQRToCppXACMLResponse/ns0:request</from>
450 <to>$InvokeCheckPolicyPatientOptInInput.CheckPolicyPatientOptInRequest/ns0:request</to>
451 </copy>
452 </assign>
453 <invoke name="InvokePatientOptInFromDocRetrieve" partnerLink="AdapterPolicyEngineInterimHelperInvokePL" operation="CheckPolicyPatientOptIn" portType="tns:AdapterPolicyEngineInterimHelperPortType" inputVariable="InvokeCheckPolicyPatientOptInInput" outputVariable="InvokeCheckPolicyPatientOptInOutput">
454 <sxt:trace>
455 <sxt:log level="warning" location="onStart">
456 <from>'AdapterPolicyEngineInterimHelper::CheckPolicyDocRetrieve - Calling CheckPolicyPatientOptIn:'</from>
457 </sxt:log>
458 <sxt:log level="info" location="onStart">
459 <from variable="InvokeCheckPolicyPatientOptInInput"/>
460 </sxt:log>
461 </sxt:trace>
462 </invoke>
463 <assign name="AssignReplyCheckPolicyDocRetrieve">
464 <copy>
465 <from>$InvokeCheckPolicyPatientOptInOutput.CheckPolicyPatientOptInResponse/ns0:response</from>
466 <to>$CheckPolicyDocRetrieveOutput.CheckPolicyDocRetrieveResponse/ns0:response</to>
467 </copy>
468 </assign>
469 </sequence>
470 </scope>
471 <reply name="ReplyCheckPolicyDocRetrieve" partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicyDocRetrieve" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicyDocRetrieveOutput">
472 <sxt:trace>
473 <sxt:log level="warning" location="onStart">
474 <from>'CheckPolicyDocRetrieve Response:'</from>
475 </sxt:log>
476 <sxt:log level="info" location="onStart">
477 <from variable="CheckPolicyDocRetrieveOutput"/>
478 </sxt:log>
479 </sxt:trace>
480 </reply>
481 </sequence>
482 </onMessage>
483
484 <onMessage partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicySubjDiscReIdent" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicySubjDiscReIdentInput">
485 <sequence name="SequenceOuterCheckPolicySubjDiscReIdent">
486 <scope name="ScopeCheckPolicySubjDiscReIdent">
487 <variables>
488 <variable name="NumSubjectAttributes" type="xsd:integer"/>
489 <variable name="PermitUserRoleAttribute" type="xsd:boolean"/>
490 <variable name="PermitPurposeForUseAttribute" type="xsd:boolean"/>
491 </variables>
492 <faultHandlers>
493 <catchAll>
494 <assign name="AssignFaultCheckPolicySubjDiscReIdent">
495 <sxt:trace>
496 <sxt:log level="warning" location="onStart">
497 <from>"CheckPolicySubjDiscReIdent: An unexpected error occurred. Sending response of 'Deny'."</from>
498 </sxt:log>
499 </sxt:trace>
500 <copy>
501 <from>'Deny'</from>
502 <to>$CheckPolicySubjDiscReIdentOutput.CheckPolicySubjDiscReIdentResponse/ns0:response/ns1:Result/ns1:Decision</to>
503 </copy>
504 </assign>
505 </catchAll>
506 </faultHandlers>
507 <sequence name="SequenceCheckPolicySubjDiscReIdent">
508 <assign name="AssignLoopSetup">
509 <sxt:trace>
510 <sxt:log level="warning" location="onStart">
511 <from>'CheckPolicySubjDiscReIdent request:'</from>
512 </sxt:log>
513 <sxt:log level="info" location="onStart">
514 <from variable="CheckPolicySubjDiscReIdentInput"/>
515 </sxt:log>
516 </sxt:trace>
517 <copy>
518 <from>false()</from>
519 <to variable="PermitUserRoleAttribute"/>
520 </copy>
521 <copy>
522 <from>false()</from>
523 <to variable="PermitPurposeForUseAttribute"/>
524 </copy>
525 <copy>
526 <from>count($CheckPolicySubjDiscReIdentInput.CheckPolicySubjDiscReIdentRequest/ns0:request/ns1:Subject/ns1:Attribute)</from>
527 <to variable="NumSubjectAttributes"/>
528 </copy>
529 </assign>
530 <forEach name="ForEachSubjectAttribute" parallel="no" counterName="AttrIdx">
531 <startCounterValue>1</startCounterValue>
532 <finalCounterValue>$NumSubjectAttributes</finalCounterValue>
533 <scope name="ScopeSubjectAttributes">
534 <variables>
535 <variable name="AttributeId" type="xsd:string"/>
536 <variable name="AttributeValue" type="xsd:string"/>
537 </variables>
538 <sequence name="SequenceSubjectAttributes">
539 <assign name="AssignSubjectAttribute">
540 <copy>
541 <from>string($CheckPolicySubjDiscReIdentInput.CheckPolicySubjDiscReIdentRequest/ns0:request/ns1:Subject/ns1:Attribute[$AttrIdx]/@AttributeId)
542 <sxed:editor>
543 <sxed:predicate path="$CheckPolicySubjDiscReIdentInput.CheckPolicySubjDiscReIdentRequest/ns0:request/ns1:Subject/ns1:Attribute[$AttrIdx]" source="from"/>
544 </sxed:editor>
545 </from>
546 <to variable="AttributeId"/>
547 </copy>
548 <copy>
549 <from>$CheckPolicySubjDiscReIdentInput.CheckPolicySubjDiscReIdentRequest/ns0:request/ns1:Subject/ns1:Attribute[$AttrIdx]/ns1:AttributeValue
550 <sxed:editor>
551 <sxed:predicate path="$CheckPolicySubjDiscReIdentInput.CheckPolicySubjDiscReIdentRequest/ns0:request/ns1:Subject/ns1:Attribute[$AttrIdx]" source="from"/>
552 </sxed:editor>
553 </from>
554 <to variable="AttributeValue"/>
555 </copy>
556 </assign>
557 <if name="IfEqualUserRoleId">
558 <condition>'urn:gov:hhs:fha:nhinc:user-role-code' = $AttributeId and '307969004' = $AttributeValue</condition>
559 <assign name="AssignPermitUserRole">
560 <copy>
561 <from>true()</from>
562 <to variable="PermitUserRoleAttribute"/>
563 </copy>
564 </assign>
565 </if>
566 <if name="IfEqualPurposeForUseId">
567 <condition>'urn:gov:hhs:fha:nhinc:purpose-for-use' = $AttributeId and 'PUBLICHEALTH' = $AttributeValue</condition>
568 <assign name="AssignPermitPurposeForUse">
569 <copy>
570 <from>true()</from>
571 <to variable="PermitPurposeForUseAttribute"/>
572 </copy>
573 </assign>
574 </if>
575 </sequence>
576 </scope>
577 </forEach>
578 <if name="IfUserRoleAndPurposeForUseTrue">
579 <condition>$PermitUserRoleAttribute and $PermitPurposeForUseAttribute</condition>
580 <assign name="AssignPermitReturn">
581 <copy>
582 <from>'Permit'</from>
583 <to>$CheckPolicySubjDiscReIdentOutput.CheckPolicySubjDiscReIdentResponse/ns0:response/ns1:Result/ns1:Decision</to>
584 </copy>
585 </assign>
586 <else>
587 <assign name="AssignDenyReturn">
588 <copy>
589 <from>'Deny'</from>
590 <to>$CheckPolicySubjDiscReIdentOutput.CheckPolicySubjDiscReIdentResponse/ns0:response/ns1:Result/ns1:Decision</to>
591 </copy>
592 </assign>
593 </else>
594 </if>
595 </sequence>
596 </scope>
597 <reply name="ReplyCheckPolicySubjDiscReIdent" partnerLink="AdapterPolicyEngineInterimHelperPL" operation="CheckPolicySubjDiscReIdent" portType="tns:AdapterPolicyEngineInterimHelperPortType" variable="CheckPolicySubjDiscReIdentOutput">
598 <sxt:trace>
599 <sxt:log level="warning" location="onStart">
600 <from>'CheckPolicySubjDiscReIdent Response:'</from>
601 </sxt:log>
602 <sxt:log level="info" location="onStart">
603 <from variable="CheckPolicySubjDiscReIdentOutput"/>
604 </sxt:log>
605 </sxt:trace>
606 </reply>
607 </sequence>
608 </onMessage>
609 </pick>
610 </scope>
611 </sequence>
612</process>
Note: See TracBrowser for help on using the repository browser.