730 precompilato + di uno snippet

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
Buon giorno. Ho cambiato la riga di Credenziali.php
PHP:
if( !empty( $argv ) ) $protocollo = $argv[1];
così ho fatto questo scrip linux _5_FattureInvioRisultati.sh per mettere come argomento il protocollo con php a riga di comando
Codice:
#!/bin/bash
NRARG=1

if [ $# -lt "$NRARG" ]
   then
       protocollo=1601*************
   else
       protocollo=$1
fi
echo $protocollo

php FattureInvioRicevutaPdf.php $protocollo

php FattureInvioEsito.php $protocollo

php FattureInvioDettaglioErrori.php $protocollo
Spero sia utile a chi ha GNU/Linux e PHP a riga di comando come me.

Non ho ancora trovato nulla per avere dal sistemaTS la lista completa di quello che si è inviato: voi?
Meglio esser certi di che cosa hanno ricevuto, importi compresi.
Buon lavoro!
 

rudycox

Nuovo Utente
12 Gen 2016
25
4
3
Confermo quanto scritto da Perseo e Marino, in fase di test su 4900 ricevute ho avuto warning su circa 400 codici fiscali.

In PRODUZIONE con gli stessi codici fiscali i warning sono scesi a 22 !!

Per la correzione, ho creato un nuovo xml con le sole ricevute dei warning ed i codici fiscali corretti e,
al posto del flag I (inserimento) ho messo V (Variazione).

Tutti sistemati ed accettati al primo colpo
 

BlackJad

Nuovo Utente
20 Gen 2017
3
0
1
37
Ciao a tutti,
sto riscontrando un errore per tutti gli invii, nel caso di partita IVA con lo 0 (zero) iniziale. Il sistema boccia tutte le richieste perchè riconosce ovviamente un dato non valido.
Ad esempio, 023458124570 viene sicuramente tradotto lato server in 23458124570, quindi non sono più 11 caratteri.

Qualcuno ha avuto lo stesso problema?

Grazie.
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
Ciao a tutti,
sto riscontrando un errore per tutti gli invii, nel caso di partita IVA con lo 0 (zero) iniziale. Il sistema boccia tutte le richieste perchè riconosce ovviamente un dato non valido.
Ad esempio, 023458124570 viene sicuramente tradotto lato server in 23458124570, quindi non sono più 11 caratteri.

Qualcuno ha avuto lo stesso problema?

Grazie.
mai avuto il problema, perché definito come stringa di caratteri, non come numero
PHP:
$piProprietario        = "00265910661";
 

BlackJad

Nuovo Utente
20 Gen 2017
3
0
1
37
mai avuto il problema, perché definito come stringa di caratteri, non come numero
PHP:
$piProprietario        = "00265910661";
Ciao,
anche nel mio caso è stringa, ma se guardo l'xml della richiesta SOAP prodotto dal SoapClient, vedo che gli zeri iniziali sono tagliati.
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
Ciao,
anche nel mio caso è stringa, ma se guardo l'xml della richiesta SOAP prodotto dal SoapClient, vedo che gli zeri iniziali sono tagliati.
negli script che sono stati pubblicati in questa discussione, la partita iva è usata solo all'interno dei documenti
Codice:
</proprietario>
  <documentoSpesa>
    <idSpesa>
      <pIva>00265910661</pIva>
      <dataEmissione>2016-01-07</dataEmissione>
      <numDocumentoFiscale>
        <dispositivo>1</dispositivo>
        <numDocumento>001/2016851</numDocumento>
      </numDocumentoFiscale>
e vi compare nella sua interezza, forse stai parlando d'altro, se così fosse ti conviene aprire una discussione separata perché non coerente con il contenuto di questa
 

BlackJad

Nuovo Utente
20 Gen 2017
3
0
1
37
negli script che sono stati pubblicati in questa discussione, la partita iva è usata solo all'interno dei documenti
Codice:
</proprietario>
  <documentoSpesa>
    <idSpesa>
      <pIva>00265910661</pIva>
      <dataEmissione>2016-01-07</dataEmissione>
      <numDocumentoFiscale>
        <dispositivo>1</dispositivo>
        <numDocumento>001/2016851</numDocumento>
      </numDocumentoFiscale>
e vi compare nella sua interezza, forse stai parlando d'altro, se così fosse ti conviene aprire una discussione separata perché non coerente con il contenuto di questa
Grazie a tutti per le risposte, ma ho appena risolto.
Per chi riscontrasse un problema simile, questa è la soluzione:

Utilizzando il SoapClient lato PHP, qualsiasi invio fate (sincrono o asincrono) utilizzando i WSDL del kit di sviluppo, utilizza il suo file XSD associato, sempre disponibile nel kit di sviluppo.
Questo file XSD riporta la partita iva come tipo INT, quindi tutte le chiamate verranno serializzate in XML troncando gli 0 iniziali delle partite iva.
Per risolvere ho modificato l'XSD del kit di sviluppo impostando l'elemento pIva come string.

Evidentemente qualche genio all'interno della società che sviluppa il sistema, ha pensato bene di non applicare il tipo INT alle partite iva, ma lasciarlo STRING, ed ha dimenticato di aggiornare gli XSD.

Grazie.
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
negli script che sono stati pubblicati in questa discussione, la partita iva è usata solo all'interno dei documenti
Quindi a prescindere da xsd eventualmente errato con
Codice:
<xs:element name="pIva">
   <xs:simpleType>
       <xs:restriction base="xs:integer">
           <xs:pattern value="([0-9]{11})"/>
       </xs:restriction>
   </xs:simpleType>
</xs:element>
che c'è solamente in DocumentoSpesa730pSchema.xsd (sincrono singolo dato che non vengono usati negli script di questa discussione del mitico marino51), viene creato da questi script l'elemento pIva perchè passato dallo script e anche perché non presente in InvioTelematicoSpeseSanitarie730p_schema1.xsd (asincrono più dati)?
In Credenziali.php ho
PHP:
define ("_piProprietario",       "98765432104");
....
$piProprietario       = _piProprietario;
e non diretto
PHP:
$piProprietario        = "00265910661";
come hai scritto: era solamente un esempio giusto?
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
Idee per integrare gli script con l'interrogazione del web server, se esiste come penso ma non so se completato da lor signori, per avere una lista completa dei dati che hanno preso compreso gli importi singoli di ogni documento fiscale?
Ho dato un occhiata, come detto, a InterrogazionePuntuale730Service_schema.xsd (aaaargh!) dove c'è
Codice:
<xs:complexType name="DocumentoFiscaleType">
   <xs:sequence>
       <xs:element name="idDocumentoFiscale" type="IdDocumentoFiscaleType" minOccurs="0"/>
       <xs:element name="dataPagamento" type="DataMinType" minOccurs="0"/>
       <xs:element name="totaliVociSpesa" maxOccurs="unbounded" minOccurs="0">
           <xs:complexType>
               <xs:sequence>
                   <xs:element name="tipoSpesa" type="xs:string"/>
                   <xs:element name="importo" type="xs:double"/>
               </xs:sequence>
           </xs:complexType>
       </xs:element>
e su InterrogazionePuntuale730Service.wsdl trovo questo url
Codice:
<wsdl:definitions targetNamespace="http://interrogazionepuntuale.p730.sanita.finanze.it">
   <wsdl:types>
       <xsd:schema elementFormDefault="qualified">
           <xsd:import namespace="http://interrogazionepuntuale.p730.sanita.finanze.it" schemaLocation="InterrogazionePuntuale730Service_schema.xsd"/>
       </xsd:schema>
che dovrebbe usare questi endpoint
Codice:
https://invioSS730pTest.sanita.finanze.it/InterrogazionePuntuale730Web/InterrogazionePuntuale730Port
https://invioSS730p.sanita.finanze.it/InterrogazionePuntuale730Web/InterrogazionePuntuale730Port
Ma l'xsd è totalmente diverso da quello delle ricevute ne vedo pdf per le specifiche tecniche nel kit (come nelle ricevute) e quindi non so esattamente come creare lo script per l'"interrogazione puntuale", che forse serve allo scopo, ovvero un nuovo InterrogazionePuntuale.php.

Vedo su Credenziali.php che era previsto anche un DocumentoSpesa perché vedo gli endpoint ma non vedo il WSDL
PHP:
$DocumentoSpesa   = "https://invioSS730pTest.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort";
...
$DocumentoSpesa   = "https://invioSS730p.sanita.finanze.it/DocumentoSpesa730pWeb/DocumentoSpesa730pPort";
...
define ("_DocumentoSpesa_WSDL",       "");
Mi manca un pezzo oppure non sei riuscito a finirlo / farlo?
Il DocumentoSpesa730p.wsdl nel kit è nella cartella TracciatiWS/WS_SincronoSingoloDato730/ ma è totalmente diverso da quello delle ricevute e, sopratutto, non ho trovato nessun PDF che spieghi quali sono esattamente i campi per la richiesta ed esattamente i campi di risposta... su DocumentoSpesa730pSchema.xsd (e anche InterrogazionePuntuale730Service_schema.xsd) non c'è neanche datiInput, datiOutput, Exception, dettaglioEsitoNegativo, dettaglioEsitoPositivo etc etc insomma non ci ho capito molto. Voi? Oppure sono io che non ho trovato il PDF? Se qualcuno lo ha trovato posti il link del ministero per tutti. Grazie :)

Per le ricevute, come detto, c'è Specifiche tecniche ricevute 730 precompilato_16_11_2015.pdf dove spiega con capitoli apposta intitolati "DESCRIZIONE DEGLI ELEMENTI COSTITUTIVI DEL MESSAGGIO DI RICHIESTA DEL SERVIZIO x" e relativo "DESCRIZIONE DEGLI ELEMENTI COSTITUTIVI DEL MESSAGGIO DI RISPOSTA DEL SERVIZIO X"... da solo non ci riesco a farli. Qualcuno ha pensato come fare?

Per me doveva essere un servizio essenziale che il ministero / sogei doveva implementare... Non vi sembra? Grazie.

p.s. esiste anche ReportMensile730Service per un eventuale ReportMensile730.php con questi endpoint
Codice:
AMBIENTE DI TEST:
https://invioSS730pTest.sanita.finanze.it/ReportMensile730Web/ReportMensilePort
AMBIENTE DI PRODUZIONE:
https://invioSS730p.sanita.finanze.it/ReportMensile730Web/ReportMensilePort
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
come hai scritto: era solamente un esempio giusto?
si era un esempio,
considera che avendo la necessità, ho modificato i miei script per gestire sia il "medico" sia la "struttura"
apportando le dovute modifiche, di fatto, al solo "credenziali" e poco altro

Mi manca un pezzo oppure non sei riuscito a finirlo / farlo?
lo scorso anno non esistevano le funzioni indicate (credo di non sbagliare)

non ne ho mai sentito la necessità, d'altra parte nel pdf di conferma, ci sono le informazioni sui documenti
quanti inviati ed i relativi "stati" possibili,

quest'anno è stata aggiunta la totalizzazione per tipo di spesa, sia per gli importi che per il numero dei valori inviati

credo non debbano sussistere dubbi che, ciò che viene inviato viene anche correttamente recepito, se così non fosse ci conviene cambiare mestiere, quindi non vedo la necessità di ritrasferire a ritroso tutti i documenti inseriti

se ho ben capito il funzionamento sincrono, potrebbe si necessitare delle due funzioni nuove,
ma, credo sia meglio l'alternativa di inviare mensilmente i documenti in modo asincrono, quando ci fossero enormi volumi,
per operare i giusti CONTROLLI PRIMA dell'invio

per leggere i file, procurati qualche tool che possa aiutarti, vedi un risultato nel pdf allegato

credo che anche quest'anno ci possiamo stappare una .... gazzosa
 

Allegati

Ultima modifica:

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
non ne ho mai sentito la necessità, d'altra parte nel pdf di conferma, ci sono le informazioni sui documenti
quanti inviati ed i relativi "stati" possibili,
Vero ma nelle ricevute non ci sono i dettagli singoli. Penso il caso nel csv si è erroneamente invertito un CF o un importo il totale viene perfetto ma sono errati gli invii singoli e quindi si rischia sanzioni :(
Poi fidarsi è bene ma non fidarsi del sistemaTS è meglio. Gli unici dati "legale" che si possono dare come prove di aver inviato correttamente i dati sono le ricevute PDF del sistema TS ma come detto sarebbe meglio avere almeno un response. Ahime non viene un PDF ma solo una risposta dal web service quindi anche quello è non da portare in caso di "richiesta" di sanzione. Il SistemaTS a mio avviso dovrebbe dare un PDF completo dei dati inviati per poi controllarli ma si ha un documento ufficiale. Ma questa forse è una mia idea di Stato corretto.
Ti ringrazio del PDF, anche se i campi non so se sono gli stessi per gli altri 3 servizi ReportMensile730Service, ReportMensile730Service e DocumentoSpesa730p.

Ho provato a fare InterrogazionePuntuale.php ma probabilmente ho sbagliato qualcosa..
PHP:
<?php
require_once 'Credenziali.php';

echo "<p><h4>RICHIESTA INTERROGAZIONE PUNTUALE</h4></p>";

$ws = _InterrogazionePuntuale_WSDL;
$SoapClientParam["location"] = $InterrogazionePuntuale;

error_log("definisco il file wsdl ".$ws, 0);
echo $ws."<p> </p>";

error_log("definisco the soap server location ".$SoapClientParam["location"], 0);
echo $SoapClientParam["location"]."<p> </p>";

$client = new SoapClient($ws, $SoapClientParam);

echo "<p><h4>List of available SOAP functions</h4></p>";
$output = $client->__getFunctions();
while (list ($key, $val) = each ($output) ) echo $val."<br />"; echo "<p> </p>";

echo "<p><h4>List of types described in the WSDL for the Web service</h4></p>";
$output = $client->__getTypes();
while (list ($key, $val) = each ($output) ) echo $val."<br />"; echo "<p> </p>";

$dataEmissione = '01/01/2016';
$numDocumento = '1/2016';

echo "<p><h4>INVIO LA RICHIESTA</h4></p>";
echo $protocollo."<p> </p>";

error_log("invio la richiesta", 0);
error_log("pinCode    = ".$pincodeInvianteCifrato, 0);
error_log("Data = ".$dataEmissione, 0);
error_log("Documento = ".$numDocumento, 0);

$output = $client->InterrogazionePuntuale(Array
    (
    "interrogazionePuntualeRequest"    => (Array
        (
        "opzionale1"  => '0',
        "opzionale2"  => '0',
        "opzionale3"  => '0',
        "pincode"     => $pincodeInvianteCifrato,    // prima ho provato anche non cifrato
    "Proprietario"       => ( Array
        (
        "codiceRegione"      => $codiceRegione,
            "codiceAsl"          => $codiceAsl,
            "codiceSSA"          => $codiceSSA,
        "cfProprietario"     => $cfProprietario
        )),
    "idDocumentoFiscale"       => ( Array
    (
    "pIva"              => $piProprietario,
        "dataEmissione"         => $dataEmissione,
        "numDocumentoFiscale"   => (Array
        (
        "dispositivo"    => '1',
        "numDocumento"    => $numDocumento
        )),
        )),
        ))
    ));
if (is_soap_fault($output))
    {
    $err = "SOAP Fault: (faultcode: {$output->faultcode}, faultstring: {$output->faultstring})";
    error_log("richiesta terminata con errori", 0);
    echo "<p><h4>RICHIESTA TERMINATA CON ERRORI</h4></p>"."<p>$err</p>";
    var_dump($output); echo "<p> </p>";
    trigger_error($err, E_USER_ERROR);
    }
else
    {
    error_log("LA RICHIESTA HA AVUTO RISPOSTA", 0);
    echo "<p><h4>LA RICHIESTA HA AVUTO RISPOSTA</h4></p>";
//  var_dump($output); echo "<p> </p>";

    $esito = $output->interrogazionePuntualeResponse->esitoChiamata;

    if ( $esito == "0" )
        {
        error_log("E' PRESENTE L' INTERROGAZIONE PUNTUALE DI ".$numDocumento, 0);
        echo "<p><h4>E' PRESENTE L' INTERROGAZIONE PUNTUALE DI ".$numDocumento."</h4></p>";

        ReportOutput("esitoChiamata");
        ReportOutput("documentoFiscale");
        ReportOutput("listaMessaggi");
        }
    else
        {
        error_log("ERRORE: NON E' PRESENTE L' INTERROGAZIONE PUNTUALE DI ".$numDocumento, 0);
        echo "<p><h4>ERRORE: NON E' PRESENTE L' INTERROGAZIONE PUNTUALE DI ".$numDocumento."</h4></p>";
        }
    }

error_log("done ".$_SERVER['PHP_SELF'], 0);
echo "<p><h4>FINE DEL LAVORO</h4></p>";


function ReportOutput($var)
    {
    global $output;
    error_log($var." = ".$output->interrogazionePuntualeResponse->{$var}, 0);
//    error_log($var." = ".$output->DatiOutputRichiesta->esitiPositivi->dettagliEsito->{$var}, 0);
    echo $var." = ".$output->interrogazionePuntualeResponse->{$var}."<br />";
//    echo $var." = ".$output->DatiOutputRichiesta->esitiPositivi->dettagliEsito->{$var}."<br />";
    }
?>
Questi sono le funzioni e tipi usciti da __getFunctions() e __getTypes()
Codice:
RICHIESTA INTERROGAZIONE PUNTUALE

InterrogazionePuntuale730Service.wsdl

https://invioSS730pTest.sanita.finanze.it/InterrogazionePuntuale730Web/InterrogazionePuntuale730Port

List of available SOAP functions

interrogazionePuntualeResponse InterrogazionePuntuale(interrogazionePuntualeRequest $interrogazionePuntualeRequest)

List of types described in the WSDL for the Web service

struct interrogazionePuntualeRequest { string opzionale1; string opzionale2; string opzionale3; string pincode; ProprietarioType Proprietario; IdDocumentoFiscaleType idDocumentoFiscale; }
struct interrogazionePuntualeResponse { string esitoChiamata; DocumentoFiscaleType documentoFiscale; listaMessaggi listaMessaggi; }
struct listaMessaggi { messaggio messaggio; }
struct messaggio { string codice; string descrizione; string tipo; }
struct ProprietarioType { String3Type codiceRegione; String3Type codiceAsl; String6Type codiceSSA; CfType cfProprietario; }
struct IdDocumentoFiscaleType { String11Type pIva; DataMinType dataEmissione; numDocumentoFiscale numDocumentoFiscale; }
struct numDocumentoFiscale { Int3Type dispositivo; NumDocType numDocumento; }
struct DocumentoFiscaleType { IdDocumentoFiscaleType idDocumentoFiscale; DataMinType dataPagamento; totaliVociSpesa totaliVociSpesa; totaliVociSpesaRimborsate totaliVociSpesaRimborsate; string protocollo; string nomeFile; DataMinType dataInvio; String1Type tipoInvio; listaErroriDocumento listaErroriDocumento; }
struct totaliVociSpesa { string tipoSpesa; double importo; }
struct totaliVociSpesaRimborsate { string tipoSpesa; double importo; }
struct listaErroriDocumento { errore errore; }
struct errore { string codice; string descrizione; string tipo; }
string CfType
string String3Type
string String6Type
string String1Type
string String11Type
date DataMinType
int Int3Type
string NumDocType
Ma mi da
Codice:
PHP Fatal error:  SOAP-ERROR: Encoding: object has no 'pincode' property in InterrogazionePuntuale.php on line 58
PHP Fatal error:  Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'pincode' property in InterrogazionePuntuale.php:58

58:        "numDocumento"   => $numDocumento
Allego i file del kit relativi a InterrogazionePuntuale.

Se mi fate capire cosa ho sbagliato posso anche fare ed postare ReportMensile.php e DocumentoSpesa.php
Grazie

p.s. mi da estensione non corretta per l'allegato. Sono comunque quelli in kit730P_ver_20161223/TracciatiWS/WS_Interrogazioni/
 

Dan_OA

Nuovo Utente
23 Gen 2017
2
0
1
Ciao a tutti, una domanda generica relativa al discorso.
Ho quasi ultimato un gestionale che oltre ad archiviare fatture ha la possibilità di inviarle al servizio tessera sanitaria. ( Fatto in PHP principalmente )

Ora ho un problema occasionale con l'invio...
Per ora le fatture vengono inviate singolarmente tramite MTOM con allegato XML zippato ( in futuro implementerò l'invio multiplo... ) quindi si parla di un invio per fattura.

Dopo l'invio di N fatture ( una decina direi ) sembra bloccarsi tutto. Nel senso che inviando ( diciamo l'undicesima ) una fattura risulta in elaborazione ma controllando da log risultano 0 fatture inviate e la ricevuta ovviamente non ritorna nulla.
Possibile che ci sia qualcosa tipo: dopo N richieste blocca tutto ?

In caso ci sono dei numeri / indirizzi email per contattare i tecnici SOGEI ? Riesco soltanto a trovare il numero verde e quello risulta sempre occupato.

Grazie per l'attenzione e scusate il wall of text
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
Ma nooo. Adesso che ho fatto il csv piu' simile all'invio effettivo in fase di test mi da errore
CODICE ERRORE E011 - MOTIVAZIONE DI SCARTO: FILE NON CONFORME ALLO SCHEMA DI VALIDAZIONE
non ho cambiato lo script ho solo cambiato il numero documento che al posto del solo numero ho messo (obbligo) esattamente come è scritto sulla fattura ovvero n/A 16 nel csv...
Codice:
1;05/01/2016;1/A 16;*cf_controllato*;1;0;0;0;0
(gli importi sono tutti 1 per controllare) e l'XML inizia con:
Codice:
<precompilata xsi:noNamespaceSchemaLocation="730_precompilata.xsd">
<opzionale1>text</opzionale1><opzionale2>text</opzionale2><opzionale3>text</opzionale3>
<proprietario>
  <codiceRegione>604</codiceRegione><codiceAsl>120</codiceAsl><codiceSSA>010011</codiceSSA>
  <cfProprietario>Ix4O...tolto_per_chiarezza_lo_stesso_di_ieri</cfProprietario>
</proprietario>
<documentoSpesa>
 <idSpesa><pIva>98765432104</pIva><dataEmissione>2016-01-05</dataEmissione>
 <numDocumentoFiscale><dispositivo>1</dispositivo><numDocumento>1/A 16811</numDocumento>
 </numDocumentoFiscale>
 </idSpesa>
 <dataPagamento>2016-01-05</dataPagamento><flagOperazione>I</flagOperazione>
 <cfCittadino>_il_cf_criptato_del_cittadino_</cfCittadino>
 <voceSpesa><tipoSpesa>AD</tipoSpesa><importo>1.00</importo></voceSpesa>
</documentoSpesa>

... tutte le voci ...
</precompilata>
Ovviamente al posto di *cf_controllato* c'è il cf che ieri gli era andato bene... io certo non ho modificato lo script da ieri!

Avevo notato una piccolissima cosa strana ieri ma erano le solite sciocchezze del sistema di test.
Ovvero come è successo a voi mi dava degli warning errati (i cf sono stati controllati con il programma, con lo script del mitico Marino e per scrupolo quegli warning li ho controllati sul sito dell'Agenzia quindi tutti CF validi) W003;IL CF CITTADINO NON PRESENTE IN ARCHIVIO
Avevo notato che il csv degli errori (errati per colpa del sistema di test) mi sembrava non corretto il DOCUMENTO FISCALE NUMERO (che dovrebbe avere i 3 caratteri del microtime) ma noto che anche l'XML fatto dagli stessi script mi dava uno strano
<numDocumento>1.79</numDocumento>
con il csv alla voce del numero documento c'era solamente ;1; e non ;1/A 16; ma forse era perché il microtime() aveva solo 2 decimali e quindi è uscito .79. e quindi non me lo sono proprio filato.

Ho provato anche a mettere solo 10 righe nel csv. Uguale :(

Aiuto... ero quasi pronto per l'invio reale... che può essere successo? Grazie

Aggiunta: ho rimesso il file di ieri... neanche quello funziona più.... disperazione :(
No scusate quello di ieri funziona.... ma allora il problema è che non può essere messo 1/A 16? Perchè... è obbligatorio mettere esattamente come è riportato sulla fattura :(
<numDocumento>1683</numDocumento> gli va bene
<numDocumento>1/x 16258</numDocumento> corretto non gli va bene
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
;1/A 16;
mi sembra ci sia uno spazio, prova a toglierlo

Codice:
    <xs:simpleType name="numDocType">
        <xs:restriction base="xs:string">
            <xs:pattern value="([A-Za-z0-9_./\\\-]{1,20})"/>
        </xs:restriction>
    </xs:simpleType>
 
Ultima modifica:

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
;1/A 16;
mi sembra ci sia uno spazio, prova a toglierlo
Guarda grande Marino51, ci avevo pensato a pranzo infatti avevo provato con _ al posto di spazio e è andato "in attesa di elaborazione" quindi niente ricevuta da vedere.
Ma allora non sarà conforme a quanto scritto sulla fattura quindi, diciamo, errata. Oppure visto che è restircted senza spazi, nella documentazione tecnica del kit (e nelle leggi) mi sono perso come sostituire uno spazio con un determinato carattere?
Oppure non lo hanno proprio considerato? Ufff. Ovviamente il numero verde è così intasato che il disco dice di richiamare più tardi.
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
non mi creerei problemi (quando non ci sono), è tutto dimostrabile (tieniti una nota scritta per ricordare fra 5 anni, magari inseriscila nel "__TesseraSanitaria.log" che ti conservi con gli originali e i risultati dell'invio)
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
non mi creerei problemi (quando non ci sono), è tutto dimostrabile
Hai ragione... certo se ci fosse un metodo anche per scaricare dal webservice quanto inviato con cf, numero e data fattura e sopratutto importo sarebbe una prova. Il tuo ottimo log va bene ma mi sa che se arrivano sanzioni poi non vale molto.... (vedi i miei post per creare le risposte da loro con l'eventuale ReportMensile.php, DocumentoSpesa.php e InterrogazionePuntuale.php che avevo tentato di fare ma che non è andato a buon fine).
Toglierò direttamente lo spazio quindi 1/A 2016 diventerà 1/A2016.
Per avere più dati ho modificato l'uscita del __TesseraSanitaria.log con questa riga per avere almeno l'importo sul tuo log (anche se sono solo i dati locali ma meglio che nulla):
PHP:
error_log($col[_ColDocNumber]." Euro: ".number_format($TotalEuro, 2, ".", "")." * ".$col[_ColFiscalCode]." * ".$cf, 0);
Ho anche un forte dubbio per l'arrotondamento al centesimo che non tornerebbe con i totale di una fattura, premettendo che spero vivamente che siano da inserire non le singole voci per ogni tipologia detraibile (esempio AD e AA) perchè altrimenti l'arrotondamento sarebbe in caso ancora non conforme al totale della fattura con abbinato lo scontrino (stessa cosa con le voci non detraibili). Questo perché si deve inviare l'importo IVAto:
Esempio: fattura con 4 voci:
coso detraibile1 imponibile A1 (ivato verrebbe 1 centesimo in più essendo per esempio x.006) tipo voce AD
coso detraibile2 imponibile A2 (ivato verrebbe 1 centesimo in più essendo per esempio x.006) tipo voce AA
... etc
In fattura si calcola A1+A2+A3+A4+... e DOPO si fa l'arrondamento al centesimo e quindi il totale fattura ivato.
Quindi se la fattura è per esempio
A1(voci AD) + A2(voci AA) = imponibileTot -> arrotondamento -> +iva = 100,00 su scontrino e relativa fattura allegata
Nel caso sopracitato si dovrebbero mettere verrebbe
A1 voce AD ivato 1 centesimo in più
A2 voce AA ivato 1 centesimo in più
totale inviato al sistemaTS 100,02 non conforme con la fattura.... quindi sanzione? Se si dovessero (cosa che non mi sembra) inviare le voci completamente separate anche con la stessa tipologia e se disgraziatamente fossero 100 e tutte ivate con 1 centesimo in più verrebbe 1 euro in più.... che ne pensate?
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
devi cambiare alcune cose rispetto ai primi post di Marino in quanto l'inviate non è un singolo utente ma una struttura.
Sperando che vada bene la sostituzione senza spazio per il numero documento e mettendo TUTTE le voci AD raggruppate è corretto che per codificare per invio effettivo devo mettere su Credenziali.php, aggiungendo la tua funzione function EncryptData($source),
PHP:
    define ("_cfProprietarioCifrato", EncryptData("codice_fiscale_effettivo"));
    define ("_pincodeInvianteCifrato", EncryptData("pincode_effettivo"));
Giusto? Grazie.
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
provo a rispondere io ...
Sperando che vada bene la sostituzione senza spazio
ok,
mettendo TUTTE le voci AD raggruppate è corretto
ok
per invio effettivo devo mettere su Credenziali.php
si, copia la struttura di test, nella sezione per l'invio effettivo e sostituisci i valori con quelli del "proprietario"
aggiungendo la tua funzione function EncryptData($source),
no, non lo farei, se hai provato il processo controllando i risultati prodotti da tutti i suoi passi, mantieni il processo inalterato
funzionerà allo stesso modo anche per i dati di "produzione"
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
provo a rispondere io ...
Grazie infinite! Chi meglio di te visto che sei tu il creatore degli script ! :)
-> LinuxOhYeah ha scritto: aggiungendo la tua funzione function EncryptData($source),
no, non lo farei, se hai provato il processo controllando i risultati prodotti da tutti i suoi passi, mantieni il processo inalterato
funzionerà allo stesso modo anche per i dati di "produzione"
Va bene non la metto, ma allora come faccio a creare con i tuoi script i 2 dati criptati necessari per l'invio effettivo, mettendo $TEST = false; ? Ovvero _cfProprietarioCifrato e _pincodeInvianteCifrato
PHP:
if( $TEST )
...
else
    {
    error_log("INVIO EFFETTIVO *******", 0);

    define ("_name",           "Ottico EFFETTIVO");

    define ("_user",           "user_reale_non_criptato");
    define ("_psw",           "password_reale_non_criptato");

    define ("_networkUser",       "");
    define ("_networkPsw",       "");

    define ("_cfProprietario",       "cf_reale_non_criptato");
    define ("_cfProprietarioCifrato",   "DATO_CHE_MANCA_cf_reale_criptato");

    define ("_piProprietario",       "PartitaIva_reale");

    define ("_pincodeInviante",       "Pincode_Reale");
    define ("_pincodeInvianteCifrato",   "DATO_CHE_MANCA_Pincode_reale_criptato");

    $InvioTelematico... ;
    }
Sono necessari in _3_FatturaGeneraXMLdaTXT.php alle righe
PHP:
$encFC = $cfProprietarioCifrato;
...
$cfProprietario = $proprietario->addChild('cfProprietario', $encFC);
e in _4_FattureInviaWsdl.php alla riga
PHP:
"pincodeInvianteCifrato" => $pincodeInvianteCifrato,
oltre agli script FattureInvio*.php

_2_FattureGeneraOpenSSL.sh crea i file .enc di tutti i cf presi dal csv che vengono usati in GetEncFC($encFile) ma non quei 2 dati.... mi sembra.

Oppure mi sono preso un pezzo del tuo script che cripti queste 2 variabili?
Grazie
 
Ultima modifica: