Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

keys 22-07-2021 12:41:42

Cita:

Empezado por JoseLeeTo (Mensaje 542025)
Buenas!;

Hasta donde yo conozco, en Guipuzcoa sólamente existe la posibilidad de Alta de TicketBai, pero no así la modificación. ¿Esto es así?.
En los esquemas .XSD que exponen en su web, al menos hasta ayer, solo existen los de Alta y los de Anulación.

En cambio, recibí una notificación diciendo lo siguiente:

Desde la Subdirección General de Estrategia Tecnológica queremos invitarles a una sesión informativa dirigida a todas aquellas personas o entidades que estén desarrollando softwares garantes para cumplir con las nuevas obligaciones tributarias establecidas por las diputaciones forales.


Los temas que se tratarán en dicha sesión informativa son los siguientes:

1. Nuevo servicio Rest ZUZENDU para subsanar y modificar.
2. Listado de validaciones síncronas y asíncronas.
3. Claves del encadenamiento.
4. Recomendaciones para evitar errores y avisos.
5. Claves TicketBAI.
6. Certificados electrónicos.


Consideramos que los temas a tratar son de gran interés para el correcto desarrollo de sus respectivos softwares.



¿Alguien ha hecho o conoce algo al respecto?

Saludos y Gracias.

El jueves lo explicaran en la reunion.

Neftali [Germán.Estévez] 22-07-2021 12:53:23

Cita:

Empezado por Sistel (Mensaje 542018)

Batuz es TicketBAI + LROE.
Se retrasa la obligatoridad de Batuz por 2 años.
De todo Batuz: TicketBAI + LROE.
Batuz es sólo de Bizkaia.

Completando lo que dice [Sistel]:


Batuz = Fichero_TicketBAI [1..N] incrustado en LROE => Bizkaia
TicketBAI = Fichero_TicketBAI [1] => Guipuzkoa y Árava

Neftali [Germán.Estévez] 22-07-2021 12:58:06

Cita:

Empezado por JoseLeeTo (Mensaje 542025)
Hasta donde yo conozco, en Guipuzcoa sólamente existe la posibilidad de Alta de TicketBai, pero no así la modificación. ¿Esto es así?.

Pues alguien les habrá explicado que sólo con Alta(y rectficativas) + Anulación no es posible trabajar en las empresas (mira que tienen el SII por delante y no han aprendido nada o que son Vascos y pasan de todo) y a estas alturas han tenido que implementar la Modificación.

Tal como dice [keys] como es algo nuevo, se supone que en la reunión lo explicarán y publicarán los esquemas y ejemplos.

NOTA: Los más listos, los de Álava, que están esperando que los demás se den de cabezazos contra las paredes hasta que lo tengan claro y luego entrar ellos (al menos espero que aprovechen la "experiencia" de los ortros 2).

sEngine 22-07-2021 13:16:19

Esperemos que en Alava se inspiren en lo que tienen en Guipuzkoa, asi no habra que hacer muchos cambios

JoseLeeTo 22-07-2021 13:36:38

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 541972)
Aquí dice que comenzarán en octubre: https://www.naiz.eus/eu/info/noticia...r-este-octubre

Buenas;

He preguntado directamente a Álava sobre su implantación, y me reponden lo siguiente:

En la Disposición Transitoria Única se establece el calendario previsto de implantación que, conforme a lo dispuesto en el punto 3, la Diputada Foral de Hacienda, Finanzas y Presupuestos podrá modificar mediante la oportuna Orden Foral.

01/01/2022 voluntario
01/04/2022 asesorías
01/07/2022 actividades profesionales y farmacias
01/10/2022 el resto de contribuyentes


Saludos

jsanznub 22-07-2021 13:57:47

Cita:

Empezado por Eric Mtz (Mensaje 541966)
Ya digo, pregunta rápida, ¿Os furula Batuz?, no he cambiado nada y ahora me devuelve un:



Si os funciona, ¿me podríais compartir los tres parámetros que introducís en la firma?, no sea que hayan cambiado algo, éstos son los míos:



Gracias de antemano y recordad, somos uno con la fuerza y la fuerza está con nosotros.

Me pasa exactamente lo mismo que a ti y comparto los mismos parámetros. Les he preguntado directamente por el tema y la respuesta ha sido :

Las especificaciones indican que la firma debe ser de tipo EPES y en vuestro caso la firma que incluís es de tipo BES.

Hasta donde yo se la diferencia entre una firma BES y una EPES es justamente la introducción de la información contenida en esos parámetros. Sigo mirándolo, si encuentro algo lo compartiré por aquí.

Eric Mtz 22-07-2021 14:24:57

Cita:

Empezado por jsanznub (Mensaje 542036)
Me pasa exactamente lo mismo que a ti y comparto los mismos parámetros. Les he preguntado directamente por el tema y la respuesta ha sido :

Las especificaciones indican que la firma debe ser de tipo EPES y en vuestro caso la firma que incluís es de tipo BES.

Hasta donde yo se la diferencia entre una firma BES y una EPES es justamente la introducción de la información contenida en esos parámetros. Sigo mirándolo, si encuentro algo lo compartiré por aquí.

Estoy igual, pero en la respuesta de BATUZ hay algún dato que os puede resultar interesante así que os lo publico aquí:

Cita:

La validación de la firma ha estado deshabilitada durante un tiempo debido a pruebas internas que se han tenido que hacer, pero ya vuelve a estar habilitada. Es por eso que igual lo que antes no os daba error, ahora sí que os da.

El Hash correcto es el que indicaste: Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es=

Por otro lado, las especificaciones indican que la firma debe ser de tipo EPES y en vuestro caso la firma que incluís es de tipo BES.

Las normas por las que se establece la política de firma en las tres Diputaciones forales son similares. Si comparáis las políticas de firma de las 3 Diputaciones veréis que existen ciertos campos en la identificación de la política de firma que son ligeramente diferentes, pero todos son igualmente válidos para las tres Diputaciones Forales. Tal y como se especifica en la Orden Foral 1482/2020 del 9 de Septiembre, existe la siguiente cláusula de reciprocidad:
Francamente no tengo ni la mas remota idea de la diferencia entre EPES y BES, pero me alegra no ser el único a que se le ha roto de un día para otro.

Bueno, recordad que estamos todos en formación testudo, dicho de otra manera somos una piña, si encuentro alguna solución os la podré por aquí, venga ánimo a todos.

Sistel 22-07-2021 16:08:41

Cita:

Empezado por sEngine (Mensaje 542033)
Esperemos que en Alava se inspiren en lo que tienen en Guipuzkoa, asi no habra que hacer muchos cambios

Si me permitís, me ha recordado el clásico chiste de vascos:

En una pelea de gallos es fácil distinguir a cada uno.
El de Bizkaia lleva un gallo.
El de Gipuzkoa lleva un pato.
Y el de Álava es el que apuesta por el pato.

Saludos y perdón por el inciso, pero no he podido aguantarme :D

sEngine 22-07-2021 16:32:40

Cita:

Empezado por Eric Mtz (Mensaje 542038)
Estoy igual, pero en la respuesta de BATUZ hay algún dato que os puede resultar interesante así que os lo publico aquí:



Francamente no tengo ni la mas remota idea de la diferencia entre EPES y BES, pero me alegra no ser el único a que se le ha roto de un día para otro.

Bueno, recordad que estamos todos en formación testudo, dicho de otra manera somos una piña, si encuentro alguna solución os la podré por aquí, venga ánimo a todos.

No se como lo teneis puesto pero yo lo tengo asi al crear la firma y me funciona (uso el autofirma). Teneis puesto lo de format?

Código Delphi [-]
sign -i "tempBai.xml" -o tempBai_firmado.xml ' +
'-store pkcs12:sello_entidad_act_prod.p12 -password IZProd2021 -filter sello_entidad_act_prod.p12 '+
'-format xades -xml -config "format=XAdES Enveloped ' +
'\npolicyIdentifier=https://www.batuz.eus/fitxategiak/batuz/ticketbai/sinadura_elektronikoaren_zehaztapenak_especificaciones_de_la_firma_electronica_v1_0.pdf '+
'\npolicyIdentifierHash=Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es='+
'\npolicyIdentifierHashAlgorithm=http://www.w3.org/2001/04/xmlenc#sha256 ' +
'\npolicyQualifier=https://www.batuz.eus/fitxategiak/batuz/ticketbai/sinadura_elektronikoaren_zehaztapenak_especificaciones_de_la_firma_electronica_v1_0.pdf';

y segun google

XAdES-BES. Forma básica que simplemente cumple los requisitos legales de la Directiva para firma electrónica avanzada
XAdES-EPES. Es un XAdES-BES al que se le incorpora información sobre la política de firma, como pudiera ser aquella información sobre el certificado empleado y la CA que lo emitió.

unomasmas 22-07-2021 22:12:35

Cita:

Empezado por skatologiko (Mensaje 541796)
A Guipuzcoa. Si envío un NIF español, sí que llega

<Destinatarios>
<IDDestinatario>
<NIF>NL855820627B01</NIF>
<ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>

Y me da el siguiente error:
Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-pattern-valid: Value 'NL855820627B01' is not facet-valid with respect to pattern '(([a-z|A-Z]{1}\d{7}[a-z|A-Z]{1})|(\d{8}[a-z|A-Z]{1})|([a-z|A-Z]{1}\d{8}))' for type 'NIFType'.</Descripcion>


Ese NIF no es español. Creo que debes detallarlo así:
<Destinatarios>
<IDDestinatario>
<IDOtro>
<IDType>04 (o el que corresponda)</IDType>
<ID>NL855820627B01</ID>
</IDOtro>
<ApellidosNombreRazonSocial>ITX MERKEN B.V.</ApellidosNombreRazonSocial>
</IDDestinatario>
</Destinatarios>

Valores posibles para IDType:
02 NIF-IVA.
03 Pasaporte.
04 Documento oficial de identificación expedido por el país o territorio de residencia.
05 Certificado de residencia.
06 Otro documento probatorio.

unomasmas 22-07-2021 23:47:38

Enviar Alta a Gipuzkoa (en pruebas)
 
Tengo problemas para subir el fichero de alta TicketBAI al entorno de pruebas de Gipuzkoa. No entiendo muy bien qué está ocurriendo. Estoy haciendo el script en C#. En los diferentes métodos que he empleado me ocurren dos tipos de problema:

[Problema 1:]
Código:

        <ResultadosValidacion>
            <Codigo>002</Codigo>
            <Descripcion>Error: El fichero de alta TicketBAI no cumple el esquema XSD. No se ha podido procesar el mensaje. Detalle del error: Content is not allowed in prolog.</Descripcion>
            <Azalpena>Errorea: TicketBAI altako fitxategiak ez du betetzen XSD eskema. Mezua ezin da prozesatu. Errorearen xehetasuna: Content is not allowed in prolog.</Azalpena>
        </ResultadosValidacion>

Este es el código utilizado:
Código:

            string urlconexion = "h t t p s://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta";
            string file = @"D:\Datos_Desarrollo\tBAI\6936.XSIG";
            var client = new RestClient(urlconexion);
            client.ClientCertificates = new X509CertificateCollection() { certificate };
            var restrequest = new RestRequest(Method.POST);
            restrequest.AddHeader("Content-Type", "application/xml;charset=UTF-8");
            restrequest.AddFile("mifichero", file, "text/xml");
            IRestResponse response = client.Execute(restrequest);
            System.Diagnostics.Debug.WriteLine(response.Content);

RestClient y RestRequest son clases de RestSharp
IRestResponse es un contenedor de RestSharp que recoge la respuesta del servidor.
certificate es una instancia de la clase X509Certificate2 de System.Security.Cryptography.X509Certificates


[Problema 2:]
Código:

        <ResultadosValidacion>
            <Codigo>007</Codigo>
            <Descripcion>Error: Certificado remitente no válido para emisor factura.</Descripcion>
            <Azalpena>Errorea: Bidaltzailearen ziurtagiria ez da baliagarria fakturaren egilearentzat.</Azalpena>
        </ResultadosValidacion>

Este es el código utilizado:
Código:

            string urlconexion =  "h t t p s://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta";
            string file = @"D:\Datos_Desarrollo\tBAI\6936.XSIG";
            HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(urlconexion);
            wr.ContentType = "application/xml;charset=UTF-8";
            wr.Method = "POST";
            wr.ClientCertificates = new X509CertificateCollection() { certificate };
            Stream rs = wr.GetRequestStream();
            rs = wr.GetRequestStream();
            FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[4096];
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                rs.Write(buffer, 0, bytesRead);
            }
            WebResponse wresp = null;
            try
            {
                wresp = wr.GetResponse();
                Stream stream2 = wresp.GetResponseStream();
                StreamReader reader2 = new StreamReader(stream2);
                System.Diagnostics.Debug.WriteLine(reader2.ReadToEnd());
            }

HttpWebRequest se incluye en System.Net
certificate es igualmente una instancia de la clase X509Certificate2 de System.Security.Cryptography.X509Certificates
Me imagino que en este segundo caso el problema puede estar en la manipulación del fichero (por haberlo subido como stream) pero no veo cómo comprobarlo. Si alguien me pudiera echar una mano se lo agradecería tanto como el tiempo que llevo tratando de encontrar una solución (un mogollón). Gracias ya por haberme leido.

b4aronDeLaBirr4 23-07-2021 08:45:45

Buenas!

Yo también estoy desarrollando la solución en C# así que a ver si algo te puedo ayudar...
En primer lugar, si podrías postear el fichero XML que envías y que también me dijeras qué certificado estás usando. Cabe recordar que el orden de los elementos en el XML es importante que sea acorde al XSD y que la petición de alta al servicio la estés realizando con el certificado también (además de firmar con él), aunque veo que sí, podrías probar en POSTMAN previamente o algo. Yo hice esto para ir descartando estos errores, te lo recomiendo. Por cierto, cómo estás firmando el XML? (Esto ya porque a mí me interesa ver otras opciones jeje)

Un saludo.

Neftali [Germán.Estévez] 23-07-2021 08:51:32

Cita:

Empezado por unomasmas (Mensaje 542052)
... me ocurren dos tipos de problema:

<Descripcion>Error: El fichero de alta TicketBAI no cumple el esquema XSD. No se ha podido procesar el mensaje. Detalle del error: Content is not allowed in prolog.</Descripcion>

<Descripcion>Error: Certificado remitente no válido para emisor factura.</Descripcion>

Para el primero, ¿puedes poner el fichero que estás enviando?
Lo digo por compararlo con otros.
También puedes comprar tú mismo la estructura del que estás enviando con algunos de los ejemplos que hay en los mensajes del foro o los que te puedes descargar, a ver si te estás olvidando algún nodo (ya no sólo de los datos, sino de las firmas,...)

En cuanto al segundo, si revisas mensajes anteriores ya hemos hablado de él también. El certificado debe ser válido (de producción por decirelo así), no valen certificados de prueba.
¿Qué tipo de certificado estás utilizando?

También puedes escribirles un mail con el fichero que estás enviando y los errores que te dan; Para el primer caso te dirán qué te falta y para el segundo caso, te darán de alta el certificado (si es necesario) y lo asociarán a los datos que estás usando para el envío (NIF / RAZON SOCIAL).

Eric Mtz 23-07-2021 08:58:52

Cita:

Empezado por Sistel (Mensaje 542040)
Si me permitís, me ha recordado el clásico chiste de vascos:

En una pelea de gallos es fácil distinguir a cada uno.
El de Bizkaia lleva un gallo.
El de Gipuzkoa lleva un pato.
Y el de Álava es el que apuesta por el pato.

Saludos y perdón por el inciso, pero no he podido aguantarme :D

Me has hecho el día :D

JoseLeeTo 23-07-2021 11:12:30

Cita:

Empezado por unomasmas (Mensaje 542052)
Tengo problemas para subir el fichero de alta TicketBAI al entorno de pruebas de Gipuzkoa. No entiendo muy bien qué está ocurriendo. Estoy haciendo el script en C#. En los diferentes métodos que he empleado me ocurren dos tipos de problema:

[Problema 1:]
Código:

        <ResultadosValidacion>
            <Codigo>002</Codigo>
            <Descripcion>Error: El fichero de alta TicketBAI no cumple el esquema XSD. No se ha podido procesar el mensaje. Detalle del error: Content is not allowed in prolog.</Descripcion>
            <Azalpena>Errorea: TicketBAI altako fitxategiak ez du betetzen XSD eskema. Mezua ezin da prozesatu. Errorearen xehetasuna: Content is not allowed in prolog.</Azalpena>
        </ResultadosValidacion>

Este es el código utilizado:
Código:

            string urlconexion = "h t t p s://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta";
            string file = @"D:\Datos_Desarrollo\tBAI\6936.XSIG";
            var client = new RestClient(urlconexion);
            client.ClientCertificates = new X509CertificateCollection() { certificate };
            var restrequest = new RestRequest(Method.POST);
            restrequest.AddHeader("Content-Type", "application/xml;charset=UTF-8");
            restrequest.AddFile("mifichero", file, "text/xml");
            IRestResponse response = client.Execute(restrequest);
            System.Diagnostics.Debug.WriteLine(response.Content);

RestClient y RestRequest son clases de RestSharp
IRestResponse es un contenedor de RestSharp que recoge la respuesta del servidor.
certificate es una instancia de la clase X509Certificate2 de System.Security.Cryptography.X509Certificates


[Problema 2:]
Código:

        <ResultadosValidacion>
            <Codigo>007</Codigo>
            <Descripcion>Error: Certificado remitente no válido para emisor factura.</Descripcion>
            <Azalpena>Errorea: Bidaltzailearen ziurtagiria ez da baliagarria fakturaren egilearentzat.</Azalpena>
        </ResultadosValidacion>

