DRAFT VERSION! |
In this piece of the full PS workflow we can understand the following:
# | Step | Option | Observation |
---|---|---|---|
1 | HCP confirms that he checked the correctness of patient's ID details (Port-B) | YES | With the selected option the HCP should then choose if it is an emergency case or not. We will proceed to follow the diagram as if it was one. |
2 | Emergency case (button to confirm or deny) | YES | With the selected option the system should send a request to the Patient's country right away, avoiding ask for previous consent. It is up to Country-A to provide or not the information, based on Emergency situation policy. |
The next steps will depend on the Country-A Emergency situation policy. But the important part that is taken from the specs is the folllowing:
In the Portuguese portal modified version we adapted the workflow to be more aligned with the specs. It has the following behaviour:
This steps can be explained by the following animated picture:
This modification was achieved mainly by changing the default confirmation page (viewPatientConfirmationForDocuments.xhtml), that now contains the following code:
<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 TransitionalEN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> </h:head> <body> <h:form> <p:panel header="#{translationBean.report_summary}"> <table> <tr> <td><b><h:outputText value="#{translationBean.patient_data_givenname}" /></b></td> <td> </td> <td><h:outputText value="#{myBean.selectedPatient.name}" /></td> </tr> <tr> <td><b><h:outputText value="#{translationBean.patient_data_surname}" /></b></td> <td> </td> <td><h:outputText value="#{myBean.selectedPatient.familyName}" /></td> </tr> <tr> <td><b><h:outputText value="#{translationBean.patient_data_street_address}" /></b></td> <td> </td> <td><h:outputText value="#{myBean.selectedPatient.address}" /></td> </tr> <tr> <td><b><h:outputText value="#{translationBean.patient_data_code}" /></b></td> <td> </td> <td><h:outputText value="#{myBean.selectedPatient.postalCode}" /></td> </tr> <tr> <td><b><h:outputText value="#{translationBean.patient_data_city}" /></b></td> <td> </td> <td><h:outputText value="#{myBean.selectedPatient.city}" /></td> </tr> <tr> <td><b><h:outputText value="#{translationBean.patient_data_country}" /></b></td> <td> </td> <td><h:outputText value="#{myBean.selectedPatient.country}" /></td> </tr> </table> </p:panel> <p:panel header="Confirmar com o doente (acesso aos seus dados clínicos):" id="confirmationPanel"> <p:outputPanel id="customPanel"> <td><b><h:outputText value="Atendimento:" /></b></td> <p:selectOneRadio id="customRadio" value="#{confirmationBean.purposeOfUse}" layout="custom"> <f:selectItem itemLabel=" EMERGENTE (não é possível obter o consentimento)" itemValue="EMERGENCY" /> <f:selectItem itemLabel=" NÃO URGENTE" itemValue="TREATMENT" /> <p:ajax update="confirmationPanel"/> </p:selectOneRadio> <h:panelGrid columns="2"> <p:radioButton id="opt2" for="customRadio" itemIndex="0" /> <h:outputLabel for="opt2" value=" EMERGENTE (não é possível obter o consentimento)" /> <p:radioButton id="opt1" for="customRadio" itemIndex="1" /> <h:outputLabel for="opt1" value=" NÃO URGENTE" /> </h:panelGrid> </p:outputPanel> <p:outputPanel rendered="#{confirmationBean.purposeOfUse=='TREATMENT'}" id="customPanel2"> <td><b><h:outputText value="Deu consentimento prévio?" /></b></td> <p:selectOneRadio id="customRadio2" value="#{confirmationBean.confirm}" layout="custom"> <f:selectItem itemLabel="Yes" itemValue="Yes" /> <f:selectItem itemLabel="No" itemValue="No" /> </p:selectOneRadio> <h:panelGrid columns="2"> <p:radioButton id="opt11" for="customRadio2" itemIndex="0" /> <h:outputLabel for="opt11" value=" Sim" /> <p:radioButton id="opt22" for="customRadio2" itemIndex="1" /> <h:outputLabel for="opt22" value=" Não" /> </h:panelGrid> </p:outputPanel> <p:commandButton id="submitButton" value="Confirmar" ajax="false" action="/viewDocuments.xhtml?faces-redirect=true&javax.portlet.faces.PortletMode=view&javax.portlet.faces.WindowState=normal" disabled="#{confirmationBean.purposeOfUse==null}" onclick="customRadio.selectValue('')"> <p:resetInput target="confirmationPanel" /> <f:setPropertyActionListener value="#{confirmationBean.purposeOfUse}" target="#{myBean.purposeOfUseForPS}" /> <f:setPropertyActionListener value="#{confirmationBean.confirm}" target="#{myBean.previousConsent}" /> <f:setPropertyActionListener value="null" target="#{confirmationBean.purposeOfUse}" /> <f:setPropertyActionListener value="null" target="#{confirmationBean.confirm}" /> </p:commandButton> <p:commandButton id="cancelButton" value="Cancelar" ajax="false" action="/view1.xhtml?javax.portlet.faces.PortletMode=view&javax.portlet.faces.WindowState=normal" /> </p:panel> </h:form> </body> </html> |
Please give importance to:
<p:selectOneRadio id="customRadio" value="#{confirmationBean.purposeOfUse}" layout="custom"> <f:selectItem itemLabel=" EMERGENTE (não é possível obter o consentimento)" itemValue="EMERGENCY" /> <f:selectItem itemLabel=" NÃO URGENTE" itemValue="TREATMENT" /> <p:ajax update="confirmationPanel"/> </p:selectOneRadio> |
That will trigger the "hide and show" of the question that asks for the previous consent, together with the following tag:
<p:outputPanel rendered="#{confirmationBean.purposeOfUse=='TREATMENT'}" id="customPanel2"> ... </p:outputPanel> |
2.2. Assertion type
The current implementation will produce a Treatment Relationship Confirmation (TRC) assertion with a specific XSPA Purpose of Use value, based on the selected purpose of use (EMERGENCY or NOT EMERGENCY <=> TREATMENT)
<saml2:Attribute FriendlyName="XSPA Purpose Of Use" Name="urn:oasis:names:tc:xspa:1.0:subject:purposeofuse" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"> <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">EMERGENCY</saml2:AttributeValue> </saml2:Attribute> |
"Extraordinary and/or emergency accesses must be specially marked in order to facilitate the local management of those."
Therefore an extra audit message needs to be triggered in this particular situations.