Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Ley antifraude 2021 (VERIFACTU) - Programas informáticos (https://www.clubdelphi.com/foros/showthread.php?t=95235)

ermendalenda 29-07-2022 19:25:46

Joder.es que ll que estoy viendo es que la nota de crédito es una anulación propiamente dicha, la diferencia es que la anulación no lleva número de serie ni número de factura.
Yo te digo que en tixketbai lo he solucionado poniendo una serie interna para tener esos negativos en el periodo impositivo en los ue se hizo la anulación y así y3ner más claro los datos.
Por otro lado si es legal deberían compatibilizarlo con verifactu y lo arreglaran si no está contemplado, no pueden saltarse el reglamento de facturación

antoine0 29-07-2022 20:02:43

Cita:

Empezado por sglorka (Mensaje 547668)
Si se anula una factura emitida mediante la emisión de una factura ordinaria en negativo (nota de crédito), esto está permitido por la agencia tributaria en ciertos casos,
¿ Deberíamos crear un registro de anulación de la factura emitida además de crear el registro de la nueva factura negativa?

Deber creo que no: no creo que siga correcto para el caso de una nota de crédito real, es decir emitida por un motivo operacional (devolución, error de cliente) varios días antes, reportada, supuestamente en circulación etc.
Otra pregunta es si ¿Podríamos?
Ahora bien, es difícil ver la diferencia con una nota de crédito «interna» emitida para corregir un error de entrada, dónde las dos facturas se quedan en casa, nadie más que tú, tu contable y tu controlador fiscal se enteren (y esas sí que se pueden anular). Pero en tal caso, hay que anular la primera factura, y también anular la nota de crédito. De no hacerlo, la balance contable no saldrá equilibrada.

Cita:

¿ Podríamos estar duplicando dicha anulación ?
Duplicar una anulación no parece posible: está previsto un campo de respuesta en el servicio web que se llama CSVRegistroDuplicado, cuya descripción es «Código seguro de verificación del registro ya existente en el sistema. Solo se suministra este campo en dos casos:
En la respuesta de la operación de alta: Si el registro enviado es rechazado por estar duplicado.
En la respuesta de la operación de baja: Si el registro enviado es rechazado porque ya está dado de baja.»

Yo diría que no se esperan duplicaciones...

Cita:

Mi pensamiento es que no informamos el registro de anulación y si informamos el registro de de factura de abono.
Contablemente y a efecto de IVA las dos facturas se compensan; pero para eso, hace falta que las dos sigan en el mismo estado; no puede haber una marcada «anulada» y la otra marcada «válida». Por tanto, si informas del registro de la factura de abono / nota de crédito sin informar de su inmediata anulación, no hay que anular la factura inicial.

sglorka 29-07-2022 20:23:46

Anulación de Facturas
 
Gracias por tu comentario.

Entonces podemos estar en un escenario en que no sería necesario anular facturas. Si tenemos un error en los tipos impositivos, fecha de expedición, numeración, etc. podríamos emitir una factura ordinaria en negativo y posteriormente una rectificativa x sustitución que corrige la primera, como indica la consulta vinculante V0902-22 que podemos ver en Iberley fechada en este año. Este procedimiento es más natural ya que entregar un solo documento rectificativo al cliente final podría generar errores al contabilizar dos veces las misma operación, en cambio, con este procedimiento enviamos ambas facturas (la factura de abono y la rectificativa).
En este escenario, entiendo que no debemos informar el registro de anulación, mantenemos la factura inicial como emitida y enviamos dos registros, la factura que abona y la rectificativa.
¿ Podemos estar de acuerdo en este aspecto ?
Saludos

ermendalenda 29-07-2022 20:45:21

Cita:

Empezado por sglorka (Mensaje 547676)
Gracias por tu comentario.

Entonces podemos estar en un escenario en que no sería necesario anular facturas. Si tenemos un error en los tipos impositivos, fecha de expedición, numeración, etc. podríamos emitir una factura ordinaria en negativo y posteriormente una rectificativa x sustitución que corrige la primera, como indica la consulta vinculante V0902-22 que podemos ver en Iberley fechada en este año. Este procedimiento es más natural ya que entregar un solo documento rectificativo al cliente final podría generar errores al contabilizar dos veces las misma operación, en cambio, con este procedimiento enviamos ambas facturas (la factura de abono y la rectificativa).
En este escenario, entiendo que no debemos informar el registro de anulación, mantenemos la factura inicial como emitida y enviamos dos registros, la factura que abona y la rectificativa.
¿ Podemos estar de acuerdo en este aspecto ?
Saludos

Esto es un poco lioso y lo mejor es que hagas una consulta no vinculante a la aeatbpara que te contesten rápido, yo uso pocas veces las anulaciones y la parte de devoluciones anterior a 2013 se permitían las facturas de abono, pero tengo un gran lío con las notas de crédito en ese aspecto, te puedo confirnar que Las facturas de abono hacían referencia a los documentos que se emitían como consecuencia de una devolución. A partir del 1 de enero del 2013, cuando entra en vigor el nuevo reglamento de facturación, este es reemplazado por la factura rectificativa negativa.

nuevo1234 30-07-2022 00:18:16

Cita:

Empezado por ermendalenda (Mensaje 547677)
Esto es un poco lioso y lo mejor es que hagas una consulta no vinculante a la aeatbpara que te contesten rápido, yo uso pocas veces las anulaciones y la parte de devoluciones anterior a 2013 se permitían las facturas de abono, pero tengo un gran lío con las notas de crédito en ese aspecto, te puedo confirnar que Las facturas de abono hacían referencia a los documentos que se emitían como consecuencia de una devolución. A partir del 1 de enero del 2013, cuando entra en vigor el nuevo reglamento de facturación, este es reemplazado por la factura rectificativa negativa.

Pero esto se hará igual que se hacía en el SII. No? Quiero decir q no habrá cambiado. Lo q cada uno hiciese en el SII lo puede seguir haciendo igual ahora

ermendalenda 30-07-2022 18:48:01

Cita:

Empezado por nuevo1234 (Mensaje 547678)
Pero esto se hará igual que se hacía en el SII. No? Quiero decir q no habrá cambiado. Lo q cada uno hiciese en el SII lo puede seguir haciendo igual ahora

Los obligados al SII siguen igual y el reglamento de Facturacion en la que se basa el SII es el mismo por supuesto, cambian detalles técnicos/campos...

ermendalenda 30-07-2022 18:53:56

Borrador XMLs
 
Hola.
os dejo un borrador de los 2 XML para que vayamos practicando/corrigiendo, seguro tengo algún error y ademas me faltan datos de cabecera.
Registro/s de Alta:
Código:

<?xml version="1.0" encoding="UTF-8"?>
<xx:xxxx xmlns:x=xxxxxxxxxxxxxxxxxxx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

<SistemaFacturacionAltaFact>

    <Cabecera>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon></NombreRazon>
            <NIF></NIF>
            <NombreRazonRepresentante></NombreRazonRepresentante>
            <NIFRepresentante></NIFRepresentante>
        </ObligadoEmision>
    </Cabecera>   
    <RegistroAltaFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio></Ejercicio>
                <Periodo></Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF></NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>
            </IdFactura>
            <TipoFactura></TipoFactura>
            <TipoRectificativa></TipoRectificativa>
            <FacturasRectificadas>
                <IdFacturaRectificada>
                    <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                    <FechaExpedicionFacturaEmisor></FechaExpedicionFacturaEmisor>
                </IdFacturaRectificada>
                //...
            </FacturasRectificadas>
            <FacturasSustituidas>
                <IdFacturaSustituida>
                    <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                    <FechaExpedicionFacturaEmisor></FechaExpedicionFacturaEmisor>
                </IdFacturaSustituida>
                //...
            </FacturasSustituidas>
            <ImporteRectificacion>
                <BaseRectificada>
                <CuotaRectificada>
                <CuotaRecargoRectificado>
            </ImporteRectificacion>
            <FechaOperacion>/<FechaOperacion>
            <NumRegistroAcuerdoFacturacion></NumRegistroAcuerdoFacturacion>
            <NumRegistroAcuerdoSistemaInformatico></NumRegistroAcuerdoFacturacion>
            <DescripcionOperacion></DescripcionOperacion>
            <RefExterna></RefExterna>
            <FacturaSimplificadaArticulos7.2_7.3></FacturaSimplificadaArticulos7.2_7.3>
            <FacturaSinIdentifDestinatarioArticulo6.1.d></FacturaSinIdentifDestinatarioArticulo6.1.d>
            <Macrodato></Macrodato>
            <EmitidaPorTercerosODestinatario></EmitidaPorTercerosODestinatario>
            <Tercero>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>
                </IDOtro>
                <NIFRepresentante></NIFRepresentante>
            </Tercero>
            <Contraparte>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>
                </IDOtro>
                <NIFRepresentante></NIFRepresentante>
            </Contraparte>
            <Desglose>
                <DetalleDesglose>
                    <ClaveRegimen></ClaveRegimen>
                    <CalificacionOperacion></CalificacionOperacion>
                    <OperacionExenta></OperacionExenta>
                    <TipoImpositivo></TipoImpositivo>
                    <BaseImponibleOimporteNoSujeto></BaseImponibleOimporteNoSujeto>
                    <BaseImponibleACoste></BaseImponibleACoste>
                    <CuotaRepercutida></CuotaRepercutida>
                    <TipoRecargoEquivalencia></TipoRecargoEquivalencia>
                    <CuotaRecargoEquivalencia></CuotaRecargoEquivalencia>

                </DetalleDesglose>
                //...
            </Desglose>
            <ImporteTotal></ImporteTotal>
            <EntidadSucedida>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
            </EntidadSucedida>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior></IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior></NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior></FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior></HuellaFacturaAnterior>
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>

                </IDOtro>
                <IdSistemaInformatico></IdSistemaInformatico>
                <Version></Version>
                <NumeroInstalacion></NumeroInstalacion>
                <TipoUsoSistema></TipoUsoSistema>
            </SistemaInformatico>
        <RegistroFacturacion>
       
        <DatosControl>
            <Huella></Huella>
            <TipoHash></TipoHash>
            <FechaGenRegistro></FechaGenRegistro>
            <HoraGenRegistro></HoraGenRegistro>
            <HusoHorarioGenRegistro></HusoHorarioGenRegistro>
            <Incidencia></Incidencia>

        </DatosControl>
    </RegistroAltaFacturas>
</SistemaFacturacionAltaFact>

Registro/s de Anulacion:
Código:

<?xml version="1.0" encoding="UTF-8"?>
<xx:xxxx xmlns:x=xxxxxxxxxxxxxxxxxxx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

<SistemaFacturacionBajaFact>

    <CabeceraBaja>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon></NombreRazon>
            <NIF></NIF>
            <NombreRazonRepresentante></NombreRazonRepresentante>
            <NIFRepresentante></NIFRepresentante>
        </ObligadoEmision>
    </CabeceraBaja>
    <RegistroAnulacionFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio></Ejercicio>
                <Periodo></Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF></NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>
            </IdFactura>
            <RefExterna></RefExterna>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior></IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior></NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior></FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior></HuellaFacturaAnterior>
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>

                </IDOtro>
                <IdSistemaInformatico></IdSistemaInformatico>
                <Version></Version>
                <NumeroInstalacion></NumeroInstalacion>
                <TipoUsoSistema></TipoUsoSistema>
            </SistemaInformatico>
        <RegistroFacturacion>
       
        <DatosControl>
            <Huella></Huella>
            <TipoHash></TipoHash>
            <FechaGenRegistro></FechaGenRegistro>
            <HoraGenRegistro></HoraGenRegistro>
            <HusoHorarioGenRegistro></HusoHorarioGenRegistro>
            <Incidencia></Incidencia>

        </DatosControl>
    </RegistroAnulacionFacturas>
    //....
</SistemaFacturacionBajaFact>


nuevo1234 30-07-2022 20:43:13

Cita:

Empezado por ermendalenda (Mensaje 547685)
Hola.
os dejo un borrador de los 2 XML para que vayamos practicando/corrigiendo, seguro tengo algún error y ademas me faltan datos de cabecera.
Registro/s de Alta:
Código:

<?xml version="1.0" encoding="UTF-8"?>
<xx:xxxx xmlns:x=xxxxxxxxxxxxxxxxxxx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

<SistemaFacturacionAltaFact>

    <Cabecera>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon></NombreRazon>
            <NIF></NIF>
            <NombreRazonRepresentante></NombreRazonRepresentante>
            <NIFRepresentante></NIFRepresentante>
        </ObligadoEmision>
    </Cabecera>   
    <RegistroAltaFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio></Ejercicio>
                <Periodo></Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF></NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>
            </IdFactura>
            <TipoFactura></TipoFactura>
            <TipoRectificativa></TipoRectificativa>
            <FacturasRectificadas>
                <IdFacturaRectificada>
                    <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                    <FechaExpedicionFacturaEmisor></FechaExpedicionFacturaEmisor>
                </IdFacturaRectificada>
                //...
            </FacturasRectificadas>
            <FacturasSustituidas>
                <IdFacturaSustituida>
                    <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                    <FechaExpedicionFacturaEmisor></FechaExpedicionFacturaEmisor>
                </IdFacturaSustituida>
                //...
            </FacturasSustituidas>
            <ImporteRectificacion>
                <BaseRectificada>
                <CuotaRectificada>
                <CuotaRecargoRectificado>
            </ImporteRectificacion>
            <FechaOperacion>/<FechaOperacion>
            <NumRegistroAcuerdoFacturacion></NumRegistroAcuerdoFacturacion>
            <NumRegistroAcuerdoSistemaInformatico></NumRegistroAcuerdoFacturacion>
            <DescripcionOperacion></DescripcionOperacion>
            <RefExterna></RefExterna>
            <FacturaSimplificadaArticulos7.2_7.3></FacturaSimplificadaArticulos7.2_7.3>
            <FacturaSinIdentifDestinatarioArticulo6.1.d></FacturaSinIdentifDestinatarioArticulo6.1.d>
            <Macrodato></Macrodato>
            <EmitidaPorTercerosODestinatario></EmitidaPorTercerosODestinatario>
            <Tercero>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>
                </IDOtro>
                <NIFRepresentante></NIFRepresentante>
            </Tercero>
            <Contraparte>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>
                </IDOtro>
                <NIFRepresentante></NIFRepresentante>
            </Contraparte>
            <Desglose>
                <DetalleDesglose>
                    <ClaveRegimen></ClaveRegimen>
                    <CalificacionOperacion></CalificacionOperacion>
                    <OperacionExenta></OperacionExenta>
                    <TipoImpositivo></TipoImpositivo>
                    <BaseImponibleOimporteNoSujeto></BaseImponibleOimporteNoSujeto>
                    <BaseImponibleACoste></BaseImponibleACoste>
                    <CuotaRepercutida></CuotaRepercutida>
                    <TipoRecargoEquivalencia></TipoRecargoEquivalencia>
                    <CuotaRecargoEquivalencia></CuotaRecargoEquivalencia>

                </DetalleDesglose>
                //...
            </Desglose>
            <ImporteTotal></ImporteTotal>
            <EntidadSucedida>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
            </EntidadSucedida>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior></IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior></NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior></FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior></HuellaFacturaAnterior>
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>

                </IDOtro>
                <IdSistemaInformatico></IdSistemaInformatico>
                <Version></Version>
                <NumeroInstalacion></NumeroInstalacion>
                <TipoUsoSistema></TipoUsoSistema>
            </SistemaInformatico>
        <RegistroFacturacion>
       
        <DatosControl>
            <Huella></Huella>
            <TipoHash></TipoHash>
            <FechaGenRegistro></FechaGenRegistro>
            <HoraGenRegistro></HoraGenRegistro>
            <HusoHorarioGenRegistro></HusoHorarioGenRegistro>
            <Incidencia></Incidencia>

        </DatosControl>
    </RegistroAltaFacturas>
</SistemaFacturacionAltaFact>

Registro/s de Anulacion:
Código:

<?xml version="1.0" encoding="UTF-8"?>
<xx:xxxx xmlns:x=xxxxxxxxxxxxxxxxxxx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">

<SistemaFacturacionBajaFact>

    <CabeceraBaja>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon></NombreRazon>
            <NIF></NIF>
            <NombreRazonRepresentante></NombreRazonRepresentante>
            <NIFRepresentante></NIFRepresentante>
        </ObligadoEmision>
    </CabeceraBaja>
    <RegistroAnulacionFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio></Ejercicio>
                <Periodo></Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF></NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor></NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>
            </IdFactura>
            <RefExterna></RefExterna>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior></IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior></NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior></FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior></HuellaFacturaAnterior>
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon></NombreRazon>
                <NIF></NIF>
                <IDOtro>
                    <CodigoPais></CodigoPais>
                    <IDType></IDType>
                    <ID></ID>

                </IDOtro>
                <IdSistemaInformatico></IdSistemaInformatico>
                <Version></Version>
                <NumeroInstalacion></NumeroInstalacion>
                <TipoUsoSistema></TipoUsoSistema>
            </SistemaInformatico>
        <RegistroFacturacion>
       
        <DatosControl>
            <Huella></Huella>
            <TipoHash></TipoHash>
            <FechaGenRegistro></FechaGenRegistro>
            <HoraGenRegistro></HoraGenRegistro>
            <HusoHorarioGenRegistro></HusoHorarioGenRegistro>
            <Incidencia></Incidencia>

        </DatosControl>
    </RegistroAnulacionFacturas>
    //....
</SistemaFacturacionBajaFact>


Creo q con el soapui se pueden generar los xml directamente desde el wsdl. En el pdf hay enlaces a los wsdl y xsd

ermendalenda 31-07-2022 09:52:23

Cita:

Empezado por nuevo1234 (Mensaje 547686)
Creo q con el soapui se pueden generar los xml directamente desde el wsdl. En el pdf hay enlaces a los wsdl y xsd

He intentado generarlo automaticamente con otros conversores desde el xsd y parece que faltan datos. Gracias

ermendalenda 31-07-2022 09:53:17

Prueba
 
Esto es una prueba, aun no hay concreción de los campos/Nodos del XML.

Es importante destacar que la huella(Hash) se calcula en Base al SHA256 del Nodo:
Código:

<RegistroFacturacion>
...
</RegistroFacturacion>

Por otro Lado veo raro que por la longitud del registro de la Huella(64) queda la duda si hay que dejarlo en Hexadecimal o en Base64, lo habitual es Base 64,...pero no sé ¿Que pensais?

Ejemplo Factura Simplificada 1.20Euros pan al 4%IVA
Código:

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


    <Cabecera>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon>EMPRESA DE PRUEBA, S.A.</NombreRazon>
            <NIF>00000006Y</NIF>
        </ObligadoEmision>
    </Cabecera>   
    <RegistroAltaFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio>2022</Ejercicio>
                <Periodo>3T</Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF>00000006Y</NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor>84.2.1.2566</NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>31/07/2022</FechaExpedicionFacturaEmisor>
            </IdFactura>
            <TipoFactura>F2</TipoFactura>
            <FechaOperacion>31/07/2022</FechaOperacion>
            <DescripcionOperacion>VENTA MINORISTA</DescripcionOperacion>
            <Desglose>
                <DetalleDesglose>
                    <ClaveRegimen>01</ClaveRegimen>
                    <TipoImpositivo>4.00</TipoImpositivo>
                    <BaseImponibleOimporteNoSujeto>1.00</BaseImponibleOimporteNoSujeto>
                   
                </DetalleDesglose>
               
            </Desglose>
            <ImporteTotal>1.04</ImporteTotal>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior>00000006Y</IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior>84.2.1.2565</NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior>31/07/2022</FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior>C1E5F4DFA142198FC6D2A0CE1D87B409F867F0CE2964DD89C6FC046089ABAD76</HuellaFacturaAnterior>
       
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon>SISTEMAS INFORMATICOS TPV</NombreRazon>
                <NIF>00000006Y</NIF>
                <IdSistemaInformatico>IDENTIFICADOR AEAT XXXX</IdSistemaInformatico>
                <Version>46.243.1</Version>
                <NumeroInstalacion>45</NumeroInstalacion>
                <TipoUsoSistema>01</TipoUsoSistema>
            </SistemaInformatico>
        </RegistroFacturacion>
       
        <DatosControl>
            <Huella>C1E5F4DFA142198FC6D2A0CE1D87B409F867F0CE2964DD89C6FC046089ABAD76</Huella>
            <TipoHash>01</TipoHash>
            <FechaGenRegistro>31/07/2022</FechaGenRegistro>
            <HoraGenRegistro>09:00:07</HoraGenRegistro>
            <HusoHorarioGenRegistro>02</HusoHorarioGenRegistro>

        </DatosControl>
    </RegistroAltaFacturas>
</SistemaFacturacionAltaFact>


ermendalenda 31-07-2022 12:13:25

Cita:

Empezado por ermendalenda (Mensaje 547688)
Esto es una prueba, aun no hay concreción de los campos/Nodos del XML.

Es importante destacar que la huella(Hash) se calcula en Base al SHA256 del Nodo:
Código:

<RegistroFacturacion>
...
</RegistroFacturacion>

Por otro Lado veo raro que por la longitud del registro de la Huella(64) queda la duda si hay que dejarlo en Hexadecimal o en Base64, lo habitual es Base 64,...pero no sé ¿Que pensais?

Ejemplo Factura Simplificada 1.20Euros pan al 4%IVA
Código:

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


    <Cabecera>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon>EMPRESA DE PRUEBA, S.A.</NombreRazon>
            <NIF>00000006Y</NIF>
        </ObligadoEmision>
    </Cabecera>   
    <RegistroAltaFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio>2022</Ejercicio>
                <Periodo>3T</Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF>00000006Y</NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor>84.2.1.2566</NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>31/07/2022</FechaExpedicionFacturaEmisor>
            </IdFactura>
            <TipoFactura>F2</TipoFactura>
            <FechaOperacion>31/07/2022</FechaOperacion>
            <DescripcionOperacion>VENTA MINORISTA</DescripcionOperacion>
            <Desglose>
                <DetalleDesglose>
                    <ClaveRegimen>01</ClaveRegimen>
                    <TipoImpositivo>4.00</TipoImpositivo>
                    <BaseImponibleOimporteNoSujeto>1.00</BaseImponibleOimporteNoSujeto>
                   
                </DetalleDesglose>
               
            </Desglose>
            <ImporteTotal>1.04</ImporteTotal>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior>00000006Y</IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior>84.2.1.2565</NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior>31/07/2022</FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior>C1E5F4DFA142198FC6D2A0CE1D87B409F867F0CE2964DD89C6FC046089ABAD76</HuellaFacturaAnterior>
       
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon>SISTEMAS INFORMATICOS TPV</NombreRazon>
                <NIF>00000006Y</NIF>
                <IdSistemaInformatico>IDENTIFICADOR AEAT XXXX</IdSistemaInformatico>
                <Version>46.243.1</Version>
                <NumeroInstalacion>45</NumeroInstalacion>
                <TipoUsoSistema>01</TipoUsoSistema>
            </SistemaInformatico>
        </RegistroFacturacion>
       
        <DatosControl>
            <Huella>C1E5F4DFA142198FC6D2A0CE1D87B409F867F0CE2964DD89C6FC046089ABAD76</Huella>
            <TipoHash>01</TipoHash>
            <FechaGenRegistro>31/07/2022</FechaGenRegistro>
            <HoraGenRegistro>09:00:07</HoraGenRegistro>
            <HusoHorarioGenRegistro>02</HusoHorarioGenRegistro>

        </DatosControl>
    </RegistroAltaFacturas>
</SistemaFacturacionAltaFact>


Total 1.04euro iva incluido perdon

ermendalenda 31-07-2022 19:44:45

Código:

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


    <Cabecera>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon>EMPRESA DE PRUEBA, S.A.</NombreRazon>
            <NIF>00000006Y</NIF>
        </ObligadoEmision>
    </Cabecera>   
    <RegistroAltaFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio>2022</Ejercicio>
                <Periodo>3T</Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF>00000006Y</NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor>84.2.1.2566</NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>31/07/2022</FechaExpedicionFacturaEmisor>
            </IdFactura>
            <TipoFactura>F2</TipoFactura>
            <FechaOperacion>31/07/2022</FechaOperacion>
            <DescripcionOperacion>VENTA MINORISTA</DescripcionOperacion>
            <Desglose>
                <DetalleDesglose>
                    <ClaveRegimen>01</ClaveRegimen>
                    <CalificacionOperacion>S1</CalificacionOperacion>
                    <TipoImpositivo>4.00</TipoImpositivo>
                    <BaseImponibleOimporteNoSujeto>1.00</BaseImponibleOimporteNoSujeto>
                    <CuotaRepercutida>0.04</CuotaRepercutida>
                </DetalleDesglose>
            </Desglose>
            <ImporteTotal>1.04</ImporteTotal>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior>00000006Y</IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior>84.2.1.2565</NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior>31/07/2022</FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior>9yYI6U89U3IUIQE345EUGWEBsd7EKFCBP9trtYUJSD0JFFKJKrtthAuysfadfWPE</HuellaFacturaAnterior>
       
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon>SISTEMAS INFORMATICOS TPV</NombreRazon>
                <NIF>00000006Y</NIF>
                <IdSistemaInformatico>IDENTIFICADOR AEAT XXXX</IdSistemaInformatico>
                <Version>46.243.1</Version>
                <NumeroInstalacion>45</NumeroInstalacion>
                <TipoUsoSistema>01</TipoUsoSistema>
            </SistemaInformatico>
        </RegistroFacturacion>
       
        <DatosControl>
            <Huella>005948F5A441A56ABF584804036409719AB89892608FD708BAB8AE5088C896AD</Huella>
            <TipoHash>01</TipoHash>
            <FechaGenRegistro>31/07/2022</FechaGenRegistro>
            <HoraGenRegistro>09:00:07</HoraGenRegistro>
            <HusoHorarioGenRegistro>02</HusoHorarioGenRegistro>
        </DatosControl>
    </RegistroAltaFacturas>
</SistemaFacturacionAltaFact>

Sigo teniendo la duda de si la hiella va en base64 o en hexadeccimal, ya que elsha256 ocupa 44 caracteres y el hex64 y aunque hayan definido una longitud maxima de 64 en el futuo pueden decidirotro tipo de hash y lo mismo esta preparado para sha512... o lo que venga
Me faltaban un par de campos
Código:

<CalificacionOperacion>S1</CalificacionOperacion> <CuotaRepercutida>0.04</CuotaRepercutida>

ermendalenda 01-08-2022 07:59:48

Mínimo registros o mínimo minutos
 
En los sistemas en los que corran muchos usuarios a la vez, puede crearte un problema de saturación de la cola de envío, eso hay que tenerlo en cuenta y ahora no se como resolverlo, por que si el envio maximo son 1000registros y la AEAT no gestiona bien eso y me pone que el envío lo haga cada hora ya la hemos liado, confiemos en que tengan buenos algoritmos.
En lss aplicaciones de escritorio de 1 usuario, da igual el metodo que elijas pero hay que tener en cuenta que si tienes una avería estaría bien tener un sistema preparado para enviar lo que tengas después de los minutos que te dicen, sobre todo para que no te pille un cambio de periodo impositivo en la que tengas que tener el envío hecho antes del día X.
Esto "va a trae cola"

ermendalenda 01-08-2022 08:33:52

Cita:

Empezado por ermendalenda (Mensaje 547693)
En los sistemas en los que corran muchos usuarios a la vez, puede crearte un problema de saturación de la cola de envío, eso hay que tenerlo en cuenta y ahora no se como resolverlo, por que si el envio maximo son 1000registros y la AEAT no gestiona bien eso y me pone que el envío lo haga cada hora ya la hemos liado, confiemos en que tengan buenos algoritmos.
En lss aplicaciones de escritorio de 1 usuario, da igual el metodo que elijas pero hay que tener en cuenta que si tienes una avería estaría bien tener un sistema preparado para enviar lo que tengas después de los minutos que te dicen, sobre todo para que no te pille un cambio de periodo impositivo en la que tengas que tener el envío hecho antes del día X.
Esto "va a trae cola"

Corrijo, hay que 5ener en cuenta que método elijo de envío según el caso. Si tengo una orden de 1000 registros mínimo y 120minut9a mínimo cuando llegue a los 1000 registros puedo enviar, o sea, aunque solo haya pasado 1 minuto.

Neftali [Germán.Estévez] 01-08-2022 08:54:09

Cita:

Empezado por sglorka (Mensaje 547668)
Si se anula una factura emitida mediante la emisión de una factura ordinaria en negativo (nota de crédito), esto está permitido por la agencia tributaria en ciertos casos, ¿Deberíamos crear un registro de anulación de la factura emitida además de crear el registro de la nueva factura negativa?

¿ Podríamos estar duplicando dicha anulación ?
Mi pensamiento es que no informamos el registro de anulación y si informamos el registro de de factura de abono.

Hola.
Yo creo que en este caso a TicketBAI basta con que enviéis la anulación. Justo la anulación es para "borrar" (en cieta manera) una factura que se ha emitido de forma errónea (y en casos muy concretos). Tu caso parace uno de ellos.
La anulación ya incluye información de la factura inicial, por lo que yo creo que con eso basta.

Si enviaras ambas cosas (en ningúna documentación de anulaciones habla de enviar nada más), como tú bien dices, estarías enviando información duplicada.

De todas formas, estas dudas puedes enviarlas al buzón de preguntas técnicas para estar 100% seguro.

afxe 01-08-2022 10:09:02

Respecto a la polémica de las anulaciones/rectificaciones y desde mi punto de vista (ratificado por conocedores de las leyes): Si una factura es del día o del día anterior y no sale de la empresa, la marco como NULA. Si se ha entregado o es de hace más de dos días, siempre una rectificativa (Hacienda admite nota de crédito o factura rectificativa... así que no me complico calculando si se ha presentado IVA o no). Así que a Hacienda le comunicaré la anulación o la nueva factura.

Estoy dando forma al procedimiento para generación y cálculo del Hash (como algunos de vosotros por lo que veo). La Huella de la factura anterior debe formar parte de la Huella de la nueva factura, pero... ¿Cuál es la factura anterior? Supongo que será la anterior dentro de la misma serie ¿no? Si tengo terminales elaborando facturas autónomamente (auto-ventas en ruta, lineales de supermercados, tiendas remotas, venta on-line....) Cada uno calculará la Huella respecto a su factura anterior, según su serie. A la base de datos central, esas facturas llegarán cada cierto tiempo o al final de día... y si no está sujeto al SII, puede que incluso varios días más tarde.

Para el SII, actualmente espero a que todas las facturas estén incorporadas al ERP, se pasan a contabilidad, y una vez contabilizadas (se supone que ya han pasado todos los filtros, rectificaciones y chequeos), se envían a H.P. Normalmente, una factura emitida un día, se envía al SII al día siguiente (si no han habido problemas de comunicaciones). Pero para Veri*factu, es obligatorio enviar la factura inmediatamente, según he entendido, con lo cual no me vale este sistema y trato de replantearlo todo.

newtron 01-08-2022 10:29:06

Efectivamente el tema de las facturas hechas en terminales remotos e independientes es algo que me lleva rondando la cabeza desde que empezó este asunto. ¿Un programa de una pda que emite facturas y no está conectado a internet cómo leches lo resuelves? A mi lo mejor que se me ocurre es asignarle el hash cuando se reciban en la base de datos general entendiendo de que ese hash se calculará por series de facturación.

ermendalenda 01-08-2022 10:57:21

Veo que tenéis un pequeño lío con el calculo del hash:
*Primero: hay que calcularlo inmediatamente por que es seguro que parte del Hash irá en el qr del tiquet.
*Segundo : la huella de la factura anterior, habrá que esperar definición, ya que depende de varias cosas, por ejemplo de si es software con tecnología de escritorio...
Pero lo que si dice la norma es que el encadenamiento no depende de la serie, o sea no hay un encadenamiento por cada serie si emites un ticket desde una máquina y desde la misma máquina inmediatamente después emites otra cosa, una factura ordinaria, una rectificativa o ll que sea, se encadenará con la anterior, en este ejemplo con el ticket.
Parece que hay una incongru3ncia con la definición inicial de las anulaciones, ya que el encadenamiento no tiene sentido pues carecen de serie y número correlativo , además eb cada anulación puede indicar que se anulan varias facturas al igual que en las facturas recapitulativas. En el país Vasco las anulaciones no llevan encadenamiento así que no es de extrañar que cambien esto en verifactu.
Aún falta mucha información , la doctrina, el xsd completo, el webservice...

ermendalenda 01-08-2022 12:24:10

Esquema 1
 
1 Archivos Adjunto(s)
Os dejo adjunto Esquema 1 de Ayuda


ermendalenda 01-08-2022 12:25:37

Esquema 2
 
1 Archivos Adjunto(s)
Esquema 2, sin envio


ermendalenda 01-08-2022 13:23:25

Cita:

Empezado por ermendalenda (Mensaje 547708)
Esquema 2, sin envio
....

Hay que tener en cuenta que los XMLS firmados puede cambiar el método de cálculo de HASH, ya que la misma firma lleva implicita un HASH, probablemente los encadenamientos lleven ese HASH, como aún no existen esas definiciones el esquema es aproximado.

nuevo1234 02-08-2022 13:51:37

Cita:

Empezado por ermendalenda (Mensaje 547690)
Código:

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


    <Cabecera>
        <IDVersion>0.1</IDVersion>
        <ObligadoEmision>       
            <NombreRazon>EMPRESA DE PRUEBA, S.A.</NombreRazon>
            <NIF>00000006Y</NIF>
        </ObligadoEmision>
    </Cabecera>   
    <RegistroAltaFacturas>
        <RegistroFacturacion>
            <PeriodoLiquidacion>
                <Ejercicio>2022</Ejercicio>
                <Periodo>3T</Periodo>
            </PeriodoLiquidacion>
            <IdFactura>
                <IdEmisorFactura>
                    <NIF>00000006Y</NIF>
                </IdEmisorFactura>
                <NumSerieFacturaEmisor>84.2.1.2566</NumSerieFacturaEmisor>
                <FechaExpedicionFacturaEmisor>31/07/2022</FechaExpedicionFacturaEmisor>
            </IdFactura>
            <TipoFactura>F2</TipoFactura>
            <FechaOperacion>31/07/2022</FechaOperacion>
            <DescripcionOperacion>VENTA MINORISTA</DescripcionOperacion>
            <Desglose>
                <DetalleDesglose>
                    <ClaveRegimen>01</ClaveRegimen>
                    <CalificacionOperacion>S1</CalificacionOperacion>
                    <TipoImpositivo>4.00</TipoImpositivo>
                    <BaseImponibleOimporteNoSujeto>1.00</BaseImponibleOimporteNoSujeto>
                    <CuotaRepercutida>0.04</CuotaRepercutida>
                </DetalleDesglose>
            </Desglose>
            <ImporteTotal>1.04</ImporteTotal>
            <EncadenamientoFacturaAnterior>
                <IDEmisorFacturaAnterior>00000006Y</IDEmisorFacturaAnterior>
                <NumSerieFacturaAnterior>84.2.1.2565</NumSerieFacturaAnterior>
                <FechaExpedicionFacturaAnterior>31/07/2022</FechaExpedicionFacturaAnterior>
                <HuellaFacturaAnterior>9yYI6U89U3IUIQE345EUGWEBsd7EKFCBP9trtYUJSD0JFFKJKrtthAuysfadfWPE</HuellaFacturaAnterior>
       
            </EncadenamientoFacturaAnterior>
           
            <SistemaInformatico>
                <NombreRazon>SISTEMAS INFORMATICOS TPV</NombreRazon>
                <NIF>00000006Y</NIF>
                <IdSistemaInformatico>IDENTIFICADOR AEAT XXXX</IdSistemaInformatico>
                <Version>46.243.1</Version>
                <NumeroInstalacion>45</NumeroInstalacion>
                <TipoUsoSistema>01</TipoUsoSistema>
            </SistemaInformatico>
        </RegistroFacturacion>
       
        <DatosControl>
            <Huella>005948F5A441A56ABF584804036409719AB89892608FD708BAB8AE5088C896AD</Huella>
            <TipoHash>01</TipoHash>
            <FechaGenRegistro>31/07/2022</FechaGenRegistro>
            <HoraGenRegistro>09:00:07</HoraGenRegistro>
            <HusoHorarioGenRegistro>02</HusoHorarioGenRegistro>
        </DatosControl>
    </RegistroAltaFacturas>
</SistemaFacturacionAltaFact>

Sigo teniendo la duda de si la hiella va en base64 o en hexadeccimal, ya que elsha256 ocupa 44 caracteres y el hex64 y aunque hayan definido una longitud maxima de 64 en el futuo pueden decidirotro tipo de hash y lo mismo esta preparado para sha512... o lo que venga
Me faltaban un par de campos
Código:

<CalificacionOperacion>S1</CalificacionOperacion> <CuotaRepercutida>0.04</CuotaRepercutida>

SHA-256 es un hash de 64 dígitos hexadecimales (un resumen, por ejemplo bd4526534df7b33772c2f1ee26d97c39ff11379c8848e4e19d74ad849ef66423) casi único de un tamaño fijo de 256 bits (32 bytes). Un hash solo se calcula en una dirección y no se puede decodificar de vuelta.

Por tanto la definición del SHA-256 ya indican que son 64 digitos en hexadecimal. Entiendo que no hay duda

nuevo1234 02-08-2022 13:53:35

Cita:

Empezado por ermendalenda (Mensaje 547711)
Hay que tener en cuenta que los XMLS firmados puede cambiar el método de cálculo de HASH, ya que la misma firma lleva implicita un HASH, probablemente los encadenamientos lleven ese HASH, como aún no existen esas definiciones el esquema es aproximado.

No entiendo. En la firma ya va el hash de los datos que se firman pero con otro algoritmo???

ermendalenda 02-08-2022 19:08:15

Cita:

Empezado por nuevo1234 (Mensaje 547725)
No entiendo. En la firma ya va el hash de los datos que se firman pero con otro algoritmo???

Nada, he mezclado ticketbai con verifactu, la firma (en caso de que no envies será necesaria firma o timestamp o lo que digan) llevará su hash de firma, pero nada que ver con el hash de la huella.
Hegenerado el xml con SoapUI como.indicabas a través del wdsl, lo pondré mañana.
En él podemos ver como se construye el envío con la posibilidad de incluir varias altas con facturas de simplificadas, normales,rectificativas
, sustitutivas o de anulación

Cada vez tengo más claro que con lo de la huella el encadenamiento de la anulación está mal definida o va a ser una cosa rara de blockchain

ermendalenda 02-08-2022 19:21:35

Cita:

Empezado por nuevo1234 (Mensaje 547724)
SHA-256 es un hash de 64 dígitos hexadecimales (un resumen, por ejemplo bd4526534df7b33772c2f1ee26d97c39ff11379c8848e4e19d74ad849ef66423) casi único de un tamaño fijo de 256 bits (32 bytes). Un hash solo se calcula en una dirección y no se puede decodificar de vuelta.

Por tanto la definición del SHA-256 ya indican que son 64 digitos en hexadecimal. Entiendo que no hay duda


Por supuesto el hash es solo en un sentido y es indescifrable(teoricamente ya qur tenemos los futuros quantum que los 256 se los van a comer con patatas y te generarán en un futuro multiples posibles textos descifrados que serviran de referencia para romper el cifrado y dar posibles resultados con tecnología inversa. ya estan trabajando en nuevos protocolos de cifrado)
El sha256=256bits
256bits=64caracteres hexadecimales=32caracteres ascii

ermendalenda 02-08-2022 19:53:53

Cita:

Empezado por ermendalenda (Mensaje 547728)
Por supuesto el hash es solo en un sentido y es indescifrable(teoricamente ya qur tenemos los futuros quantum que los 256 se los van a comer con patatas y te generarán en un futuro multiples posibles textos descifrados que serviran de referencia para romper el cifrado y dar posibles resultados con tecnología inversa. ya estan trabajando en nuevos protocolos de cifrado)
El sha256=256bits
256bits=64caracteres hexadecimales=32caracteres ascii

Pues eso como bien dices son 256bits pero se puede representar en la base que se desee o se indique en cada situación y para los xmls suelen usarse hexa o b64

ermendalenda 02-08-2022 21:56:13

Soap
 
Código:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ds="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"
xmlns:sf="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
  <soapenv:Header/>
  <soapenv:Body>
      <ds:AltaFactuSistemaFacturacion>
        <sf:Cabecera>
            <sf:IDVersion>?</sf:IDVersion>
            <sf:ObligadoEmision>
              <sf:NombreRazon>?</sf:NombreRazon>
              <sf:NIF>?</sf:NIF>
              <!--Optional:-->
              <sf:NombreRazonRepresentante>?</sf:NombreRazonRepresentante>
              <!--Optional:-->
              <sf:NIFRepresentante>?</sf:NIFRepresentante>
            </sf:ObligadoEmision>
        </sf:Cabecera>
        <!--1 to 1000 repetitions:-->
        <ds:RegistroAltaFacturas>
            <ds:RegistroFacturacion>
              <sf:PeriodoLiquidacion>
                  <sf:Ejercicio>?</sf:Ejercicio>
                  <sf:Periodo>?</sf:Periodo>
              </sf:PeriodoLiquidacion>
              <sf:IDFactura>
                  <sf:IDEmisorFactura>
                    <sf:NIF>?</sf:NIF>
                  </sf:IDEmisorFactura>
                  <sf:NumSerieFacturaEmisor>?</sf:NumSerieFacturaEmisor>
                  <sf:FechaExpedicionFacturaEmisor>?</sf:FechaExpedicionFacturaEmisor>
              </sf:IDFactura>
              <sf:TipoFactura>?</sf:TipoFactura>
              <!--Optional:-->
              <sf:TipoRectificativa>?</sf:TipoRectificativa>
              <!--Optional:-->
              <sf:FacturasRectificadas>
                  <!--1 to 1000 repetitions:-->
                  <sf:IDFacturaRectificada>
                    <sf:NumSerieFacturaEmisor>?</sf:NumSerieFacturaEmisor>
                    <sf:FechaExpedicionFacturaEmisor>?</sf:FechaExpedicionFacturaEmisor>
                  </sf:IDFacturaRectificada>
              </sf:FacturasRectificadas>
              <!--Optional:-->
              <sf:FacturasSustituidas>
                  <!--1 to 1000 repetitions:-->
                  <sf:IDFacturasSustituida>
                    <sf:NumSerieFacturaEmisor>?</sf:NumSerieFacturaEmisor>
                    <sf:FechaExpedicionFacturaEmisor>?</sf:FechaExpedicionFacturaEmisor>
                  </sf:IDFacturasSustituida>
              </sf:FacturasSustituidas>
              <!--Optional:-->
              <sf:ImporteRectificacion>
                  <sf:BaseRectificada>?</sf:BaseRectificada>
                  <sf:CuotaRectificada>?</sf:CuotaRectificada>
                  <!--Optional:-->
                  <sf:CuotaRecargoRectificado>?</sf:CuotaRecargoRectificado>
              </sf:ImporteRectificacion>
              <!--Optional:-->
              <sf:FechaOperacion>?</sf:FechaOperacion>
              <!--Optional:-->
              <sf:NumRegistroAcuerdoFacturacion>?</sf:NumRegistroAcuerdoFacturacion>
              <!--Optional:-->
              <sf:NumRegistroAcuerdoSistemaInformatico>?</sf:NumRegistroAcuerdoSistemaInformatico>
              <sf:DescripcionOperacion>?</sf:DescripcionOperacion>
              <!--Optional:-->
              <sf:RefExterna>?</sf:RefExterna>
              <!--Optional:-->
              <sf:FacturaSimplificadaArticulos7.2_7.3>?</sf:FacturaSimplificadaArticulos7.2_7.3>
              <!--Optional:-->
              <sf:FacturaSinIdentifDestinatarioArticulo6.1.d>?</sf:FacturaSinIdentifDestinatarioArticulo6.1.d>
              <!--Optional:-->
              <sf:Macrodato>?</sf:Macrodato>
              <!--Optional:-->
              <sf:EmitidaPorTercerosODestinatario>?</sf:EmitidaPorTercerosODestinatario>
              <!--Optional:-->
              <sf:Tercero>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <!--You have a CHOICE of the next 2 items at this level-->
                  <sf:NIF>?</sf:NIF>
                  <sf:IDOtro>
                    <!--Optional:-->
                    <sf:CodigoPais>?</sf:CodigoPais>
                    <sf:IDType>?</sf:IDType>
                    <sf:ID>?</sf:ID>
                  </sf:IDOtro>
                  <!--Optional:-->
                  <sf:NIFRepresentante>?</sf:NIFRepresentante>
              </sf:Tercero>
              <!--Optional:-->
              <sf:Contraparte>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <!--You have a CHOICE of the next 2 items at this level-->
                  <sf:NIF>?</sf:NIF>
                  <sf:IDOtro>
                    <!--Optional:-->
                    <sf:CodigoPais>?</sf:CodigoPais>
                    <sf:IDType>?</sf:IDType>
                    <sf:ID>?</sf:ID>
                  </sf:IDOtro>
                  <!--Optional:-->
                  <sf:NIFRepresentante>?</sf:NIFRepresentante>
              </sf:Contraparte>
              <sf:Desglose>
                  <!--1 to 10 repetitions:-->
                  <sf:DetalleDesglose>
                    <sf:ClaveRegimen>?</sf:ClaveRegimen>
                    <!--Optional:-->
                    <sf:CalificacionOperacion>?</sf:CalificacionOperacion>
                    <!--Optional:-->
                    <sf:OperacionExenta>?</sf:OperacionExenta>
                    <!--Optional:-->
                    <sf:TipoImpositivo>?</sf:TipoImpositivo>
                    <sf:BaseImponibleOimporteNoSujeto>?</sf:BaseImponibleOimporteNoSujeto>
                    <!--Optional:-->
                    <sf:BaseImponibleACoste>?</sf:BaseImponibleACoste>
                    <!--Optional:-->
                    <sf:CuotaRepercutida>?</sf:CuotaRepercutida>
                    <!--Optional:-->
                    <sf:TipoRecargoEquivalencia>?</sf:TipoRecargoEquivalencia>
                    <!--Optional:-->
                    <sf:CuotaRecargoEquivalencia>?</sf:CuotaRecargoEquivalencia>
                  </sf:DetalleDesglose>
              </sf:Desglose>
              <sf:ImporteTotal>?</sf:ImporteTotal>
              <!--Optional:-->
              <sf:EntidadSucedida>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <sf:NIF>?</sf:NIF>
              </sf:EntidadSucedida>
              <sf:EncadenamientoFacturaAnterior>
                  <sf:IDEmisorFacturaAnterior>
                    <sf:NIF>?</sf:NIF>
                  </sf:IDEmisorFacturaAnterior>
                  <sf:NumSerieFacturaAnterior>?</sf:NumSerieFacturaAnterior>
                  <sf:FechaExpedicionFacturaAnterior>?</sf:FechaExpedicionFacturaAnterior>
                  <sf:HuellaFacturaAnterior>?</sf:HuellaFacturaAnterior>
              </sf:EncadenamientoFacturaAnterior>
              <sf:SistemaInformatico>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <!--You have a CHOICE of the next 2 items at this level-->
                  <sf:NIF>?</sf:NIF>
                  <sf:IDOtro>
                    <!--Optional:-->
                    <sf:CodigoPais>?</sf:CodigoPais>
                    <sf:IDType>?</sf:IDType>
                    <sf:ID>?</sf:ID>
                  </sf:IDOtro>
                  <sf:IdSistemaInformatico>?</sf:IdSistemaInformatico>
                  <sf:Version>?</sf:Version>
                  <sf:NumeroInstalacion>?</sf:NumeroInstalacion>
                  <sf:TipoUsoSistema>?</sf:TipoUsoSistema>
              </sf:SistemaInformatico>
            </ds:RegistroFacturacion>
            <ds:DatosControl>
              <sf:Huella>?</sf:Huella>
              <sf:TipoHash>?</sf:TipoHash>
              <sf:FechaGenRegistro>?</sf:FechaGenRegistro>
              <sf:HoraGenRegistro>?</sf:HoraGenRegistro>
              <sf:HusoHorarioGenRegistro>?</sf:HusoHorarioGenRegistro>
              <!--Optional:-->
              <sf:Incidencia>?</sf:Incidencia>
            </ds:DatosControl>
        </ds:RegistroAltaFacturas>
      </ds:AltaFactuSistemaFacturacion>
  </soapenv:Body>
</soapenv:Envelope>


nincillo 03-08-2022 19:39:45

Cita:

Empezado por ermendalenda (Mensaje 547730)
Código:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ds="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd"
xmlns:sf="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
  <soapenv:Header/>
  <soapenv:Body>
      <ds:AltaFactuSistemaFacturacion>
        <sf:Cabecera>
            <sf:IDVersion>?</sf:IDVersion>
            <sf:ObligadoEmision>
              <sf:NombreRazon>?</sf:NombreRazon>
              <sf:NIF>?</sf:NIF>
              <!--Optional:-->
              <sf:NombreRazonRepresentante>?</sf:NombreRazonRepresentante>
              <!--Optional:-->
              <sf:NIFRepresentante>?</sf:NIFRepresentante>
            </sf:ObligadoEmision>
        </sf:Cabecera>
        <!--1 to 1000 repetitions:-->
        <ds:RegistroAltaFacturas>
            <ds:RegistroFacturacion>
              <sf:PeriodoLiquidacion>
                  <sf:Ejercicio>?</sf:Ejercicio>
                  <sf:Periodo>?</sf:Periodo>
              </sf:PeriodoLiquidacion>
              <sf:IDFactura>
                  <sf:IDEmisorFactura>
                    <sf:NIF>?</sf:NIF>
                  </sf:IDEmisorFactura>
                  <sf:NumSerieFacturaEmisor>?</sf:NumSerieFacturaEmisor>
                  <sf:FechaExpedicionFacturaEmisor>?</sf:FechaExpedicionFacturaEmisor>
              </sf:IDFactura>
              <sf:TipoFactura>?</sf:TipoFactura>
              <!--Optional:-->
              <sf:TipoRectificativa>?</sf:TipoRectificativa>
              <!--Optional:-->
              <sf:FacturasRectificadas>
                  <!--1 to 1000 repetitions:-->
                  <sf:IDFacturaRectificada>
                    <sf:NumSerieFacturaEmisor>?</sf:NumSerieFacturaEmisor>
                    <sf:FechaExpedicionFacturaEmisor>?</sf:FechaExpedicionFacturaEmisor>
                  </sf:IDFacturaRectificada>
              </sf:FacturasRectificadas>
              <!--Optional:-->
              <sf:FacturasSustituidas>
                  <!--1 to 1000 repetitions:-->
                  <sf:IDFacturasSustituida>
                    <sf:NumSerieFacturaEmisor>?</sf:NumSerieFacturaEmisor>
                    <sf:FechaExpedicionFacturaEmisor>?</sf:FechaExpedicionFacturaEmisor>
                  </sf:IDFacturasSustituida>
              </sf:FacturasSustituidas>
              <!--Optional:-->
              <sf:ImporteRectificacion>
                  <sf:BaseRectificada>?</sf:BaseRectificada>
                  <sf:CuotaRectificada>?</sf:CuotaRectificada>
                  <!--Optional:-->
                  <sf:CuotaRecargoRectificado>?</sf:CuotaRecargoRectificado>
              </sf:ImporteRectificacion>
              <!--Optional:-->
              <sf:FechaOperacion>?</sf:FechaOperacion>
              <!--Optional:-->
              <sf:NumRegistroAcuerdoFacturacion>?</sf:NumRegistroAcuerdoFacturacion>
              <!--Optional:-->
              <sf:NumRegistroAcuerdoSistemaInformatico>?</sf:NumRegistroAcuerdoSistemaInformatico>
              <sf:DescripcionOperacion>?</sf:DescripcionOperacion>
              <!--Optional:-->
              <sf:RefExterna>?</sf:RefExterna>
              <!--Optional:-->
              <sf:FacturaSimplificadaArticulos7.2_7.3>?</sf:FacturaSimplificadaArticulos7.2_7.3>
              <!--Optional:-->
              <sf:FacturaSinIdentifDestinatarioArticulo6.1.d>?</sf:FacturaSinIdentifDestinatarioArticulo6.1.d>
              <!--Optional:-->
              <sf:Macrodato>?</sf:Macrodato>
              <!--Optional:-->
              <sf:EmitidaPorTercerosODestinatario>?</sf:EmitidaPorTercerosODestinatario>
              <!--Optional:-->
              <sf:Tercero>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <!--You have a CHOICE of the next 2 items at this level-->
                  <sf:NIF>?</sf:NIF>
                  <sf:IDOtro>
                    <!--Optional:-->
                    <sf:CodigoPais>?</sf:CodigoPais>
                    <sf:IDType>?</sf:IDType>
                    <sf:ID>?</sf:ID>
                  </sf:IDOtro>
                  <!--Optional:-->
                  <sf:NIFRepresentante>?</sf:NIFRepresentante>
              </sf:Tercero>
              <!--Optional:-->
              <sf:Contraparte>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <!--You have a CHOICE of the next 2 items at this level-->
                  <sf:NIF>?</sf:NIF>
                  <sf:IDOtro>
                    <!--Optional:-->
                    <sf:CodigoPais>?</sf:CodigoPais>
                    <sf:IDType>?</sf:IDType>
                    <sf:ID>?</sf:ID>
                  </sf:IDOtro>
                  <!--Optional:-->
                  <sf:NIFRepresentante>?</sf:NIFRepresentante>
              </sf:Contraparte>
              <sf:Desglose>
                  <!--1 to 10 repetitions:-->
                  <sf:DetalleDesglose>
                    <sf:ClaveRegimen>?</sf:ClaveRegimen>
                    <!--Optional:-->
                    <sf:CalificacionOperacion>?</sf:CalificacionOperacion>
                    <!--Optional:-->
                    <sf:OperacionExenta>?</sf:OperacionExenta>
                    <!--Optional:-->
                    <sf:TipoImpositivo>?</sf:TipoImpositivo>
                    <sf:BaseImponibleOimporteNoSujeto>?</sf:BaseImponibleOimporteNoSujeto>
                    <!--Optional:-->
                    <sf:BaseImponibleACoste>?</sf:BaseImponibleACoste>
                    <!--Optional:-->
                    <sf:CuotaRepercutida>?</sf:CuotaRepercutida>
                    <!--Optional:-->
                    <sf:TipoRecargoEquivalencia>?</sf:TipoRecargoEquivalencia>
                    <!--Optional:-->
                    <sf:CuotaRecargoEquivalencia>?</sf:CuotaRecargoEquivalencia>
                  </sf:DetalleDesglose>
              </sf:Desglose>
              <sf:ImporteTotal>?</sf:ImporteTotal>
              <!--Optional:-->
              <sf:EntidadSucedida>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <sf:NIF>?</sf:NIF>
              </sf:EntidadSucedida>
              <sf:EncadenamientoFacturaAnterior>
                  <sf:IDEmisorFacturaAnterior>
                    <sf:NIF>?</sf:NIF>
                  </sf:IDEmisorFacturaAnterior>
                  <sf:NumSerieFacturaAnterior>?</sf:NumSerieFacturaAnterior>
                  <sf:FechaExpedicionFacturaAnterior>?</sf:FechaExpedicionFacturaAnterior>
                  <sf:HuellaFacturaAnterior>?</sf:HuellaFacturaAnterior>
              </sf:EncadenamientoFacturaAnterior>
              <sf:SistemaInformatico>
                  <sf:NombreRazon>?</sf:NombreRazon>
                  <!--You have a CHOICE of the next 2 items at this level-->
                  <sf:NIF>?</sf:NIF>
                  <sf:IDOtro>
                    <!--Optional:-->
                    <sf:CodigoPais>?</sf:CodigoPais>
                    <sf:IDType>?</sf:IDType>
                    <sf:ID>?</sf:ID>
                  </sf:IDOtro>
                  <sf:IdSistemaInformatico>?</sf:IdSistemaInformatico>
                  <sf:Version>?</sf:Version>
                  <sf:NumeroInstalacion>?</sf:NumeroInstalacion>
                  <sf:TipoUsoSistema>?</sf:TipoUsoSistema>
              </sf:SistemaInformatico>
            </ds:RegistroFacturacion>
            <ds:DatosControl>
              <sf:Huella>?</sf:Huella>
              <sf:TipoHash>?</sf:TipoHash>
              <sf:FechaGenRegistro>?</sf:FechaGenRegistro>
              <sf:HoraGenRegistro>?</sf:HoraGenRegistro>
              <sf:HusoHorarioGenRegistro>?</sf:HusoHorarioGenRegistro>
              <!--Optional:-->
              <sf:Incidencia>?</sf:Incidencia>
            </ds:DatosControl>
        </ds:RegistroAltaFacturas>
      </ds:AltaFactuSistemaFacturacion>
  </soapenv:Body>
</soapenv:Envelope>


Hola. ¿Ese XML lo has conseguido utlizando el WSDL?. ¿Podrías decirme como lo haces?. Yo ahora lo estoy intentando haciendo la llamada "GetsfSOAP" para monitorizar en el evento Before y After, pero únicamente me devuelve que la URL está aún si definir.

Estoy probando de esta manera a ver si consigo algo:

Código:

procedure TForm2.Button1Click(Sender: TObject);
var
 regFact : FacturasEmitidasType;
 result : Array_Of_RespuestaExpedidaType;
 arrayfacturas : Array_Of_FacturasEmitidasType;

begin
  regFact := FacturasEmitidasType.Create;
  regFact.RegistroFacturacion := RegistroFacturacionType.create;

  regFact.DatosControl := DatosControlType.Create;

  regFact.RegistroFacturacion.PeriodoLiquidacion := PeriodoLiquidacion.Create;
  regFact.RegistroFacturacion.PeriodoLiquidacion.Ejercicio := '22';
    try
      SetLength(arrayfacturas, 1);
      arrayfacturas[0] := regFact;
      Result := GetsfSOAP(true, '', HTTPRIO1).AltaFactuSistemaFacturacion(arrayfacturas);
    finally
    // Elimino todos los objetos creados
      regFact.Destroy;
    end;
end;


ermendalenda 03-08-2022 21:39:48

Cita:

Empezado por nincillo (Mensaje 547736)
Hola. ¿Ese XML lo has conseguido utlizando el WSDL?. ¿Podrías decirme como lo haces?. Yo ahora lo estoy intentando haciendo la llamada "GetsfSOAP" para monitorizar en el evento Before y After, pero únicamente me devuelve que la URL está aún si definir.

Estoy probando de esta manera a ver si consigo algo:

Código:

procedure TForm2.Button1Click(Sender: TObject);
var
 regFact : FacturasEmitidasType;
 result : Array_Of_RespuestaExpedidaType;
 arrayfacturas : Array_Of_FacturasEmitidasType;

begin
  regFact := FacturasEmitidasType.Create;
  regFact.RegistroFacturacion := RegistroFacturacionType.create;

  regFact.DatosControl := DatosControlType.Create;

  regFact.RegistroFacturacion.PeriodoLiquidacion := PeriodoLiquidacion.Create;
  regFact.RegistroFacturacion.PeriodoLiquidacion.Ejercicio := '22';
    try
      SetLength(arrayfacturas, 1);
      arrayfacturas[0] := regFact;
      Result := GetsfSOAP(true, '', HTTPRIO1).AltaFactuSistemaFacturacion(arrayfacturas);
    finally
    // Elimino todos los objetos creados
      regFact.Destroy;
    end;
end;


Hola con la herramienta soapui como comentó el usuario usuario1234
Te lo puedes descargar gratititamente y generar en un momento, lo vas a ver rápido pero tambien hay muchos tutoriales si lo buscas en Google
Yo he cambiado los prefijos que me había generado que no me gusta mucho que ponga sum: sum1: ...
Es una lástima que uan no haya puesto la referencia del servicio web (Res) de pruebas. Por eso te da error

nincillo 03-08-2022 21:52:17

Cita:

Empezado por ermendalenda (Mensaje 547739)
Hola con la herramienta soapui como comentó el usuario usuario1234
Te lo puedes descargar gratititamente y generar en un momento, lo vas a ver rápido pero tambien hay muchos tutoriales si lo buscas en Google
Yo he cambiado los prefijos que me había generado que no me gusta mucho que ponga sum: sum1: ...
Es una lástima que uan no haya puesto la referencia del servicio web (Res) de pruebas. Por eso te da error

Bueno, con eso una parte parece que ya me la has resulto.

El problema viene después para el envío de la petición, que me temo que desde Delphi 2007 voy a tener problemas con el certificado. ¿Verdad?

ermendalenda 03-08-2022 22:26:39

Cita:

Empezado por nincillo (Mensaje 547740)
Bueno, con eso una parte parece que ya me la has resulto.

El problema viene después para el envío de la petición, que me temo que desde Delphi 2007 voy a tener problemas con el certificado. ¿Verdad?

Para nada. No hay problema. Ya verás, el secreto está en curl ya he hecho un shell de envíos de soap con curl.exe y el certificado es un fichero pt2 o pfx.
Ya iré poniéndolo.

nincillo 03-08-2022 22:34:17

Cita:

Empezado por ermendalenda (Mensaje 547741)
Para nada. No hay problema. Ya verás, el secreto está en curl ya he hecho un shell de envíos de soap con curl.exe y el certificado es un fichero pt2 o pfx.
Ya iré poniéndolo.

Buff, no sabes el peso que me quitas de encima.

Si quieres que te ayude con algún tipo de prueba, ya me dices...

Un saludo.

ermendalenda 03-08-2022 22:53:39

Cita:

Empezado por nincillo (Mensaje 547742)
Buff, no sabes el peso que me quitas de encima.

Si quieres que te ayude con algún tipo de prueba, ya me dices...

Un saludo.

En poco tiempo lo pongo que hay que poner la línea de envío y una explicación
Ve adelantandando mirando el funcionamiento de curl.exe , échale un vistazo a los parámetros para que lo asimiles rápido.
Esto está al alcance de todos los desarrolladores, da igual que programen en cobol delphi versiones antiguas, vb6..

ermendalenda 04-08-2022 08:20:43

Envio De Soap
 
Hola, para los desarrolladores que tenemos lenguajes "Arcaicos", hay 2 soluciones que pasan por Curl.exe y depende de la construcción final del SOAP.
Aunque debes revisar a ver si delphi 2007 tiene librería curl.
Este metodo de envio lo uso para Factura Electrónica y funciona perfectamente, Faceb y Faceb2b por Soap.

Vamos a explicar los parametros del envio:

*El envio(Ojo este es para Factura electronica, aún no tenemos los parametros para Verifactu:

Código:

curl --connect-timeout 10 --insecure -A "FacturaePHP/1.7.1" -H "SOAPAction: https://webservice.face.gob.es#enviarFactura" --data "@C:\....\...\archivo.xml" --cert-type P12 --cert c:\....\fichero_certificado.pfx:clave -H "Content-Type: text/xml" https://se-face-webservice.redsara.es/facturasspp2 -o C:\....\Respuesta_face_o.html -D C:\...\Respuesta_face_D.html
Que consta de varias partes:
--connect-timeout 10 ----> Tiempo de espera ante eventuales problemas de conexión, es recomeendable por que hay casos en que se eterniza la conexión si hay un problema.

--insecure ----> Puede ser necesario para qyue se admitan conexiones SSl poco seguras

-A "FacturaePHP/1.7.1" --> Variable CURLOPT_USERAGENT, pueden solicitar que tenga un contenido especifico en caso de factura electrónica es la versión del esquema utilizado: FacturaPhp/1.7.1

-H "SOAPAction: https://webservice.face.gob.es#enviarFactura" ----> Equivale a la variable CURLOPT_HTTPHEADER= Cabecera de Envio.

-H "Content-Type: text/xml" ----> Otro Contenido de la variable CURLOPT_HTTPHEADER
--data "@C:\tpvision\Facturarealcanasta_FICTICIO_fichero.xml" ---> Fichero a Enviar, construido con el Soap

--cert-type P12 --cert c:\....\fichero_certificado.pfx:clave ----> Certificado Electronico y clave, ojo con esto ya que es demasiado visible, hay que intentar que la ejecución al menos sea invisible y no dejar rastro.

https://se-face-webservice.redsara.es/facturasspp2 ----> Servicio WEB/RES

-o C:\....\Respuesta_face_o.html --> Respuestaen XML se envia al fichero indicado

-D C:\...\Respuesta_face_D.html ---> Respuesta Simple Ok,Ko, Error xxx.., igualmente se envia al ficherro indicado, noponer el mismo qu en -o


Si en la composicion del Soap pidieran, como en Face algun dato del certificado, por ejemplo la variable publica, el soap podrias hacerlo con php, que eso es otra historia que si hace falta ya lo pondré, y en ese caso el envio lo pdrias hacer tambien en php:

Este sería el envio del soap en php, que tambien puedes ejecutarlo con un comando curl desde cualquier aplicacion, si fuera necesario ampliaré esto::
Código:

    $ch = curl_init();
    curl_setopt_array($ch, array(
      CURLOPT_URL => $GLOBALS['endpoint'],
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_SSL_VERIFYPEER => 0,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $req,
      CURLOPT_HTTPHEADER => array(
        "Content-Type: text/xml",
        "SOAPAction: " . $soapAction
      ),
      CURLOPT_USERAGENT => "FacturaePHP/" . $GLOBALS["version"]
    ));
    $res = curl_exec($ch);
    curl_close($ch);
    unset($ch);


ermendalenda 04-08-2022 08:50:21

Una cosa que es jodida:
Curl usa certificados propios (con caducidad) para ejecutarse,así que tened en cuenta que en algún momento hay que actualizarlo.
El último de curl.exe caduca en 2028, que además coincide con la intención global de cambiar los métodos de cifrado actuales, hashes y todo lo que venga. Por eso pienso que han reservado un campo en el que indican el algoritmo para el calculo de hash y actualmente solo admite el sha256

nincillo 04-08-2022 09:00:40

Cita:

Empezado por ermendalenda (Mensaje 547744)
Hola, para los desarrolladores que tenemos lenguajes "Arcaicos", hay 2 soluciones que pasan por Curl.exe y depende de la construcción final del SOAP.
Aunque debes revisar a ver si delphi 2007 tiene librería curl.
Este metodo de envio lo uso para Factura Electrónica y funciona perfectamente, Faceb y Faceb2b por Soap.

Vamos a explicar los parametros del envio:

*El envio(Ojo este es para Factura electronica, aún no tenemos los parametros para Verifactu:

Código:

curl --connect-timeout 10 --insecure -A "FacturaePHP/1.7.1" -H "SOAPAction: https://webservice.face.gob.es#enviarFactura" --data "@C:\....\...\archivo.xml" --cert-type P12 --cert c:\....\fichero_certificado.pfx:clave -H "Content-Type: text/xml" https://se-face-webservice.redsara.es/facturasspp2 -o C:\....\Respuesta_face_o.html -D C:\...\Respuesta_face_D.html
Que consta de varias partes:
--connect-timeout 10 ----> Tiempo de espera ante eventuales problemas de conexión, es recomeendable por que hay casos en que se eterniza la conexión si hay un problema.

--insecure ----> Puede ser necesario para qyue se admitan conexiones SSl poco seguras

-A "FacturaePHP/1.7.1" --> Variable CURLOPT_USERAGENT, pueden solicitar que tenga un contenido especifico en caso de factura electrónica es la versión del esquema utilizado: FacturaPhp/1.7.1

-H "SOAPAction: https://webservice.face.gob.es#enviarFactura" ----> Equivale a la variable CURLOPT_HTTPHEADER= Cabecera de Envio.

-H "Content-Type: text/xml" ----> Otro Contenido de la variable CURLOPT_HTTPHEADER
--data "@C:\tpvision\Facturarealcanasta_FICTICIO_fichero.xml" ---> Fichero a Enviar, construido con el Soap

--cert-type P12 --cert c:\....\fichero_certificado.pfx:clave ----> Certificado Electronico y clave, ojo con esto ya que es demasiado visible, hay que intentar que la ejecución al menos sea invisible y no dejar rastro.

https://se-face-webservice.redsara.es/facturasspp2 ----> Servicio WEB/RES

-o C:\....\Respuesta_face_o.html --> Respuestaen XML se envia al fichero indicado

-D C:\...\Respuesta_face_D.html ---> Respuesta Simple Ok,Ko, Error xxx.., igualmente se envia al ficherro indicado, noponer el mismo qu en -o


Si en la composicion del Soap pidieran, como en Face algun dato del certificado, por ejemplo la variable publica, el soap podrias hacerlo con php, que eso es otra historia que si hace falta ya lo pondré, y en ese caso el envio lo pdrias hacer tambien en php:

Este sería el envio del soap en php, que tambien puedes ejecutarlo con un comando curl desde cualquier aplicacion, si fuera necesario ampliaré esto::
Código:

    $ch = curl_init();
    curl_setopt_array($ch, array(
      CURLOPT_URL => $GLOBALS['endpoint'],
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_SSL_VERIFYPEER => 0,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $req,
      CURLOPT_HTTPHEADER => array(
        "Content-Type: text/xml",
        "SOAPAction: " . $soapAction
      ),
      CURLOPT_USERAGENT => "FacturaePHP/" . $GLOBALS["version"]
    ));
    $res = curl_exec($ch);
    curl_close($ch);
    unset($ch);


Que bueno!!!.

Voy a leerlo con calma unas cuantas veces para digerirlo bien.

Una duda. ¿Para generar el fichero xml desde SOAP, como lo haría con el SOAPUI que me comentaste en un post anterior?

Neftali [Germán.Estévez] 04-08-2022 09:02:14

Aunque no son definitivos (y es otro hilo), el envío será similar a los que hemos hecho en otros proyectos con hacienda (en concreto con TicketBAI).
Puedes mirar más ejemplos de envío con CURL en estos hilos:
https://www.clubdelphi.com/foros/sho...&postcount=769
https://www.clubdelphi.com/foros/sho...&postcount=737
https://www.clubdelphi.com/foros/sho...&postcount=746
https://www.clubdelphi.com/foros/sho...&postcount=889
https://www.clubdelphi.com/foros/sho...postcount=2996

Aprovechando, que en breve imagino que iremos teniendo algo de código, vamos a utilizar el mismo sistema que otras veces y usaremos el segundo mensaje del hilo para ir poniendo referencias a códigos que los usuarios vayan publicando (el primero queda como resumen de datos importantes).

Así, en este primer mensaje del hilo dejamos el resumen, y en este segundo iremos añadiendo referencia a códigos útiles.

Es similar a lo que hemos hecho aquí con TicketBAI (segundo hilo con códigos útiles). Pongo aquí la referencia de TicketBAI, porque como el sistema es muy similar, posiblemente los códigos que hemos utilizado para TicketBAI/Batuz serán iguales o muy similares a los que vamos a utilizar en Veri*Factu. Además hay referencias a como hacer las cosas con diferentes componentes e incluso con diferentes lenguajes.

Recomiendo a todos aquellos que estáis empezando a codificar o que todavía no lo habéis hecho y estáis pensando cómo hacerlo que dediquéis antes algo de tiempo a revisar este mensaje (creo que os puede ser útil y ospuede ayudar a haceros una idea de los que vaís a necesitar -en cuando a componentes-.

ermendalenda 04-08-2022 09:12:50

Cita:

Empezado por nincillo (Mensaje 547746)
Que bueno!!!.

Voy a leerlo con calma unas cuantas veces para digerirlo bien.

Una duda. ¿Para generar el fichero xml desde SOAP, como lo haría con el SOAPUI que me comentaste en un post anterior?

Si el soap es simple lo puedes generar directamente como un archivo de texto respetando las estructuras de los campos/nodos.

ermendalenda 04-08-2022 09:13:51

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 547747)
Aunque no son definitivos (y es otro hilo), el envío será similar a los que hemos hecho en otros proyectos con hacienda (en concreto con TicketBAI).
Puedes mirar más ejemplos de envío con CURL en estos hilos:
https://www.clubdelphi.com/foros/sho...&postcount=769
https://www.clubdelphi.com/foros/sho...&postcount=737
https://www.clubdelphi.com/foros/sho...&postcount=746
https://www.clubdelphi.com/foros/sho...&postcount=889
https://www.clubdelphi.com/foros/sho...postcount=2996

Aprovechando, que en breve imagino que iremos teniendo algo de código, vamos a utilizar el mismo sistema que otras veces y usaremos el segundo mensaje del hilo para ir poniendo referencias a códigos que los usuarios vayan publicando (el primero queda como resumen de datos importantes).

Así, en este primer mensaje del hilo dejamos el resumen, y en este segundo iremos añadiendo referencia a códigos útiles.

Es similar a lo que hemos hecho aquí con TicketBAI (segundo hilo con códigos útiles). Pongo aquí la referencia de TicketBAI, porque como el sistema es muy similar, posiblemente los códigos que hemos utilizado para TicketBAI/Batuz serán iguales o muy similares a los que vamos a utilizar en Veri*Factu. Además hay referencias a como hacer las cosas con diferentes componentes e incluso con diferentes lenguajes.

Recomiendo a todos aquellos que estáis empezando a codificar o que todavía no lo habéis hecho y estáis pensando cómo hacerlo que dediquéis antes algo de tiempo a revisar este mensaje (creo que os puede ser útil y ospuede ayudar a haceros una idea de los que vaís a necesitar -en cuando a componentes-.

Efectivamente en el hilo de ticketbai hay mucha información que se puede aprovecharm

nincillo 06-08-2022 09:18:20

Cita:

Empezado por ermendalenda (Mensaje 547744)
Hola, para los desarrolladores que tenemos lenguajes "Arcaicos", hay 2 soluciones que pasan por Curl.exe y depende de la construcción final del SOAP.
Aunque debes revisar a ver si delphi 2007 tiene librería curl.
Este metodo de envio lo uso para Factura Electrónica y funciona perfectamente, Faceb y Faceb2b por Soap.

Vamos a explicar los parametros del envio:

*El envio(Ojo este es para Factura electronica, aún no tenemos los parametros para Verifactu:

Código:

curl --connect-timeout 10 --insecure -A "FacturaePHP/1.7.1" -H "SOAPAction: https://webservice.face.gob.es#enviarFactura" --data "@C:\....\...\archivo.xml" --cert-type P12 --cert c:\....\fichero_certificado.pfx:clave -H "Content-Type: text/xml" https://se-face-webservice.redsara.es/facturasspp2 -o C:\....\Respuesta_face_o.html -D C:\...\Respuesta_face_D.html
Que consta de varias partes:
--connect-timeout 10 ----> Tiempo de espera ante eventuales problemas de conexión, es recomeendable por que hay casos en que se eterniza la conexión si hay un problema.

--insecure ----> Puede ser necesario para qyue se admitan conexiones SSl poco seguras

-A "FacturaePHP/1.7.1" --> Variable CURLOPT_USERAGENT, pueden solicitar que tenga un contenido especifico en caso de factura electrónica es la versión del esquema utilizado: FacturaPhp/1.7.1

-H "SOAPAction: https://webservice.face.gob.es#enviarFactura" ----> Equivale a la variable CURLOPT_HTTPHEADER= Cabecera de Envio.

-H "Content-Type: text/xml" ----> Otro Contenido de la variable CURLOPT_HTTPHEADER
--data "@C:\tpvision\Facturarealcanasta_FICTICIO_fichero.xml" ---> Fichero a Enviar, construido con el Soap

--cert-type P12 --cert c:\....\fichero_certificado.pfx:clave ----> Certificado Electronico y clave, ojo con esto ya que es demasiado visible, hay que intentar que la ejecución al menos sea invisible y no dejar rastro.

https://se-face-webservice.redsara.es/facturasspp2 ----> Servicio WEB/RES

-o C:\....\Respuesta_face_o.html --> Respuestaen XML se envia al fichero indicado

-D C:\...\Respuesta_face_D.html ---> Respuesta Simple Ok,Ko, Error xxx.., igualmente se envia al ficherro indicado, noponer el mismo qu en -o


Si en la composicion del Soap pidieran, como en Face algun dato del certificado, por ejemplo la variable publica, el soap podrias hacerlo con php, que eso es otra historia que si hace falta ya lo pondré, y en ese caso el envio lo pdrias hacer tambien en php:

Este sería el envio del soap en php, que tambien puedes ejecutarlo con un comando curl desde cualquier aplicacion, si fuera necesario ampliaré esto::
Código:

    $ch = curl_init();
    curl_setopt_array($ch, array(
      CURLOPT_URL => $GLOBALS['endpoint'],
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_SSL_VERIFYPEER => 0,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $req,
      CURLOPT_HTTPHEADER => array(
        "Content-Type: text/xml",
        "SOAPAction: " . $soapAction
      ),
      CURLOPT_USERAGENT => "FacturaePHP/" . $GLOBALS["version"]
    ));
    $res = curl_exec($ch);
    curl_close($ch);
    unset($ch);



Buenos días.
Aprovechando el ejemplo que publicaste he estado haciendo pruebas para el envío de las FacturaE, que actualmente lo estaba haciendo manual, y parece que gracias a tu ejemplo, le voy a poder sacar provecho en automático.
Lo único que he tenido que retocar es la parte donde se indica la url a la que conectarse. Para que funcione bien tuve que dejarlo así:
Código:

"Content-Type: text/xml" -v https://se-face-webservice.redsara.es/facturasspp2"


La franja horaria es GMT +2. Ahora son las 02:01:20.

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