Este es el código utilizado:
Código:

            string urlconexion =  "h t t p s://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta";
            string file = @"D:\Datos_Desarrollo\tBAI\6936.XSIG";
            HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(urlconexion);
            wr.ContentType = "application/xml;charset=UTF-8";
            wr.Method = "POST";
            wr.ClientCertificates = new X509CertificateCollection() { certificate };
            Stream rs = wr.GetRequestStream();
            rs = wr.GetRequestStream();
            FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[4096];
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                rs.Write(buffer, 0, bytesRead);
            }
            WebResponse wresp = null;
            try
            {
                wresp = wr.GetResponse();
                Stream stream2 = wresp.GetResponseStream();
                StreamReader reader2 = new StreamReader(stream2);
                System.Diagnostics.Debug.WriteLine(reader2.ReadToEnd());
            }

HttpWebRequest se incluye en System.Net
certificate es igualmente una instancia de la clase X509Certificate2 de System.Security.Cryptography.X509Certificates
Me imagino que en este segundo caso el problema puede estar en la manipulación del fichero (por haberlo subido como stream) pero no veo cómo comprobarlo. Si alguien me pudiera echar una mano se lo agradecería tanto como el tiempo que llevo tratando de encontrar una solución (un mogollón). Gracias ya por haberme leido.


Buenas. Yo también estoy con C#, aunque no utilizo RestSharp, sino HttpClient. En el caso del problema 2, tiene pinta de que el nombre del emisor de la factura, no coincide con el del certificado, y así tiene que ser.
El certificado tiene que ser el del propio obligado tributario, que tiene que coincidir con el emisor de la factura.

unomasmas 23-07-2021 11:24:46

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542054)
podrías postear el fichero XML que envías

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 542055)
¿puedes poner el fichero que estás enviando?

Es un poco tocho :-(. Ahí va. He cambiado/quitado algún dato para "anonimizarlo" pero la estructura se mantiene
Código:

<?xml version="1.0" encoding="utf-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision">
  <Cabecera>
      <IDVersionTBAI>1.2</IDVersionTBAI>
  </Cabecera>
  <Sujetos>
      <Emisor>
        <NIF>xxxxxxxxx</NIF>
        <ApellidosNombreRazonSocial>Empresa para Desarrollo</ApellidosNombreRazonSocial>
      </Emisor>
      <Destinatarios>
        <IDDestinatario>
            <IDOtro>
              <CodigoPais>DE</CodigoPais>
              <IDType>03</IDType>
              <ID>U85XXXXX</ID>
            </IDOtro>
            <ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
            <CodigoPostal>28036</CodigoPostal>
            <Direccion>C/ Inexistente. Madrid. ESP</Direccion>
        </IDDestinatario>
      </Destinatarios>
      <VariosDestinatarios>N</VariosDestinatarios>
      <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
  </Sujetos>
  <Factura>
      <CabeceraFactura>
        <SerieFactura>2021-</SerieFactura>
        <NumFactura>0008</NumFactura>
        <FechaExpedicionFactura>27-05-2021</FechaExpedicionFactura>
        <HoraExpedicionFactura>00:00:00</HoraExpedicionFactura>
        <FacturaSimplificada>N</FacturaSimplificada>
        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
      </CabeceraFactura>
      <DatosFactura>
        <FechaOperacion>27-05-2021</FechaOperacion>
        <DescripcionFactura></DescripcionFactura>
        <DetallesFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Un servicio</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>2000.00000000</ImporteUnitario>
              <Descuento>0.00</Descuento>
              <ImporteTotal>2420.00</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 1</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>5.83710987</ImporteUnitario>
              <Descuento>1.17</Descuento>
              <ImporteTotal>5.65</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 2</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>2363.79000000</ImporteUnitario>
              <Descuento>756.41</Descuento>
              <ImporteTotal>1944.93</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 3 (Exento)</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>200.00000000</ImporteUnitario>
              <Descuento>0.00</Descuento>
              <ImporteTotal>200.00</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 4 (No sujeto)</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>400.00000000</ImporteUnitario>
              <Descuento>0.00</Descuento>
              <ImporteTotal>400.00</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 5</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>79.80172200</ImporteUnitario>
              <Descuento>15.96</Descuento>
              <ImporteTotal>77.25</ImporteTotal>
            </IDDetalleFactura>
        </DetallesFactura>
        <ImporteTotalFactura>4543.04</ImporteTotalFactura>
        <RetencionSoportada>0.00</RetencionSoportada>
        <Claves>
            <IDClave>
              <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
            </IDClave>
        </Claves>
      </DatosFactura>
      <TipoDesglose>
        <DesgloseTipoOperacion>
            <PrestacionServicios>
              <Sujeta>
                  <NoExenta>
                    <DetalleNoExenta>
                          <TipoNoExenta>S1</TipoNoExenta>
                          <DesgloseIVA>
                              <DetalleIVA>
                                <BaseImponible>1800.00</BaseImponible>
                                <TipoImpositivo>21.00</TipoImpositivo>
                                <CuotaImpuesto>378.00</CuotaImpuesto>
                                <TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
                                <CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
                                <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                              </DetalleIVA>
                          </DesgloseIVA>
                    </DetalleNoExenta>
                  </NoExenta>
              </Sujeta>
            </PrestacionServicios>
            <Entrega>
              <Sujeta>
                  <Exenta>
                    <DetalleExenta>
                        <CausaExencion>E1</CausaExencion>
                        <BaseImponible>180.00</BaseImponible>
                    </DetalleExenta>
                  </Exenta>
                  <NoExenta>
                    <DetalleNoExenta>
                          <TipoNoExenta>S1</TipoNoExenta>
                          <DesgloseIVA>
                              <DetalleIVA>
                                <BaseImponible>1508.30</BaseImponible>
                                <TipoImpositivo>21.00</TipoImpositivo>
                                <CuotaImpuesto>316.74</CuotaImpuesto>
                                <TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
                                <CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
                                <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                              </DetalleIVA>
                          </DesgloseIVA>
                    </DetalleNoExenta>
                  </NoExenta>
              </Sujeta>
              <NoSujeta>
                  <DetalleNoSujeta>
                    <Causa>OT</Causa>
                    <Importe>360.00</Importe>
                  </DetalleNoSujeta>
              </NoSujeta>
            </Entrega>
        </DesgloseTipoOperacion>
      </TipoDesglose>
  </Factura>
  <HuellaTBAI>
      <EncadenamientoFacturaAnterior>
        <SerieFacturaAnterior>2021-</SerieFacturaAnterior>
        <NumFacturaAnterior>0007</NumFacturaAnterior>
        <FechaExpedicionFacturaAnterior>13-03-2021</FechaExpedicionFacturaAnterior>
        <SignatureValueFirmaFacturaAnterior>asdf</SignatureValueFirmaFacturaAnterior>
      </EncadenamientoFacturaAnterior>
      <Software>
      </Software>
  </HuellaTBAI>
<ds:Signature xmlns:ds="h t t p://w w w . w3.org/2000/09/xmldsig#" Id="Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="h t t p://w w w . w3.org/TR/2001/REC-xml-c14n-20010315" /><ds:SignatureMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmldsig-more#rsa-sha256" /><ds:Reference Id="Reference-1fd8f7a2-64b2-4853-be4d-6d09a5f4acf8" URI=""><ds:Transforms><ds:Transform Algorithm="h t t p://w w w . w3.org/2000/09/xmldsig#enveloped-signature" /></ds:Transforms><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>o1QqNl5sJpAl65C/BqAYVhusYNSi6ohFRmcOlj/XvS0=</ds:DigestValue></ds:Reference><ds:Reference Id="ReferenceKeyInfo" URI="#KeyInfoId-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>9Ot9CoT4axGDWrd2B2KUoiGUM9dotSbXN7VTW1ZSEzg=</ds:DigestValue></ds:Reference><ds:Reference Type="h t t p://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>ou5WE9zmPnbJIGd/8a1PdT8yjojsvnRHQL5mU/CUB6Y=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id="SignatureValue-de680881-c7b4-47c6-aba5-6587d516d7f8">ndpqqvNMKU7TLGzTuFaA34shuQMMV6D8i18U21wxr4uPVCOh79W6ws9Uaf/9v2xLeAJG0Xuxb7Tun5akz6v+lw/JthiulnG23G8No7FARMBi3/JvqPfWQT/3dZs/858JQRg5qOBSxy1UiXHrgHk8mwzAw8PqvmJX+Ah9RsBM9nHmvDW/Ezj+D6SgTinwUbe5AgxZ2FCubMpEf4BA0oBmkNgno4Gu62huvYYcm/XTfzuBgJsPWmF8Y2AB3YlMEZBqdZT7uSJYFoYLbku26UV8WQU9eQbErxFPI+3eiqqq+g0cKlq0mYmeQms9NAjWjJyOEYAZy6noD1OxghMzhsmbWw==</ds:SignatureValue><ds:KeyInfo Id="KeyInfoId-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data><ds:KeyValue><ds:RSAKeyValue><ds:Modulus>qqnHp05M8zTtA1mOGyn52Zg2MxIdVoq0i+nq1UBsyD0YTbDvrFxorop1lVmwD9zFcU7g97YYHzUh6ZKzrDBxRR5DuEj7ZWxmM8zdrUE4qj4RPaEn56yBspcfsXAnAElWhi8ZO6upkdwezKplh0sIv9rC3yVEmenUA+t3vpjvUjuVI83M8E2OmlO9wspX7oAagyG86X79QLoUCiMNaklhtts/bAhjaUf1NjiByA1oVJ/h5vPXRmjzIMSYOG4Nqx6oDS4EDjzodr9qWWR/rO/y8pAANFvhPviGC30oLEDU9QeImrYt9hLRHiI3Z3f+k8bthyY/NHw97LARgkl46UkQOQ==</ds:Modulus><ds:Exponent>AQAB</ds:Exponent></ds:RSAKeyValue></ds:KeyValue></ds:KeyInfo><ds:Object Id="XadesObjectId-57c1a5af-ffe1-461d-88df-f9eff65f7ae3"><xades:QualifyingProperties xmlns:xades="h t t p://uri.etsi.org/01903/v1.3.2#" Id="QualifyingProperties-1175f181-69af-4b92-89cd-01f8370fc991" Target="#Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><xades:SignedProperties Id="SignedProperties-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><xades:SignedSignatureProperties><xades:SigningTime>2021-07-22T07:25:38+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>4BZFYhzQCbqva/Vw8wyM2GXhf8lML3xaiMioujojtqQ=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=AC FNMT Usuarios, OU=Ceres, O=FNMT-RCM, C=ES</ds:X509IssuerName><ds:X509SerialNumber>348708523848XXXXXXXXXXXX13XX4566539550</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier><xades:SignaturePolicyId><xades:SigPolicyId><xades:Identifier>h t t p://ticketbai.eus/politicafirma</xades:Identifier><xades:Description /></xades:SigPolicyId><xades:SigPolicyHash><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2000/09/xmldsig#sha1" /><ds:DigestValue>Ohixl6upD6av8N7pEvDABhEL6hM=</ds:DigestValue></xades:SigPolicyHash></xades:SignaturePolicyId></xades:SignaturePolicyIdentifier><xades:SignerRole><xades:ClaimedRoles><xades:ClaimedRole>emisor</xades:ClaimedRole><xades:ClaimedRole>sujeto</xades:ClaimedRole><xades:ClaimedRole>SERIALNUMBER</xades:ClaimedRole></xades:ClaimedRoles></xades:SignerRole></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#Reference-1fd8f7a2-64b2-4853-be4d-6d09a5f4acf8"><xades:MimeType>text/xml</xades:MimeType><xades:Encoding>UTF-8</xades:Encoding></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object></ds:Signature></T:TicketBai>

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542054)
qué certificado estás usando

