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)

carlosMorell 06-10-2021 18:18:04

Cita:

Empezado por iMia (Mensaje 543395)
Cuando se generan los xmls para enviar, los puedes guardar en la maquina que los ha generado o en otro sitio, siempre y cuando sean accesibles por inspección en caso de haberla. No se pueden eliminar, almenos el xml firmado (yo personalmente guardo el que no está firmado y el firmado, así puedo ver si se ha intentado manipular de forma externa. (que hay mucho cliente con un "sobrino" que está "todo el dia con el ordenador y sabe mucho y es muuu listo"...)

El tema de las facturas en papel.. eso como tu veas... lo ideal es guardar la factura en PDF y reimprimirla... no regenerarla, ya que pueden pasar mil cosas al vovlver a regenerar...

El tema certificados nu sé... yo firmo con autofirma..


Entonces se han de guardar los XML como tal. No vale almacenarlos en un campo Meme de una tabla? Toma ya...

Claro, el tema de las facturas, supongo que lo mejor es imprimirlas en pdf y guardarlo. Pero esta permitido tirar de la base de datos para reimprimirla, si queremos? para que no haya un exceso en el equipo?

Muchas gracias!

ermendalenda 06-10-2021 18:26:37

Cita:

Empezado por carlosMorell (Mensaje 543393)
Buenas tardes,

algunas dudas, que supongo ya habéis resuelto, pero no la encuentro. Cuando genero el XML para su envió, se supone que han de ser almacenados en el equipo desde el que se ha generado la factura., por si se hace una revisión. O una vez transmitidos se pueden eliminar del equipo? Han de ser almacenados como fichero, o podría guardarlos en una tabla de la BD y reimprimirlos.

Algo similar se me plantea con las facturas. Solo se pueden generar una vez, y se han de almacenar. Sin tirar de la factura en base de datos para volver a generarlos ? O lo único es que no se puede alterar la información de la factura el la BD , pero puedo tirar de esa información para volver a imprimirlo, tantas veces como sea necesario?

Veo que son tres certificados, pero es tres en uno, o he de usar los tres certificados independientemente para firmar el XML?

Muchas gracias de antemano
Carlos.

Hola Carlos el XML debe contener los datos, tanto de certificados, como de la factura necesarios antes de firmarlo.
El xml no está definido en que formato lo puedes guardar, pero si tienes que decirlo en el formulario de alta de software garanté, y por tanto yo considero que en caso de inspeccione inspector tenga la herramienta, claves, paths... necesarios para poder revisarlos o que alguien le pueda indicar donde están,. Por otro lado no he entendido lo de la factura, volver a generar... Si puedes detallar con algún ejemplo

carlosMorell 06-10-2021 18:34:03

Cita:

Empezado por ermendalenda (Mensaje 543399)
Hola Carlos el XML debe contener los datos, tanto de certificados, como de la factura necesarios antes de firmarlo.
El xml no está definido en que formato lo puedes guardar, pero si tienes que decirlo en el formulario de alta de software garanté, y por tanto yo considero que en caso de inspeccione inspector tenga la herramienta, claves, paths... necesarios para poder revisarlos o que alguien le pueda indicar donde están,. Por otro lado no he entendido lo de la factura, volver a generar... Si puedes detallar con algún ejemplo

Gracias por tu rápida respuesta.

La cuestión es que una vez que genero la factura, por un lado tengo los datos que maneja el programa en una tabla de la BD, y por otro lado el pdf con el código QR que genero en ese momento. Si necesito emitir una copia de esa factura ya emitida. Puedo darle a un botón en mi Sw para generar copia? y que usando los datos de la BD, vuelva arealizar el proceso, a traves del cual se genera el pdf y se incrusta el QR en el Pdf? O es necesario tener almacenado fisicamente ese pdf o una imagen y hacer una replica?
Muchas gracias!

ermendalenda 06-10-2021 18:54:28

Cita:

Empezado por carlosMorell (Mensaje 543400)
Gracias por tu rápida respuesta.

La cuestión es que una vez que genero la factura, por un lado tengo los datos que maneja el programa en una tabla de la BD, y por otro lado el pdf con el código QR que genero en ese momento. Si necesito emitir una copia de esa factura ya emitida. Puedo darle a un botón en mi Sw para generar copia? y que usando los datos de la BD, vuelva arealizar el proceso, a traves del cual se genera el pdf y se incrusta el QR en el Pdf? O es necesario tener almacenado fisicamente ese pdf o una imagen y hacer una replica?
Muchas gracias!

No tienes que almacenar el pdf, lo puedes hacer como quieras, teniendo en cuenta que si vuelves a sacar copia, ponga 'Copia' y se genere el QR e identificador exactamente igual, aunque hayan cambiado a posterior los datos del servicio del Qr el http...
Si guardas una copia del pdf asegúrate que la que vuelvas a reimprimir o reenviar le Insertes lo de Copia"

ermendalenda 06-10-2021 19:07:32

De todas formas yo hago más o menos como mía:
Guardo xml sin firmar y firmado y las Facturas. Todo esto lo guardo, además de en el equipo, en un servidor externo con un webservice al que solo se puede mandar una vez y no se puede machacar de nuevo el mismo xml con lo cual me aseguro antisobrinos :P.
Culquier situación que pase ya me he asegurado que el único que va a la cárcel soy yo, por que el fallo es mío, vaya tela.

espinete 06-10-2021 19:19:23

Cita:

Empezado por keys (Mensaje 543385)

En el_firmante.r_Nombre_firma tengo el número de serie del certificado.

Ya he visto que lo haces así para localizar el certificado correcto de entre todos los certificados disponibles, pero en mi caso hago la búsqueda de otra forma, así que este tampoco es el motivo.

Me he asegurado de que los datos del "firmante" estén correctos, comprobando que no haya ningún caracter de más al principio o al final, borrando incluso el principio y el final a mano y volviéndolo a escribir.

Esto es incorrecto:

SigPolicyHashAlgorithm=http://www.w3.org/2001/04/xmlenc#sha256

o al menos SecureBlackBox me da el error "Hash Algorithm not supported".
Tengo que usar SHA256

En la factura de ejemplo (firmada) que se incluye en los esquemas de Gipuzkoa, la cabecera del XML pone

xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd " (OJO, un espacio en blanco al final)

Sin embargo en los ejemplos que veo en el foro ponéis lo siguiente:

xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"

En cualquier caso, ninguna de las dos opciones parece ser la causa del error. Sigo recibiendo el error de siempre.

Estoy empezando a pensar que mis componentes de SecureBlackBox están mal. Me sigue mosqueando lo de que "falta un digest".

Voy a probar a firmarlo con AutoFirma a ver qué pasa, porque de verdad esto va a acabar conmigo hoy.

keys 06-10-2021 20:13:00

Cita:

Empezado por espinete (Mensaje 543390)
¿Pones eso porque hay que ponerlo, o por poner algo? Yo en mi caso pongo el nombre de la empresa "firmante".
Vamos, no creo que sea por esto.

El resto está igual, salvo detalles como estos:

El r_SigPolicyHash yo lo tenía en minúsculas, tu en mayúsculas.
firmante.r_ID ambos lo tenemos en blanco. O al menos en tu código no lo veo. No sé si realmente se utiliza.

En tu código, tienes esta línea 2 veces:

sbxXAdESSigner1.Config('SigPolicyHashAlgorithm=.........

Primero con el valor http://www.w3.org/2000/09/xmldsig#sha1 y más adelante SHA256.

He añadido estas dos líneas, que yo no usaba, tras generar la factura (antes de firmarla):

xmldocument1.Version := '1.0';
XMLDocument1.StandAlone := 'no';

Tras cambiar las cabeceras, vuelvo a guardar el archivo así:

FicheroCorregir.WriteBOM := false;
FicheroCorregir.SaveToFile('factura.xml', TEncoding.UTF8);

¿Es esto necesario? De todas formas, estoy modificando el original (sin firmar), así que no creo que esto influya.

Yo uso dos ficheros: sin firmar y firmado, que tampoco creo que influya.


En cualquier caso... ahora me muestra otro 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.

Resumiendo...
Si hago esto:

Código Delphi [-]
        XMLDocument1.XML.Text:=f.XML;
        xmldocument1.Active:=True;
        xmldocument1.Version := '1.0';
        XMLDocument1.Encoding:='UTF-8';
        XMLDocument1.StandAlone := 'no';

        if FileExists('factura.xml') then
           DeleteFile('factura.xml');

        xmldocument1.SaveToFile('factura.xml');

        FicheroCorregir := TStringList.Create;
        FicheroCorregir.LoadFromFile('factura.xml');
        FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '','');
        FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text,'', '');

        FicheroCorregir.WriteBOM := false;
        FicheroCorregir.SaveToFile('factura.xml', TEncoding.UTF8);

La factura (sin firmar) se guarda bien, con esta línea al principio...

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

...y supuestamente en UTF-8 SIN BOM, según veo en RJ TextEdit y Notepad++

Después, con tu código para la firma...

Código Delphi [-]
    firmante.r_Nombre_firma := empresa_cliente;
    firmante.r_ID := '';
    firmante.r_Metodo_Canonicalization := '';
    firmante.r_Hash_algorithm := 'SHA256';
    firmante.r_SigPolicyHashAlgorithm := 'SHA256';

    //Bizkaia
    if combobox1.ItemIndex=0 then
    begin
        firmante.r_SigPolicyID := 'https://www.batuz.eus/fitxategiak/batuz/ticketbai/sinadura_elektronikoaren_zehaztapenak_especificaciones_de_la_firma_electronica_v1_0.pdf';                                   //https://ticketbai.eus/politicafirma
        firmante.r_SigPolicyHash := '42ECE7F7CC773CC6D21F06D4CDA8F97F928EA621F4BBC6EF9B06DB6CD90EF44B';    //Quzn98x3PMbSHwbUzaj5f5KOpiH0u8bvmwbbbNkO9Es= convertido a HEX es 42ECE7F7CC773CC6D21F06D4CDA8F97F928EA621F4BBC6EF9B06DB6CD90EF44B
        firmante.r_SigPolicyURI := 'https://www.batuz.eus/fitxategiak/batuz/ticketbai/sinadura_elektronikoaren_zehaztapenak_especificaciones_de_la_firma_electronica_v1_0.pdf';
    end
    else
    //Gipuzkoa
    if combobox1.ItemIndex=1 then
    begin
        firmante.r_SigPolicyID := 'https://www.gipuzkoa.eus/ticketbai/sinadura';                            //https://www.gipuzkoa.eus/ticketbai/sinadura
        firmante.r_SigPolicyHash := 'E8DACA026EB4A3BBBAD85510C3365EC36E2B6B6BDEF4F4506300B6D4033A227D';     //6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0= convertido a HEX es e8daca026eb4a3bbbad85510c3365ec36e2b6b6bdef4f4506300b6d4033a227d
        firmante.r_SigPolicyURI := 'https://www.gipuzkoa.eus/ticketbai/sinadura';
    end
    else
    //Araba
    if combobox1.ItemIndex=2 then
    begin
        firmante.r_SigPolicyID := 'https://ticketbai.araba.eus/tbai/sinadura/';                            //https://www.gipuzkoa.eus/ticketbai/sinadura
        firmante.r_SigPolicyHash := '88E82F917EFFC8720345188FCBF2D84345149FB415F3FD750F50456ECF3232E4';     //6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0= convertido a HEX es e8daca026eb4a3bbbad85510c3365ec36e2b6b6bdef4f4506300b6d4033a227d
        firmante.r_SigPolicyURI := 'https://ticketbai.araba.eus/tbai/sinadura/';
    end;

    //Método 2
    p_firmar_xml('factura.xml',firmante,true);


...y sin hacer nada más después, el fichero resultante ahora tiene BOM (según Notepad++ y RJ TextEdit) y esto en la primera línea:

<?xml version="1.0" encoding="utf-8" standalone="no"?> (con utf-8 ahora en minúsculas)

¿Conclusión? Suicidio

¿Puedes poner el fichero xml, justo antes de firmar y el fichero xml justo despues de firmar? te los reviso por si veo algo raro.

ermendalenda 06-10-2021 20:13:04

buena opción para despejar dudas lo de la autofirma.
Cosa más extraña

espinete 06-10-2021 20:37:01

Con AutoFirma consigo firmar el archivo, siguiendo los pasos que hay unos posts más atrás.

Con AutoFirma, el archivo firmado resultante ya está en UTF-8 SIN BOM sin tener que hacerle nada. AL parecer respeta la codificación original.
Además, según http://tools.chilkat.io/xmlDsigVerify.cshtml, esta vez obtengo 3 Digest válidos en el archivo firmado, no 2 como ocurría con SecureBlackBox.

No obstante, obtengo el mismo error al hacer el envío, por lo que creo que el problema no está en la firma.

Así que, o bien el proceso de envío hace algo raro al archivo, o yo ya no sé donde más mirar.

¿Hay alguna forma de saber si el envío (con NetHTTPClient1) está tocando algo en el archivo? ¿Hay alguna forma de saber realmente lo que está pasando?

Y yo que pensaba que la firma y envío de Bizkaia era problemático... No puede ser que lleve días con esto, y algo me dice que cuando descubra la causa del problema voy a salir de la oficina directo al bar.

El envío lo hago así:

RequestBody := TFileStream.Create('firmado.xml', fmOpenRead);

NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml';
NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);

Lo único que se me ocurre es que, como pasa con los Streams cuando se cargan, haya que hacer algún Position := 0 antes de enviarlo, pero eso no explica que "el archivo se ha modificado...", sino que daría otro error, digo yo, vamos.

Os pongo el archivo sin firmar y el firmado, obviando la info. sensible:

Factura SIN FIRMAR:

Código:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<T:TicketBai
        xmlns:T="urn:ticketbai:emision"
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">
        <Cabecera>
                <IDVersionTBAI>1.2</IDVersionTBAI>
        </Cabecera>
        <Sujetos>
                <Emisor>
                        <NIF>1111111H</NIF>
                        <ApellidosNombreRazonSocial>Empresa Emisora</ApellidosNombreRazonSocial>
                </Emisor>
                <Destinatarios>
                        <IDDestinatario>
                                <NIF>00000000A</NIF>
                                <ApellidosNombreRazonSocial>CLIENTE DE PRUEBAS</ApellidosNombreRazonSocial>
                                <CodigoPostal>28080</CodigoPostal>
                                <Direccion>Calle Madrid</Direccion>
                        </IDDestinatario>
                </Destinatarios>
                <VariosDestinatarios>N</VariosDestinatarios>
                <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
        </Sujetos>
        <Factura>
                <CabeceraFactura>
                        <NumFactura>158</NumFactura>
                        <FechaExpedicionFactura>04-10-2021</FechaExpedicionFactura>
                        <HoraExpedicionFactura>10:38:20</HoraExpedicionFactura>
                        <FacturaSimplificada>N</FacturaSimplificada>
                        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
                </CabeceraFactura>
                <DatosFactura>
                        <FechaOperacion>04-10-2021</FechaOperacion>
                        <DescripcionFactura>Factura 158</DescripcionFactura>
                        <DetallesFactura>
                                <IDDetalleFactura>
                                        <DescripcionDetalle>Linea 1</DescripcionDetalle>
                                        <Cantidad>1</Cantidad>
                                        <ImporteUnitario>100</ImporteUnitario>
                                        <Descuento>0</Descuento>
                                        <ImporteTotal>121</ImporteTotal>
                                </IDDetalleFactura>
                        </DetallesFactura>
                        <ImporteTotalFactura>150</ImporteTotalFactura>
                        <RetencionSoportada>0</RetencionSoportada>
                        <Claves>
                                <IDClave>
                                        <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                                </IDClave>
                        </Claves>
                </DatosFactura>
                <TipoDesglose>
                        <DesgloseFactura>
                                <Sujeta>
                                        <NoExenta>
                                                <DetalleNoExenta>
                                                        <TipoNoExenta>S1</TipoNoExenta>
                                                        <DesgloseIVA>
                                                                <DetalleIVA>
                                                                        <BaseImponible>50.00</BaseImponible>
                                                                        <TipoImpositivo>0</TipoImpositivo>
                                                                        <CuotaImpuesto>0.00</CuotaImpuesto>
                                                                        <TipoRecargoEquivalencia>0</TipoRecargoEquivalencia>
                                                                        <CuotaRecargoEquivalencia>0</CuotaRecargoEquivalencia>
                                                                        <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                                                </DetalleIVA>
                                                        </DesgloseIVA>
                                                </DetalleNoExenta>
                                        </NoExenta>
                                </Sujeta>
                        </DesgloseFactura>
                </TipoDesglose>
        </Factura>
        <HuellaTBAI>
                <EncadenamientoFacturaAnterior>
                        <SerieFacturaAnterior></SerieFacturaAnterior>
                        <NumFacturaAnterior>157</NumFacturaAnterior>
                        <FechaExpedicionFacturaAnterior>04-10-2021</FechaExpedicionFacturaAnterior>
                        <SignatureValueFirmaFacturaAnterior>Rp9ubVl90QiCXICZOZ8l9OYAEm6Zy2T3hf2aE7+a0hHKf/6i8jADAr0vO9TyEdnVaI603OXYsHRYPhTEbLOL4jiERUon8G2pF/Fr</SignatureValueFirmaFacturaAnterior>
                </EncadenamientoFacturaAnterior>
                <Software>
                        <LicenciaTBAI>TBAIGIPREXXXXXXXXXXX</LicenciaTBAI>
                        <EntidadDesarrolladora>
                                <NIF>11111111H</NIF>
                        </EntidadDesarrolladora>
                        <Nombre>Nombre Empresa Desarrolladora</Nombre>
                        <Version>15.5</Version>
                </Software>
                <NumSerieDispositivo>NSERIEPC</NumSerieDispositivo>
        </HuellaTBAI>
</T:TicketBai>

Archivo FIRMADO:

Código:

<?xml version="1.0" standalone="no"?>
<T:TicketBai
        xmlns:T="urn:ticketbai:emision"
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">
        <Cabecera>
                <IDVersionTBAI>1.2</IDVersionTBAI>
        </Cabecera>
        <Sujetos>
                <Emisor>
                        <NIF>11111111H</NIF>
                        <ApellidosNombreRazonSocial>Empresa Emisora</ApellidosNombreRazonSocial>
                </Emisor>
                <Destinatarios>
                        <IDDestinatario>
                                <NIF>00000000A</NIF>
                                <ApellidosNombreRazonSocial>CLIENTE DE PRUEBAS</ApellidosNombreRazonSocial>
                                <CodigoPostal>28080</CodigoPostal>
                                <Direccion>Calle Madrid</Direccion>
                        </IDDestinatario>
                </Destinatarios>
                <VariosDestinatarios>N</VariosDestinatarios>
                <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
        </Sujetos>
        <Factura>
                <CabeceraFactura>
                        <NumFactura>127</NumFactura>
                        <FechaExpedicionFactura>02-01-2021</FechaExpedicionFactura>
                        <HoraExpedicionFactura>09:52:59</HoraExpedicionFactura>
                        <FacturaSimplificada>N</FacturaSimplificada>
                        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
                </CabeceraFactura>
                <DatosFactura>
                        <FechaOperacion>02-01-2021</FechaOperacion>
                        <DescripcionFactura>Factura 127</DescripcionFactura>
                        <DetallesFactura>
                                <IDDetalleFactura>
                                        <DescripcionDetalle>Linea 1</DescripcionDetalle>
                                        <Cantidad>1</Cantidad>
                                        <ImporteUnitario>100</ImporteUnitario>
                                        <Descuento>0</Descuento>
                                        <ImporteTotal>121</ImporteTotal>
                                </IDDetalleFactura>
                        </DetallesFactura>
                        <ImporteTotalFactura>283</ImporteTotalFactura>
                        <RetencionSoportada>0</RetencionSoportada>
                        <Claves>
                                <IDClave>
                                        <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                                </IDClave>
                        </Claves>
                </DatosFactura>
                <TipoDesglose>
                        <DesgloseFactura>
                                <Sujeta>
                                        <NoExenta>
                                                <DetalleNoExenta>
                                                        <TipoNoExenta>S1</TipoNoExenta>
                                                </DetalleNoExenta>
                                        </NoExenta>
                                </Sujeta>
                        </DesgloseFactura>
                </TipoDesglose>
        </Factura>
        <HuellaTBAI>
                <Software>
                        <LicenciaTBAI>TBAIGIPREXXXXXXXXXXX</LicenciaTBAI>
                        <EntidadDesarrolladora>
                                <NIF>11111111H</NIF>
                        </EntidadDesarrolladora>
                        <Nombre>Nombre Empresa Desarrolladora</Nombre>
                        <Version>15.5</Version>
                </Software>
                <NumSerieDispositivo>NSERIEPC</NumSerieDispositivo>
        </HuellaTBAI>
        <ds:Signature
                xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-273182162">
                <ds:SignedInfo>
                        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
                        <ds:Reference URI="">
                                <ds:Transforms>
                                        <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                                </ds:Transforms>
                                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                <ds:DigestValue>8rAQe4EJbS2Hbck2KibE6/DSQfnnUeUSV4wGd6ctHGo=</ds:DigestValue>
                        </ds:Reference>
                        <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-353751308">
                                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                <ds:DigestValue>y8Pk+uqYxel3FZNOZ3aAwWhc6v00vG0XLmOuzHYRh/w=</ds:DigestValue>
                        </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>VH0FvdPyHojub+GWvvUVrbs3jdgblZ/TcAzLhEw/nDTBK2mKyTzE7uEi6SPECk1DfhniUwWU66D8jVN59Pis3RyKN+3K6hEOPWU3amtETAu8jKYU13MMulJ6UMHL0ovSLS4ccGUdjmw6C2F7FgtCZqSlvUvhSOcH5BCFqzBzZ6b1LCoTPWCSnZ7pRQDcBOYc44zzmrfb4Wc3IjsC3EFNWydLUFcRJ7jCPVWG8+2r2vebg+EDZ7T+F1sK3+ti+mD65LxijQ==</ds:SignatureValue>
                <ds:KeyInfo>
                        <ds:KeyValue>
                                <ds:RSAKeyValue>
                                        <ds:Modulus>tk8wSaUTZz4q2pMW2dUJw42pq88hSzyBpdl9/F5topSDokrMrOkMx9de3nUAuyPt+KACXINBtZyDleqqgrcpo6kup+CAZQ576InVwDORZ5SXlYjVo7HpC3wX9puZmN9NaTfpX62Ie2gsie01zZaACL6n5q4k8cIpfwAh8XBPAmp/EsKLzZ+aPBbpBZ4ORolgkb/0e20wzO3qqiXXGb/ACLBcrKlyBCQbfbD0eONZc1xQSBw5RNioKlELJ8M+H1OzISJKunFqU2AE3vnXfRPfCEPLoSYhOEqJ/WU0DiQ==</ds:Modulus>
                                        <ds:Exponent>AQAB</ds:Exponent>
                                </ds:RSAKeyValue>
                        </ds:KeyValue>
                        <ds:X509Data>
                                <ds:X509IssuerSerial>
                                        <ds:X509IssuerName>CN=AC Representación, OU=CERES, O=FNMT-RCM, C=ES</ds:X509IssuerName>
                                        <ds:X509SerialNumber>109179261942007942106360154753800986544</ds:X509SerialNumber>
                                </ds:X509IssuerSerial>
                                <ds:X509SubjectName>#0C505265673A3338303133202F486F6A613A54462D3631383239202F546F6D6F3A33353934202F466F6C696F3A313639202F46656368613A31332F31312F32303138202F496E73637269706369C3B36E3A31</ds:X509SubjectName>
                                <ds:X509Certificate>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</ds:X509Certificate>
                        </ds:X509Data>
                </ds:KeyInfo>
                <ds:Object>
                        <xades:QualifyingProperties
                                xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#Signature-273182162">
                                <xades:SignedProperties Id="SignedProperties-353751308">
                                        <xades:SignedSignatureProperties>
                                                <xades:SigningTime>2021-10-06T18:27:18.930Z</xades:SigningTime>
                                                <xades:SigningCertificate>
                                                        <xades:Cert>
                                                                <xades:CertDigest>
                                                                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                                                        <ds:DigestValue>MLXj91aK6rK8d6lHMBs68CzzIhbGho9YNmPD0QpV4B4=</ds:DigestValue>
                                                                </xades:CertDigest>
                                                                <xades:IssuerSerial>
                                                                        <ds:X509IssuerName>CN=AC Representación, OU=CERES, O=FNMT-RCM, C=ES</ds:X509IssuerName>
                                                                        <ds:X509SerialNumber>109179261942007942106360154753800986544</ds:X509SerialNumber>
                                                                </xades:IssuerSerial>
                                                        </xades:Cert>
                                                </xades:SigningCertificate>
                                                <xades:SignaturePolicyIdentifier>
                                                        <xades:SignaturePolicyId>
                                                                <xades:SigPolicyId>
                                                                        <xades:Identifier>https://www.gipuzkoa.eus/ticketbai/sinadura</xades:Identifier>
                                                                </xades:SigPolicyId>
                                                                <xades:SigPolicyHash>
                                                                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                                                        <ds:DigestValue>6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=</ds:DigestValue>
                                                                </xades:SigPolicyHash>
                                                                <xades:SigPolicyQualifiers>
                                                                        <xades:SigPolicyQualifier>
                                                                                <xades:SPURI>https://www.gipuzkoa.eus/ticketbai/sinadura</xades:SPURI>
                                                                        </xades:SigPolicyQualifier>
                                                                </xades:SigPolicyQualifiers>
                                                        </xades:SignaturePolicyId>
                                                </xades:SignaturePolicyIdentifier>
                                        </xades:SignedSignatureProperties>
                                </xades:SignedProperties>
                        </xades:QualifyingProperties>
                </ds:Object>
        </ds:Signature>
