FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1761
|
|||
|
|||
Hola, he leído en Linkedin un mensaje de que ha habido una ponencia de Javier Hurtado que habla de algo de que están estudiando que los del SII yengan obligación de verifactu o que los de autofacturas sii hagan verifactu.como no se entendía muy bien el mensaje, os pregunto si alguno tenéis noticia de ese congreso/ponencia.
Gracias |
#1762
|
|||
|
|||
Cita:
https://www.boe.es/diario_boe/txt.ph...OE-A-2024-2097 |
#1763
|
||||
|
||||
#1764
|
|||
|
|||
Madre mía.
No creo que siga dando ponencias de verifactu Aunque todo es posible |
#1765
|
|||
|
|||
Posiblemente ahora si tendrá mucho más tiempo para hacer ponencias, de hecho, las está haciendo, creo que he visto una con Wolter Kluvers y fue hace un mes, creo recordar, osea, después de su despido.
|
#1766
|
||||
|
||||
El tipo ese es un vendido a los "fachas".
|
#1767
|
|||
|
|||
Firma Digital por DLL y XML schema binding de facturae
Hola
OS dejo mi planteamiento sobre la generación de XML y Firma por si le sirve a alguien para algo o le sirve de idea. La idea es aplicar el sistema de Firma por DLL para Verifactu y para facturae. 1-Guardar el certificado digital y la contraseña encriptada en la base de datos Código:
FileStream := TMemoryStream.Create; FileStream.LoadFromFile(Filename); // Fichero del certificado TempStream := TMemoryStream.Create; TempStream := EncriptarStream(FileStream); TBlobField(Dataset.FieldByName('CertFirmaDigital')).LoadFromStream(TempStream); Me acordé que hace unos años compré xmlblackbox para Delphi XE3 y no lo había usado nunca. Se me ocurrió que para no andar comprando librerias constantemente , se podía hacer una DLL con Delphi XE3 para firmar y poder usarla con mis aplicaciones de Delphi 11, etc... Código de la DLL con la funcion de firma en la carpeta DLLFirma y también las DLL compiladas por si sacan a alguien del paso, dejo el enlace para la descarga porque es demasiado grande para adjuntar con las DLL compiladas h t t p s : // drive.google.com/file/d/1vrtpSGHje-l-3XW6peIGqYxHkH0g9aYx/view?usp=drive_link Código:
// Para comprobar si un certificvado es Valido , pasando un IStream function StreamCertificadoValido(CertStream : IStream ; Password : Pchar) : Boolean; StdCall; // Para comprobar si un certificvado es Valido , pasando un String con la ubicación del fichero function FicheroCertificadoValido(Filename,Password : Pchar) : Boolean; StdCall; // Para firmar el XML , devuelve el XML Firmado function FirmaFacturae(CertStream,XMLFacturae : IStream ; Password : Pchar): Pchar; StdCall; // Para obtener cierta información del certificado (La idea final es devolver un XML con todo, pero...) function DatoCertificado(CertStream : IStream ; Password,Dato : Pchar) : Pchar; StdCall; Código:
// Ejemplos LLamada a las funciones de la DLL desde la Aplicacion //Definir las funciones function FirmaFacturae(CertStream,XMLFacturae : IStream ; Password : Pchar): Pchar; StdCall; external 'DLLFirmaCrt.x32.dll'; function FicheroCertificadoValido(Filename,Password : Pchar) : Boolean; StdCall; external 'DLLFirmaCrt.x32.dll' name 'FicheroCertificadoValido'; function StreamCertificadoValido(CertStream : IStream ; Password : Pchar) : Boolean; StdCall; external 'DLLFirmaCrt.x32.dll' name 'StreamCertificadoValido'; function DatoCertificado(CertStream : IStream ; Password,Dato : Pchar) : Pchar; StdCall; external 'DLLFirmaCrt.x32.dll' name 'DatoCertificado'; // Firmar XML facturae con la DLL procedure TFr_user.ButtonClick(Sender: TObject); var Fichero,XMLString,ResultadoXML : String; var XSendCertificadoFirma,SendXMLStream : IStream; var XMLFileStream : TStringStream; var TempStream : TMemoryStream; begin { Fichero := 'nombre del fichero xml o directamente usar XMLString' } XMLString := TFile.ReadAllText(Fichero,TEncoding.Unicode); // Test de firma // El certificado TBlobField(Dataset.FieldByName('CertFirmaDigital')).SaveToStream(TempStream); // Lo desencriptamos XCertificadoFirma := DesencriptarStream(TempStream); XCertificadoFirma.Seek(0,soFromBeginning); XSendCertificadoFirma := TStreamAdapter.Create(XCertificadoFirma, soReference); //soOwned //El XMl A firmar XMLFileStream := TStringStream.Create(XMLString,TEncoding.Unicode); SendXMLStream := TStreamAdapter.Create(XMLFileStream, soReference); // Adap`tamos a IStream if XSendCertificadoFirma <> nil then Begin ResultadoXML := FirmaFacturae(XSendCertificadoFirma,SendXMLStream,Pchar(XCertificadoPass)); // SI ho hay error , guardamos el fichero if Copy(ResultadoXML,1,7) <> '<Error>' then Begin TFile.WriteAllText(FicheroFirmado,ResultadoXML,TEncoding.Unicode); End else Begin // Error f_control(nil,'M',f_frase('NO SE HA PODIDO FIRMAR DIGITALMENTE LA FACTURA.',0),ResultadoXML,''); End; End else Begin //Showmessage('No hay certificado'); End; XMLFileStream.Free; SendXMLStream := nil; end; 3- Mi planteamiento de como generar el XML verifactu ya corre por este hilo. 4- Para generar el XML facturae. Usar el esquema que proporciona la AEAT y con XML Schema Binding generar el Pas "SistemaFacturaev3_2_2.pas" , lo adjunto en la carpetas Facturae. UFacturaE.pas es un ejemplo no terminado 100% de como se genera facilmente el XML Facturae, funciona , pero añadir cosas, solo es un ejemplo de como usar SistemaFacturaev3_2_2.pas Saludos --------------------------------------------------------------------------------------------------------------- NOTA DEL MODERADOR: Añado los ficheros al FTP del club (junto a la documentación), con un pequeño fichero de texto en la misma ubicación con una explicación. Y actualizo el mensaje #2 del hilo, que es el que recopila códigos. Última edición por Neftali [Germán.Estévez] fecha: 31-05-2024 a las 11:09:40. Razón: Añado nota para os ficheros |
#1768
|
||||
|
||||
Gracias por tu aporte compañero.
__________________
Be water my friend. |
#1769
|
||||
|
||||
Ayer sacaron información nueva.
https://www.agenciatributaria.es/AEA...ERI_FACTU.html Se ha incorporado nueva documentación técnica asociada a los sistemas VERI*FACTU y no VERI*FACTU , concretamente un nuevo documento donde se detalla las especificaciones técnicas para la generación de la huella o hash de los registros de facturación y de eventos, en su versión 0.1.0 y con carácter de borrador, hasta la publicación de la Orden Ministerial definitiva. También se ha actualizado la Documentación de descripción de servicios web en su versión 0.3.1. NOTA DEL MODERADOR: Gracias. Actualizo el mensaje número #1 con la recopilación de información y añado el fichero al FTP del club. Última edición por Neftali [Germán.Estévez] fecha: 31-05-2024 a las 10:28:59. |
#1770
|
|||
|
|||
Cita:
Perfecto. Gracias Un pasito más. |
#1771
|
|||
|
|||
Acabo de leer ese artículo y me he puesto a provar de generar el hash como dicen en el ejemplo, mi lenguaje de programación es Harbour y disponemos de la función HB_SHA256 para ese menester.
Así que lo he probado de esa manera como el Pdf para comprovar hash de ejemplos... LogDebug( Upper(HB_SHA256( "IDEmisorFactura=89890001K&NumSerieFactura=12345678/G33&FechaExpedicionFactura=01-01-2024&TipoFactura=F1&CuotaTotal=12.35&ImporteTotal=123.45&Huella=&FechaHoraHusoGenRegistro=2024-01-01T19:20:30+01:00" )) ) LogDebug( Upper(HB_SHA256( "IDEmisorFactura=89890001K&NumSerieFactura=12345679/G34&FechaExpedicionFactura=01-01-2024&TipoFactura=F1&CuotaTotal=12.35&ImporteTotal=123.45&Huella=3C464DAF61ACB827C65FDA19F352A4E3BDC2 C640E9E9FC4CC058073F38F12F60&FechaHoraHusoGenRegistro=2024-01-01T19:20:35+01:00" )) ) Resultados: 3C464DAF61ACB827C65FDA19F352A4E3BDC2C640E9E9FC4CC058073F38F12F60 F7B94CFD8924EDFF273501B01EE5153E4CE8F259766F88CF6ACB8935802A2B97 Correcto!!! Así pues, a pensar en como voy a implementarlo en mi aplicación... |
#1772
|
|||
|
|||
Cita:
aqui tienes tb una de las webs para comprobar los textos a sha256 para comprobar lo que generes. https://www.convertstring.com/es/Hash/SHA256 |
#1773
|
|||
|
|||
Tiene pinta de que la cadena sobre la que se calcula el hash va a ser parte del QR(por la configuracio tipo parámetros dirección web), similar a ticketbai.
Con lo cual, tenedlo en cuenta para no usar caracteres extraños en la separación de número serie/numero se factura que os puedan dar conflictos con ma codificación URI para llamadas a webs. O tendréis que pasar a Uri(hexa) los caracteres que puedan dar conflictos para generar el QR Ejemplo caracteres conflictivos: /+:;,*<>[]\ En el caso de que lo queráis usar, simplemente es pasarlo a hexa por ejemplo el espacio es %20.., aunque el espacio no lo permiten Pero la reprentaciob escrita(para la factura electrónica, no hay que convertirlo) Es una pequeña traba más. Última edición por ermendalenda fecha: 31-05-2024 a las 16:41:32. |
#1774
|
|||
|
|||
aún así, NO entiendo lo de generar la huella si mi SIF SOLAMENTE funciona en modo VERI*FACTU.
¿No es la propia hacienda la que va a hacer la custodia, trazabilidad, inalterabilidad... de los registros que enviemos a su servidor??? De ser así, no entiendo el porque debemos de hacer nuestra "trazabilidad" cuando la trazabilidad corresponde a quien custodie y tenga TODA la información de los registros enviados. No se, no veo la utilidad de nuestro SIF. Yo tengo entendido que debemos generar el registro, transmitir a hacienda e imprimir documento (factura). El SIF VERI*FACTU le corresponde esa tarea, que para lo demás, por eso remitimos los registros generados a hacienda, para quitarnos esa tarea y responsabilidad de guarda-custodia, trazabilidad... ¿Soy yo que lo tengo mal entendido??? |
#1775
|
|||
|
|||
Cita:
Imagina que usas una dll o una api de un tercero, para el envio, que destroza el xml y por ejemplo quita los puntos decimales. Todos los datos serios suelen tener un check de comprobación. Ejemplos: EAN, QR, que además sirve para el que lea el dato se asegure qur lo ha leído correctamente. El encadenamiento además garantiza una trazabilidad cronológica en un solo sentido. Última edición por ermendalenda fecha: 31-05-2024 a las 17:25:33. |
#1776
|
|||
|
|||
Actualizo los fichero con la generación facturae ya entera y validado con el portal FACE
h t t p s://drive.google.com/file/d/1vrtpSGHje-l-3XW6peIGqYxHkH0g9aYx/view?usp=drive_link Ficheros actulizados: SistemaFacturaev3_2_2.pas UFacturaE.pas |
#1777
|
|||
|
|||
Cita:
Hola Delphier, cuidado con las Validacionea son solo estructurales. Me ha pasado que ya me había confiado y he enviado un par de facturas por face y me la han rechazado por no coincidir importes, tenía errores de algún campo con impuesto en vez de sin impuesto... |
#1778
|
|||
|
|||
Cita:
Saludos |
#1779
|
|||
|
|||
Calcular Huella
Delphi 11.3
Código:
Uses System.hash CadenaVerifactu := 'IDEmisorFactura=89890001K&'+ 'NumSerieFactura=12345679/G34&'+ 'FechaExpedicionFactura=01-01-2024&'+ 'TipoFactura=F1&CuotaTotal=12.35&'+ 'ImporteTotal=123.45&'+ 'Huella=3C464DAF61ACB827C65FDA19F352A4E3BDC2C640E9E9FC4CC058073F38F12F60&'+ 'FechaHoraHusoGenRegistro=2024-01-01T19:20:35+01:00'; Result := THashSHA2.GetHashString(CadenaVerifactu,THashSHA2.TSHA2Version.SHA256).ToUpper; Resultado es = F7B94CFD8924EDFF273501B01EE5153E4CE8F259766F88CF6ACB8935802A2B97 |
#1780
|
|||
|
|||
duda Nodo
Buenas tardes, me podrias indicar donde van los siguientes CIERRES de NODOS segun sea una anulacion o alta.
</RegistroAnulacion> </RegistroAlta> Va antes de <TipoHuella>01</TipoHuella> o despues de <Huella>DEFHG...234234G</Huella> gracias |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Hijo de Informáticos | gluglu | Humor | 3 | 13-03-2007 11:05:35 |
Adictos informaticos ... | Trigger | Humor | 2 | 11-10-2004 12:18:32 |
Nosotros los Informáticos | Trigger | Humor | 1 | 10-10-2004 14:58:09 |
Patrón de los Informáticos. | obiwuan | Varios | 20 | 10-09-2003 14:44:54 |
Chistes Informaticos | jhonny | Humor | 2 | 11-08-2003 21:59:09 |
|