Uso mi certificado personal, de la FNMT
Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542054)
el orden de los elementos en el XML es importante que sea acorde al XSD

Esto está revisado. Con la segunda opción me dió algunos errores de no concordancia con el XSD que corregí, así que aquí no creo que haya problema.
Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 542055)
El certificado debe ser válido (de producción por decirelo así), no valen certificados de prueba. ¿Qué tipo de certificado estás utilizando?

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542054)
que la petición de alta al servicio la estés realizando con el certificado también (además de firmar con él)

Creo que aquí está el problema (para el segúndo método). Para el envío no usaba el certificado del alta en el servicio ¡Gracias!
Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542054)
podrías probar en POSTMAN previamente o algo. Yo hice esto para ir descartando estos errores, te lo recomiendo.

No lo he usado nunca. Le echaré un vistazo. Gracias.
Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542054)
Por cierto, cómo estás firmando el XML? (Esto ya porque a mí me interesa ver otras opciones jeje)

Lo firmo con la librería FirmaXadesNet del Ayuntamiento de Cartagena (h t t p s://w w w . administracionelectronica.gob.es/ctt/firmaxadesnet). No hay documentación para ella pero en el código fuente (que también puedes descargar) tienes ejemplos de uso. Si quieres probarla (si no la usas ya) y no te aclaras, puedo poner el borrador que tengo para la firma; es más: lo pongo ya:
Código:

        public void FirmaDoc()
        {
            XadesService xadesService = new XadesService();
            SignatureParameters parametros = new SignatureParameters();
            parametros.SignaturePolicyInfo = new SignaturePolicyInfo();
            parametros.SignaturePolicyInfo.PolicyIdentifier = "h t t p://ticketbai.eus/politicafirma";
            parametros.SignaturePolicyInfo.PolicyHash = "Ohixl6upD6av8N7pEvDABhEL6hM=";
            parametros.SignaturePackaging = SignaturePackaging.ENVELOPED;
            parametros.DataFormat = new DataFormat();
            parametros.DataFormat.MimeType = "text/xml";
            parametros.SignerRole = new SignerRole();
            parametros.SignerRole.ClaimedRoles.Add("emisor");
            System.Security.Cryptography.X509Certificates.X509Certificate2 certificado;
            certificado = FirmaXadesNet.Utils.CertUtil.SelectCertificate();
            using (parametros.Signer = new Signer(certificado))
            {
                using (FileStream fs = new FileStream(_ficheroXml, FileMode.Open))
                {
                    SignatureDocument documentoFirma = xadesService.Sign(fs, parametros);
                    documentoFirma.Save(Path.Combine(Path.GetDirectoryName(_ficheroXml), Path.GetFileNameWithoutExtension(_ficheroXml) + ".XSIG"));
                    MessageBox.Show("Fichero guardado correctamente.");
                }
            }
        }

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 542055)
También puedes comprar tú mismo la estructura del que estás enviando con algunos de los ejemplos que hay en los mensajes del foro o los que te puedes descargar, a ver si te estás olvidando algún nodo (ya no sólo de los datos, sino de las firmas,...)

La verdad es que he mirado para ver si veía ejemplos (sobre todo de firmas) y no he visto nada más que algunas líneas sueltas... :-(
Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 542055)
También puedes escribirles un mail con el fichero que estás enviando y los errores que te dan; Para el primer caso te dirán qué te falta y para el segundo caso, te darán de alta el certificado (si es necesario) y lo asociarán a los datos que estás usando para el envío (NIF / RAZON SOCIAL).

Gracias Neftalí. Voy a hacerlo también para ver si resuelvo el primer caso. El segundo con tus aportaciones y las de b4aronDeLaBirr4 creo que está resuelto. He hecho una subida tras cambiar el certificado de firma y ahora el error da pie a entender que ¡sí ha funcionado!. Este es el resultado:
Código:

        <ResultadosValidacion>
            <Codigo>005</Codigo>
            <Descripcion>Error: Fichero de alta TicketBAI ya registrado en el sistema.</Descripcion>
            <Azalpena>Errorea: TicketBAI fitxategia sisteman erregistratuta dago jada.</Azalpena>
        </ResultadosValidacion>

Probaré con otro documento y os cuento.

b4aronDeLaBirr4 23-07-2021 11:41:16

Firma XML
 
Cita:

