Specifiche di invocazione del sistema di monitoraggio e

Transcript

Specifiche di invocazione del sistema di monitoraggio e
Regione Toscana
Specifiche di invocazione del sistema di
monitoraggio e controllo servizi CART
Stato del documento
Definitiva
Versione del documento 1.8
Data
Documento
Acronimo del
documento
29/05/13
Specifiche di invocazione del sistema di
monitoraggio e controllo servizi CART
TOSCART-TEC-SPECINVOCAZIONE-PMC
REGISTRAZIONE
versione
MODIFICHE AL DOCUMENTO
PARAGRAFO O
DESCRIZIONE DELLA VARIAZIONE
PAGINA
1.0
Tutto il documento
Versione definitiva
1.1
Tutto il documento
Revisione generale
1.2
Codici di errore e
notifiche di non
accettazione
Introduzione delle notifiche di non accettazione
1.3
Paragrafo campi
obbligatori
Introduzione campi obbligatori per
l’invocazione del servizio pmcNal
1.4
Codici di errore e
notifiche di non
accettazione
Esempi di notifiche puntuali / aggregate
1.5
Nuova specifica del
wsdl
1.6
Web service
monitoraggio per
utilizzatori esterni.
ed errori infrastrutturali
Resi obbligatori i campi dataElaborazione,
accordoServizio, servizio, tipoServizio, modalita,
stato, componente, proxy
Descrizione del web service di monitoraggio per
utilizzatori esterni
1.7
Aggiunta di nuovi
codici di non
accettazione
Il proxy applicativo può inviare codici di non
accettazione relativi ad errori riscontrati durante
la fase di elaborazione del messaggio.
1.8
Monitoraggio servizi
sincroni
Aggiunta specifica relativa alle notifiche di
monitoraggio inviate dai proxy applicativi nel
caso di servizi sincroni.
Indice dei Contenuti
1 - SCOPO......................................................................................................................................................................4
2 - INTRODUZIONE....................................................................................................................................................4
3 - INTERFACCIA WS PMCNAL.............................................................................................................................5
4 - ESEMPI DI UTILIZZO........................................................................................................................................11
4.1
4.2
4.3
4.4
Esempio
Esempio
Esempio
Esempio
di
di
di
di
notifica
notifica
notifica
notifica
N1.....................................................................................12
N2.....................................................................................13
N3.....................................................................................13
N4.....................................................................................14
5 - CODICI DI ERRORE E NOTIFICHE DI NON ACCETTAZIONE...............................................................15
5.1 Esempio di notifica di non accettazione puntuale.................................................15
5.2 Esempio di notifica di non accettazione aggregata...............................................16
5.3 Esempio di notifica di errore in consegna su erogatore.........................................17
6 - MONITORAGGIO SERVIZI SINCRONI.........................................................................................................17
7 - WEB SERVICE MONITORAGGIO PER UTILIZZATORI ESTERNI........................................................18
1 - SCOPO
Scopo del presente documento è quello di definire l’interfaccia per l’invocazione del sistema di
monitoraggio dei servizi in ambito CART che utilizzano proxy applicativi.
2 - INTRODUZIONE
Obiettivo del Sistema di Monitoraggio PMC è quello di consentire di monitorare ciò che si
ritenga significativo tenere sotto controllo per il servizio sul quale si voglia attivare tale sistema
(ad es. in un servizio il cui compito sia l’invio di documenti, si vorrà monitorare l’effettiva
consegna dei documenti stessi).
Il sistema di monitoraggio espone un web service locale al NAL (Ws-PMCNal, di cui definiremo
l’interfaccia in questo documento) per la ricezione di messaggi di monitoraggio inviati dai
proxy. Un modulo applicativo locale al NAL (Agent di monitoraggio) si occuperà di inviare, in
modalità asincrona, i messaggi di monitoraggio al servizio centrale.
Il servizio centrale di monitoraggio riceverà le notifiche e le memorizzerà nel database di
monitoraggio. Sul servizio centrale sarà presente un’interfaccia web per le operazioni di
reportistica, analisi ed impostazione di regole per l’attivazione di meccanismi di alert.
Gli attori principali del sistema di monitoraggio sono, come detto, il web service di gestione dei
messaggi di monitoraggio locale al NAL (PMCNal), il processo di invio notifiche (Agent), il web
service centrale per la memorizzazione delle notifiche (PMCCric), un applicazione web per la
reportistica e controllo ed un processo di controllo regole e invio alert.
Di seguito un possibile scenario di utilizzo:
Il tracciamento della comunicazione fra un SIL mittente ed un SIL destinatario avviene, in uno
scenario di tipo asincrono, nel seguente modo: sul NAL mittente il proxy applicativo invocato
dal SIL (1) invia al web service di monitoraggio locale Ws PMCNal un messaggio (2),
notificando la ricezione di un messaggio applicativo da parte del SIL (Notifica N1).
Successivamente il proxy invoca la porta di dominio (3) e, dopo aver ricevuto un ACK positivo
di presa in carico, invoca nuovamente il Ws PMCNal notificando l'avvenuta presa in carico (4)
(Notifica N2).
Sul NAL destinatario avverrà l’inverso, ossia il proxy applicativo alla ricezione di un messaggio
applicativo dalla porta di dominio (5) invocherà il Ws PMCNal locale notificando la richiesta di
servizio applicativo (6) (Notifica N3).
Successivamente, il proxy inoltra la richiesta al servizio erogatore locale (7) e, dopo aver
ottenuto un ACK positivo di presa in carico, invoca di nuovo il Ws PMCNal notificando il
completamento delle operazioni di gestione del messaggio sul CART (8) (Notifica N4) che
quindi risulta consegnato.
3 - INTERFACCIA WS PMCNAL
Il web service Ws PMCNal è conforme alla seguente definizione (WSDL):
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://cart.rete.toscana.it/pmc"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:tns="http://cart.rete.toscana.it/pmc"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema
xmlns="http://www.w3.org/2001/XMLSchema">
targetNamespace="http://cart.rete.toscana.it/pmc"
<include schemaLocation="NotificationMessage.xsd"/>
<include schemaLocation="NotificationResponse.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="inviaNotificaRequest">
<wsdl:part name="in0" type="tns:NotificationMessage"/>
</wsdl:message>
<wsdl:message name="inviaNotificaResponse">
<wsdl:part name="inviaNotificaReturn" type="tns:NotificationResponse"/>
</wsdl:message>
<wsdl:portType name="PMCNal">
<wsdl:operation name="inviaNotifica" parameterOrder="in0">
<wsdl:input message="tns:inviaNotificaRequest" name="inviaNotificaRequest"/>
<wsdl:output message="tns:inviaNotificaResponse" name="inviaNotificaResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PMCNalSoapBinding" type="tns:PMCNal">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="inviaNotifica">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="inviaNotificaRequest">
<wsdlsoap:body namespace="http://cart.rete.toscana.it/pmc" use="literal"/>
</wsdl:input>
<wsdl:output name="inviaNotificaResponse">
<wsdlsoap:body namespace="http://cart.rete.toscana.it/pmc" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PMCNalService">
<wsdl:port binding="tns:PMCNalSoapBinding" name="PMCNal">
<wsdlsoap:address location="http://localhost:8380/pmcnal/services/PMCNal"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Dove NotificationMessage.xsd è la specifica del messaggio di notifica con cui il proxy invoca il
web service WsPMCNal attraverso il metodo “inviaNotifica”.
NotificationMessage.xsd ha la seguente struttura:
<?xml version="1.0"?>
<xs:schema
xmlns="http://cart.rete.toscana.it/pmc"
elementFormDefault="qualified">
targetNamespace="http://cart.rete.toscana.it/pmc"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
<xs:complexType name="NotificationMessage">
<xs:sequence>
<xs:element ref="idCorrelazioneApp" nillable="true" minOccurs="0"/>
<xs:element ref="idEGov" nillable="true" minOccurs="0"/>
<xs:element ref="mittente" nillable="true" minOccurs="0"/>
<xs:element ref="tipoMittente" nillable="true" minOccurs="0"/>
<xs:element ref="destinatario" nillable="true" minOccurs="0"/>
<xs:element ref="tipoDestinatario" nillable="true" minOccurs="0"/>
<xs:element ref="dataElaborazione"/>
<xs:element ref="numeroRFC" nillable="true" minOccurs="0"/>
<xs:element ref="accordoServizio"/>
<xs:element ref="servizio"/>
<xs:element ref="tipoServizio"/>
<xs:element ref="azione" nillable="true" minOccurs="0"/>
<xs:element ref="modalita"/>
<xs:element ref="stato"/>
<xs:element ref="errore" nillable="true" minOccurs="0"/>
<xs:element ref="messaggiAggregati" nillable="true" minOccurs="0"/>
<xs:element ref="componente"/>
<xs:element ref="proxy"/>
<xs:element ref="idProxy" nillable="true" minOccurs="0"/>
<xs:element ref="nal" nillable="true" minOccurs="0"/>
<xs:element ref="note" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="idCorrelazioneApp" type="xs:string">
<xs:annotation>
<xs:documentation>
Identificativo di correlazione applicativa
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="idEGov" type="xs:string">
<xs:annotation>
<xs:documentation>
Identificativo della busta eGov
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="mittente" type="xs:string">
<xs:annotation>
<xs:documentation>
Riferimenti del mittente del messaggio
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="tipoMittente" type="soggType">
<xs:annotation>
<xs:documentation>
Tipo mittente
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="destinatario" type="xs:string">
<xs:annotation>
<xs:documentation>
Riferimenti del destinatario del messaggio
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="tipoDestinatario" type="soggType">
<xs:annotation>
<xs:documentation>
Tipo destinatario
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="dataElaborazione" type="xs:dateTime">
<xs:annotation>
<xs:documentation>
Data di elaborazione del messaggio nel formato (yyyy-mm-ddThh:mm:ss)
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="numeroRFC" type="xs:string">
<xs:annotation>
<xs:documentation>
Numero di RFC
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="accordoServizio" type="xs:string">
<xs:annotation>
<xs:documentation>
Nome dell'accordo di servizio
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="servizio" type="xs:string">
<xs:annotation>
<xs:documentation>
Identificativo del servizio applicativo
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="tipoServizio" type="serviceType">
<xs:annotation>
<xs:documentation>
Tipo servizio
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="azione" type="xs:string">
<xs:annotation>
<xs:documentation>
Identificativo dell'azione associata al servizio
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="stato" type="xs:int">
<xs:annotation>
<xs:documentation>
stato del messaggio
0 = OK
-102 – Errore di validazione del messaggio (associato solo alla prima notifica);
-103 – Errore di anonimizzazione anagrafe locale (associato solo alla prima notifica);
-104 – Errore di anonimizzazione anagrafe centrale (associato solo alla prima notifica);
-300 – Errore generico proxy applicativo;
-400 – Errore invocazione PdD mittente (associato solo alla seconda notifica);
-500 – Errore generico in consegna su erogatore (associato solo all'ultima notifica).
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="messaggiAggregati" type="xs:int">
<xs:annotation>
<xs:documentation>
numero di messaggi che sono risultati in errore
in caso di notifica di non accettazione dal SIL fruitore
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="errore" type="xs:string">
<xs:annotation>
<xs:documentation>
Descrizione estesa dell'errore di elaborazione del messaggio
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="modalita" type="modType">
<xs:annotation>
<xs:documentation>
Modalita' che il componente effettua sul messaggio I= Invio R=ricezione
Da utilizzare insieme al componente per identificare in quale punto dell'infrastruttura
si trova il messaggio applicativo.
Si veda descrizione del componente.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="componente" type="compType">
<xs:annotation>
<xs:documentation>
Definizione della tipologia del componente che interagisce con il proxy (CART,SIL)
Da utilizzare insieme alla modalita' per specificare in quale punto dell'infrastruttura
si trova il messaggio applicativo.
Di seguito le possibili combinazioni [modalita,componente]:
[R,SIL] = Ricezione da SIL (prima notifica)
[I,CART] = Invio alla PDD - CART (seconda notifica)
[R,CART] = Ricezione da PDD - CART (terza notifica)
[I,SIL] = Invio a SIL (quarta notifica)
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="proxy" type="xs:string">
<xs:annotation>
<xs:documentation>
nome del proxy
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="idProxy" type="xs:string">
</xs:element>
<xs:element name="nal" type="xs:string">
<xs:annotation>
<xs:documentation>
identifica il nal su cui si trova il proxy
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="note" type="xs:string">
<xs:annotation>
<xs:documentation>
annotazione generica
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:simpleType name="serviceType">
<xs:restriction base="xs:string">
<xs:enumeration value="SPC"/>
<xs:enumeration value="AOO"/>
<xs:enumeration value="TEST"/>
<xs:enumeration value="UDDI"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="compType">
<xs:restriction base="xs:string">
<xs:enumeration value="SIL"/>
<xs:enumeration value="CART"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="soggType">
<xs:restriction base="xs:string">
<xs:enumeration value="SPC"/>
<xs:enumeration value="AOO"/>
<xs:enumeration value="TEST"/>
<xs:enumeration value="UDDI"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="modType">
<xs:restriction base="xs:string">
<xs:enumeration value="I"/>
<xs:enumeration value="R"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
IMPORTANTE:
Affinché il sistema riesca a collegare le 4 notifiche generate nel percorso del messaggio
dal SIL fruitore al SIL erogatore e quindi riesca a calcolare tempi e modalità di
invio/ricezione del messaggio, è necessario che nel tag idCorrelazioneApp esista un ugual
valore (non nullo) in tutte e quattro le notifiche.
Il
servizio
Ws
PMCNal
NotificationResponse.xsd
risponde
con
un
xml
definito
dallo
schema
La definizione di NotificationResponse.xsd è la seguente:
<?xml version="1.0"?>
<xs:schema targetNamespace="http://cart.rete.toscana.it/pmc" xmlns="http://cart.rete.toscana.it/pmc"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:complexType name="NotificationResponse">
<xs:sequence>
<xs:element ref="codice" minOccurs="1"/>
<xs:element ref="description" minOccurs="0"/>
<xs:element ref="esito" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="codice" type="xs:int">
<xs:annotation>
<xs:documentation>
codice di ritorno
0: ok
-101: errore
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="description" type="xs:string">
<xs:annotation>
<xs:documentation>
descrizione errore
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="esito" type="xs:boolean">
<xs:annotation>
<xs:documentation>
esito invio notifica: true/false
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
4 - ESEMPI DI UTILIZZO
Come detto NotificationMessage.xsd definisce il messaggio di notifica con cui il proxy invoca il
web service WsPMCNal attraverso il metodo “inviaNotifica”.
Un esempio di codice per l’invocazione del web service è la seguente:
public void testPMCNalInviaNotifica() throws Exception {
it.toscana.regione.cart.pmcnal.PMCNalSoapBindingStub binding;
try {
binding = (it.toscana.regione.cart.pmcnal.PMCNalSoapBindingStub)
new it.toscana.regione.cart.pmcnal.PMCNalServiceLocator().getPMCNal();
}
catch (javax.xml.rpc.ServiceException jre) {
throw new Exception("JAX-RPC ServiceException caught: " + jre);
}
// Test operation
it.toscana.regione.cart.pmcnal.NotificationResponse value = null;
it.toscana.regione.cart.pmcnal.NotificationMessage notificationMessage =
new it.toscana.regione.cart.pmcnal.NotificationMessage();
//setting notificationMessage properties…
//notificationMessage.setIdEGov(…)
value = binding.inviaNotifica(notificationMessage);
//validate results….
}
4.1 ESEMPIO DI NOTIFICA N1
Un esempio di documento conforme allo schema NotificationMessage.xsd è il seguente:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov></pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:10:12.681Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>R</pmc:modalita>
<pmc:stato>0</pmc:stato>
<pmc:errore></pmc:errore>
<pmc:componente>SIL</pmc:componente>
<pmc:proxy>Proxy-ASL11empoli</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL-ASL11empoli</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
Nel caso dell’esempio, si tratta di una notifica con cui il proxy Proxy-ASL11empoli che si trova
sul nal NAL-ASL11empoli notifica l’avvenuta ricezione di un messaggio dal SIL mittente
ASL11empoli al SIL destinatario ASL3pistoia riguardante il servizio NotificaEventoClinico.
4.2 ESEMPIO DI NOTIFICA N2
Quando il proxy invoca la porta di dominio del CART e riceve un ack può invocare nuovamente
il web service WsPMCNal notificando l’avvenuta presa in carico da parte della PDD utilizzando il
seguente messaggio:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov>ASL8staging_ASL8stagingSPCoopIT_0004661_2009-06-29_12:38</pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:11:12.158Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>I</pmc:modalita>
<pmc:stato>0</pmc:stato>
<pmc:errore></pmc:errore>
<pmc:componente>CART</pmc:componente>
<pmc:proxy>Proxy-ASL11empoli</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL-ASL11empoli</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
4.3 ESEMPIO DI NOTIFICA N3
Sul nal destinatario NAL-ASL3pistoia, il proxy Proxy-ASL3pistoia, una volta ricevuto il
messaggio dalla PDD invocherà il WsPMCNal utilizzando il seguente messaggio:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov>ASL8staging_ASL8stagingSPCoopIT_0004661_2009-06-29_12:38</pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:12:12.681Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>R</pmc:modalita>
<pmc:stato>0</pmc:stato>
<pmc:errore></pmc:errore>
<pmc:componente>CART</pmc:componente>
<pmc:proxy>Proxy-ASL3pistoia</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL- ASL3pistoia</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
4.4 ESEMPIO DI NOTIFICA N4
Il proxy Proxy-ASL3pistoia ricevuto l’ack dal SIL ASL3pistoia invierà a WsPMCNal il seguente
messaggio di notifica:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov>ASL8staging_ASL8stagingSPCoopIT_0004661_2009-06-29_12:38</pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:12:25.681Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>I</pmc:modalita>
<pmc:stato>0</pmc:stato>
<pmc:errore></pmc:errore>
<pmc:componente>SIL</pmc:componente>
<pmc:proxy>Proxy-ASL3pistoia</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL- ASL3pistoia</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
Un esempio di risposta conforme allo schema NotificationResponse.xsd e' la seguente:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:NotificationResponse xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:codice>0</pmc:codice>
<pmc:description>OK</pmc:description>
<pmc:esito>true</pmc:esito>
</pmc:NotificationResponse>
</xs:schema>
5 - CODICI DI ERRORE E NOTIFICHE DI NON ACCETTAZIONE
I proxy, alla ricezione di un messaggio, hanno la possibilità di notificare al sistema di
monitoraggio situazioni di errore, tipicamente errori di validazione e/o anonimizzazione (proxy
fruitore) oppure errori in fase di consegna al SIL erogatore (proxy erogatore), impostando un
opportuno codice di non accettazione relativo alla tipologia di errore riscontrata durante
l'elaborazione del messaggio.
Attualmente sono disponibili i seguenti codici di non accettazione:
•
-102 – Errore di validazione del messaggio (associato solo alla prima notifica);
•
-103 – Errore di anonimizzazione anagrafe locale (associato solo alla prima notifica);
•
-104 – Errore di anonimizzazione anagrafe centrale (associato solo alla prima
notifica);
•
-300 – Errore generico proxy applicativo;
•
-400 – Errore invocazione PdD mittente (associato solo alla seconda notifica);
•
-500 – Errore generico in consegna su erogatore (associato solo all'ultima notifica).
Per ognuno di questi codici è possibile specializzare nel tag “errore” il tipo di anomalia
riscontrata.
Le notifiche possono essere puntuali o aggregate.
Nel caso di notifiche di non accettazione aggregate, oltre a quanto indicato precedentemente, il
proxy deve impostare il tag “messaggi Aggregati” nel quale inserisce il numero di messaggi per
i quali si è riscontrato un errore. L'utilizzo della notifica aggregata, quindi, può essere visto
nell'ottica di minimizzare il numero di notifiche relative a messaggi applicativi non validi (quindi
nel caso di codici -10X).
Ogni altro codice di errore non compreso nella lista sopra descritta verrà gestito come codice
non riconosciuto.
IMPORTANTE: Le notifiche di non accettazione relative ai codici -10X non saranno prese in
considerazione per la generazione di mail di allarme ma solo a fini di reportistica.
5.1 ESEMPIO DI NOTIFICA DI NON ACCETTAZIONE PUNTUALE
Di seguito viene mostrato un esempio di notifica di non accettazione puntuale:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov></pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:10:12.681Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>R</pmc:modalita>
<pmc:stato>-102</pmc:stato>
<pmc:messaggiAggregati></pmc:messaggiAggregati>
<pmc:errore>Errore di validazione del messaggio applicativo</pmc:errore>
<pmc:componente>SIL</pmc:componente>
<pmc:proxy>Proxy-ASL11empoli</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL-ASL11empoli</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
La notifica sopra descritta indica al sistema di monitoraggio l'avvenuta ricezione (da parte del
proxy fruitore) di un messaggio applicativo che però è stato scartato (e quindi non inviato
sull'infrastruttura CART) poiché non ha superato i controlli di validazione.
5.2 ESEMPIO DI NOTIFICA DI NON ACCETTAZIONE AGGREGATA
Di seguito viene mostrato un esempio di notifica di non accettazione aggregata:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov></pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:10:12.681Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>R</pmc:modalita>
<pmc:stato>-102</pmc:stato>
<pmc:messaggiAggregati>20</pmc:messaggiAggregati>
<pmc:errore>Errore di validazione del messaggio applicativo</pmc:errore>
<pmc:componente>SIL</pmc:componente>
<pmc:proxy>Proxy-ASL11empoli</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL-ASL11empoli</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
La notifica sopra descritta indica al sistema di monitoraggio l'avvenuta ricezione (da parte del
proxy fruitore) di 20 messaggi applicativi scartati (e quindi non inviati sull'infrastruttura CART)
poiché non hanno superato i controlli di validazione.
In questo caso, i 20 messaggi applicativi che non hanno superato la validazione sono stati
“aggregati” in un' unica notifica di non accettazione (invece di inviare 20 notifiche puntuali di
non accettazione).
5.3 ESEMPIO DI NOTIFICA DI ERRORE IN CONSEGNA SU EROGATORE
Nel caso in cui il proxy applicativo erogatore voglia notificare una situazione di errore relativa
alla consegna di un messaggio sul SIL erogatore, dovrà inserire nel tag “stato” il valore -500 e
nel tag “errore” una descrizione dell’anomalia riscontrata come mostrato nell'esempio
seguente:
<?xml version="1.0" encoding="UTF-8"?>
<pmc:MonitoraggioProxy xmlns:pmc="http://cart.rete.toscana.it/pmc">
<pmc:idCorrelazioneApp>1000</pmc:idCorrelazioneApp>
<pmc:idEGov></pmc:idEGov>
<pmc:mittente>ASL11empoli</pmc:mittente>
<pmc:tipoMittente>SPC</pmc:tipoMittente>
<pmc:destinatario>ASL3pistoia</pmc:destinatario>
<pmc:tipoDestinatario>SPC</pmc:tipoDestinatario>
<pmc:dataElaborazione>2009-07-23T13:10:12.681Z</pmc:dataElaborazione>
<pmc:numeroRFC>98</pmc:numeroRFC>
<pmc:accordoServizio>NotificaEventoClinico</pmc:accordoServizio>
<pmc:servizio>NotificaEventoClinico</pmc:servizio>
<pmc:tipoServizio>SPC</pmc:tipoServizio>
<pmc:azione></pmc:azione>
<pmc:modalita>I</pmc:modalita>
<pmc:stato>-500</pmc:stato>
<pmc:messaggiAggregati></pmc:messaggiAggregati>
<pmc:errore>Errore : Servizio applicativo erogatore non disponibile</pmc:errore>
<pmc:componente>SIL</pmc:componente>
<pmc:proxy>Proxy-ASL11empoli</pmc:proxy>
<pmc:idProxy></pmc:idProxy>
<pmc:nal>NAL-ASL11empoli</pmc:nal>
<pmc:note></pmc:note>
</pmc:MonitoraggioProxy>
6 - MONITORAGGIO SERVIZI SINCRONI
Come descritto nell'introduzione di questo documento, il flusso di invio delle notifiche di
monitoraggio al sistema PMC, nel caso di scenari di tipo asincrono, avviene nel seguente
modo:
Proxy fruitore:
•
invia la notifica N1 alla ricezione di un messaggio applicativo da parte del SIL mittente;
•
invia la notifica N2 dopo aver ricevuto l'ack di presa in carico da parte della PdD
mittente.
Proxy erogatore:
•
invia la notifica N3 alla ricezione di un messaggio applicativo da parte della PdD
destinataria;
•
invia la notifica N4 dopo aver invocato correttamente il SIL erogatore.
Questa scelta discende dall’esigenza di identificare e monitorare i messaggi non consegnati sui
servizi asincroni per i quali sono previsti i meccanismi di riconsegna dell'infrastruttura CART.
Nel caso di servizi di tipo sincrono, invece, non è prevista la riconsegna dal momento che,
l'eventuale errore in fase di consegna, viene restituito direttamente al client che può, quindi,
inviare nuovamente un messaggio.
Per poter monitorare il tempo necessario affinché il fruitore riceva il messaggio di risposta da
parte del soggetto erogatore, è necessario che la notifica N4, solo nel caso di servizi sincroni,
venga generata dal proxy fruitore alla ricezione della risposta applicativa dell'erogatore e non
più dal proxy erogatore come avviene normalmente per i servizi asincroni.
Il flusso di invio delle notifiche di monitoraggio al sistema PMC, nel caso di scenari di tipo
sincrono, quindi, viene modificato nel seguente modo:
Proxy fruitore:
•
invia la notifica N1 alla ricezione di un messaggio applicativo da parte del SIL mittente;
•
invia la notifica N2 in fase di invocazione della PdD mittente.
Proxy erogatore:
•
invia la notifica N3 alla ricezione di un messaggio applicativo da parte della PdD
destinataria;
Proxy fruitore:
•
invia la notifica N4 dopo aver restituito il messaggio di risposta al SIL fruitore.
7 - WEB SERVICE MONITORAGGIO PER UTILIZZATORI ESTERNI
Esiste un servizio rivolto ad utilizzatori esterni ed implementato mediante web service per
consentire di ottenere informazioni di monitoraggio. In questo modo sarà possibile ottenere
informazioni di monitoraggio sui servizi.
Ad esempio un servizio applicativo potrebbe ottenere informazioni di monitoraggio che
consentano di monitorare il proprio servizio.
Il web service riceve in input i seguenti parametri di ricerca:
•
numero di RFC (obbligatorio)
•
nome accordo di servizio (obbligatorio)
•
tipo e nome del servizio (obbligatorio)
•
data inizio ricerca (obbligatorio)
•
data fine ricerca (obbligatorio)
•
tipo e nome del soggetto fruitore
•
tipo e nome del soggetto erogatore
•
numero di elementi per pagina
•
numero di pagina
Il ws restituisce in output per ogni data il numero di messaggi presi in carico e consegnati
relativamente al servizio di un certo mittente verso un certo destinatario paginando i risultati
ottenuti. Per motivi di sicurezza, è stato previsto un meccanismo di basic authentication.
Il WS restituisce il numero di elementi trovati, il numero di pagina, il numero di righe per
pagina e una lista di oggetti con le seguenti informazioni:
•
Data
•
Tipo fruitore
•
Nome Fruitore
•
Tipo erogatore
•
Nome Erogatore
•
Numero RFC
•
Nome Accordo
•
Tipo Servizio
•
Servizio
•
Numero messaggi in carico
•
Numero messaggi consegnati
Il web service è conforme alla seguente definizione (WSDL):
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://pmc.cart.rete.toscana.it/monitorsil"
xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://pmc.cart.rete.toscana.it/monitorsil"
xmlns:intf="http://pmc.cart.rete.toscana.it/monitorsil"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://pmc.cart.rete.toscana.it/monitorsil"
xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="MonitorSILRequest">
<sequence>
<element name="dataFine" nillable="true" type="xsd:string"/>
<element name="dataInizio" nillable="true" type="xsd:string"/>
<element name="erogatore" nillable="true" type="xsd:string"/>
<element name="fruitore" nillable="true" type="xsd:string"/>
<element name="nomeAccordo" nillable="true" type="xsd:string"/>
<element name="numeroRFC" nillable="true" type="xsd:int"/>
<element name="page" nillable="true" type="xsd:int"/>
<element name="rowPerPage" nillable="true" type="xsd:int"/>
<element name="servizio" nillable="true" type="xsd:string"/>
<element name="tipoErogatore" nillable="true" type="xsd:string"/>
<element name="tipoFruitore" nillable="true" type="xsd:string"/>
<element name="tipoServizio" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<element name="request" type="impl:MonitorSILRequest"/>
<complexType name="MonitorSILValue">
<sequence>
<element name="data" nillable="true" type="xsd:string"/>
<element name="erogatore" nillable="true" type="xsd:string"/>
<element name="fruitore" nillable="true" type="xsd:string"/>
<element name="nomeAccordo" nillable="true" type="xsd:string"/>
<element name="numeroMsgConsegnati" nillable="true" type="xsd:int"/>
<element name="numeroMsgInCarico" nillable="true" type="xsd:int"/>
<element name="numeroRFC" nillable="true" type="xsd:int"/>
<element name="servizio" nillable="true" type="xsd:string"/>
<element name="tipoErogatore" nillable="true" type="xsd:string"/>
<element name="tipoFruitore" nillable="true" type="xsd:string"/>
<element name="tipoServizio" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="ArrayOfMonitorSILValue">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="impl:MonitorSILValue"/>
</sequence>
</complexType>
<complexType name="MonitorSILResponse">
<sequence>
<element name="monitorList" nillable="true" type="impl:ArrayOfMonitorSILValue"/>
<element name="page" nillable="true" type="xsd:int"/>
<element name="rowPerPage" nillable="true" type="xsd:int"/>
<element name="total" nillable="true" type="xsd:int"/>
</sequence>
</complexType>
<element name="getMonitoraggioServiziApplicativiReturn" type="impl:MonitorSILResponse"/>
</schema>
</wsdl:types>
<wsdl:message name="getMonitoraggioServiziApplicativiRequest">
<wsdl:part element="impl:request" name="request"/>
</wsdl:message>
<wsdl:message name="getMonitoraggioServiziApplicativiResponse">
<wsdl:part
name="getMonitoraggioServiziApplicativiReturn"/>
element="impl:getMonitoraggioServiziApplicativiReturn"
</wsdl:message>
<wsdl:portType name="MonitorSILService">
<wsdl:operation name="getMonitoraggioServiziApplicativi" parameterOrder="request">
<wsdl:input
message="impl:getMonitoraggioServiziApplicativiRequest"
name="getMonitoraggioServiziApplicativiRequest"/>
<wsdl:output
message="impl:getMonitoraggioServiziApplicativiResponse"
name="getMonitoraggioServiziApplicativiResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MonitorSILServiceSoapBinding" type="impl:MonitorSILService">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getMonitoraggioServiziApplicativi">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getMonitoraggioServiziApplicativiRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getMonitoraggioServiziApplicativiResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MonitorSILService">
<wsdl:port binding="impl:MonitorSILServiceSoapBinding" name="MonitorSILService">
<wsdlsoap:address location="http://localhost:8180/monitorsil/services/MonitorSILService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>