e.Toscana Compliance 
Request for Comments: 143 rev 0 (prima versione)
Del: 23/11/2009
Categoria: Applicativa
Destinatari: Regione Toscana, ASL/AO

Flusso SDO ad eventi

Indice
================================================================================
1. Contesto di riferimento	
2. Obiettivi	
3. Analisi 
3.1. Casi d'uso
3.2. XML Schema[1] degli eventi
3.3. WSDL[2] dei servizi
4. Prodotti attesi
5. Bibliografia
6. Storico Versioni




1. Contesto di riferimento
==========================

Il documento RFC ha come oggetto la trasmissione e la registrazione delle schede nosologiche e 
dimissione(SDO) degli Istituti di ricovero.

Le informazioni trasmesse riguardano la scheda di dimissione emessa dagli Istituti di ricovero, 
istituita e regolamentata dai seguenti atti:

 - 	D.M. Sanit 28.12.1991, che istituisce la scheda di dimissione ospedaliera; 
 - 	D.M. sanit 26.7.1993, che individua le informazioni da rilevare, i sistemi 
	di codifica da adottare e le modalit di trasmissione dalle Regioni al 
	Ministero della Sanit; 
-  	Delibera n.10132 dell11.12.1992 della Giunta Regionale Istituzione della 
	nuova scheda nosologica e di dimissione; 
-	Art. 4 del D.M. Sanit 30.6.1997 per quanto riguarda lintroduzione dellobbligo 
	di compilazione delle schede nosologiche per i neonati sani; 
-	D.M. sanit n. 380 del 27.10.2000 Regolamento recante norme concernenti 
	laggiornamento della disciplina del flusso	informativo sui dimessi dagli Istituto 
	di Ricovero pubblici e privati che adegua il contenuto informativo della scheda 
	di dimissione ospedaliera nonch i principi e le regole di compilazione e di codifica 
	delle informazioni. 
	
La presente versione stabilisce le regole e le codifiche da utilizzare per la trasmissione 
del contenuto informativo dell'evento SDO.
Viene inoltre illustrata, all'interno del presente documento, l'interfaccia (WSDL) del Web Service 
dedicato alla gestione degli eventi della tipologia descritta. 
Il Web Service in questione svolge il ruolo di interfaccia per il servizio di archiviazione e consolidamento 
di schede di dimissione ospedaliera all'interno di due basi dati diverse:

- database ODS(denominato DSPSODS) di Regione Toscana
- database anagrafico/prestazionale del nodo TIX


2. Obiettivi
============

Assunto il contesto di riferimento descritto nel precedente paragrafo, obiettivo
di questo documento RFC e' descrivere il modello organizzativo adottato, i suoi 
scenari e casi d'uso, la tipologia di informazioni e gli eventi al verificarsi 
dei quali tali informazioni sono generate e trasmesse dalle Aziende verso i 
destinatari (e.g. Regione Toscana).

L'obiettivo principale e' quello di permettere l'invio delle schede di 
dimissione ospedaliere ad eventi eliminando la necessit di invio massivo a flussi.
I vantaggi che questo meccanismo permette di raggiungere sono :
a. Invio in tempo reale delle prestazioni
b. Riduzione dell'intervento umano


3. Analisi
==========

Le funzionalit principali offerte dallapplicazione sono:

1)	accettazione del record SDO di test con conseguente consolidamento del record 
	in un area 	destinata a contenere record di questa tipologia.

2)	accettazione del record SDO e successivo consolidamento del record 
	all'interno della base dati configurata come destinazione per il servizio 
	erogatore.
	
3) 	accettazione del record SDO e relativo salvataggio, all'interno di una 
	base dati storicizzata, delle informazioni relative alla singola trasmissione 
	dell'evento (tempistiche di trasmissione e id_egov).

Per ogni SDO deve essere comunicato:

1)	La modalit di esecuzione del servizio (effettiva, o di test)
2)	Lanno di riferimento del flusso
3)	Tutte le informazione che compongono il record SDO, definite nel documento 
	Manuali dei Flussi DOC

I processi elaborativi implementati dall'applicazione consistono di:

1) 	ricezione di una chiamata al web service
2) 	verifica della validita' del documento XML trasmesso, verifica basata su schema XSD
3) 	consolidamento del record ricevuto (SDO) 
3) 	archiviazione, sulla base dati configurata per il servizio erogatore, in base alla modalita' 
	di trasmissione(test/noTest)

	
L'invio dell'informazione avviene attraverso messaggi XML e con l'utilizzo di 
servizi erogati da Regione Toscana ed esposti alle ASL dall'infrastruttura di 
cooperazione applicativa CART. Il dettaglio sulla modalita' di interfacciamento 
con la infrastruttura e' descritto in [3] e [4]. 
	
Gli schema XML che definiscono il formato dei messaggi scambiati dal client con i servizi 
esposti dal web-service, ovvero i documenti XML contenenti il record SDO, sono riportati 
di seguito.

L'attributo test del tag "DimissioneOspedaliera" serve per discriminare 
la modalita' di test (validazione del record con consolidamento e salvataggio 
in un'area riservata della base dati) dalla modalita' canonica di esecuzione 
del processo di consolidamento e archiviazione.


3.1. Casi d'uso
================================================================================

3.1.1. Ev01 - Trasmissione evento SDO 
--------------------------------------------------------------------------------
L'evento si verifica quando viene emessa,modificata o cancellata, dalla struttura 
operativa, una scheda di dimissione ospedaliera.

Al verificarsi dell'evento, la ASL invia a Regione Toscana un messaggio XML che 
contiene le seguenti informazioni rilevanti:
 
- codice ospedale/sede ospedale (codOsp)
- anno pratica	(annoPrat)
- numero pratica (numPrat)
- azienda sanitaria di appartenenza dell'istituto erogante il ricovero (aziSanIstitutoRic)
 
Questi campi costituiscono la 'chiave' dell'evento SDO della quale deve essere 
garantita l'univocita'. Eventi SDO arrivati con la stessa combinazione di valori sui campi 
chiave si intendono avere natura di inserimento, modifica, e cancellazione di una 
stessa scheda nosologica.

Il formato del messaggio e' definito in sezione 3.2.1. utilizzando la notazione
XML Schema.