Empezado por unomasmas (Mensaje 542059)
Es un poco tocho :-(. Ahí va. He cambiado/quitado algún dato para "anonimizarlo" pero la estructura se mantiene
Código:

<?xml version="1.0" encoding="utf-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision">
  <Cabecera>
      <IDVersionTBAI>1.2</IDVersionTBAI>
  </Cabecera>
  <Sujetos>
      <Emisor>
        <NIF>xxxxxxxxx</NIF>
        <ApellidosNombreRazonSocial>Empresa para Desarrollo</ApellidosNombreRazonSocial>
      </Emisor>
      <Destinatarios>
        <IDDestinatario>
            <IDOtro>
              <CodigoPais>DE</CodigoPais>
              <IDType>03</IDType>
              <ID>U85XXXXX</ID>
            </IDOtro>
            <ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
            <CodigoPostal>28036</CodigoPostal>
            <Direccion>C/ Inexistente. Madrid. ESP</Direccion>
        </IDDestinatario>
      </Destinatarios>
      <VariosDestinatarios>N</VariosDestinatarios>
      <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
  </Sujetos>
  <Factura>
      <CabeceraFactura>
        <SerieFactura>2021-</SerieFactura>
        <NumFactura>0008</NumFactura>
        <FechaExpedicionFactura>27-05-2021</FechaExpedicionFactura>
        <HoraExpedicionFactura>00:00:00</HoraExpedicionFactura>
        <FacturaSimplificada>N</FacturaSimplificada>
        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
      </CabeceraFactura>
      <DatosFactura>
        <FechaOperacion>27-05-2021</FechaOperacion>
        <DescripcionFactura></DescripcionFactura>
        <DetallesFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Un servicio</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>2000.00000000</ImporteUnitario>
              <Descuento>0.00</Descuento>
              <ImporteTotal>2420.00</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 1</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>5.83710987</ImporteUnitario>
              <Descuento>1.17</Descuento>
              <ImporteTotal>5.65</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 2</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>2363.79000000</ImporteUnitario>
              <Descuento>756.41</Descuento>
              <ImporteTotal>1944.93</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 3 (Exento)</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>200.00000000</ImporteUnitario>
              <Descuento>0.00</Descuento>
              <ImporteTotal>200.00</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 4 (No sujeto)</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>400.00000000</ImporteUnitario>
              <Descuento>0.00</Descuento>
              <ImporteTotal>400.00</ImporteTotal>
            </IDDetalleFactura>
            <IDDetalleFactura>
              <DescripcionDetalle>Producto 5</DescripcionDetalle>
              <Cantidad>1.00</Cantidad>
              <ImporteUnitario>79.80172200</ImporteUnitario>
              <Descuento>15.96</Descuento>
              <ImporteTotal>77.25</ImporteTotal>
            </IDDetalleFactura>
        </DetallesFactura>
        <ImporteTotalFactura>4543.04</ImporteTotalFactura>
        <RetencionSoportada>0.00</RetencionSoportada>
        <Claves>
            <IDClave>
              <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
            </IDClave>
        </Claves>
      </DatosFactura>
      <TipoDesglose>
        <DesgloseTipoOperacion>
            <PrestacionServicios>
              <Sujeta>
                  <NoExenta>
                    <DetalleNoExenta>
                          <TipoNoExenta>S1</TipoNoExenta>
                          <DesgloseIVA>
                              <DetalleIVA>
                                <BaseImponible>1800.00</BaseImponible>
                                <TipoImpositivo>21.00</TipoImpositivo>
                                <CuotaImpuesto>378.00</CuotaImpuesto>
                                <TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
                                <CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
                                <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                              </DetalleIVA>
                          </DesgloseIVA>
                    </DetalleNoExenta>
                  </NoExenta>
              </Sujeta>
            </PrestacionServicios>
            <Entrega>
              <Sujeta>
                  <Exenta>
                    <DetalleExenta>
                        <CausaExencion>E1</CausaExencion>
                        <BaseImponible>180.00</BaseImponible>
                    </DetalleExenta>
                  </Exenta>
                  <NoExenta>
                    <DetalleNoExenta>
                          <TipoNoExenta>S1</TipoNoExenta>
                          <DesgloseIVA>
                              <DetalleIVA>
                                <BaseImponible>1508.30</BaseImponible>
                                <TipoImpositivo>21.00</TipoImpositivo>
                                <CuotaImpuesto>316.74</CuotaImpuesto>
                                <TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>
                                <CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>
                                <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                              </DetalleIVA>
                          </DesgloseIVA>
                    </DetalleNoExenta>
                  </NoExenta>
              </Sujeta>
              <NoSujeta>
                  <DetalleNoSujeta>
                    <Causa>OT</Causa>
                    <Importe>360.00</Importe>
                  </DetalleNoSujeta>
              </NoSujeta>
            </Entrega>
        </DesgloseTipoOperacion>
      </TipoDesglose>
  </Factura>
  <HuellaTBAI>
      <EncadenamientoFacturaAnterior>
        <SerieFacturaAnterior>2021-</SerieFacturaAnterior>
        <NumFacturaAnterior>0007</NumFacturaAnterior>
        <FechaExpedicionFacturaAnterior>13-03-2021</FechaExpedicionFacturaAnterior>
        <SignatureValueFirmaFacturaAnterior>asdf</SignatureValueFirmaFacturaAnterior>
      </EncadenamientoFacturaAnterior>
      <Software>
      </Software>
  </HuellaTBAI>
<ds:Signature xmlns:ds="h t t p://w w w . w3.org/2000/09/xmldsig#" Id="Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="h t t p://w w w . w3.org/TR/2001/REC-xml-c14n-20010315" /><ds:SignatureMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmldsig-more#rsa-sha256" /><ds:Reference Id="Reference-1fd8f7a2-64b2-4853-be4d-6d09a5f4acf8" URI=""><ds:Transforms><ds:Transform Algorithm="h t t p://w w w . w3.org/2000/09/xmldsig#enveloped-signature" /></ds:Transforms><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>o1QqNl5sJpAl65C/BqAYVhusYNSi6ohFRmcOlj/XvS0=</ds:DigestValue></ds:Reference><ds:Reference Id="ReferenceKeyInfo" URI="#KeyInfoId-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>9Ot9CoT4axGDWrd2B2KUoiGUM9dotSbXN7VTW1ZSEzg=</ds:DigestValue></ds:Reference><ds:Reference Type="h t t p://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>ou5WE9zmPnbJIGd/8a1PdT8yjojsvnRHQL5mU/CUB6Y=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue Id="SignatureValue-de680881-c7b4-47c6-aba5-6587d516d7f8">ndpqqvNMKU7TLGzTuFaA34shuQMMV6D8i18U21wxr4uPVCOh79W6ws9Uaf/9v2xLeAJG0Xuxb7Tun5akz6v+lw/JthiulnG23G8No7FARMBi3/JvqPfWQT/3dZs/858JQRg5qOBSxy1UiXHrgHk8mwzAw8PqvmJX+Ah9RsBM9nHmvDW/Ezj+D6SgTinwUbe5AgxZ2FCubMpEf4BA0oBmkNgno4Gu62huvYYcm/XTfzuBgJsPWmF8Y2AB3YlMEZBqdZT7uSJYFoYLbku26UV8WQU9eQbErxFPI+3eiqqq+g0cKlq0mYmeQms9NAjWjJyOEYAZy6noD1OxghMzhsmbWw==</ds:SignatureValue><ds:KeyInfo Id="KeyInfoId-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><ds:X509Data><ds:X509Certificate>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</ds:X509Certificate></ds:X509Data><ds:KeyValue><ds:RSAKeyValue><ds:Modulus>qqnHp05M8zTtA1mOGyn52Zg2MxIdVoq0i+nq1UBsyD0YTbDvrFxorop1lVmwD9zFcU7g97YYHzUh6ZKzrDBxRR5DuEj7ZWxmM8zdrUE4qj4RPaEn56yBspcfsXAnAElWhi8ZO6upkdwezKplh0sIv9rC3yVEmenUA+t3vpjvUjuVI83M8E2OmlO9wspX7oAagyG86X79QLoUCiMNaklhtts/bAhjaUf1NjiByA1oVJ/h5vPXRmjzIMSYOG4Nqx6oDS4EDjzodr9qWWR/rO/y8pAANFvhPviGC30oLEDU9QeImrYt9hLRHiI3Z3f+k8bthyY/NHw97LARgkl46UkQOQ==</ds:Modulus><ds:Exponent>AQAB</ds:Exponent></ds:RSAKeyValue></ds:KeyValue></ds:KeyInfo><ds:Object Id="XadesObjectId-57c1a5af-ffe1-461d-88df-f9eff65f7ae3"><xades:QualifyingProperties xmlns:xades="h t t p://uri.etsi.org/01903/v1.3.2#" Id="QualifyingProperties-1175f181-69af-4b92-89cd-01f8370fc991" Target="#Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><xades:SignedProperties Id="SignedProperties-Signature-de680881-c7b4-47c6-aba5-6587d516d7f8"><xades:SignedSignatureProperties><xades:SigningTime>2021-07-22T07:25:38+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>4BZFYhzQCbqva/Vw8wyM2GXhf8lML3xaiMioujojtqQ=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=AC FNMT Usuarios, OU=Ceres, O=FNMT-RCM, C=ES</ds:X509IssuerName><ds:X509SerialNumber>348708523848XXXXXXXXXXXX13XX4566539550</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate><xades:SignaturePolicyIdentifier><xades:SignaturePolicyId><xades:SigPolicyId><xades:Identifier>h t t p://ticketbai.eus/politicafirma</xades:Identifier><xades:Description /></xades:SigPolicyId><xades:SigPolicyHash><ds:DigestMethod Algorithm="h t t p://w w w . w3.org/2000/09/xmldsig#sha1" /><ds:DigestValue>Ohixl6upD6av8N7pEvDABhEL6hM=</ds:DigestValue></xades:SigPolicyHash></xades:SignaturePolicyId></xades:SignaturePolicyIdentifier><xades:SignerRole><xades:ClaimedRoles><xades:ClaimedRole>emisor</xades:ClaimedRole><xades:ClaimedRole>sujeto</xades:ClaimedRole><xades:ClaimedRole>SERIALNUMBER</xades:ClaimedRole></xades:ClaimedRoles></xades:SignerRole></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#Reference-1fd8f7a2-64b2-4853-be4d-6d09a5f4acf8"><xades:MimeType>text/xml</xades:MimeType><xades:Encoding>UTF-8</xades:Encoding></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:QualifyingProperties></ds:Object></ds:Signature></T:TicketBai>

Uso mi certificado personal, de la FNMT
Esto está revisado. Con la segunda opción me dió algunos errores de no concordancia con el XSD que corregí, así que aquí no creo que haya problema.
Creo que aquí está el problema (para el segúndo método). Para el envío no usaba el certificado del alta en el servicio ¡Gracias!
No lo he usado nunca. Le echaré un vistazo. Gracias.
Lo firmo con la librería FirmaXadesNet del Ayuntamiento de Cartagena (h t t p s://w w w . administracionelectronica.gob.es/ctt/firmaxadesnet). No hay documentación para ella pero en el código fuente (que también puedes descargar) tienes ejemplos de uso. Si quieres probarla (si no la usas ya) y no te aclaras, puedo poner el borrador que tengo para la firma; es más: lo pongo ya:
Código:

        public void FirmaDoc()
        {
            XadesService xadesService = new XadesService();
            SignatureParameters parametros = new SignatureParameters();
            parametros.SignaturePolicyInfo = new SignaturePolicyInfo();
            parametros.SignaturePolicyInfo.PolicyIdentifier = "h t t p://ticketbai.eus/politicafirma";
            parametros.SignaturePolicyInfo.PolicyHash = "Ohixl6upD6av8N7pEvDABhEL6hM=";
            parametros.SignaturePackaging = SignaturePackaging.ENVELOPED;
            parametros.DataFormat = new DataFormat();
            parametros.DataFormat.MimeType = "text/xml";
            parametros.SignerRole = new SignerRole();
            parametros.SignerRole.ClaimedRoles.Add("emisor");
            System.Security.Cryptography.X509Certificates.X509Certificate2 certificado;
            certificado = FirmaXadesNet.Utils.CertUtil.SelectCertificate();
            using (parametros.Signer = new Signer(certificado))
            {
                using (FileStream fs = new FileStream(_ficheroXml, FileMode.Open))
                {
                    SignatureDocument documentoFirma = xadesService.Sign(fs, parametros);
                    documentoFirma.Save(Path.Combine(Path.GetDirectoryName(_ficheroXml), Path.GetFileNameWithoutExtension(_ficheroXml) + ".XSIG"));
                    MessageBox.Show("Fichero guardado correctamente.");
                }
            }
        }

La verdad es que he mirado para ver si veía ejemplos (sobre todo de firmas) y no he visto nada más que algunas líneas sueltas... :-(
Gracias Neftalí. Voy a hacerlo también para ver si resuelvo el primer caso. El segundo con tus aportaciones y las de b4aronDeLaBirr4 creo que está resuelto. He hecho una subida tras cambiar el certificado de firma y ahora el error da pie a entender que ¡sí ha funcionado!. Este es el resultado:
Código:

        <ResultadosValidacion>
            <Codigo>005</Codigo>
            <Descripcion>Error: Fichero de alta TicketBAI ya registrado en el sistema.</Descripcion>
            <Azalpena>Errorea: TicketBAI fitxategia sisteman erregistratuta dago jada.</Azalpena>
        </ResultadosValidacion>

Probaré con otro documento y os cuento.

Gracias por la aportación, había probado con esta librería pero me generaba este error:

Código PHP:

Unable to cast object of type 'System.Security.Cryptography.RSACng' to type 'System.Security.Cryptography.RSACryptoServiceProvider'

Cómo cargas la librería? Por paquetes NuGet o cómo? Cualquier cosa que me puedas decir es de gran ayuda porque me gustaría hacer uso de esas librerías y no de Chilkat. Gracias!

unomasmas 23-07-2021 12:53:11

Cita:

Empezado por b4aronDeLaBirr4 (Mensaje 542060)
Gracias por la aportación, había probado con esta librería pero me generaba este error:

Código PHP:

Unable to cast object of type 'System.Security.Cryptography.RSACng' to type 'System.Security.Cryptography.RSACryptoServiceProvider'

Cómo cargas la librería? Por paquetes NuGet o cómo? Cualquier cosa que me puedas decir es de gran ayuda porque me gustaría hacer uso de esas librerías y no de Chilkat. Gracias!


No hice nada especial: Incluí la dll como referencia (directamente, sin NuGet) y también sus dependencias (BouncyCastle.Crypto y Microsoft.Xades) y simplemente con el método que pasé antes firma sin problemas. Es posible que tu librería no se corresponda con la versión .Net con la que apunta. Yo uso Net Framework 4.5 y la versión 2.1.0.0 de la librería.


Por lo demás, confirmo que con el cambio de certificado funcionó bien la subida. Sólo dió una advertencia pero la tienen documentada: "Factura recibida pero resultado indica: 010 posible error de encadenamiento. Si se trata de la primera factura enviada por un sistema de facturación, es normal recibir este mensaje. Si se produce este aviso solo en la primera factura, es correcto. Esa primera factura generará un aviso informativo relativo a posible encadenamiento incorrecto (esto es normal) y ya las facturas sucesivas ya no darán ningún aviso, al ir correctamente encadenadas. Si se produce en las facturas sucesivas, revisar que se encadena de acuerdo a las especificaciones"

b4aronDeLaBirr4 23-07-2021 13:14:18

Y ese dll me lo podrías pasar? o dejarme el enlace? Porque me imagino que te refieras a esta librería no?

Neftali [Germán.Estévez] 23-07-2021 13:24:14

Cita:

Empezado por unomasmas (Mensaje 542059)
Es un poco tocho :-(. Ahí va. He cambiado/quitado algún dato para "anonimizarlo" pero la estructura se mantiene


Así a primeras, echo en falta el bloque de <Software> que está vacío (tal vez porque lo has eliminado para que se vean los datos).
Cita:

<Software>
...
</Software>

jsanznub 23-07-2021 15:23:38

Cita:

Empezado por sEngine (Mensaje 542042)
No se como lo teneis puesto pero yo lo tengo asi al crear la firma y me funciona (uso el autofirma). Teneis puesto lo de format?

y segun google

XAdES-BES. Forma básica que simplemente cumple los requisitos legales de la Directiva para firma electrónica avanzada
XAdES-EPES. Es un XAdES-BES al que se le incorpora información sobre la política de firma, como pudiera ser aquella información sobre el certificado empleado y la CA que lo emitió.

Gracias por la respuesta sEngine, no me soluciono el problema directamente pero me ha ayudado a encontrarlo. Firme el documento con autofirma y puede comprobar que la única diferencia real con el fichero que firmaba yo estaba en un elemento del xml.

Yo tenía (edito los enlace para poder publicar):

<xades:QualifyingProperties xmlns:xades="uri.etsi.org/01903/v1.3.2/XAdES.xsd" xmlns:ds="w3.org/2000/09/xmldsig#" .....

y en el resultado de autofirma era:

<xades:QualifyingProperties xmlns:xades="uri.etsi.org/01903/v1.3.2#" xmlns:ds="w3.org/2000/09/xmldsig#".....

Esa definición diferente del namespace de xades estaba provocando que Bizkaia rechazará el fichero porque no consideraba que fuera una firma EPES sino BES :mad: . En fin, tema resuelto, espero que os pueda resultar útil a alguno y no perdáis tanto tiempo como yo.

unomasmas 24-07-2021 07:36:46

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 542064)
Así a primeras, echo en falta el bloque de <Software> que está vacío (tal vez porque lo has eliminado para que se vean los datos).

Sí, ahí van las etiquetas de código y nif... Lo eliminé para ocultar los datos... Gracias Neftali [Germán] . Me imagino que con lo tocho de mi respuesta (reconozco que con tanta cita se hace un poco difícil de seguir) no viste que tanto tú como b4aronDeLaBirr4 supisteis ponerme en la pista de la solución al problema: tanto la firma como la conexión parece que es necesario hacerla con el certificado con el que te das de alta en el servicio. A partir de ahí ya funcionó todo. Pude haberme ahorrado poner el fichero que intentaba enviar y también te hubiera ahorrado que perdieras el tiempo revisándolo pero lo hice más que nada para tener un ejemplo completo (bueno, sin las etiquetas de software, pero estas no debieran ser un problema para nadie por lo simples que son) y porque me lo habíais pedido... Te/os lo agradezco nuevamente

CMB 24-07-2021 19:39:31

Respecto al borrado y manipulación de ficheros TBAI
 
¿Alguien ha analizado los aspectos legales? He encontrado una situación que me parece bastante peligrosa, y está en la normativa de las 3 diputaciones. Ver por ejemplo apartado 3b del artículo 133 bis de la Norma Foral del Impuesto de Sociedades de Gipuzkoa, y especialmente el apartado c donde definen lo que ellos consideran que significa "intervenir" (el mismo texto o muy parecido está en el artículo análogo del IRPF, o en los de las demás diputaciones).
  • c)   Cuando el contribuyente haya desarrollado el software y a su vez haya cometido la infracción prevista en la letra b) del apartado 1 anterior, ésta se sancionará según lo dispuesto en la letra a) de este apartado.
    A los efectos de este apartado, se considerará que una persona o entidad ha intervenido en la destrucción, borrado o manipulación a que se refiere la letra b) del apartado 1 anterior, entre otros supuestos, cuando:
    • - Haya alterado el sistema informático o software, archivos o ficheros informáticos.
    • - Haya tenido o tenga, de alguna forma, el control sobre el sistema informático o software, archivos o ficheros informáticos.
    • - Disponga o ponga a disposición de otras personas o entidades, sistemas, medios o métodos para las citadas destrucción, borrado o manipulación.
    • - Haya dictado, facilitado o mostrado instrucciones para las citadas destrucción, borrado o manipulación.
    • - Realice una acción u omisión que, aunque por sí sola no tenga entidad suficiente para ser considerada destrucción, borrado o manipulación, se trate de una acción u omisión que forma parte de dicho proceso y que, unida a la actuación u omisión de otras personas o entidades, conlleva las citadas destrucción, borrado o manipulación.
Resulta que si...
  • El software es una aplicación que se ejecuta en el ordenador del usuario, y en consecuencia los datos están bajo el control del usuario final.
  • El usuario por su cuenta logra borrar o manipular los ficheros TBAI.
  • La administración considera que la entidad desarrolladora del software no ha hecho lo suficiente para impedírselo (omisión).
entonces se sancionará a la entidad desarrolladora con una multa de 40.000€.

A mi me parece que el redactor de esta ley no se da cuenta de como funciona un ordenador. Si el software está en un ordenador controlado por el usuario y los ficheros también, en última instancia es el usuario quien tiene el control de dichos ficheros. ¿Cómo vamos a impedirle que los modifique?

Naturalmente se podrían adoptar medidas para dificultarlo. Por ejemplo se podrían cifrar los ficheros, o firmar y verificarlos cada vez que abrimos el programa. ¿Pero son suficientes? Siempre se pueden hacer más cosas. Y un usuario con suficientes conocimientos y recursos puede saltárselas. La normativa no nos dice claramente qué medidas debemos adoptar, por lo que hagámos lo que hagámos estaremos en riesgo.

Por no hablar, naturalmente, de la posibilidad de que el usuario directamente desinstale el programa y borre todos los ficheros. ¿Como vamos a impedir esto?