</T:TicketBai>

En el firmado he borrado algunos trozos de datos pero respetando todos los apartados, obviamente.

Espero de verdad que sirva de algo

ermendalenda 06-10-2021 22:14:37

Cita:

Empezado por espinete (Mensaje 543408)
Con AutoFirma consigo firmar el archivo, siguiendo los pasos que hay unos posts más atrás.

Con AutoFirma, el archivo firmado resultante ya está en UTF-8 SIN BOM sin tener que hacerle nada. AL parecer respeta la codificación original.
......
Espero de verdad que sirva de algo



Veo difeerencias en el archivo sin firmar y en el firmado, no puedes poner el mismo?:

Sin firmar:
<ImporteTotalFactura>150</ImporteTotalFactura>

Firmado:
<ImporteTotalFactura>283</ImporteTotalFactura>


En el firmado desaparece el desglose de iva y los calculos mal hechos...



prueba a poner datos lógicos en el archivo sin firmar, firma con el autofirma
y cambia esto:
Código PHP:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<T:TicketBai
    xmlns:T="urn:ticketbai:emision"
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

por esto
Código PHP:

<?xml version="1.0" encoding="UTF-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">


Arregla:
Código PHP:

    <ImporteTotalFactura>121.00</ImporteTotalFactura>
    
//QUITAR--->//<RetencionSoportada>0</RetencionSoportada>
            
<Claves>
                <
IDClave>
                    <
ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                </
IDClave>
            </
Claves>
</
DatosFactura>
<
TipoDesglose>
    <
DesgloseFactura>
        <
Sujeta>
            <
NoExenta>
                <
DetalleNoExenta>
                    <
TipoNoExenta>S1</TipoNoExenta>
                    <
DesgloseIVA>
                        <
DetalleIVA>
                            <
BaseImponible>100.00</BaseImponible>
                            <
TipoImpositivo>21.00</TipoImpositivo>
                            <
CuotaImpuesto>21.00</CuotaImpuesto>
                        </
DetalleIVA>
                    </
DesgloseIVA>
                </
DetalleNoExenta>
            </
NoExenta>
        </
Sujeta>
    </
DesgloseFactura>
</
TipoDesglose

Y si puedes, vuelve a poner el archivo sin firmar y el firmado con autofirma

iMia 07-10-2021 08:25:42

Cita:

Empezado por espinete (Mensaje 543408)
Con AutoFirma consigo firmar el archivo, siguiendo los pasos que hay unos posts más atrás.

Con AutoFirma, el archivo firmado resultante ya está en UTF-8 SIN BOM sin tener que hacerle nada. AL parecer respeta la codificación original.
Además, según http://tools.chilkat.io/xmlDsigVerify.cshtml, esta vez obtengo 3 Digest válidos en el archivo firmado, no 2 como ocurría con SecureBlackBox.

No obstante, obtengo el mismo error al hacer el envío, por lo que creo que el problema no está en la firma.

Así que, o bien el proceso de envío hace algo raro al archivo, o yo ya no sé donde más mirar.

¿Hay alguna forma de saber si el envío (con NetHTTPClient1) está tocando algo en el archivo? ¿Hay alguna forma de saber realmente lo que está pasando?

Y yo que pensaba que la firma y envío de Bizkaia era problemático... No puede ser que lleve días con esto, y algo me dice que cuando descubra la causa del problema voy a salir de la oficina directo al bar.

El envío lo hago así:

RequestBody := TFileStream.Create('firmado.xml', fmOpenRead);

NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/xml';
NetHTTPClient1.CustomHeaders['Charset'] := 'UTF-8';

AResponse := NetHTTPClient1.Post('https://tbai-prep.egoitza.gipuzkoa.eus/WAS/HACI/HTBRecepcionFacturasWEB/rest/recepcionFacturas/alta',RequestBody);

Lo único que se me ocurre es que, como pasa con los Streams cuando se cargan, haya que hacer algún Position := 0 (yo creo que tambien es eso...) antes de enviarlo, pero eso no explica que "el archivo se ha modificado...", sino que daría otro error, digo yo, vamos.

....

Espero de verdad que sirva de algo

Yo con el NetHTTClient, no conseguí enviar bien los archivos...

Lo hago con TIdHTTP y TIdSSLIOHandlerSocketOpenSSL pongo el ejemplo por lo que has comentado del Position := 0... pero está en paginas atrás... mira el índice que te indica donde está ese código completo...

Código Delphi [-]

        RequestBody := TFileStream.Create(strArxiuFirmat, fmOpenRead);
        IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(mainForm);
        idhttp := TIdhttp.Create();
        try
          RequestBody.Position := 0;     // <---- Esto es lo que comentas
          IdSSLIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_1];
          if (tblTBAI_Adm.FieldByName('TBAI_Admin_ID').AsInteger = TBAI_ADMIN_GIPUZKOA) then
            IdSSLIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
          IdSSLIOHandler.SSLOptions.CertFile := tbl1.FieldByName('RUTA_CERTIFICADO').AsString.Trim();
          IdSSLIOHandler.SSLOptions.KeyFile := tbl1.FieldByName('RUTA_CERTIFICADO').AsString.Trim();
          IdSSLIOHandler.OnGetPassword := mainForm.IdSSLIOHandlerGetPassword;  // Funcion que pone el pass del certificdo... 
          idhttp.IOHandler:= IdSSLIOHandler;
          idhttp.Request.ContentType := 'application/xml; charset=utf-8';
          try
            strResponse := idHttp.Post(tblTBAI_Adm.FieldByName('URL_Envio_TBAI_Alta').AsString.Trim, RequestBody);

            Etc...

Neftali [Germán.Estévez] 07-10-2021 08:40:43

Cita:

Empezado por tejano (Mensaje 543394)
Estoy intentado enviar/consultar datos con la Hacienda de Vizcaya y me da el mensaje de Error técnico (Servicio no disponible actualmente), os ha pasado a alguno más?

Lo estoy haciendo a través del nuevo link de la DBF

https://sarrerak.bizkaia.eus/N3B4000M/aurkezpena
https://sarrerak.bizkaia.eus/N3B4001M/kontsulta


Están desactivdos hasta mediados de Octubre.

keys 07-10-2021 08:44:58

Los datos de la cabecera parece que estan mal.

Como ha dicho el compañero pon antes de firmar.

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd ">

Si te sigue fallando pon los dos ficheros otra vez. Pero si puede ser que sean los mismos. :rolleyes:

Yo estoy enviando con TNetHTTPClient sin problemas.

keys 07-10-2021 08:55:43

Hola a todos.

Que sepais que Gipuzkoa esta empezando a aplicar las validaciones que tienen puestas en su página web. En el envío no da ningún error/aviso, pero cuando entran los clientes en la web de hacienda para comprobar que han enviado les aparecen los avisos y los errores.

Por ejemplo si pones
Código PHP:

-<DetalleIVA>

<
BaseImponible>837.50</BaseImponible>

<
TipoImpositivo>21.00</TipoImpositivo>

<
CuotaImpuesto>175.88</CuotaImpuesto>

<
TipoRecargoEquivalencia>0.00</TipoRecargoEquivalencia>

<
CuotaRecargoEquivalencia>0.00</CuotaRecargoEquivalencia>

<
OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>

</
DetalleIVA

Es decir poner el tipo de recargo a cero y la cuota de recargo a cero, por que no tiene les sale el siguiente aviso.

Cita:

1177 – Valor del campo TipoRecargoEquivalencia no incluido en la lista de valores admitidos
1323 – Si TipoImpositivo es 21% sólo se admitirán recargos del 5’20 ó 1’75%
Por lo tanto ahora quieren que solo se rellene si tiene algun valor. Esto no lo podemos comprobar en el entorno de pruebas, solo pasa en real.

espinete 07-10-2021 09:59:26

Joder, he copiado/pegado mal. Me cago en todo.

Tenía tantos archivos abiertos y tantas pruebas que me habré equivocado al copiar/pegar, lo siento.

Vuelvo a poner los dos archivos, esta vez correctos, pero antes revisaré las cabeceras, etc.

espinete 07-10-2021 10:20:23

Cita:

Empezado por keys (Mensaje 543413)
Los datos de la cabecera parece que estan mal.

Como ha dicho el compañero pon antes de firmar.

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd ">

Si te sigue fallando pon los dos ficheros otra vez. Pero si puede ser que sean los mismos. :rolleyes:

Yo estoy enviando con TNetHTTPClient sin problemas.

El problema es que uno me dice que ponga esto...

<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd ">

...y otro esto...

<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

Lo que es verdad es que en mis cabeceras faltaba este:

xmlns:ds="http://www.w3.org/2000/09/xmldsig#"

He vuelto a generar los dos archivos, esta vez el mismo :o

SIN FIRMAR:

Código:

<?xml version="1.0" encoding="UTF-8"?>
<T:TicketBai
        xmlns:T="urn:ticketbai:emision"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd "
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <Cabecera>
                <IDVersionTBAI>1.2</IDVersionTBAI>
        </Cabecera>
        <Sujetos>
                <Emisor>
                        <NIF>11111111</NIF>
                        <ApellidosNombreRazonSocial>NOMBRE</ApellidosNombreRazonSocial>
                </Emisor>
                <Destinatarios>
                        <IDDestinatario>
                                <NIF>22222222</NIF>
                                <ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
                                <CodigoPostal>33333</CodigoPostal>
                                <Direccion>Calle Madrid 18</Direccion>
                        </IDDestinatario>
                </Destinatarios>
                <VariosDestinatarios>N</VariosDestinatarios>
                <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
        </Sujetos>
        <Factura>
                <CabeceraFactura>
                        <NumFactura>175</NumFactura>
                        <FechaExpedicionFactura>04-10-2021</FechaExpedicionFactura>
                        <HoraExpedicionFactura>13:23:31</HoraExpedicionFactura>
                        <FacturaSimplificada>N</FacturaSimplificada>
                        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
                </CabeceraFactura>
                <DatosFactura>
                        <FechaOperacion>04-10-2021</FechaOperacion>
                        <DescripcionFactura>Factura 175</DescripcionFactura>
                        <DetallesFactura>
                                <IDDetalleFactura>
                                        <DescripcionDetalle>Linea 1</DescripcionDetalle>
                                        <Cantidad>1</Cantidad>
                                        <ImporteUnitario>100</ImporteUnitario>
                                        <Descuento>0</Descuento>
                                        <ImporteTotal>121</ImporteTotal>
                                </IDDetalleFactura>
                        </DetallesFactura>
                        <ImporteTotalFactura>158.26</ImporteTotalFactura>
                        <Claves>
                                <IDClave>
                                        <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                                </IDClave>
                        </Claves>
                </DatosFactura>
                <TipoDesglose>
                        <DesgloseFactura>
                                <Sujeta>
                                        <NoExenta>
                                                <DetalleNoExenta>
                                                        <TipoNoExenta>S1</TipoNoExenta>
                                                        <DesgloseIVA>
                                                                <DetalleIVA>
                                                                        <BaseImponible>158.26</BaseImponible>
                                                                        <TipoImpositivo>0</TipoImpositivo>
                                                                        <CuotaImpuesto>0.00</CuotaImpuesto>
                                                                        <TipoRecargoEquivalencia>0</TipoRecargoEquivalencia>
                                                                        <CuotaRecargoEquivalencia>0</CuotaRecargoEquivalencia>
                                                                        <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                                                </DetalleIVA>
                                                        </DesgloseIVA>
                                                </DetalleNoExenta>
                                        </NoExenta>
                                </Sujeta>
                        </DesgloseFactura>
                </TipoDesglose>
        </Factura>
        <HuellaTBAI>
                <EncadenamientoFacturaAnterior>
                        <SerieFacturaAnterior></SerieFacturaAnterior>
                        <NumFacturaAnterior>174</NumFacturaAnterior>
                        <FechaExpedicionFacturaAnterior>04-10-2021</FechaExpedicionFacturaAnterior>
                        <SignatureValueFirmaFacturaAnterior>RpVq3ZdboUtF2GZL3GfKzRhyRhPHvy2FnmD2Xjx28XKekLwdhOgmJmeouXUHXEKDVVoo0GA55XZGCSl8zf8PX2DzP2MluTXmVSFK</SignatureValueFirmaFacturaAnterior>
                </EncadenamientoFacturaAnterior>
                <Software>
                        <LicenciaTBAI>TBAIGIPREXXXX</LicenciaTBAI>
                        <EntidadDesarrolladora>
                                <NIF>XXXXXXXX</NIF>
                        </EntidadDesarrolladora>
                        <Nombre>DESARROLLADOR</Nombre>
                        <Version>15.5</Version>
                </Software>
                <NumSerieDispositivo>NSERIEPC</NumSerieDispositivo>
        </HuellaTBAI>
</T:TicketBai>

FIRMADO:

Código:

<?xml version="1.0"?>
<T:TicketBai
        xmlns:T="urn:ticketbai:emision"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd "
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <Cabecera>
                <IDVersionTBAI>1.2</IDVersionTBAI>
        </Cabecera>
        <Sujetos>
                <Emisor>
                        <NIF>11111111</NIF>
                        <ApellidosNombreRazonSocial>NOMBRE</ApellidosNombreRazonSocial>
                </Emisor>
                <Destinatarios>
                        <IDDestinatario>
                                <NIF>22222222</NIF>
                                <ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
                                <CodigoPostal>33333</CodigoPostal>
                                <Direccion>Calle Madrid 18</Direccion>
                        </IDDestinatario>
                </Destinatarios>
                <VariosDestinatarios>N</VariosDestinatarios>
                <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
        </Sujetos>
        <Factura>
                <CabeceraFactura>
                        <NumFactura>175</NumFactura>
                        <FechaExpedicionFactura>04-10-2021</FechaExpedicionFactura>
                        <HoraExpedicionFactura>13:23:31</HoraExpedicionFactura>
                        <FacturaSimplificada>N</FacturaSimplificada>
                        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
                </CabeceraFactura>
                <DatosFactura>
                        <FechaOperacion>04-10-2021</FechaOperacion>
                        <DescripcionFactura>Factura 175</DescripcionFactura>
                        <DetallesFactura>
                                <IDDetalleFactura>
                                        <DescripcionDetalle>Linea 1</DescripcionDetalle>
                                        <Cantidad>1</Cantidad>
                                        <ImporteUnitario>100</ImporteUnitario>
                                        <Descuento>0</Descuento>
                                        <ImporteTotal>121</ImporteTotal>
                                </IDDetalleFactura>
                        </DetallesFactura>
                        <ImporteTotalFactura>158.26</ImporteTotalFactura>
                        <Claves>
                                <IDClave>
                                        <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                                </IDClave>
                        </Claves>
                </DatosFactura>
                <TipoDesglose>
                        <DesgloseFactura>
                                <Sujeta>
                                        <NoExenta>
                                                <DetalleNoExenta>
                                                        <TipoNoExenta>S1</TipoNoExenta>
                                                        <DesgloseIVA>
                                                                <DetalleIVA>
                                                                        <BaseImponible>158.26</BaseImponible>
                                                                        <TipoImpositivo>0</TipoImpositivo>
                                                                        <CuotaImpuesto>0.00</CuotaImpuesto>
                                                                        <TipoRecargoEquivalencia>0</TipoRecargoEquivalencia>
                                                                        <CuotaRecargoEquivalencia>0</CuotaRecargoEquivalencia>
                                                                        <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                                                </DetalleIVA>
                                                        </DesgloseIVA>
                                                </DetalleNoExenta>
                                        </NoExenta>
                                </Sujeta>
                        </DesgloseFactura>
                </TipoDesglose>
        </Factura>
        <HuellaTBAI>
                <EncadenamientoFacturaAnterior>
                        <SerieFacturaAnterior/>
                        <NumFacturaAnterior>174</NumFacturaAnterior>
                        <FechaExpedicionFacturaAnterior>04-10-2021</FechaExpedicionFacturaAnterior>
                        <SignatureValueFirmaFacturaAnterior>RpVq3ZdboUtF2GZL3GfKzRhyRhPHvy2FnmD2Xjx28XKekLwdhOgmJmeouXUHXEKDVVoo0GA55XZGCSl8zf8PX2DzP2MluTXmVSFK</SignatureValueFirmaFacturaAnterior>
                </EncadenamientoFacturaAnterior>
                <Software>
                        <LicenciaTBAI>TBAIGIPREXXXX</LicenciaTBAI>
                        <EntidadDesarrolladora>
                                <NIF>XXXXXXXX</NIF>
                        </EntidadDesarrolladora>
                        <Nombre>DESARROLLADOR</Nombre>
                        <Version>15.5</Version>
                </Software>
                <NumSerieDispositivo>NSERIEPC</NumSerieDispositivo>
        </HuellaTBAI>
        <ds:Signature
                xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-58375116">
                <ds:SignedInfo>
                        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
                        <ds:Reference URI="">
                                <ds:Transforms>
                                        <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                                </ds:Transforms>
                                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                <ds:DigestValue>cwZtpFCpd78YBtRdihmixKrq1Hh4vdeUzbnHOB68TIw=</ds:DigestValue>
                        </ds:Reference>
                        <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-1408088310">
                                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                <ds:DigestValue>alfZZTS85XR8OTzUK/K7MkP0/EaAKCJYMY2wyUVB7gQ=</ds:DigestValue>
                        </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>jMUWWDclP4PZgFV7oHp2F48BFo2xlP0kx+5/vMf/YEKqxBRRkTIdFo8zaxgFbtKwFIxXsPH+DRd9rIDE2pNcuRqxMOMtbw8U2frcm/fpg0vEbEw+uE8daXzeuiwSxSyJeCUXFYMVa7afHW5ikHxrQNrsIWO07vONan+tA/pPuJQLWCF9QHzAYkiA9+DIvAO28h1KCLRPtZfb79edOKcrM+yl++8THZmOgkmjFm9atEEDyFxzEsFnBToo/R5oas+X9fTGlO//akEe4RePNNxKranf9Y473Du1UREmRgOcDjzevalZhHdM8/2+01P4I8vBIgp9LrW7kcqXWErfeRo9Ew==</ds:SignatureValue>
                <ds:KeyInfo>
                        <ds:KeyValue>
                                <ds:RSAKeyValue>
                                        <ds:Modulus>p9VyI1icLQz5ROHVLioTbggGcIjLmr+8dsEq5hbPvCM15Zktk8wSaUTZz4q2pMW2dUJw42pq88hSzyBpdl9/F5topSDokrMrOkMx9de3nUAuyPt+KACXINBtZyDleqqgrcpo6kup+CAZQ576InVwDORZ5SXlYjVo7HpC3wX9puZmN9NaTfpX62Ie2gsie01zZaACL6n5q4k8cIpfwAh8XBPAmp/EsKLzZ+aPBbpBZ4ORolgkb/0e20wzO3qqiXXGb/ACLBcrKlyBCQbfbD0eONZc1xQSBw5RNioKlELJ8M+H1OzISJKunFqU2AE3vnXfRPfCEPLoSYhOEqJ/WU0DiQ==</ds:Modulus>
                                        <ds:Exponent>AQAB</ds:Exponent>
                                </ds:RSAKeyValue>
                        </ds:KeyValue>
                        <ds:X509Data>
                                <ds:X509IssuerSerial>
                                        <ds:X509IssuerName>CN=AC Representación, OU=CERES, O=FNMT-RCM, C=ES</ds:X509IssuerName>
                                        <ds:X509SerialNumber>9179261942007942106360154753800986544</ds:X509SerialNumber>
                                </ds:X509IssuerSerial>
                                <ds:X509SubjectName>C=ES, O=DESARROLLADOR, 2.5.4.97=#0C0F56415445532D423736373830303232, CN=44444444 NOMBRE (R: 11111111), 2.5.4.4=#0C13434F4E43455043494F4E20474F4E5A414C455A, 2.5.4.42=#0C0D4C5549532053414E544941474F, 2.5.4.5=#130F49444345532D34323138373337384C, 2.5.4.13=#0C505265673A3338303133202F486F6A613A54462D3631383239202F546F6D6F3A33353934202F466F6C696F3A313639202F46656368613A31332F31312F32303138202F496E73637269706369C3B36E3A31</ds:X509SubjectName>
                                <ds:X509Certificate>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</ds:X509Certificate>
                        </ds:X509Data>
                </ds:KeyInfo>
                <ds:Object>
                        <xades:QualifyingProperties
                                xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#Signature-58375116">
                                <xades:SignedProperties Id="SignedProperties-1408088310">
                                        <xades:SignedSignatureProperties>
                                                <xades:SigningTime>2021-10-07T08:13:22.025Z</xades:SigningTime>
                                                <xades:SigningCertificate>
                                                        <xades:Cert>
                                                                <xades:CertDigest>
                                                                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                                                        <ds:DigestValue>MLXj91aK6rK8d6lHMBs68CzzIhbGho9YNmPD0QpV4B4=</ds:DigestValue>
                                                                </xades:CertDigest>
                                                                <xades:IssuerSerial>
                                                                        <ds:X509IssuerName>CN=AC Representación, OU=CERES, O=FNMT-RCM, C=ES</ds:X509IssuerName>
                                                                        <ds:X509SerialNumber>109179261942007942106360154753800986544</ds:X509SerialNumber>
                                                                </xades:IssuerSerial>
                                                        </xades:Cert>
                                                </xades:SigningCertificate>
                                                <xades:SignaturePolicyIdentifier>
                                                        <xades:SignaturePolicyId>
                                                                <xades:SigPolicyId>
                                                                        <xades:Identifier>https://www.gipuzkoa.eus/ticketbai/sinadura</xades:Identifier>
                                                                </xades:SigPolicyId>
                                                                <xades:SigPolicyHash>
                                                                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                                                        <ds:DigestValue>6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=</ds:DigestValue>
                                                                </xades:SigPolicyHash>
                                                                <xades:SigPolicyQualifiers>
                                                                        <xades:SigPolicyQualifier>
                                                                                <xades:SPURI>https://www.gipuzkoa.eus/ticketbai/sinadura</xades:SPURI>
                                                                        </xades:SigPolicyQualifier>
                                                                </xades:SigPolicyQualifiers>
                                                        </xades:SignaturePolicyId>
                                                </xades:SignaturePolicyIdentifier>
                                        </xades:SignedSignatureProperties>
                                </xades:SignedProperties>
                        </xades:QualifyingProperties>
                </ds:Object>
        </ds:Signature>
</T:TicketBai>

Ahora probaré a hacer el envío con el método facilitado por iMia (gracias), a ver si es eso.

ermendalenda 07-10-2021 10:53:29

Cita:

Empezado por espinete (Mensaje 543416)
El problema es que uno me dice que ponga esto...

<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd ">

...y otro esto...

<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

Lo que es verdad es que en mis cabeceras faltaba este:

xmlns:ds="http://www.w3.org/2000/09/xmldsig#"

He vuelto a generar los dos archivos, esta vez el mismo :o

SIN FIRMAR:

Código:

<?xml version="1.0" encoding="UTF-8"?>
<T:TicketBai
        xmlns:T="urn:ticketbai:emision"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd "
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <Cabecera>
                <IDVersionTBAI>1.2</IDVersionTBAI>
        </Cabecera>
        <Sujetos>
                <Emisor>
                        <NIF>11111111</NIF>
                        <ApellidosNombreRazonSocial>NOMBRE</ApellidosNombreRazonSocial>
                </Emisor>
                <Destinatarios>
                        <IDDestinatario>
                                <NIF>22222222</NIF>
                                <ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
                                <CodigoPostal>33333</CodigoPostal>
                                <Direccion>Calle Madrid 18</Direccion>
                        </IDDestinatario>
                </Destinatarios>
                <VariosDestinatarios>N</VariosDestinatarios>
                <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
        </Sujetos>
        <Factura>
                <CabeceraFactura>
                        <NumFactura>175</NumFactura>
                        <FechaExpedicionFactura>04-10-2021</FechaExpedicionFactura>
                        <HoraExpedicionFactura>13:23:31</HoraExpedicionFactura>
                        <FacturaSimplificada>N</FacturaSimplificada>
                        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
                </CabeceraFactura>
                <DatosFactura>
                        <FechaOperacion>04-10-2021</FechaOperacion>
                        <DescripcionFactura>Factura 175</DescripcionFactura>
                        <DetallesFactura>
                                <IDDetalleFactura>
                                        <DescripcionDetalle>Linea 1</DescripcionDetalle>
                                        <Cantidad>1</Cantidad>
                                        <ImporteUnitario>100</ImporteUnitario>
                                        <Descuento>0</Descuento>
                                        <ImporteTotal>121</ImporteTotal>
                                </IDDetalleFactura>
                        </DetallesFactura>
                        <ImporteTotalFactura>158.26</ImporteTotalFactura>
                        <Claves>
                                <IDClave>
                                        <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                                </IDClave>
                        </Claves>
                </DatosFactura>
                <TipoDesglose>
                        <DesgloseFactura>
                                <Sujeta>
                                        <NoExenta>
                                                <DetalleNoExenta>
                                                        <TipoNoExenta>S1</TipoNoExenta>
                                                        <DesgloseIVA>
                                                                <DetalleIVA>
                                                                        <BaseImponible>158.26</BaseImponible>
                                                                        <TipoImpositivo>0</TipoImpositivo>
                                                                        <CuotaImpuesto>0.00</CuotaImpuesto>
                                                                        <TipoRecargoEquivalencia>0</TipoRecargoEquivalencia>
                                                                        <CuotaRecargoEquivalencia>0</CuotaRecargoEquivalencia>
                                                                        <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                                                </DetalleIVA>
                                                        </DesgloseIVA>
                                                </DetalleNoExenta>
                                        </NoExenta>
                                </Sujeta>
                        </DesgloseFactura>
                </TipoDesglose>
        </Factura>
        <HuellaTBAI>
                <EncadenamientoFacturaAnterior>
                        <SerieFacturaAnterior></SerieFacturaAnterior>
                        <NumFacturaAnterior>174</NumFacturaAnterior>
                        <FechaExpedicionFacturaAnterior>04-10-2021</FechaExpedicionFacturaAnterior>
                        <SignatureValueFirmaFacturaAnterior>RpVq3ZdboUtF2GZL3GfKzRhyRhPHvy2FnmD2Xjx28XKekLwdhOgmJmeouXUHXEKDVVoo0GA55XZGCSl8zf8PX2DzP2MluTXmVSFK</SignatureValueFirmaFacturaAnterior>
                </EncadenamientoFacturaAnterior>
                <Software>
                        <LicenciaTBAI>TBAIGIPREXXXX</LicenciaTBAI>
                        <EntidadDesarrolladora>
                                <NIF>XXXXXXXX</NIF>
                        </EntidadDesarrolladora>
                        <Nombre>DESARROLLADOR</Nombre>
                        <Version>15.5</Version>
                </Software>
                <NumSerieDispositivo>NSERIEPC</NumSerieDispositivo>
        </HuellaTBAI>
</T:TicketBai>

FIRMADO:

Código:

