e.Toscana Compliance 
Request for Comments: =>XX<=
Del: =>2007-03-28<=
Categoria: Applicativa
Destinatari: Regione Toscana, ASL, Medici

	Consultazione posizione lavorativa presso INPS (stato lavorativo, anagrafica aziendale e del 
lavoratore)

=>
Premessa
=======

RIMUOVERE NELLA VERSIONE FINALE
Versione: draft 1

In questo draft non  stato incluso la definizione del wsdl che sar generato una volta consolidate le 
altre parti.

Legenda:  Le parti evidenziate da approfondire sono racchiuse fra i simboli => <= (da 
rimuovere nella versione finale)

Open Issues:
=========
<RIMUOVERE NELLA VERSIONE FINALE>

(1)	Verificare con INPS la codifiche utilizzate per
a.	Codifica ASL
b.	Codifica Comuni, Province, Stati Esteri
(2)	Valutare se utilizzare un nome pi appropriato per il servizio
(3)	Definire le modalit e le informazioni di gestione degli errori e dei warning, incluso le 
codifiche utilizzate
(4)	Verificare con INPS come gestire il campo provincia di nascita in caso di nascita allestero. 
Proposta valorizzarlo ad EE
(5)	Verificare con INPS il significato della Provincia ASL. Proposta eliminare lelemento
(6)	Valutare se definire un unico schema xml per i due servizi di consultazione ed invio 
certificato
(7)	Valutare se utilizzare il formalismo schematron per definire i vincoli sui dati

<=

Indice
======
1. Contesto di riferimento
2. Obiettivi
3. Analisi 
4. Controlli
5. Prodotti attesi
6. Bibliografia

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

La corretta determinazione della posizione lavorativa del lavoratore/trice  un passo essenziale per 
lesatta compilazione di un certificato di diagnosi per indennit di malattia.

Il servizio descritto assicura un meccanismo efficace ed efficiente per accedere a tali informazioni, 
attraverso la consultazione delle basi dati (anagrafica aziendale, posizione lavorativo,..) messe a 
disposizione da INPS.

Si consiglia fortemente che i sistemi informatici, che intendano usufruire del servizio per linvio 
elettronico del certificato di indennit per malattia, utilizzino - prima dellinvio del certificato - il 
servizio qui descritto per la verifica della congruenza della posizione aziendale del paziente 
lavoratore.

Ladozione di servizi derivati dal progetto di INPS CeLine, pone specifici vincoli nelle soluzioni 
adottate dal servizio in termini di schema, vocabolari e pattern matching sui dati. (e.g lunghezza 
campo cognome,).

Il servizio proposto si avvale della modalit trasparente per lutilizzo delle interfacce esposte 
della Porta di Dominio (vedi per dettagli lRFC Interfacce Porta di Dominio).

2. Obiettivi
============
L'obiettivo del servizio  quello di assicurare al medico, preposto alla compilazione del certificato 
di diagnosi per indennit di malattia, informazioni aggiornate e certificate riguardo lattuale 
posizione lavorativa del lavoratore/paziente.

I vantaggi sono :
* aggiornamento in tempo reale dei dati relativi alla posizione lavorativa
* facilitare il medico nella compilazione del certificato
* disponibilit di dati certificati dallINPS
* facile integrazione con gli applicativi 

3. Analisi
==========
Il servizio di richiesta posizione lavorativa del lavoratore/paziente (esposto come web-service) 
realizza il seguente caso d'uso :

l'utilizzatore chiama il servizio fornendo i dati del soggetto e del richiedente nel formato  
=>richiestaConsultazione<= e riceve una risposta nel formato =>rispostaConsultazione<= 
completato con le informazioni presenti nelle base dati di INPS (ad esempio lanagrafica delle 
aziende in cui il lavoratore  impiegato).

Lo schema XML che definisce gli oggetti sopra indicati  il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:ds="http://www.w3c.org/2000/09/xmldsig#" xmlns:celine="http://www.inps.it/celine/" 
targetNamespace="http://www.inps.it/celine/" elementFormDefault="unqualified">
	<include schemaLocation="celineCodifiche.xsd"/>
	<!--  custom types : elements -->
	<element name="lavoratore" type="celine:persona"/>
	<element name="medico" type="celine:persona"/>
	<element name="residenza" type="celine:contatto">
		<annotation>
			<documentation>Residenza lavoratore/trice</documentation>
		</annotation>
	</element>
	<element name="azienda">
		<annotation>
			<documentation>Informazioni sulla posizione lavorativa incluso anagrafica 
