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”);