<?xml version="1.0"?>
<T:TicketBai
        xmlns:T="urn:ticketbai:emision"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd "
        xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <Cabecera>
                <IDVersionTBAI>1.2</IDVersionTBAI>
        </Cabecera>
        <Sujetos>
                <Emisor>
                        <NIF>11111111</NIF>
                        <ApellidosNombreRazonSocial>NOMBRE</ApellidosNombreRazonSocial>
                </Emisor>
                <Destinatarios>
                        <IDDestinatario>
                                <NIF>22222222</NIF>
                                <ApellidosNombreRazonSocial>CLIENTE</ApellidosNombreRazonSocial>
                                <CodigoPostal>33333</CodigoPostal>
                                <Direccion>Calle Madrid 18</Direccion>
                        </IDDestinatario>
                </Destinatarios>
                <VariosDestinatarios>N</VariosDestinatarios>
                <EmitidaPorTercerosODestinatario>N</EmitidaPorTercerosODestinatario>
        </Sujetos>
        <Factura>
                <CabeceraFactura>
                        <NumFactura>175</NumFactura>
                        <FechaExpedicionFactura>04-10-2021</FechaExpedicionFactura>
                        <HoraExpedicionFactura>13:23:31</HoraExpedicionFactura>
                        <FacturaSimplificada>N</FacturaSimplificada>
                        <FacturaEmitidaSustitucionSimplificada>N</FacturaEmitidaSustitucionSimplificada>
                </CabeceraFactura>
                <DatosFactura>
                        <FechaOperacion>04-10-2021</FechaOperacion>
                        <DescripcionFactura>Factura 175</DescripcionFactura>
                        <DetallesFactura>
                                <IDDetalleFactura>
                                        <DescripcionDetalle>Linea 1</DescripcionDetalle>
                                        <Cantidad>1</Cantidad>
                                        <ImporteUnitario>100</ImporteUnitario>
                                        <Descuento>0</Descuento>
                                        <ImporteTotal>121</ImporteTotal>
                                </IDDetalleFactura>
                        </DetallesFactura>
                        <ImporteTotalFactura>158.26</ImporteTotalFactura>
                        <Claves>
                                <IDClave>
                                        <ClaveRegimenIvaOpTrascendencia>01</ClaveRegimenIvaOpTrascendencia>
                                </IDClave>
                        </Claves>
                </DatosFactura>
                <TipoDesglose>
                        <DesgloseFactura>
                                <Sujeta>
                                        <NoExenta>
                                                <DetalleNoExenta>
                                                        <TipoNoExenta>S1</TipoNoExenta>
                                                        <DesgloseIVA>
                                                                <DetalleIVA>
                                                                        <BaseImponible>158.26</BaseImponible>
                                                                        <TipoImpositivo>0</TipoImpositivo>
                                                                        <CuotaImpuesto>0.00</CuotaImpuesto>
                                                                        <TipoRecargoEquivalencia>0</TipoRecargoEquivalencia>
                                                                        <CuotaRecargoEquivalencia>0</CuotaRecargoEquivalencia>
                                                                        <OperacionEnRecargoDeEquivalenciaORegimenSimplificado>N</OperacionEnRecargoDeEquivalenciaORegimenSimplificado>
                                                                </DetalleIVA>
                                                        </DesgloseIVA>
                                                </DetalleNoExenta>
                                        </NoExenta>
                                </Sujeta>
                        </DesgloseFactura>
                </TipoDesglose>
        </Factura>
        <HuellaTBAI>
                <EncadenamientoFacturaAnterior>
                        <SerieFacturaAnterior/>
                        <NumFacturaAnterior>174</NumFacturaAnterior>
                        <FechaExpedicionFacturaAnterior>04-10-2021</FechaExpedicionFacturaAnterior>
                        <SignatureValueFirmaFacturaAnterior>RpVq3ZdboUtF2GZL3GfKzRhyRhPHvy2FnmD2Xjx28XKekLwdhOgmJmeouXUHXEKDVVoo0GA55XZGCSl8zf8PX2DzP2MluTXmVSFK</SignatureValueFirmaFacturaAnterior>
                </EncadenamientoFacturaAnterior>
                <Software>
                        <LicenciaTBAI>TBAIGIPREXXXX</LicenciaTBAI>
                        <EntidadDesarrolladora>
                                <NIF>XXXXXXXX</NIF>
                        </EntidadDesarrolladora>
                        <Nombre>DESARROLLADOR</Nombre>
                        <Version>15.5</Version>
                </Software>
                <NumSerieDispositivo>NSERIEPC</NumSerieDispositivo>
        </HuellaTBAI>
        <ds:Signature
                xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-58375116">
                <ds:SignedInfo>
                        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                        <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
                        <ds:Reference URI="">
                                <ds:Transforms>
                                        <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                                </ds:Transforms>
                                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                <ds:DigestValue>cwZtpFCpd78YBtRdihmixKrq1Hh4vdeUzbnHOB68TIw=</ds:DigestValue>
                        </ds:Reference>
                        <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#SignedProperties-1408088310">
                                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                <ds:DigestValue>alfZZTS85XR8OTzUK/K7MkP0/EaAKCJYMY2wyUVB7gQ=</ds:DigestValue>
                        </ds:Reference>
                </ds:SignedInfo>
                <ds:SignatureValue>jMUWWDclP4PZgFV7oHp2F48BFo2xlP0kx+5/vMf/YEKqxBRRkTIdFo8zaxgFbtKwFIxXsPH+DRd9rIDE2pNcuRqxMOMtbw8U2frcm/fpg0vEbEw+uE8daXzeuiwSxSyJeCUXFYMVa7afHW5ikHxrQNrsIWO07vONan+tA/pPuJQLWCF9QHzAYkiA9+DIvAO28h1KCLRPtZfb79edOKcrM+yl++8THZmOgkmjFm9atEEDyFxzEsFnBToo/R5oas+X9fTGlO//akEe4RePNNxKranf9Y473Du1UREmRgOcDjzevalZhHdM8/2+01P4I8vBIgp9LrW7kcqXWErfeRo9Ew==</ds:SignatureValue>
                <ds:KeyInfo>
                        <ds:KeyValue>
                                <ds:RSAKeyValue>
                                        <ds:Modulus>p9VyI1icLQz5ROHVLioTbggGcIjLmr+8dsEq5hbPvCM15Zktk8wSaUTZz4q2pMW2dUJw42pq88hSzyBpdl9/F5topSDokrMrOkMx9de3nUAuyPt+KACXINBtZyDleqqgrcpo6kup+CAZQ576InVwDORZ5SXlYjVo7HpC3wX9puZmN9NaTfpX62Ie2gsie01zZaACL6n5q4k8cIpfwAh8XBPAmp/EsKLzZ+aPBbpBZ4ORolgkb/0e20wzO3qqiXXGb/ACLBcrKlyBCQbfbD0eONZc1xQSBw5RNioKlELJ8M+H1OzISJKunFqU2AE3vnXfRPfCEPLoSYhOEqJ/WU0DiQ==</ds:Modulus>
                                        <ds:Exponent>AQAB</ds:Exponent>
                                </ds:RSAKeyValue>
                        </ds:KeyValue>
                        <ds:X509Data>
                                <ds:X509IssuerSerial>
                                        <ds:X509IssuerName>CN=AC Representación, OU=CERES, O=FNMT-RCM, C=ES</ds:X509IssuerName>
                                        <ds:X509SerialNumber>9179261942007942106360154753800986544</ds:X509SerialNumber>
                                </ds:X509IssuerSerial>
                                <ds:X509SubjectName>C=ES, O=DESARROLLADOR, 2.5.4.97=#0C0F56415445532D423736373830303232, CN=44444444 NOMBRE (R: 11111111), 2.5.4.4=#0C13434F4E43455043494F4E20474F4E5A414C455A, 2.5.4.42=#0C0D4C5549532053414E544941474F, 2.5.4.5=#130F49444345532D34323138373337384C, 2.5.4.13=#0C505265673A3338303133202F486F6A613A54462D3631383239202F546F6D6F3A33353934202F466F6C696F3A313639202F46656368613A31332F31312F32303138202F496E73637269706369C3B36E3A31</ds:X509SubjectName>
                                <ds:X509Certificate>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</ds:X509Certificate>
                        </ds:X509Data>
                </ds:KeyInfo>
                <ds:Object>
                        <xades:QualifyingProperties
                                xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#Signature-58375116">
                                <xades:SignedProperties Id="SignedProperties-1408088310">
                                        <xades:SignedSignatureProperties>
                                                <xades:SigningTime>2021-10-07T08:13:22.025Z</xades:SigningTime>
                                                <xades:SigningCertificate>
                                                        <xades:Cert>
                                                                <xades:CertDigest>
                                                                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                                                        <ds:DigestValue>MLXj91aK6rK8d6lHMBs68CzzIhbGho9YNmPD0QpV4B4=</ds:DigestValue>
                                                                </xades:CertDigest>
                                                                <xades:IssuerSerial>
                                                                        <ds:X509IssuerName>CN=AC Representación, OU=CERES, O=FNMT-RCM, C=ES</ds:X509IssuerName>
                                                                        <ds:X509SerialNumber>109179261942007942106360154753800986544</ds:X509SerialNumber>
                                                                </xades:IssuerSerial>
                                                        </xades:Cert>
                                                </xades:SigningCertificate>
                                                <xades:SignaturePolicyIdentifier>
                                                        <xades:SignaturePolicyId>
                                                                <xades:SigPolicyId>
                                                                        <xades:Identifier>https://www.gipuzkoa.eus/ticketbai/sinadura</xades:Identifier>
                                                                </xades:SigPolicyId>
                                                                <xades:SigPolicyHash>
                                                                        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                                                                        <ds:DigestValue>6NrKAm60o7u62FUQwzZew24ra2ve9PRQYwC21AM6In0=</ds:DigestValue>
                                                                </xades:SigPolicyHash>
                                                                <xades:SigPolicyQualifiers>
                                                                        <xades:SigPolicyQualifier>
                                                                                <xades:SPURI>https://www.gipuzkoa.eus/ticketbai/sinadura</xades:SPURI>
                                                                        </xades:SigPolicyQualifier>
                                                                </xades:SigPolicyQualifiers>
                                                        </xades:SignaturePolicyId>
                                                </xades:SignaturePolicyIdentifier>
                                        </xades:SignedSignatureProperties>
                                </xades:SignedProperties>
                        </xades:QualifyingProperties>
                </ds:Object>
        </ds:Signature>
</T:TicketBai>

Ahora probaré a hacer el envío con el método facilitado por iMia (gracias), a ver si es eso.

Tienes q mirar tb que al generar el xml sigues poniendo mal los totales y los tipos impositivos etc, te puede dar errores de formato xsd

thinkows 07-10-2021 11:37:10

Validaciones Respuesta de Araba
 
Cita:

Empezado por Noe277 (Mensaje 543200)
Esto es un problema de ellos habrá que decirles, el caso es que creo que esta en el redondo.
1 x 1,446 también da error pero 1, 44 lo hace bien. 1,45 también hace mal el problema es como redondean.


La respuesta de Raba a los redondeos:


Buenos días


Hemos revisado el contenido de su fichero y los importes son correctos.

El error se está dando en las líneas en las que el importe es menor de 1 euro. Al trabajar con importes pequeños y despreciar los decimales se ha provocado esta situación.

Vamos a solucionarlo en breve.

Cuando lo hayamos solucionado se lo comunicaremos.

Gracias por su colaboración

Un saludo

thinkows 07-10-2021 11:45:10

Redondeos
 
Cita:

Empezado por Noe277 (Mensaje 543259)
Respuesta de Álava sobre el tema del redondeo

Respuesta a mi email de Araba

Buenos días Jordi


Hemos revisado el contenido de su fichero y los importes son correctos.

El error se está dando en las líneas en las que el importe es menor de 1 euro. Al trabajar con importes pequeños y despreciar los decimales se ha provocado esta situación.

Vamos a solucionarlo en breve.

Cuando lo hayamos solucionado se lo comunicaremos.

Gracias por su colaboración

Un saludo

espinete 07-10-2021 14:03:41

Cita:

Empezado por ermendalenda (Mensaje 543418)
Tienes q mirar tb que al generar el xml sigues poniendo mal los totales y los tipos impositivos etc, te puede dar errores de formato xsd

Si. En principio hago pruebas muy básicas por ahora.

El error que me devuelve siempre, más detallado, es el siguiente:

<Descripcion>El mensaje ha sido modificado en tránsito o la firma no está bien realizada -- Reference URI="#SignedProperties-656969070" failed to verify. [src/xml2signatureobj.cpp(315)] - (10606)</Descripcion>

No puedo probar el envío con el método facilitado por iMia (usando idhttp) porque ese método usa el certificado directamente desde archivo y yo uso el almacén de certificados. Voy a ver si consigo averiguar cómo usar el almacén de certificados con ese método y lo pruebo.

Gracias de nuevo

espinete 07-10-2021 14:57:27

Señor@s... PROBLEMA RESUELTO.

O mejor dicho... motivo descubierto.

El problema está en el proceso de envío con NetHTTPClient1. Si utilizo idhttp1, no hay ningún problema y la factura se envía sin problemas, sin cambiar NADA en el proceso de creación del archivo, firma, etc.

¿Cómo puedo saber la diferencia entre lo que envía NetHTTPClient1 y lo que envía idhttp1 para saber dónde está el problema? Estoy más familiarizado con el uso del almacén de certificados en vez de con los archivos directamente y tendría que cambiar la aplicación.


(aparte de que ahora NECESITO saber por qué me falla NetHTTPClient1 para poder dormir)

Gracias iMia por sugerir el envío con idhttp1. La verdad es que estaba (estábamos) enfocados en que el problema no estaba ahí, sino en la generación del XML o en la firma.

carlosMorell 07-10-2021 17:21:32

La firma o las firmas
 
Una duda sobe la firma o las firmas.

Se supone que hay tres firmas, la de aplicación, la de usuario y la de dispositivo. No termina de cuadrarme esto, pero por lo que he leido es asi. Y que supongo que esto se puede hacer desasistido... o cada vez que emita una factura, he de seleccionar el certificado de la lista de certificados y firmar el xml?

Pero ahora, como incorporo las 3 firmas? o ha de ser una de las tres ? o una que contempla las tres? O es que el software garante ya esta certificado, y se da por supuesto que esa firma esta incluida al usar ese software? Perdón por mis preguntas ya obsoletas... Que veo que andais ya todos en otros pasos del proceso.

Supuestamente con Chilkat se podría automatizar todo esto... y hacerlo de forma desasistida, no?

Tengo que integrarlo en una aplicación desarrollada en Velneo6, que no permite hacer firmas. Alguien tiene el mismo problema? estoy pensando en hacerlo bajo php, o python.o c++ para que sea un .exe que se ejecute desde Velneo... O lo suyo seria una dll.

Gracias!

espinete 07-10-2021 17:43:28

Hasta ahora yo solo he utilizado dos firmas (usando el mismo certificado, en mi caso)

- Firmar la factura
- Firmar el envío

No sé hasta qué punto hay que certificar el dispositivo... ¿Y si es un software alojado en la nube, por ejemplo, en Azure? Qué se utiliza en ese caso?

Cuál sería el "dispositivo" en ese caso, teniendo en cuenta que en Azure, Google Cloud, AWS, etc. puede haber réplicas exactas de la misma aplicación según el volumen de carga?

ermendalenda 07-10-2021 17:55:03

Cita:

Empezado por carlosMorell (Mensaje 543426)
Una duda sobe la firma o las firmas.

Se supone que hay tres firmas, la de aplicación, la de usuario y la de dispositivo. No termina de cuadrarme esto, pero por lo que he leido es asi. Y que supongo que esto se puede hacer desasistido... o cada vez que emita una factura, he de seleccionar el certificado de la lista de certificados y firmar el xml?

Pero ahora, como incorporo las 3 firmas? o ha de ser una de las tres ? o una que contempla las tres? O es que el software garante ya esta certificado, y se da por supuesto que esa firma esta incluida al usar ese software? Perdón por mis preguntas ya obsoletas... Que veo que andais ya todos en otros pasos del proceso.

Supuestamente con Chilkat se podría automatizar todo esto... y hacerlo de forma desasistida, no?

Tengo que integrarlo en una aplicación desarrollada en Velneo6, que no permite hacer firmas. Alguien tiene el mismo problema? estoy pensando en hacerlo bajo php, o python.o c++ para que sea un .exe que se ejecute desde Velneo... O lo suyo seria una dll.

Gracias!

Tema firnas
T
Consigue un certificado de firma (o de autónomo o de dispositivo o de lo que sea) con su clave.
Aún puedes hacer pruebas sin dar dte alta en software grnté(solo es a una clave que te Dan la forales por rellenar un formulario de compromiso de que el software cumple) este para las pruebas aún no te hace falta. Y con la clave que te den la tienes que escribir en el xml en un campo específico, de momento pon cualquier cosa.
Firmar el software (si es una distribución de escritorio(que se instala en un equipo y no se ejecutaen la web o similar) tienes que firmarlo, pero eso no tiene que incluirse en lo que envías. Cada nueva versión tienes que guardar la copia y volver a firmar. (para las pruebas tampoco te hace falta).
Pribldma que tu software no puede firmar:
Aquí cada uno ha hecho cosas distintas en la medida de lo que conoce, facilidad, costes.ll más adaptable a lo que tengas etcc.
Ejemplo usar el firmador.pho que desarrollo un usuario y ejecutarlo con algún servidor php instalado en cualquier sitio. Por ejemplo un servidor XAMPP..
Ejemplo 2, usar librerías que tiene un coste, te facilitan que lo puedes integrar con un montón de softwares, Chilkat, etc.. Usar el firmador de Autofirmacommanline. Exe.
No te preocupes si tu software no puede firmar o enviar. Te recomie do que te relee as todo el hilo (todas la s páginas) que al principio es un poco lío pero lte va a despejar todas las dudas.
Para enviar puedes usar el software de distribución gratuita CURL.

unomasmas 07-10-2021 20:29:25

Cita:

Empezado por ermendalenda (Mensaje 543299)
El último crc del último caso está mal.
No puedes poner el mismo. Tienes que calcularlo según lo que has cambiado. Es lioso pero es así

No sé si ya lo has solucionado. Si no, como creo que también lo estás programando en C#, por si te sirve (si no a ti, tal vez a otro) dejo la función que tengo por ahora y un par de ellas auxiliares para obtener el dato.
Código:

/// <summary>
/// Obtiene la cadena para el código QR
/// </summary>
/// <param name="xmlFile">Fichero XML del que obtener info: Fichero Ticket-BAI</param>
/// <param name="serverConsulta">la parte fija de conexión al servidor, según la Diputación</param>
/// <param name="encoded">Codificamos o no?</param>
/// <param name="tBaiId">Opcional. Podemos pasar el identificador TBAI. Si no, lo obtiene del XML Ticket-BAI</param>
/// <returns></returns>
public static string GetQRCodeString(string xmlFile, string serverConsulta, bool encoded, string tBaiId="")
{
    try
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlFile);

        if (tBaiId == string.Empty)
        {
            tBaiId = GetTBaiId(xmlFile);
        }
        if (encoded)
        {
            tBaiId = GetURLEncodedString(tBaiId);
        }

        string result = serverConsulta;
        result += @"?id=" + tBaiId;
        result += @"&s=" + xmlDoc.DocumentElement.GetValue("//Factura/CabeceraFactura/SerieFactura");
        result += @"&nf=" + xmlDoc.DocumentElement.GetValue("//Factura/CabeceraFactura/NumFactura");
        result += @"&i=" + xmlDoc.DocumentElement.GetValue("//Factura/DatosFactura/ImporteTotalFactura");
        result += @"&cr=" + GetCrc8(result);

        return result;
    }
    catch (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
        return null;
    }
}

/// <summary>
/// Obtiene identificador TBAI
/// </summary>
/// <param name="xmlFile">Fichero Ticket-BAI de donde sacar la info para obtener el identificar</param>
/// <returns>Cadena con el identificador</returns>
public static string GetTBaiId(string xmlFile)
{
    try
    {
        string result;
        string separador = "-";
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlFile);

        string nif = xmlDoc.DocumentElement.GetValue("//Sujetos/Emisor/NIF").PadLeft(9, '0');  //9 NIF Emisor

        string fechaExpedicion = xmlDoc.DocumentElement.GetValue("//Factura/CabeceraFactura/FechaExpedicionFactura");  //Fecha Formato dd-mm-yyyy
        DateTime parsedDate;
        DateTime.TryParseExact(fechaExpedicion, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate);
        fechaExpedicion = parsedDate.ToString("ddMMyy");

        string signatureValue = GetSignatureValue(xmlDoc, 13);

        result = "TBAI" + separador;
        result += nif + separador;
        result += fechaExpedicion + separador;
        result += signatureValue + separador;
        result += GetCrc8(result);

        return result;
    }
    catch (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
        return null;
    }
}

/// <summary>
/// Codifica una cadena para dar formato URI
/// </summary>
/// <param name="inputString">La cadena a codificar</param>
/// <returns>La cadena codificada</returns>
private static string GetURLEncodedString(string inputString)
{
    string result = Uri.EscapeDataString(inputString);
    return result;
}


unomasmas 07-10-2021 20:37:11

Cita:

Empezado por Eric Mtz (Mensaje 543343)
Muy buenas señores del internete, sigo vivo, tan solo os quería compartir una respuesta de BATUZ que me ha hecho mucha gracia, el caso es que les he preguntado si tenemos algún servidor de pruebas en Bizkaia ahora que nos han cerrado el de siempre y el nuevo parece que le queda medio mes de cocción.

Respuesta:


Me turboflipa la decisión de quitar los servidores un par de semanas, de hecho me alaga, creo que piensan que somos tan buenos que podemos dedicar el tiempo a... nose cultivar olivos en nuestra finca en venus o a meditar sobre la ingeniosa e infravalorada característica de comprimir un archivo gzip dos veces, yo iría mas allá y publicaría el servidor a una semana de su obligatoriedad, total solo afectará a los nervios de cuatro programadores que como mucho les pondrán a parir en un foro perdido de la mano de Batuz.

Que opináis?, también os maravillan las nuevas medidas para aumentar el índice de motivación de los programadores?

No es que sea un consuelo pero, al menos han aplazado la obligatoriedad hasta 2024. En Gipuzkoa están empeñados en empezar obligatoriamente dentro de menos de tres meses y hay especificaciones (servicio ZUZENDU) de los que no tenemos noticias. Es más, corregidme si no es así, pero creo que ya es posible utilizar en real el sistema de forma voluntaria (y sin la "red" del servicio ZUZENDU para enviar posibles modificaciones que te exijan según la respuesta del servidor)...

unomasmas 07-10-2021 20:47:34

Cita:

Empezado por ermendalenda (Mensaje 543337)
Creo que no hay otra forma. Te puedes hacer un pequeño algottirmo que cada fallo aumente el tiempo del siguiente reintento, hasta un tope de 30min por ejemplo, y reinicies el temporizador cuando haya conexión. Teniendo en cuenta de que hay que mandarlas en orden en cuanto haya conexión.
Por otro lado puedes hacer una conexión previa con un fichero vacio(esta en este hilo unos cuantos posts atrás) y ponerle un timeout muy corto.
O combinar los 2.

Yo lo he pensado de esta forma: Al imprimir...
1) Reviso si existen facturas anteriores que no se hayan firmado.
2) Si si, se firman por orden y se intenta envío, pero antes de enviar, se comprueba si existen anteriores sin enviar.
3) Si sí, se empiezan a enviar por orden desde la primera sin enviar hasta la última

Así no tendría que estar comprobando constantemente si hay conexión o no.
¿Le veis algún problema a este método?

ermendalenda 07-10-2021 21:26:46

Cita:

Empezado por unomasmas (Mensaje 543436)
Yo lo he pensado de esta forma: Al imprimir...
1) Reviso si existen facturas anteriores que no se hayan firmado.
2) Si si, se firman por orden y se intenta envío, pero antes de enviar, se comprueba si existen anteriores sin enviar.
3) Si sí, se empiezan a enviar por orden desde la primera sin enviar hasta la última

Así no tendría que estar comprobando constantemente si hay conexión o no.
¿Le veis algún problema a este método?

Está bien, pero no pueden existir facturas sin firmar, en cuanto se cobra hay que firmar las para poner imprimirlas con el qr, a no ser que haya habido algún problema técnico y si falla la firma tampoco puedes imprimir, pero ojo, eso es un peligro ilegal, no, lo siguiente, debes evitar por todos los medios un fallo de este tipo y si existe no debes permitir seguir pudiendo emitir/grabar facturas.

unomasmas 07-10-2021 22:16:38

Cita:

Empezado por ermendalenda (Mensaje 543437)
Está bien, pero no pueden existir facturas sin firmar, en cuanto se cobra hay que firmar las para poner imprimirlas con el qr, a no ser que haya habido algún problema técnico y si falla la firma tampoco puedes imprimir, pero ojo, eso es un peligro ilegal, no, lo siguiente, debes evitar por todos los medios un fallo de este tipo y si existe no debes permitir seguir pudiendo emitir/grabar facturas.

Bueno, sí; sí que puede haber facturas sin firmar; imaginate que haces un bloque de facturas (a final de mes, por ejemplo, facturando los albaranes emitidos); no las imprimes ni haces nada con ellas; simplemente quedan registradas en el sistema. Te vas a comer y por la tarde vuelves y haces una más y vas a imprimirla... Ese es mi pensamiento. Entonces, antes de imprimir, se revisa que no existan previas, etc.

ermendalenda 07-10-2021 22:58:37

Ah claro en ese caso sí, pero no sé si hay que tenr cuidado de que si tienes que mandarla también por Sii en que orden, es mejor firmarlas antes y enviarlas por si hacen un control, quien va antes el huevo o la gallina?

keys 08-10-2021 08:07:56

Hola a todos.

Bizkaia ha actualizado los documentos en su página web.

Se han publicado los siguientes documentos del LROE:

Validaciones y errores LROE 1.0.6
Entorno piloto del LROE 1.0.0

Pero siguen sin tener los servidores en marcha.;)

carlosMorell 08-10-2021 08:35:31

Cita:

Empezado por ermendalenda (Mensaje 543429)
Tema firnas
T
Consigue un certificado de firma (o de autónomo o de dispositivo o de lo que sea) con su clave.
Aún puedes hacer pruebas sin dar dte alta en software grnté(solo es a una clave que te Dan la forales por rellenar un formulario de compromiso de que el software cumple) este para las pruebas aún no te hace falta. Y con la clave que te den la tienes que escribir en el xml en un campo específico, de momento pon cualquier cosa.
Firmar el software (si es una distribución de escritorio(que se instala en un equipo y no se ejecutaen la web o similar) tienes que firmarlo, pero eso no tiene que incluirse en lo que envías. Cada nueva versión tienes que guardar la copia y volver a firmar. (para las pruebas tampoco te hace falta).
Problema que tu software no puede firmar:
Aquí cada uno ha hecho cosas distintas en la medida de lo que conoce, facilidad, costes.ll más adaptable a lo que tengas etcc.
Ejemplo usar el firmador.pho que desarrollo un usuario y ejecutarlo con algún servidor php instalado en cualquier sitio. Por ejemplo un servidor XAMPP..
Ejemplo 2, usar librerías que tiene un coste, te facilitan que lo puedes integrar con un montón de softwares, Chilkat, etc.. Usar el firmador de Autofirmacommanline. Exe.
No te preocupes si tu software no puede firmar o enviar. Te recomie do que te relee as todo el hilo (todas la s páginas) que al principio es un poco lío pero lte va a despejar todas las dudas.
Para enviar puedes usar el software de distribución gratuita CURL.

Buenos días,

muchas gracias por tu respuesta. Si que había pensado una solución basada en php, o quizás hago una dll en C++ para que sea todo mas rápido. La duda que me queda, es si es posible automatizarlo tanto que no sea necesario que el usuario seleccione el certificado del almacén. Y si el certificado de dispositivo y de entidad empresarial pueden ser el mismo. Es decir, es uno de los dos, no los dos certificados simultáneamente. Que la documentación al respecto es muy confusa.

Gracias de antemano
Carlos

elcharlie 08-10-2021 09:53:52

Cita:

Empezado por ermendalenda (Mensaje 543437)
Está bien, pero no pueden existir facturas sin firmar, en cuanto se cobra hay que firmar las para poner imprimirlas con el qr, a no ser que haya habido algún problema técnico y si falla la firma tampoco puedes imprimir, pero ojo, eso es un peligro ilegal, no, lo siguiente, debes evitar por todos los medios un fallo de este tipo y si existe no debes permitir seguir pudiendo emitir/grabar facturas.

Nosotros firmamos las ventas en el momento de imprimir, y no antes, vamos a dar la opción, en la medida de lo posible, que se pueda modificar o borrar la factura, siempre y cuando no este firmada. En los tickets, no, puesto, que una vez realizados, se imprimen.

Sistel 08-10-2021 10:45:21

Cita:

Empezado por carlosMorell (Mensaje 543443)
Buenos días,

muchas gracias por tu respuesta. Si que había pensado una solución basada en php, o quizás hago una dll en C++ para que sea todo mas rápido. La duda que me queda, es si es posible automatizarlo tanto que no sea necesario que el usuario seleccione el certificado del almacén. Y si el certificado de dispositivo y de entidad empresarial pueden ser el mismo. Es decir, es uno de los dos, no los dos certificados simultáneamente. Que la documentación al respecto es muy confusa.

Gracias de antemano
Carlos

Hola carlosMorell,

Creo que te estás liando un poco.
A ver, lo importante es usar un certificado para:
- Firmar el XML
- Enviar el XML a Hacienda Foral

Se pueden dar dos casos:
1.- Estás firmando en el mismo equipo que factura. Esto se llama, según la normativa, "arquitectura con firma en cliente"
2.- Estás firmando en un servidor (equipo diferente al que factura). Entonces es "arquitectura con firma en servidor".

Para el caso 1 se pueden emplear para la firma:
- Certificado de persona física
- Certificado de representante de entidad
- Certificado de autónomo (estreno en nuestras pantallas :D )
- Sello de empresa
- Certificado de dispositivo (de Izenpe, gratis y para 10 años)

Para el caso 2, se admiten los mismos certificados que para el caso 1, a excepción del certificado de dispositivo, que no es válido en este caso de "arquitectura con firma en servidor".

Otro tema separado es la firma de la aplicación.
Este caso es si la aplicación de facturación (con software garante) se distribuye e instala mediante un único fichero (clásico fichero .exe para Windows)
En este caso, se precisa que el fichero que se distribuye vaya firmado con un certificado de aplicación (que es un engendro raro y caro que venden algunos proveedores de este tipo de productos) que dirá en el momento de la instalación que el fichero está firmado por la entidad tal y cual.
Y, en este caso, se deben guardar las versiones anteriores para posibles inspecciones.

Mi consejo es el de siempre: mejor firma en una máquina diferente a la que factura y a la que no tenga acceso de manipulación el cliente.
Más que nada para evitar que tú, como desarrollador puedas ir a la cárcel por manipulación :D

Saludos

txitxarru 08-10-2021 10:47:03

Cita:

Empezado por espinete (Mensaje 543424)
Señor@s... PROBLEMA RESUELTO.

O mejor dicho... motivo descubierto.

El problema está en el proceso de envío con NetHTTPClient1. Si utilizo idhttp1, no hay ningún problema y la factura se envía sin problemas, sin cambiar NADA en el proceso de creación del archivo, firma, etc.

¿Cómo puedo saber la diferencia entre lo que envía NetHTTPClient1 y lo que envía idhttp1 para saber dónde está el problema? Estoy más familiarizado con el uso del almacén de certificados en vez de con los archivos directamente y tendría que cambiar la aplicación.


(aparte de que ahora NECESITO saber por qué me falla NetHTTPClient1 para poder dormir)

Gracias iMia por sugerir el envío con idhttp1. La verdad es que estaba (estábamos) enfocados en que el problema no estaba ahí, sino en la generación del XML o en la firma.

Me alegro que hayas encontrado el motivo, de todas formas para que la firma te la genere sin BOM le puedes añadir la linea:

Código Delphi [-]
Signer.Config('WriteBOM=FALSE');

Sistel 08-10-2021 10:57:48

Cita:

Empezado por elcharlie (Mensaje 543444)
Nosotros firmamos las ventas en el momento de imprimir, y no antes, vamos a dar la opción, en la medida de lo posible, que se pueda modificar o borrar la factura, siempre y cuando no este firmada. En los tickets, no, puesto, que una vez realizados, se imprimen.

Hola elcharlie,

Borra eso de "borrar la factura".
Ahora eso es delito muy grave y puedes acabar en busca y captura :D

Si quieres, di mejor: "anular la factura", que eso sí está permitido y no tiene peligro de cárcel :D.

Saludos

iMia 08-10-2021 11:07:40

Cita:

Empezado por espinete (Mensaje 543424)
Señor@s... PROBLEMA RESUELTO.

O mejor dicho... motivo descubierto.

El problema está en el proceso de envío con NetHTTPClient1. Si utilizo idhttp1, no hay ningún problema y la factura se envía sin problemas, sin cambiar NADA en el proceso de creación del archivo, firma, etc.

¿Cómo puedo saber la diferencia entre lo que envía NetHTTPClient1 y lo que envía idhttp1 para saber dónde está el problema? Estoy más familiarizado con el uso del almacén de certificados en vez de con los archivos directamente y tendría que cambiar la aplicación.


(aparte de que ahora NECESITO saber por qué me falla NetHTTPClient1 para poder dormir)

Gracias iMia por sugerir el envío con idhttp1. La verdad es que estaba (estábamos) enfocados en que el problema no estaba ahí, sino en la generación del XML o en la firma.

||-||||-||||-||||-||

elcharlie 08-10-2021 11:11:31

Cita:

Empezado por Sistel (Mensaje 543447)
Hola elcharlie,

Borra eso de "borrar la factura".
Ahora eso es delito muy grave y puedes acabar en busca y captura :D

Si quieres, di mejor: "anular la factura", que eso sí está permitido y no tiene peligro de cárcel :D.

Saludos

Ha sido un lapsus, no sé en que estaba pensando. Nunca hemos dejado hacer eso que usted me menciona. :):)

Ramon88 08-10-2021 17:15:58

Tengo una pequeña duda, no se si alguno sabrá ayudarme.


Puedo subir unicamente facturas simplificadas?


Yo solamente subiré facturas simplificadas.
Los clientes realizan encargos, dejan dinero a cuenta del producto, y pueden tardar 3 meses en pagarlo.


Por ejemplo:

3 Cobros = 3 facturas simplificadas.
Ahora bien, viene el cliente y anula esa venta por que ya no la quiere.

Que hago? genero 3 ticketBai ANULACION? cada uno haciendo referencia a cada factura simplificada?

ermendalenda 08-10-2021 17:38:41

Cita:

Empezado por Ramon88 (Mensaje 543451)
Tengo una pequeña duda, no se si alguno sabrá ayudarme.


Puedo subir unicamente facturas simplificadas?


Yo solamente subiré facturas simplificadas.
Los clientes realizan encargos, dejan dinero a cuenta del producto, y pueden tardar 3 meses en pagarlo.


Por ejemplo:

3 Cobros = 3 facturas simplificadas.
Ahora bien, viene el cliente y anula esa venta por que ya no la quiere.

Que hago? genero 3 ticketBai ANULACION? cada uno haciendo referencia a cada factura simplificada?

Bueno eso es fiscalidad.
Hay varias formas de hacerlo pero lo importante es que si haces un ingreso tienes que por supuesto hacer factura. Mi caso es parecido, me hacen un encargo que tardan unos días en recoger y me pagan algo a cta, ese acta tengo que Hcer una fa tura prorratenafolo ea itativamebte a los tipos impositivos del contenido del pedido. Cuando recogen el pedido me pagan el resto y hago una factura en negativo del importe que me dieron acta y la factura del pedido.
En tu caso parece que das mercancía a crédito, en ese caso creo que tienes que hacer una factura completa, pero eso es más complicado.
Yo en vez de hacer una negativa lo meto en la misma factura final con lo cual si me han pagado entero actase quedara total 0.


La franja horaria es GMT +2. Ahora son las 18:18:00.

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