aziendale, stato lavorativo,....</documentation>
		</annotation>
		<complexType>
			<sequence>
				<element name="matricolaInps" minOccurs="0">
					<simpleType>
						<restriction base="string">
							<pattern value="[0-9]{10}"/>
						</restriction>
					</simpleType>
				</element>
				<element name="denominazione" minOccurs="0">
					<simpleType>
						<restriction base="celine:goodString">
							<minLength value="5"/>
							<maxLength value="49"/>
						</restriction>
					</simpleType>
				</element>
				<element name="indirizzo" type="celine:addr" minOccurs="0"/>
				<!-- vedi decodifiche -->
				<element name="settore" type="celine:comparto" minOccurs="0"/>
				<element name="inquadramento" type="celine:qualifica" 
minOccurs="0"/>
				<element name="caricoFamiliare" type="boolean" minOccurs="0"/>
				<element name="pagamentoDiretto" type="celine:tipoDiretto" 
minOccurs="0"/>
			</sequence>
		</complexType>
	</element>
	<element name="codiceFiscaleLavoratore" type="celine:codFiscale">
		<annotation>
			<documentation>Codice Fiscale del lavoratore/trice oggetto della risposta. 
Tale valore deve essere conforme con la verifica del controcodice e con i dati 
anagrafici</documentation>
		</annotation>
	</element>
	<element name="warning">
		<annotation>
			<documentation>Da Definire</documentation>
		</annotation>
		<complexType>
			<sequence>
				<element name="tipoAvviso" type="integer"/>
				<!-- codifica da definire  -->
				<element name="descrizione" type="string"/>
			</sequence>
		</complexType>
	</element>
	<element name="errore">
		<annotation>
			<documentation>Da Definire</documentation>
		</annotation>
		<complexType>
			<sequence>
				<element name="tipoErrore" type="integer"/>
				<!-- codifica da definire  -->
				<element name="SezioneErrata" type="string"/>
				<!-- DOVREBBE essere un puntatore alla sez. errata  -->
				<element name="Descrizione" type="string"/>
			</sequence>
		</complexType>
	</element>
	<!--  top-level elems: servizio consultazione archivi  -->
	<element name="richiestaConsultazione">
		<complexType>
			<sequence>
				<element name="richiedente">
					<complexType>
						<choice>
							<element ref="celine:medico"/>
						</choice>
					</complexType>
				</element>
				<element ref="celine:lavoratore"/>
			</sequence>
			<attribute name="dataLogin" type="dateTime"/>
			<attribute name="ricercaResidenza" type="boolean" default="false">
				<annotation>
					<documentation>Indica la tipologia di richiesta effettuata:
 [false] solo dati aziendali
 [true] dati aziendali e residenza lavoratore</documentation>
				</annotation>
			</attribute>
		</complexType>
	</element>
	<element name="rispostaConsultazione">
		<complexType>
			<sequence>
				<element ref="celine:codiceFiscaleLavoratore"/>
				<element ref="celine:azienda" minOccurs="0" 
maxOccurs="unbounded"/>
				<element ref="celine:residenza" minOccurs="0"/>
				<element ref="celine:warning" minOccurs="0" 
maxOccurs="unbounded"/>
			</sequence>
		</complexType>
	</element>
	<element name="erroreConsultazione">
		<complexType>
			<sequence>
				<element ref="celine:errore" minOccurs="0" 
maxOccurs="unbounded"/>
				<element ref="celine:warning" minOccurs="0" 
maxOccurs="unbounded"/>
			</sequence>
		</complexType>
	</element>
</schema>

=>VERIFICARE CODIFICHE<=

La definizione dei datatypes e delle codifiche adottate  descritta nel file celineCodifiche.xsd qui di 
seguito riportato

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:celine="http://www.inps.it/celine/" 
targetNamespace="http://www.inps.it/celine/">
	<!--  custom types : simple types -->
	<simpleType name="goodString">
		<restriction base="string">
			<pattern value="[&#x20;-&#x7e;]*"/>
		</restriction>
	</simpleType>
	<simpleType name="oid">
		<annotation>
			<documentation/>
		</annotation>
		<restriction base="string">
			<pattern value="[0-2](\.(0|[1-9][0-9]*))*"/>
		</restriction>
	</simpleType>
	<simpleType name="codFiscale">
		<restriction base="string">
			<annotation>
				<documentation>Il controllo prevede anche la verifica del 
controcodice e la consistenza con i dati anagrafici</documentation>
			</annotation>
			<pattern value="[A-Z]{6}[0-9A-Z]{2}[A-Z][0-9A-Z]{2}[A-Z][0-9A-
