Guida alla integrazione - WebTelemaco

Transcript

Guida alla integrazione - WebTelemaco
STARCheck
Guida all’integrazione
versione 4.0
2016-05-02
aggiornata alla versione 3.8.5-6.8 di STARCheck
Modifiche
4.0 (3.8.5-6.8 2016-05-02)

Corretto errore di documentazione (validazione pratica con vdl)
3.0 (3.0.0-6.6 2012-05-14)
●
●
Modificato lo schema del rapporto di validazione, in particolare i seguenti attributi del
nodo pratica:
○ id: ora contiene il codice Fedra della pratica letto dal nome del file del primo
allegato dichiarato nel modulo di riepilogo (se presente, altrimenti vuoto)
○ cf-impresa: codice fiscale dell’impresa (dal record di coda dell’U3T)
○ cciaa: CCIAA destinataria (dal record di testa dell’U3T)
○ rea: numero REA dell’impresa (dal record di coda dell’U3T)
○ software: tipo software produttore (dal record di coda dell’U3T)
○ declared-spec: versione delle specifiche dichiarata dal software produttore (dal
record di coda dell’U3T)
Modificata l’interfaccia della funzione di validazione
2.1 (2.0.0-6.5 2011-03-30)
●
Corretto errore di documentazione delle eccezioni
2.0 (2.0.0-6.5 2011-03-06)
●
●
Modificato il sistema di interfacciamento con i database
Aggiunte note sul multithreading
1.0 (1.0.0 2011-11-30)
●
●
Completamento dei prototipi per la funzionalità di costruzione della visura a quadri in
PDF multipiattaforma
Aggiunta la funzionalità di esportazione PDF del modulo IVA
0.4.0 (0.14.0 2011-10-11)
●
Aggiunta la funzionalità di costruzione della visura a quadri in PDF multipiattaforma
0.3.0 (0.13.2 2011-08-30)
●
●
●
●
●
Aggiunta l’estensione della validazione mediante la visura di lavoro
Aggiunta la funzionalità di visualizzazione PDF del cosiddetto modulo IVA
Reso multipiattaforma il controllo del codice fiscale
Risolti alcuni problemi relativi alla concorrenza
Dimezzati i tempi di validazione delle pratiche
0.2.0 (0.12.5 2011-08-31)
●
Modifiche dell’interfaccia della libreria per introduzione validazione html
●
Creazione della GUI
0.1.1 (0.7.2 2011-05-24)
Primo rilascio del software e della documentazione.
Introduzione
STARCheck è un componente software sviluppato in Java 1.6 che esegue diverse operazioni
sulle pratiche già preparate per il registro imprese nei formati previsti: U3T, U3X, U3T.XML.
Le operazioni eseguite sono:
● trasformazione di una pratica dal formato U3T al formato U3T.XML;
● trasformazione di una pratica dal formato U3T.XML o U3X al formato U3T;
● validazione di una pratica fornita in uno qualunque dei formati previsti: la validazione
consiste nel controllo di correttezza, coerenza e completezza della pratica e i risultati
dell’operazione sono forniti in un rapporto in formato XML o HTML;
● creazione della visura a quadri di una pratica fornita in uno qualunque dei formati
previsti; tale visura è fornita in formato testo (solo su piattaforma win32), XML o PDF;
● esportazione del modulo IVA dell’Agenzia delle Entrate per le pratiche che lo prevedono.
STARCheck può essere utilizzato sia come libreria sia come applicazione indipendente da linea
di comando o con interfaccia grafica. Nel seguito sono illustrate le modalità di installazione,
integrazione ed uso della libreria.
L’uso da linea di comando non sarà qui descritto in quanto è di immediato utilizzo e segue lo
standard java:
java -jar starcheck-[x.x.x].jar [eventuali parametri]
in assenza di parametri questo comando fornisce un breve manuale per la linea di comando,
compresa la documentazione del parametro -g, che lancia l’interfaccia grafica dell’applicazione.
Installazione
STARCheck è distribuito mediante un archivio zip strutturato come segue:
STARCheck-x.x.x-unpack-and-run.zip
|_ starcheck-x.x.x (directory)
|_ dict (non utilizzata)
|_ FORM50 (directory dei template per la visura a quadri)
|_ lib (directory delle librerie)
|_ DISTPDF.EXE (eseguibile Win32 per la visura a quadri in PDF)
|_ STARCheck-x.x.x.jar (applicazione)
L’installazione della libreria richiede solo la decompressione della cartella starcheck-x.x.x
nella locazione desiderata.
Per l’uso come libreria i contenuti della cartella starcheck-x.x.x devono essere messi alla
radice del classpath dell’applicazione cliente.
Nel caso di un’applicazione web, tipicamente starcheck-x.x.x.jar e gli altri archivi jar
contenuti nella directory lib saranno installati sotto WEB-INF/lib, e le directory dict e
FORM50 e il file DISTPDF.EXE, che è previsto siano installate alla radice del classpath, sotto
WEB-INF/classes; ovviamente questo è puramente indicativo, dato che l’effettivo
dispiegamento dei componenti dipende dalla configurazione del container.
Integrazione
L’integrazione della libreria richiede l’inclusione nella configurazione del progetto cliente della
libreria starcheck-x.x.x.jar e di tutte le librerie contenute nella directory lib.
Ad esempio, usando Maven come gestore della configurazione, la sezione relativa alle
dipendenze deve contenere almeno:
...
<dependency>
<groupId>it.digicamere</groupId>
<artifactId>starcheck</artifactId>
<version>x.x.x</version>
</dependency>
...
Uso
L’interfaccia della libreria è centralizzata nella sua façade, espressa nella classe
it.digicamere.ri.starcheck.STARCheck, i cui metodi forniscono le funzionalità di alto
livello:
●
trasformazione da U3T a U3T.XML
void u3tToXml(U3TFilter u3t, OutputStream xml)
throws OperationFailureException, IOException
si può usare come segue:
U3TFilter u3tFilter = new U3TFilter(yourSupposedU3TInputStream);
STARCheck starCheck = new STARCheck(yourConfiguration);
try {
OutputStream os = new ByteArrayOutputStream();
starCheck.u3tToXml(u3tFilter, os);
} catch (OperationFailureException operationFailureException) {
e.printStackTrace();
} catch (IOException ioException) {
System.err.println(“Fallita la scrittura su os”);
}
u3tFilter garantisce a starCheck che yourSupposedU3TInputStream sia
effettivamente un U3T.
●
trasformazione da U3T.XML o U3X a U3T:
void xmlToU3t(U3XFilter u3x, OutputStream u3t)
throws OperationFailureException, IOException
si può usare come segue:
U3XFilter u3xFilter = new U3XFilter(yourSupposedU3XInputStream);
STARCheck starCheck = new STARCheck(yourConfiguration);
try {
OutputStream os = new ByteArrayOutputStream();
starCheck.xmlToU3t(u3xFilter, os);
} catch (OperationFailureException operationFailureException) {
e.printStackTrace();
} catch (IOException ioException) {
System.err.println(“Fallita la scrittura su os”);
}
●
u3xFilter garantisce a starCheck che yourSupposedU3TInputStream sia
effettivamente un U3X o un U3T.XML.
validazione di una pratica:
void validate(PraticaFilter praticaFilter,
OutputStream reportStream,
ReportOutputFormat outputFormat)
throws OperationFailureException, IOException,
IgnoredPraticaException
si può usare come segue:
PraticaFilter u3tFilter = new U3TFilter(
yourSupposedU3TInputStream);
STARCheck starCheck = new STARCheck(yourConfiguration);
try {
OutputStream os = new ByteArrayOutputStream();
starCheck.validate(u3tFilter, os, ReportOutputFormat.XML);
} catch (OperationFailureException operationFailureException) {
e.printStackTrace();
} catch (IOException ioException) {
System.err.println(“Fallita la scrittura su os”);
} catch (IgnoredPraticaException e) {
System.err.println("Pratica ignorata");
}
PraticaFilter garantisce a starCheck che yourSupposedU3TInputStream sia
effettivamente un U3X o un U3T.XML o un U3T (in questo esempio un U3T).
Il rapporto di validazione è generato in formato xml (secondo lo schema in appendice) o
html a seconda del valore dell’enumerativo ReportOutputFormat (che può valere
XML o HTML).
●
creazione della visura a quadri di una pratica:
void writeVisura(
PraticaFilter praticaFilter, String praticaName,
VisuraOutputFormat visuraOutputFormat,
OutputStream visura)
throws OperationFailureException, IOException
si può usare come segue:
PraticaFilter pf = new U3TFilter(yourU3TInputStream);
//oppure: PraticaFilter pf = new U3XFilter(yourU3XInputStream);
try {
STARCheck sc = new STARCheck(yourConfiguration);
sc.writeVisura(pf, "[codice fedra della pratica]",
VisuraOutputFormat.PDF, System.out);
} catch (OperationFailureException e) {
System.err.println(e.getCause().getMessage());
} catch (IOException e) {
System.err.println("Errore di scrittura su System.out");
}
PraticaFilter garantisce a starCheck che yourSupposedU3TInputStream sia
effettivamente un U3X o un U3T.XML o un U3T (in questo esempio un U3T).
VisuraOutputFormat è un tipo enumerativo che definisce il formato del documento
prodotto e può valere TEXT o PDF.
●
visualizzazione della dichiarazione IVA per l’Agenzia delle Entrate:
void viewAEDichiarazioneIVA(PraticaFilter praticaFilter)
throws OperationFailureException, IOException
si può usare come segue:
PraticaFilter pf = new U3TFilter(yourU3TInputStream);
//oppure: PraticaFilter pf = new U3XFilter(yourU3XInputStream);
…
try {
STARCheck sc = new STARCheck(yourConfiguration);
sc.viewModuloIVA(pf);
} catch (OperationFailureException e) {
System.err.println(e.getCause().getMessage());
} catch (IOException e) {
System.err.println("Errore di scrittura del PDF");
}
●
creazione della dichiarazione IVA per l’Agenzia delle Entrate:
void writeAeDichiarazioneIva(
PraticaFilter praticaFilter,
OutputStream aeDichiarazioneIvaPdfStream)
throws OperationFailureException, IOException
si può usare come segue:
PraticaFilter pf = new U3TFilter(yourU3TInputStream);
//oppure: PraticaFilter pf = new U3XFilter(yourU3XInputStream);
try {
STARCheck sc = new STARCheck(yourConfiguration);
sc.writeAeDichiarazioneIva(pf, System.out);
} catch (OperationFailureException e) {
System.err.println(e.getCause().getMessage());
} catch (IOException e) {
System.err.println("Errore di scrittura su System.out");
}
Configurazione
Si può notare che il costruttore della classe STARCheck prevede il parametro obbligatorio
yourConfiguration, di tipo STARCheckConfiguration.
STARCheckConfiguration è un semplice java bean che consente di impostare la posizione
su file system delle risorse esterne FORM50 (deve essere fornito il percorso assoluto della
cartella che contiene la cartella FORM50), DISTPDF.EXE (di cui deve essere fornito il percorso
assoluto, nome compreso) e le sorgenti dati dei database per la tabelle di lookup
(db/lookuptables) e la normalizzazione (db/addressBook). Ad esempio:
STARCheckConfiguration configuration = new STARCheckConfiguration();
configuration.setPathForm50(“c:\FORM50parent”);
configuration.setPdfProducerFileAbsoluteName(“c:\DISTPDF.EXE”);
configuration.setVisuraEngine(VisuraWriterFactory.IC);
configuration.setLookupTablesDataSource(new
DerbyLookupTablesDataSource("org.apache.derby.jdbc.EmbeddedDriver",
"jdbc:derby:classpath:db/lookuptables"));
configuration.setAddressBookDataSource(new DerbyAddressBookDataSource
("org.apache.derby.jdbc.EmbeddedDriver",
"jdbc:derby:directory:c:/db/addressBook"));
nell’ipotesi di una installazione così fatta:
C:\
|_ FORM50parent
|
|_ FORM50
|_ DISTPDF.EXE
|_ db
|_ addressBook
Si noti che dalla versione 0.14.0 si può selezionare il produttore della visura a quadri mediante
l’enumerazione VisuraWriterFactory, che ha i seguenti valori:
● IC sarà utilizzata la libreria standard di InfoCamere (solo per la piattaforma win32) per
la produzione della visura a quadri in formato testo e PDF, la funzionalità interna di
STARCheck per il formato XML;
● FOP (predefinito) sarà utilizzata la nuova libreria interna di STARCheck per il
formato XML e PDF e la libreria standard di InfoCamere (solo per la piattaforma win32)
per il formato testo.
Eccezioni
Tutti i metodi della façade dichiarano di poter generare le eccezioni gestite:
● operationFailureException
eccezione
generica
durante
l’esecuzione
dell’operazione; questa eccezione contiene come causa l’eccezione originaria, che può
essere di vario tipo;
● ioException eccezione nella scrittura sullo stream in cui l’utente desidera che sia
scritto il risultato dell’operazione (a seconda dei metodi il rapporto di validazione, la
pratica trasformata, la visura a quadri).
Tutte le eccezioni interne al processo di validazione (ivi compresa la fallita lettura della pratica)
sono invece inserite come remark di livello FAILURE nel rapporto di validazione.
Appendice
Schema del rapporto di validazione1
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="pratica">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
<xs:element maxOccurs="unbounded" ref="modulo"/>
</xs:sequence>
<xs:attribute name="id" use="required"/>
<xs:attribute name="description" use="required"/>
<xs:attribute name="cf-impresa" use="required"/>
<xs:attribute name="cciaa" use="required"/>
<xs:attribute name="rea" use="required"/>
<xs:attribute name="software" use="required"/>
<xs:attribute name="declared-spec" use="required"/>
<xs:attribute name="status" type="statusType"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="statusType">
<xs:restriction base="xs:string">
<xs:enumeration value="OK"/>
<xs:enumeration value="WARNING"/>
<xs:enumeration value="ERROR"/>
<xs:enumeration value="FAILURE"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="modulo">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
<xs:element maxOccurs="unbounded" ref="riquadro"/>
</xs:sequence>
<xs:attribute name="id" use="required"/>
<xs:attribute name="description" use="required"/>
</xs:complexType>
</xs:element>
1
Lo stesso schema è utilizzato per la visura a quadri in fomato XML.
<xs:element name="riquadro">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
<xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="lista"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="sottoriquadro"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="gruppo"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="campo"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" use="required" type="xs:integer"/>
<xs:attribute name="description" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="sottoriquadro">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="lista"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="gruppo"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="campo"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" use="required"/>
<xs:attribute name="description" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="lista">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
<xs:element maxOccurs="unbounded" ref="occorrenza"/>
</xs:sequence>
<xs:attribute name="id" use="required"/>
<xs:attribute name="description" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="occorrenza">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="lista"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="gruppo"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="campo"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="description" use="required"/>
<xs:attribute name="id" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="campo">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
</xs:sequence>
<xs:attribute name="id" use="required" type="xs:integer"/>
<xs:attribute name="description" use="required"/>
<xs:attribute name="value"/>
</xs:complexType>
</xs:element>
<xs:element name="gruppo">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="remark"/>
</xs:sequence>
<xs:attribute name="id" use="required"/>
<xs:attribute name="description" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="remark">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="hint"/>
</xs:sequence>
<xs:attribute name="id" use="required"/>
<xs:attribute name="description" use="required"/>
<xs:attribute name="level" use="required" type="remarkLevelType"/>
<xs:attribute name="author"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="remarkLevelType">
<xs:restriction base="xs:string">
<xs:enumeration value="UNASSESSABLE"/>
<xs:enumeration value="WARNING"/>
<xs:enumeration value="ERROR"/>
<xs:enumeration value="FAILURE"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="hint" type="xs:string"/>
</xs:schema>
Si tenga presente che:
● tale schema è usato sia per il rapporto di validazione, sia per la visura a quadri; quindi
l’attributo status dell’elemento pratica, che ha senso solo per il rapporto di
validazione, non è obbligatorio;
● il tipo remarkLevelType elenca i valori possibili per l’attributo level dei remark, ossia le
notifiche di validazione:
○ WARNING: notifica di un avviso non bloccante;
○ ERROR: notifica di un errore bloccante;
○ UNASSESSABLE: notifica di una regola non valutabile per la mancanza di almeno
un dato necessario; non è bloccante e non è visibile nel rapporto HTML;
○ FAILURE: notifica di un difetto di STARCheck nella valutazione di una regola di
validazione; non è bloccante e non è visibile nel rapporto HTML.
● il tipo statusType elenca i valori possibili per l’attributo status dell’elemento
pratica:
○ OK: la pratica è corretta (non contiene remark di livello WARNING o ERROR);
○ WARNING: la pratica contiene almeno un avviso (remark di livello WARNING) e
○
○
nessun errore (remark di livello ERROR);
ERROR: la pratica contiene almeno un errore (remark di livello ERROR);
FAILURE: un difetto di STARCheck ha impedito il corretto svolgimento del
processo di validazione. Questo stato prevale su tutti, ma è sempre possibile
esplorare il rapporto alla ricerca di eventuali remark di altro tipo (ad esempio con
una query XPath “//remark”);