Galaxian 26-07-2021 09:06:58

Cita:

Empezado por CMB (Mensaje 542075)
¿Alguien ha analizado los aspectos legales? He encontrado una situación que me parece bastante peligrosa, y está en la normativa de las 3 diputaciones. Ver por ejemplo apartado 3b del artículo 133 bis de la Norma Foral del Impuesto de Sociedades de Gipuzkoa, y especialmente el apartado c donde definen lo que ellos consideran que significa "intervenir" (el mismo texto o muy parecido está en el artículo análogo del IRPF, o en los de las demás diputaciones).
  • c)   Cuando el contribuyente haya desarrollado el software y a su vez haya cometido la infracción prevista en la letra b) del apartado 1 anterior, ésta se sancionará según lo dispuesto en la letra a) de este apartado.
    A los efectos de este apartado, se considerará que una persona o entidad ha intervenido en la destrucción, borrado o manipulación a que se refiere la letra b) del apartado 1 anterior, entre otros supuestos, cuando:
    • - Haya alterado el sistema informático o software, archivos o ficheros informáticos.
    • - Haya tenido o tenga, de alguna forma, el control sobre el sistema informático o software, archivos o ficheros informáticos.
    • - Disponga o ponga a disposición de otras personas o entidades, sistemas, medios o métodos para las citadas destrucción, borrado o manipulación.
    • - Haya dictado, facilitado o mostrado instrucciones para las citadas destrucción, borrado o manipulación.
    • - Realice una acción u omisión que, aunque por sí sola no tenga entidad suficiente para ser considerada destrucción, borrado o manipulación, se trate de una acción u omisión que forma parte de dicho proceso y que, unida a la actuación u omisión de otras personas o entidades, conlleva las citadas destrucción, borrado o manipulación.
Resulta que si...
  • El software es una aplicación que se ejecuta en el ordenador del usuario, y en consecuencia los datos están bajo el control del usuario final.
  • El usuario por su cuenta logra borrar o manipular los ficheros TBAI.
  • La administración considera que la entidad desarrolladora del software no ha hecho lo suficiente para impedírselo (omisión).
entonces se sancionará a la entidad desarrolladora con una multa de 40.000€.

A mi me parece que el redactor de esta ley no se da cuenta de como funciona un ordenador. Si el software está en un ordenador controlado por el usuario y los ficheros también, en última instancia es el usuario quien tiene el control de dichos ficheros. ¿Cómo vamos a impedirle que los modifique?

Naturalmente se podrían adoptar medidas para dificultarlo. Por ejemplo se podrían cifrar los ficheros, o firmar y verificarlos cada vez que abrimos el programa. ¿Pero son suficientes? Siempre se pueden hacer más cosas. Y un usuario con suficientes conocimientos y recursos puede saltárselas. La normativa no nos dice claramente qué medidas debemos adoptar, por lo que hagámos lo que hagámos estaremos en riesgo.

Por no hablar, naturalmente, de la posibilidad de que el usuario directamente desinstale el programa y borre todos los ficheros. ¿Como vamos a impedir esto?

Una normativa parecida rige desde hace años a nivel nacional. Aún así, hicimos una consulta sobre la posibilidad de cifrar los ficheros TBAI, pero nos dijeron que estos tienen que estar a la disposición de los inspectores que, eventualmente, necesitaran consultarlos.

De todos modos la cosa no es tan grave porque solo sancionarán a las empresas cuyos programas tengan herramientas específicas para alterar o borrar los datos. Es decir, que si aún lo hacéis, se acabó lo de permitir modificar o borrar facturas emitidas aunque los usuarios digan que "la tengo en la mano y aún no se la he dado al cliente". En esos casos rectificativa al canto, pues puede llegar a ser considerado falsedad en documento público... y a nosotros cómplices. Casi nada.

Sistel 26-07-2021 09:47:48

Hola,

Me ha llegado información sobre la II Feria TicketBAI organizada por la Cámara de Gipuzkoa.
Os anexo el documento PDF.

Saludos

Neftali [Germán.Estévez] 26-07-2021 11:47:24

^\||/^\||/^\||/^\||/

Gracias.
No se si la cosa está para muchas ferias hora...:o:o

e.jaume 27-07-2021 11:27:43

Presentación y duda con el Error 008
 
Buenas a tod@s,
Este foro me ha servido de gran ayuda para completar el desarrollo de envío de facturas a ticketBAI en Gipuzkoa, os agradezco a todos el esfuerzo y la dedicación, muchas gracias.
Me he animado a escribir porque tengo una duda relacionada con el envío de facturas. He llegado a este punto donde no se qué mas probar, y es que no consigo salir del bucle de este error:
"El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)"
La factura se envío en utf-8, he comprobado con el Tortoise y no se modifica durante el proceso de firma, la empresa no contiene caracteres raros...etc.
Programo en C# y utilizo la librería FirmaXadesNet45
La verdad que no se por dónde más tirar, cualquier ayuda os lo agradezco.


P.D: Perdón por la pregunta de la que ya se ha hablado mucho y también he leído todas las páginas del foro y he probado casi de todo XD

Sistel 27-07-2021 17:03:01

Cita:

Empezado por e.jaume (Mensaje 542102)
Buenas a tod@s,
Este foro me ha servido de gran ayuda para completar el desarrollo de envío de facturas a ticketBAI en Gipuzkoa, os agradezco a todos el esfuerzo y la dedicación, muchas gracias.
Me he animado a escribir porque tengo una duda relacionada con el envío de facturas. He llegado a este punto donde no se qué mas probar, y es que no consigo salir del bucle de este error:
"El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)"
La factura se envío en utf-8, he comprobado con el Tortoise y no se modifica durante el proceso de firma, la empresa no contiene caracteres raros...etc.
Programo en C# y utilizo la librería FirmaXadesNet45
La verdad que no se por dónde más tirar, cualquier ayuda os lo agradezco.


P.D: Perdón por la pregunta de la que ya se ha hablado mucho y también he leído todas las páginas del foro y he probado casi de todo XD

Hola e.jaume,

Si ya has probado todo lo que se ha comentado sobre ese error, y sigues igual, mi recomendación es que contactes con Hacienda Foral de Gipuzkoa ([email protected]).
En el título del email pones: “Pruebas TicketBAI en PRE: Nombre Empresa”
Y pones como categoría del tema: "Errores en envío de facturas"
Les envías los datos de lo que estás enviando y el error y ellos te dirán a qué puede ser debido.

Saludos

jaiser 27-07-2021 17:34:48

Cita:

Empezado por Sistel (Mensaje 541946)
Hola,

Acabo de recibir email de la Diputación Foral de Gipuzkoa.