3.2. XML Schema degli eventi
================================================================================

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="DimissioneOspedaliera">
		<xs:annotation>
			<xs:documentation>Record validato</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Testata" type="TestataType" minOccurs="0"/>
				<xs:element name="DimissioneOspedaliera1" type="DimissioneOspedaliera1Type" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="test" type="xs:boolean" use="optional" default="false"/>
			<xs:attribute name="annoRiferimento" type="xs:int" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="DimissioneOspedaliera1Type">
		<xs:annotation>
			<xs:documentation>Intero record SDO1 validato</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Meta" type="MetaType"/>
			<xs:element name="Body" type="BodySDOType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="BodySDOType">
		<xs:annotation>
			<xs:documentation>Campi specifici SDO</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="codOsp" type="xs:string"/>
			<xs:element name="annoPrat" type="xs:string"/>
			<xs:element name="numPrat" type="xs:string"/>
						
			<xs:element name="sexUtente" type="xs:string"/>
			<xs:element name="dataNasUte" type="xs:string"/>
			<xs:element name="luogoNasc" type="xs:string"/>
			<xs:element name="statoCiv" type="xs:string"/>
			<xs:element name="codComuneRes" type="xs:string"/>
			<xs:element name="cittadinanzaUte" type="xs:string"/>
			<xs:element name="codFiscaleUte" type="xs:string"/>
			<xs:element name="regIscrizioneSanUte" type="xs:string"/>
			<xs:element name="uslIscrizioneSanUte" type="xs:string"/>
			<xs:element name="codRegimeRicovero" type="xs:string"/>
			<xs:element name="dataRicovero" type="xs:string"/>
			<xs:element name="repAmmissione" type="xs:string"/>
			<xs:element name="onereDegenza" type="xs:string"/>
			<xs:element name="provPazMedicoInviante" type="xs:string"/>
			<xs:element name="codTipoRicovero" type="xs:string"/>
			<xs:element name="motivoRicovero" type="xs:string"/>
			<xs:element name="traumIntossicaz" type="xs:string"/>
			<xs:element name="dataTrasf1" type="xs:string"/>
			<xs:element name="repTrasf1" type="xs:string"/>
			<xs:element name="dataTrasf2" type="xs:string"/>
			<xs:element name="repTrasf2" type="xs:string"/>
			<xs:element name="dataTrasf3" type="xs:string"/>			
			<xs:element name="repTrasf3" type="xs:string"/>			
			<xs:element name="repDimissione" type="xs:string"/>			
			<xs:element name="areaFunzRepDim" type="xs:string"/>			
			<xs:element name="dataDimissione" type="xs:string"/>			
			<xs:element name="modalitaDimissione" type="xs:string"/>			
			<xs:element name="riscontroAutoptico" type="xs:string"/>			
			<xs:element name="diagnosiPrimDimiss" type="xs:string"/>
			<xs:element name="diagnosiSecondaria1" type="xs:string"/>
			<xs:element name="diagnosiSecondaria2" type="xs:string"/>
			<xs:element name="diagnosiSecondaria3" type="xs:string"/>
			<xs:element name="diagnosiSecondaria4" type="xs:string"/>
			<xs:element name="diagnosiSecondaria5" type="xs:string"/>
			<xs:element name="dataIntChiPrincipale" type="xs:string"/>
			<xs:element name="codIntChiPrincipale" type="xs:string"/>
			<xs:element name="dataAltroIntChi2" type="xs:string"/>
			<xs:element name="codAltroIntChi2" type="xs:string"/>
			<xs:element name="dataAltroIntChi3" type="xs:string"/>
			<xs:element name="codAltroIntChi3" type="xs:string"/>
			<xs:element name="dataAltroIntChi4" type="xs:string"/>
			<xs:element name="codAltroIntChi4" type="xs:string"/>
			<xs:element name="dataAltroIntChi5" type="xs:string"/>
			<xs:element name="codAltroIntChi5" type="xs:string"/>
			<xs:element name="dataAltroIntChi6" type="xs:string"/>
			<xs:element name="codAltroIntChi6" type="xs:string"/>
			<xs:element name="codRicDayHosp" type="xs:string"/>
			<xs:element name="codPosizProfess" type="xs:string"/>
			<xs:element name="codFinalitaDayH" type="xs:string"/>
			<xs:element name="aziSanIstitutoRic" type="xs:string"/>
			<xs:element name="modalitaErogazione" type="xs:string"/>
			<xs:element name="drgAzienda" type="xs:string"/>
			<xs:element name="numPresenzeDayHosp" type="xs:string"/>
			<xs:element name="opera" type="xs:string"/>			
			<xs:element name="regResidenzaUte" type="xs:string"/>
			<xs:element name="aslResidenzaUte" type="xs:string"/>
			<xs:element name="regOperaMedProp" type="xs:string"/>
			<xs:element name="aslOperaMedProponente" type="xs:string"/>
			<xs:element name="codFiscMedProp" type="xs:string"/>
			<xs:element name="autorizProroga" type="xs:string"/>			
			<xs:element name="numGiornPropogAut" type="xs:string"/>
			<xs:element name="importoAzienda" type="xs:string"/>
			<xs:element name="impPrestLibProf" type="xs:string"/>
			<xs:element name="impComfortAlberg" type="xs:string"/>
			<xs:element name="convenzione" type="xs:string"/>			
			<xs:element name="compensazione" type="xs:string"/>
			<xs:element name="percentAbbattimento" type="xs:string"/>
			<xs:element name="contAssistenziale" type="xs:string"/>
			<xs:element name="codiceNeonato" type="xs:string"/>
			<xs:element name="numSchedaMadre" type="xs:string"/>			
			<xs:element name="pesoNascita" type="xs:string"/>
			<xs:element name="anonimo" type="xs:string"/>
			<xs:element name="noteDRG" type="xs:string"/>
			<xs:element name="control" type="xs:string"/>
			<xs:element name="vuoto" type="xs:string"/>
			<xs:element name="titoloStudio" type="xs:string"/>			
			<xs:element name="tipMedicoProp" type="xs:string"/>
			<xs:element name="dataPrenotazione" type="xs:string"/>
			<xs:element name="dataPrimaDisp" type="xs:string"/>
			<xs:element name="classePrioRicovero" type="xs:string"/>
			<xs:element name="ricoveroPS" type="xs:string"/>
			<xs:element name="luogoDomicilio" type="xs:string"/>
			<xs:element name="codDRGRegionale" type="xs:string"/>
			<xs:element name="codMDCRegionale" type="xs:string"/>
			<xs:element name="importo" type="xs:string"/>
			<xs:element name="importoOltreSoglia" type="xs:string"/>
			<xs:element name="drg19" type="xs:string"/>
			<xs:element name="vuotoCoda" type="xs:string"/>
			
			<xs:element name="regResidenzaRegionale" type="xs:string"/>
			<xs:element name="aslResidenzaRegionale" type="xs:string"/>
			<xs:element name="etaAllaDimissione" type="xs:string"/>
			<xs:element name="ggDegenzaCalcolati" type="xs:string"/>
			<xs:element name="tipoRicCalcolato" type="xs:string"/>
			<xs:element name="drg10" type="xs:string"/>
			<xs:element name="d_con" type="xs:string"/>
			<xs:element name="codIstiReg" type="xs:string"/>
			<xs:element name="n_imp" type="xs:string"/>
			
			<xs:element name="ddNascUte" type="xs:string"/>
			<xs:element name="ddRicovero" type="xs:string"/>
			<xs:element name="ddTrasfer1" type="xs:string"/>
			<xs:element name="ddTrasfer2" type="xs:string"/>
			<xs:element name="ddTrasfer3" type="xs:string"/>
			<xs:element name="ddDataDimissione" type="xs:string"/>
			<xs:element name="ddDataIntervento" type="xs:string"/>
			<xs:element name="ddIntervento2" type="xs:string"/>
			<xs:element name="ddIntervento3" type="xs:string"/>
			<xs:element name="ddIntervento4" type="xs:string"/>
			<xs:element name="ddIntervento5" type="xs:string"/>
			<xs:element name="ddIntervento6" type="xs:string"/>
			<xs:element name="ddDataPrenotazione" type="xs:string"/>
			<xs:element name="ddDataPrimaDisp" type="xs:string"/>
			
			<xs:element name="idUniversaleUtente" type="xs:string"/>
			<xs:element name="dataAnonimizzazioneUte" type="xs:string"/>
			<xs:element name="dataUltimoAggIdUniUte" type="xs:string"/>
			<xs:element name="idUniversaleMedico" type="xs:string"/>
			<xs:element name="dataAnonimizzazioneMed" type="xs:string"/>
			<xs:element name="dataUltimoAggIdUniMed" type="xs:string"/>
			<xs:element name="idUniversaleAzienda" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="TestataType">
		<xs:annotation>
			<xs:documentation>Meta informazioni di testata</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="ID" type="xs:string"/>
			<xs:element name="DAcq" type="xs:string"/>
			<xs:element name="CodModAcq" type="xs:string"/>
			<xs:element name="CodNodOri" type="xs:string"/>
			<xs:element name="CodNodDes" type="xs:string"/>
			<xs:element name="CodTipHdr" type="xs:string"/>
			<xs:element name="CodMotTrs" type="xs:string"/>
			<xs:element name="NRec" type="xs:string"/>
			<xs:element name="DTra" type="xs:string"/>
			<xs:element name="CodSta" type="xs:string"/>
			<xs:element name="TDes" type="xs:string"/>
			<xs:element name="NRecWrn" type="xs:string"/>
			<xs:element name="NRecErr" type="xs:string"/>
			<xs:element name="NRecRes" type="xs:string"/>
			<xs:element name="BEsp" type="xs:string"/>
			<xs:element name="TNomefile" type="xs:string"/>
			<xs:element name="DFinAcq" type="xs:string"/>
			<xs:element name="DExe" type="xs:string"/>
			<xs:element name="IdUniOriCmp" type="xs:string"/>
			<xs:element name="DImport" type="xs:string"/>
			<xs:element name="DInvio" type="xs:string"/>
			<xs:element name="DInvioGrouper" type="xs:string"/>
			<xs:element name="CodStaExp" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="HeaderType">
		<xs:annotation>
			<xs:documentation>Meta informazioni</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Contatore" type="xs:string" />
			<xs:element name="ID" type="xs:string" />
			<xs:element name="IDHdr" type="xs:string" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="FooterType">
		<xs:annotation>
			<xs:documentation>Meta informazioni </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="refTimestamp" type="xs:dateTime"/>
			<xs:element name="AnnoRiferimento" type="xs:string"/>
			<xs:element name="NrErr" type="xs:string"/>
			<xs:element name="NrWrn" type="xs:string"/>
			<xs:element name="CodASLResidenza" type="xs:string"/>
			<xs:element name="CodRgnResidenza" type="xs:string"/>
			<xs:element name="CodASLInv" type="xs:string"/>
			<xs:element name="FlagErr" type="xs:string"/>
			<xs:element name="FlagErrTot" type="xs:string"/>
			<xs:element name="CodStaRec" type="xs:string"/>
			<xs:element name="DataImport" type="xs:date" />
			<xs:element name="DataInvio" type="xs:date"/>
											
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="MetaType">
		<xs:annotation>
			<xs:documentation>Meta informazioni </xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Header" type="HeaderType"/>
			<xs:element name="Footer" type="FooterType"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>


3.3. WSDL dei servizi
================================================================================


3.3.1 SDOService.wsdl
--------------------------------------------------------------------------------

<definitions name='SDOService' targetNamespace='http://www.regione.toscana.it/ws/2008/ods/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:ns1='http://ws.common.dsh.sys.eng.it/' xmlns:ns2='http://www.openspcoop.org/pdd/services/PD' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://www.regione.toscana.it/ws/2008/ods/' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
 <import location='SdoPort.wsdl' namespace='http://ws.common.dsh.sys.eng.it/'></import>
 <service name='SDOService'>
  <port binding='ns1:ODSServiceBinding' name='SDOServicePort'>
    <soap:address location='http://127.0.0.1:8080/dsh-consumer/SDOService'/>
  </port>
 </service>
</definitions>

3.3.2 SDOPort.wsdl
---------------------------------------------------------------------------------

<definitions name='SDOService' targetNamespace='http://ws.common.dsh.sys.eng.it/' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:ns1='http://ws.common.dsh.sys.eng.it/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://www.regione.toscana.it/ws/2008/ods/' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
 <types>
  <xs:schema targetNamespace='http://ws.common.dsh.sys.eng.it/' version='1.0' xmlns:tns='http://ws.common.dsh.sys.eng.it/' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
   <xs:element name='Exception' type='tns:Exception'/>
   <xs:element name='processMessage' nillable='true' type='xs:string'/>
   <xs:complexType name='Exception'>
    <xs:sequence>
     <xs:element minOccurs='0' name='message' type='xs:string'/>
    </xs:sequence>

   </xs:complexType>
  </xs:schema>
 </types>
 <message name='ODSService_processMessageResponse'></message>
 <message name='Exception'>
  <part element='ns1:Exception' name='Exception'></part>
 </message>
 <message name='ODSService_processMessage'>
  <part element='ns1:processMessage' name='processMessage'></part>

 </message>
 <portType name='ODSService'>
  <operation name='processMessage' parameterOrder='processMessage'>
   <input message='ns1:ODSService_processMessage'></input>
   <output message='ns1:ODSService_processMessageResponse'></output>
   <fault message='ns1:Exception' name='Exception'></fault>
  </operation>
 </portType>
 <binding name='ODSServiceBinding' type='ns1:ODSService'>

  <soap:binding style='document' transport='http://schemas.xmlsoap.org/soap/http'/>
  <operation name='processMessage'>
   <soap:operation soapAction=''/>
   <input>
    <soap:body use='literal'/>
   </input>
   <output>
    <soap:body use='literal'/>
   </output>

   <fault name='Exception'>
    <soap:fault name='Exception' use='literal'/>
   </fault>
  </operation>
 </binding>
</definitions>



4. Prodotti attesi
==================

NN.


5. Bibliografia
===============

[1] XML Schema http://www.w3.org/XML/Schema
[2] Web Services Description Language (WSDL) 1.1 http://www.w3.org/TR/wsdl
[3] "Manuale d'Uso Infrastruttura CART", Regione Toscana, 
Versione 1.01 del 03/12/2007 
[4] "SDK-CART", Regione Toscana, Versione 1.1 del 20/04/2008 

6. Storico versioni
================================================================================

[rev 0 - 23/11/2009]
 - Prima versione pubblicata.