Z]{3}[A-Z]"/>
		</restriction>
	</simpleType>
	<simpleType name="sesso">
		<restriction base="string">
			<enumeration value="M"/>
			<enumeration value="F"/>
		</restriction>
	</simpleType>
	<simpleType name="nome">
		<restriction base="token"/>
	</simpleType>
	<simpleType name="cognome">
		<restriction base="token">
			<minLength value="2"/>
			<maxLength value="24"/>
			<pattern value="[a-zA-Z&#x20;&#x27;]*"/>
		</restriction>
	</simpleType>
	<simpleType name="comune">
		<restriction base="string">
			<annotation>
				<documentation>Codice amministrativo</documentation>
			</annotation>
			<pattern value="[a-zA-Z][0-9]{3}"/>
		</restriction>
	</simpleType>
	<simpleType name="stato">
		<restriction base="string">
			<pattern value="[A-Za-z]{2,3}"/>
		</restriction>
	</simpleType>
	<simpleType name="provincia">
		<restriction base="string">
			<pattern value="[A-Za-z]{2}"/>
		</restriction>
	</simpleType>
	<simpleType name="via">
		<restriction base="celine:goodString"/>
	</simpleType>
	<simpleType name="cap">
		<restriction base="string">
			<pattern value="[0-9]{5}"/>
		</restriction>
	</simpleType>
	<simpleType name="telefono">
		<restriction base="string">
			<maxLength value="12"/>
			<pattern value="[0-9]*"/>
		</restriction>
	</simpleType>
	<simpleType name="codificaASL">
		<restriction base="string">
			<pattern value="[0-9]{6}"/>
		</restriction>
	</simpleType>
	<simpleType name="email">
		<restriction base="string">
			<maxLength value="40"/>
			<pattern value=".+@[^\.].*\.[a-z]{2,}"/>
		</restriction>
	</simpleType>
	<!--  custom types : complex types/elements -->
	<complexType name="persona">
		<sequence>
			<element name="id_persona" type="celine:idPersona"/>
			<element name="anagrafica" type="celine:anagrafica"/>
		</sequence>
	</complexType>
	<complexType name="addr">
		<sequence>
			<element name="via" type="celine:via"/>
			<element name="cap" type="celine:cap"/>
			<element name="codiceComune" type="celine:comune">
				<annotation>
					<documentation>Codice amministrativo del comune. E il 
codice unico identificativo del comune e coincidente con una parte del codice fiscale di ogni 
persona nata nel comune stesso, come da campo "NAZIONALE" della tabella di codifica 
dell'agenzia del territorio.</documentation>
				</annotation>
			</element>
			<element name="provincia" type="celine:provincia">
				<annotation>
					<documentation>Codice della provincia. E' il codice 
identificativo della provincia come da campo "PROVINCIA" della tabella di codifica dell'agenzia 
del territorio.</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="anagrafica">
		<sequence>
			<element name="cognome" type="celine:cognome"/>
			<element name="nome" type="celine:nome"/>
			<element name="sesso" type="celine:sesso"/>
			<element name="dataNascita" type="date"/>
			<element name="comuneNascita" type="celine:comune">
				<annotation>
					<documentation>Codice amministrativo del comune. E il 
codice unico identificativo del comune e coincidente con una parte del codice fiscale di ogni 
persona nata nel comune stesso, come da campo "NAZIONALE" della tabella di codifica 
dell'agenzia del territorio. In caso di nascita in stato Estero coincide con la codifica degli stati esteri 
pubblicata dal'Agenzia del Territorio.</documentation>
				</annotation>
			</element>
			<element name="provinciaNascita" type="celine:provincia">
				<annotation>
					<documentation>Codice della provincia di nascita. E' il codice 
identificativo della provincia come da campo "PROVINCIA" della tabella di codifica dell'agenzia 
del territorio.caso di nascita in stato Estero valore fisso "EE"</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="idPersona">
		<sequence>
			<element name="codiceFiscale" type="celine:codFiscale">
				<annotation>
					<documentation>Codice conforme con la verifica del 
controcodice e con i dati anagrafici</documentation>
				</annotation>
			</element>
			<element name="codiceRegionale" minOccurs="0">
				<annotation>
					<documentation>Identificativo Regionale (ASL) del medico 
e/o del paziente</documentation>
				</annotation>
				<simpleType>
					<restriction base="celine:goodString">
						<maxLength value="10"/>
					</restriction>
				</simpleType>
			</element>
			<element name="codiceASL" type="celine:codificaASL" minOccurs="0">
				<annotation>
					<documentation>Codifica ISTAT dell'ASL di 
appartenenza</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="contatto">
		<sequence>
			<element name="indirizzo" type="celine:addr"/>
			<element name="telecom" type="celine:telecom"/>
		</sequence>
	</complexType>
	<complexType name="telecom">
		<sequence>
			<element name="telefono" type="celine:telefono" minOccurs="0"/>
			<element name="email" minOccurs="0">
				<simpleType>
					<restriction base="celine:email">
						<maxLength value="40"/>
					</restriction>
				</simpleType>
			</element>
		</sequence>
	</complexType>
	<!-- sez. dati lavorativi -->
	<simpleType name="comparto">
		<restriction base="unsignedByte">
			<enumeration value="0">
				<annotation>
					<documentation>Non specificato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="1">
				<annotation>
					<documentation>Industria / Artigianato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="2">
				<annotation>
					<documentation>Commercio / Terziario</documentation>
				</annotation>
			</enumeration>
			<enumeration value="3">
				<annotation>
					<documentation>Agricoltura</documentation>
				</annotation>
			</enumeration>
			<enumeration value="4">
				<annotation>
					<documentation>Marittimi</documentation>
				</annotation>
			</enumeration>
			<enumeration value="5">
				<annotation>
					<documentation>Autoferrotranvieri</documentation>
				</annotation>
			</enumeration>
			<enumeration value="6">
				<annotation>
					<documentation>Credito / Assicurazioni / Servizi tributari 
appaltati</documentation>
				</annotation>
			</enumeration>
			<enumeration value="7">
				<annotation>
					<documentation>Spettacolo</documentation>
				</annotation>
			</enumeration>
			<enumeration value="8">
				<annotation>
					<documentation>Categorie particolari</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<simpleType name="qualifica">
		<restriction base="string">
			<enumeration value="O">
				<annotation>
					<documentation>Operaio o equiparato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="I">
				<annotation>
					<documentation>Impiegato o equiparato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="-">
				<annotation>
					<documentation>Non specificato</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<simpleType name="tipoDiretto">
		<restriction base="unsignedByte">
			<enumeration value="1">
				<annotation>
					<documentation>Lavoratore stagionale</documentation>
				</annotation>
			</enumeration>
			<enumeration value="2">
				<annotation>
					<documentation>Operaio agricolo a tempo 
indeterminato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="3">
				<annotation>
					<documentation>Operaio agricolo a tempo 
determinato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="4">
				<annotation>
					<documentation>Lavoratore disoccupato</documentation>
				</annotation>
			</enumeration>
			<enumeration value="5">
				<annotation>
					<documentation>Lavoratore sospeso senza integrazione 
salariale</documentation>
				</annotation>
			</enumeration>
			<enumeration value="6">
				<annotation>
					<documentation>Lavoratore a tempo determinato con meno di 
30 giorni lavorati nell'anno</documentation>
				</annotation>
			</enumeration>
			<enumeration value="7">
				<annotation>
					<documentation>Lavoratore dello spettacolo a tempo 
determinato / disoccupato / saltuario</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<!-- sez. certificato -->
	<simpleType name="tipoVisita">
		<restriction base="string">
			<enumeration value="A">
				<annotation>
					<documentation>Visita ambulatoriale</documentation>
				</annotation>
			</enumeration>
			<enumeration value="D">
				<annotation>
					<documentation>Visita domiciliare</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<simpleType name="tipoCertificato">
		<restriction base="string">
			<enumeration value="I">
				<annotation>
					<documentation>Inizio</documentation>
				</annotation>
			</enumeration>
			<enumeration value="C">
				<annotation>
					<documentation>Continuazione</documentation>
				</annotation>
			</enumeration>
			<enumeration value="R">
				<annotation>
					<documentation>Ricaduta</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
</schema>

3.1 Esempi
===========
Qui di seguito un semplice esempio di richiesta con la successiva possibile risposta:

(1) richiesta

<?xml version="1.0" encoding="UTF-8"?>
<celine:richiestaConsultazione xmlns:celine="http://www.inps.it/celine/" 
xmlns:ds="http://www.w3c.org/2000/09/xmldsig#" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.inps.it/celine/celineConsultazione.xsd" ricercaResidenza="false" 
dataLogin="2007-03-03T12:00:00">
	<richiedente>
		<celine:medico>
			<id_persona>
				<codiceFiscale>PTTHRY77A01E466E</codiceFiscale>
				<codiceRegionale>1234</codiceRegionale>
				<codiceASL>090110</codiceASL>
			</id_persona>
			<anagrafica>
				<cognome>Henry</cognome>
				<nome>Potter</nome>
				<sesso>M</sesso>
				<dataNascita>1997-01-01</dataNascita>
				<comuneNascita>E466</comuneNascita>
				<provinciaNascita>FI</provinciaNascita>
			</anagrafica>
		</celine:medico>
	</richiedente>
	<celine:lavoratore>
		<id_persona>
			<codiceFiscale>GRGSLT90C20D612Q</codiceFiscale>
		</id_persona>
		<anagrafica>
			<cognome>Stilton</cognome>
			<nome>Geronimo</nome>
			<sesso>M</sesso>
			<dataNascita>1990-03-20</dataNascita>
			<comuneNascita>D612</comuneNascita>
			<provinciaNascita>FI</provinciaNascita>
		</anagrafica>
	</celine:lavoratore>
</celine:richiestaConsultazione>

(2) Risposta

<?xml version="1.0" encoding="UTF-8"?>
<celine:rispostaConsultazione xmlns:celine="http://www.inps.it/celine/" 
xmlns:ds="http://www.w3c.org/2000/09/xmldsig#" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.inps.it/celine/celineConsultazione.xsd">
	<celine:codiceFiscaleLavoratore>GRGSLT90C20D612Q</celine:codiceFiscaleLavoratore>
	<celine:azienda>
		<matricolaInps>1234567890</matricolaInps>
		<denominazione>Good Company SpA</denominazione>
		<indirizzo>
			<via>Del Sansovino 32</via>
			<cap>50127</cap>
			<codiceComune>D612</codiceComune>
			<provincia>FI</provincia>
		</indirizzo>
		<settore>2</settore>
		<inquadramento>O</inquadramento>
		<caricoFamiliare>false</caricoFamiliare>
	</celine:azienda>	
</celine:rispostaConsultazione>

4. Controlli
==========
Controllo formale Codice Fiscale:
	verifica controcodice e congruit con i dati anagrafici (rif:  D. M. 23 dicembre 1976)
Indirizzi :
	cap , comune, provincia esistenti e congruenti

Comune e provincia di nascita congruenti:
	per i comuni esistenti: indicare la provincia attuale  (Lodi -> LO)
	per i comuni non pi esistenti: indicare una provincia valida (Fiume -> FM,  Baggio -> MI)
	per i lavoratori nati all'estero indicare la sigla dello stato nel campo comune

Codifica ICD9_CM utilizzata
	codici presenti sulla tabella sintetica (excel) dal sito Min. Salute
	(http://www.ministerosalute.it/programmazione/resources/documenti/ICD9CM-97.zip )

lavoratore/trice non indennizzato/a
	Casi scartati: impiegato/a di industria, agricoltura, credito

Controlli sui periodi: 
(da confermare a decreto definito,  possibile che ci siano variazioni dei termini per il rilascio in 
caso di visite domiciliari e/o turnisti)
	data rilascio (= data visita) = data di sistema
	inizio malattia (anamnesi) <= data rilascio
	fine malattia (prognosi) >= inizio malattia 
	fine malattia (prognosi) >= data rilascio 
	(fine malattia (prognosi) -  data rilascio) <= 3 mesi solari

AVVISI :
in consultazione :	non indennizzato 

in trasmissione:
	dati incompleti/errati datore di lavoro (*)
	comparto senza qualifica / qualifica senza comparto (escluse: cat.particolari)
	categoria di pagamento diretto incongruente con gli altri dati
	

(*) controllo formale matricola azienda:
	(somma delle prime quattro cifre in posizione pari) mod 10 = ultima cifra in pos. pari
	(somma delle prime quattro cifre in posizione dispari) mod 10 = ultima cifra in pos. dispari

=> 5. Prodotti attesi
==================
Per realizzare l'applicazione client viene fornito il seguente WSDL (scaricabile anche da 
https://web.rete.toscana.it/XXXX/uuuuu?wsdl) :

< INLCUDERE WSDL >
<=
6. Bibliografia
============

[1] Regione Toscana RFC Interfacce Porta di Dominio 
http://web.rete.toscana.it/eCompliance/portale/mostraRFC?idRev=42&idRfc=22 
[2] Agenzia del territorio: ftp://ftp.finanze.it/pub/territorio/italia.exe ; 
ftp://ftp.finanze.it/pub/territorio/esteri.exe 
[3] Regione Toscana RFC =>Invio certificato di diagnosi per indennit di malattia ad INPS<=