Será el jueves 29 de julio de 13:00 h a 14:30 h

Saludos

Hola, como te puedes apuntar a la sesión informativa? hay algún enlace?, Me autocontesto ya he visto en la web que hay un correo para apuntarse.

Para participar, envíe un correo electrónico a [email protected] y escriba " Sesión informativa para desarrolladores " sobre el tema .

unomasmas 28-07-2021 06:49:18

Cita:

Empezado por JoseLeeTo (Mensaje 542058)
Buenas. Yo también estoy con C#, aunque no utilizo RestSharp, sino HttpClient. En el caso del problema 2, tiene pinta de que el nombre del emisor de la factura, no coincide con el del certificado, y así tiene que ser.
El certificado tiene que ser el del propio obligado tributario, que tiene que coincidir con el emisor de la factura.

Perdona JoseLeeTo, no vi tu respuesta hasta hoy. Es un poco lioso que en un único tema tengamos todas las conversaciones. Gracias por tu aporte; ya lo tengo comprobado y, efectivamente, ese era el problema. Con RestSharp no he podido solucionarlo pero funciona perfectamente con HttpClient así que...

Ahora estoy intendo la conexión con Bizkaia (https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena); por lo pronto no consigo ni conectar: "Anulada la solicitud: No se puede crear un canal seguro SSL/TLS."

unomasmas 28-07-2021 07:08:31

Cita:

Empezado por JoseLeeTo (Mensaje 542025)
Buenas!;

Desde la Subdirección General de Estrategia Tecnológica queremos invitarles a una sesión informativa dirigida a todas aquellas personas o entidades que estén desarrollando softwares garantes para cumplir con las nuevas obligaciones tributarias establecidas por las diputaciones forales.


Los temas que se tratarán en dicha sesión informativa son los siguientes:

1. Nuevo servicio Rest ZUZENDU para subsanar y modificar.
2. Listado de validaciones síncronas y asíncronas.
3. Claves del encadenamiento.
4. Recomendaciones para evitar errores y avisos.
5. Claves TicketBAI.
6. Certificados electrónicos.

Consideramos que los temas a tratar son de gran interés para el correcto desarrollo de sus respectivos softwares.


¿Alguien ha hecho o conoce algo al respecto?

Saludos y Gracias.


Que yo sepa, hasta ahora es tal y como dices: Sólo alta y anulación. Pero en esa reunión parece que se va abordar la posibilidad de modificaicón. ¿Tienes más info sobre la reunión? ¿Dónde es? ¿Algún enlace? Gracias.

aflores1 28-07-2021 07:17:19

Cita:

Empezado por unomasmas (Mensaje 542112)
Perdona JoseLeeTo, no vi tu respuesta hasta hoy. Es un poco lioso que en un único tema tengamos todas las conversaciones. Gracias por tu aporte; ya lo tengo comprobado y, efectivamente, ese era el problema. Con RestSharp no he podido solucionarlo pero funciona perfectamente con HttpClient así que...

Ahora estoy intendo la conexión con Bizkaia (h t t p s ://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena); por lo pronto no consigo ni conectar: "Anulada la solicitud: No se puede crear un canal seguro SSL/TLS."

Agrega esto en tu codigo:
Código Delphi [-]
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

unomasmas 28-07-2021 07:22:42

Cita:

Empezado por Eric Mtz (Mensaje 541928)
Veréis, el señor "rci" antes de irse de vacaciones me informó de que se pueden hacer consultas referentes a envíos específicos dentro del sistema, concretamente se deben de indicar los siguientes campos:
El caso es que rellené los datos y he recibido una respuesta tronchante:

Cita: En el entorno de pruebas del sistema de envíos masivos del LROE los datos del interesado y del presentador que se envían en las peticiones al servicio web deben existir en el sistema, ya que se validan. No se deben utilizar razones sociales o nombres y apellidos ficticios ya que se valida tanto el NIF como la razón social, para el caso de la persona jurídica y el nombre y apellidos para la persona física.

Pregunta estúpida, para que COÑO queremos un entorno de pruebas si únicamente aceptan datos reales!?!?!?!?!?!?, además, esto contrasta con Gipuzkoa donde debes de solicitar incluso una licencia ficticia que te lo facilitan ellos para el propio entorno de pruebas. Es como que uno te ayuda y el otro te da un bofetazo con la mano abierta y con los anillos puestos... Bueno pues eso, ahí queda documentado por si alguien pasa por algo parecido.!

Gracias por tu aporte. No sé si me está pasando algo pareceido: "Anulada la solicitud: No se puede crear un canal seguro SSL / TLS.". Según la respueseta que te han dado, necesariamente tienes que estar registrado en Bizcaia como contribuyente ¿no? ¿Lo entiendo mal?

Sistel 28-07-2021 08:53:35

Cita:

Empezado por unomasmas (Mensaje 542113)
Que yo sepa, hasta ahora es tal y como dices: Sólo alta y anulación. Pero en esa reunión parece que se va abordar la posibilidad de modificaicón. ¿Tienes más info sobre la reunión? ¿Dónde es? ¿Algún enlace? Gracias.

Hola unomasmas,

https://www.gipuzkoa.eus/es/web/ogas...formazio-saioa

Saludos

aflores1 28-07-2021 09:07:11

Alguno ha recibido información de la reunión, les mandé correo para participar y no tengo noticias

e.jaume 28-07-2021 09:42:26

Cita:

Empezado por Sistel (Mensaje 542104)
Hola e.jaume,

Si ya has probado todo lo que se ha comentado sobre ese error, y sigues igual, mi recomendación es que contactes con Hacienda Foral de Gipuzkoa ([email protected]).
En el título del email pones: “Pruebas TicketBAI en PRE: Nombre Empresa”
Y pones como categoría del tema: "Errores en envío de facturas"
Les envías los datos de lo que estás enviando y el error y ellos te dirán a qué puede ser debido.

Saludos

Gracias Sistel! Les envié varios correos el viernes, aún estoy esperando respuesta, supongo que tardarán en contestar debido a las vacaciones.
Como tampoco puedo compartir código por el foro, poco más puedo hacer. A ver si en la sesión informativa pueden aclarar ese punto. ¿Habéis encontrado algún ejemplo que sea bastante claro de cómo montar una firma XAdES Enveloped en C#?

un saludo!

e.jaume 28-07-2021 11:17:58

Cita:

Empezado por Sistel (Mensaje 542104)
Hola e.jaume,

Si ya has probado todo lo que se ha comentado sobre ese error, y sigues igual, mi recomendación es que contactes con Hacienda Foral de Gipuzkoa ([email protected]).
En el título del email pones: “Pruebas TicketBAI en PRE: Nombre Empresa”
Y pones como categoría del tema: "Errores en envío de facturas"
Les envías los datos de lo que estás enviando y el error y ellos te dirán a qué puede ser debido.

Saludos

Hola! al final sí que me han respondido hoy. Me han dicho que es por la codificación, en alguna parte se está realizando la modificación de los caracteres que tienen tilde.
El envío lo estoy realizando de esta forma pero no encuentro que se cambie la codificación...

Código:

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUri);

            byte[] bytes = Encoding.UTF8.GetBytes(comunicacionXml);

            request.ContentType = "application/xml;charset=utf-8";
            request.ContentLength = bytes.Length;
            request.Method = WebRequestMethods.Http.Post;
            request.ClientCertificates.Add(certs);

            Stream requestStream = null;

            try
            {               
                requestStream = request.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Flush();
            }
            finally
            {
                if (requestStream != null)
                {
                    requestStream.Close();
                }
            }

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

¿Se le ocurre alguien alguna idea por disparatada que sea?

Gracias!

adolphsys 28-07-2021 11:47:48

Cita:

Empezado por aflores1 (Mensaje 542117)
Alguno ha recibido información de la reunión, les mandé correo para participar y no tengo noticias

El miércoles, cuando recibí el correo, confirmé la asistencia pero por ahora tampoco he recibido confirmación.

jaiser 28-07-2021 12:06:42

Hola!

Tengo una duda sobre la anulación y su contabilización. Si se envia un ticket bai con una factura hay que enviar un ticket bai de anulación y no se puede reutilizar dicho número de factura. No se si está factura al estar anulada no hay que contabilizarla ni enviarla al SII? Habría huecos entonces en la númeración de las facturas en la contabilidad y en el sii. He llamado a guipuzkoa y me han dicho que NO se contabiliza NI se envia al sii, pero no se si realmente es asi, me entran dudas sobre los huecos. Lo más normal será hacer una rectificativa pero en algún caso habrá que preveer el poder anular.

jaiser 28-07-2021 12:07:22

Cita:

Empezado por adolphsys (Mensaje 542121)
El miércoles, cuando recibí el correo, confirmé la asistencia pero por ahora tampoco he recibido confirmación.

Hola, yo les envie ayer un email y tampoco me han contestado


La franja horaria es GMT +2. Ahora son las 13:25:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi