Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Registros de Facturacion y Eventos (XML) (https://www.clubdelphi.com/foros/forumdisplay.php?f=67)
-   -   Facturas de anticipo (https://www.clubdelphi.com/foros/showthread.php?t=97836)

dbautistadecabo 07-11-2025 12:36:09

Facturas de anticipo
 
Hola a todos. Les he estado leyendo durante meses. Son probablemente ustedes la mejor fuente para implementar Verifactu.

Bueno, al lío. Estoy intentando meter en Verifactu facturas de anticipo y facturas finales que descuentan esos anticipos. Con las facturas de anticipo no tengo ningún problema, son facturas normales y Verifactu las acepta. El problema viene con las facturas finales que descuentan los anticipos (en el caso de mi empresa, con servicios prepago, el importe de la factura final es siempre menor que el de la factura de anticipo, por lo que la factura final queda a 0).

Mi primera idea para la factura final (con descuento de anticipo) fue usar 2 líneas de DetalleDesglose, una con la base imponible de la factura final y otra con la misma base imponible en negativo. Algo así:

Código:

...
<sum1:Desglose>
  <sum1:DetalleDesglose>
    <sum1:Impuesto>03</sum1:Impuesto>
    <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
    <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
    <sum1:TipoImpositivo>7</sum1:TipoImpositivo>
    <sum1:BaseImponibleOimporteNoSujeto>20.04</sum1:BaseImponibleOimporteNoSujeto>
    <sum1:CuotaRepercutida>1.40</sum1:CuotaRepercutida>
  </sum1:DetalleDesglose>
  <sum1:DetalleDesglose>
    <sum1:Impuesto>03</sum1:Impuesto>
    <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
    <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
    <sum1:DescripcionOperacion>Anticipos segun facturas anteriores XXXXX1, XXXXX2</sum1:DescripcionOperacion>
    <sum1:TipoImpositivo>7</sum1:TipoImpositivo>
    <sum1:BaseImponibleOimporteNoSujeto>-20.04</sum1:BaseImponibleOimporteNoSujeto>
    <sum1:CuotaRepercutida>-1.40</sum1:CuotaRepercutida>
  </sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>0</sum1:CuotaTotal>
<sum1:ImporteTotal>0</sum1:ImporteTotal>
...


El problema es que Verifactu responde lo siguiente:

Código:

<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="...">
  <env:Body>
    <env:Fault>
      <faultcode>env:Client</faultcode>
      <faultstring>Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: BaseImponibleOimporteNoSujeto</faultstring>
    </env:Fault>
  </env:Body>
</env:Envelope>


Lo que me hace sospechar que a Verifactu no le gustan las bases imponibles negativas.

¿Cómo hacen ustedes este tipo de operaciones? Mi segunda alternativa es enviar una factura todo a 0 con una descripción:

Código:

<sum1:DescripcionOperacion>Se descuentan anticipos según facturas anteriores XXXXX1, XXXXX2 por el valor de 20.04</sum1:DescripcionOperacion>

pero no sé, me parece feo. ¿Qué opinan?

Gracias por adelantado.

bmfranky 07-11-2025 12:48:49

Cita:

Empezado por dbautistadecabo (Mensaje 569572)
Hola a todos. Les he estado leyendo durante meses. Son probablemente ustedes la mejor fuente para implementar Verifactu.

Bueno, al lío. Estoy intentando meter en Verifactu facturas de anticipo y facturas finales que descuentan esos anticipos. Con las facturas de anticipo no tengo ningún problema, son facturas normales y Verifactu las acepta. El problema viene con las facturas finales que descuentan los anticipos (en el caso de mi empresa, con servicios prepago, el importe de la factura final es siempre menor que el de la factura de anticipo, por lo que la factura final queda a 0).

Mi primera idea para la factura final (con descuento de anticipo) fue usar 2 líneas de DetalleDesglose, una con la base imponible de la factura final y otra con la misma base imponible en negativo. Algo así:

Código:

...
<sum1:Desglose>
  <sum1:DetalleDesglose>
    <sum1:Impuesto>03</sum1:Impuesto>
    <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
    <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
    <sum1:TipoImpositivo>7</sum1:TipoImpositivo>
    <sum1:BaseImponibleOimporteNoSujeto>20.04</sum1:BaseImponibleOimporteNoSujeto>
    <sum1:CuotaRepercutida>1.40</sum1:CuotaRepercutida>
  </sum1:DetalleDesglose>
  <sum1:DetalleDesglose>
    <sum1:Impuesto>03</sum1:Impuesto>
    <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
    <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
    <sum1:DescripcionOperacion>Anticipos segun facturas anteriores XXXXX1, XXXXX2</sum1:DescripcionOperacion>
    <sum1:TipoImpositivo>7</sum1:TipoImpositivo>
    <sum1:BaseImponibleOimporteNoSujeto>-20.04</sum1:BaseImponibleOimporteNoSujeto>
    <sum1:CuotaRepercutida>-1.40</sum1:CuotaRepercutida>
  </sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>0</sum1:CuotaTotal>
<sum1:ImporteTotal>0</sum1:ImporteTotal>
...

El problema es que Verifactu responde lo siguiente:

Código:

<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="...">
  <env:Body>
    <env:Fault>
      <faultcode>env:Client</faultcode>
      <faultstring>Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: BaseImponibleOimporteNoSujeto</faultstring>
    </env:Fault>
  </env:Body>
</env:Envelope>

Lo que me hace sospechar que a Verifactu no le gustan las bases imponibles negativas.

¿Cómo hacen ustedes este tipo de operaciones? Mi segunda alternativa es enviar una factura todo a 0 con una descripción:

Código:

<sum1:DescripcionOperacion>Se descuentan anticipos según facturas anteriores XXXXX1, XXXXX2 por el valor de 20.04</sum1:DescripcionOperacion>
pero no sé, me parece feo. ¿Qué opinan?

Gracias por adelantado.

Hola, lo esta enfocando mal, ha de descontar del total el importe de una , a la otra y solo subir el resultado, sea positivo o negativo, para explicarme mejor cuente la factura de anticipo como si fuese un material mas, pero con el importe negativo.
El error lo obtiene por poner 2 lineas con el mismo tipo impositivo, le devuelve ese error pero es por eso.

dbautistadecabo 07-11-2025 13:04:32

Cita:

Empezado por bmfranky (Mensaje 569574)
Hola, lo esta enfocando mal, ha de descontar del total el importe de una , a la otra y solo subir el resultado, sea positivo o negativo, para explicarme mejor cuente la factura de anticipo como si fuese un material mas, pero con el importe negativo.
El error lo obtiene por poner 2 lineas con el mismo tipo impositivo, le devuelve ese error pero es por eso.

O sea, que en una factura de anticipo de 20.04 EUR y en una final de 20.04 EUR (que descuentan esos 20.04 EUR), tendría que hacer:

Factura de anticipo:

Código:

...
<sum1:NumSerieFactura>A00001</sum1:NumSerieFactura>
...
<sum1:Desglose>
  <sum1:DetalleDesglose>
    <sum1:Impuesto>03</sum1:Impuesto>
    <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
    <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
    <sum1:TipoImpositivo>7</sum1:TipoImpositivo>
    <sum1:BaseImponibleOimporteNoSujeto>20.04</sum1:BaseImponibleOimporteNoSujeto>
    <sum1:CuotaRepercutida>1.40</sum1:CuotaRepercutida>
  </sum1:DetalleDesglose>
<sum1:Desglose>
<sum1:CuotaTotal>1.40</sum1:CuotaTotal>
<sum1:ImporteTotal>20.04</sum1:ImporteTotal>


Factura final (también de 20.04 EUR pero que descuenta los 20.04 EUR de anticipo):

Código:

...
<sum1:NumSerieFactura>N00001</sum1:NumSerieFactura>
...
<sum1:Desglose>
  <sum1:DetalleDesglose>
    <sum1:Impuesto>03</sum1:Impuesto>
    <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
    <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
    <sum1:DescripcionOperacion>Se descuenta anticipo según factura anterior A00001 por el valor de 20.04</sum1:DescripcionOperacion>
    <sum1:TipoImpositivo>7</sum1:TipoImpositivo>
    <sum1:BaseImponibleOimporteNoSujeto>0.00</sum1:BaseImponibleOimporteNoSujeto>
    <sum1:CuotaRepercutida>0.00</sum1:CuotaRepercutida>
  </sum1:DetalleDesglose>
<sum1:Desglose>
<sum1:CuotaTotal>0</sum1:CuotaTotal>
<sum1:ImporteTotal>0</sum1:ImporteTotal>


¿Es correcto?

jakematespain 07-11-2025 14:06:15

Hola, viendo el esquema del xml, he realizado una prueba. Hay casos en los que se puede dar que una factura tenga varias claveregimen, por ejemplo algún producto que se tenga que aplicar inversión de sujeto pasivo y otros productos no, en la misma factura. Por lo que hemos estructurado el xml por claveregimen, de forma que si que me admite lo siguiente, este primer ejemplo son dos productos. Estamos aplicando 3 ivas, pero los hemos cada uno separado por su clave regimen, aunque sea la misma. No da ningún error en pruebas, pero no se si es correcto esto. Ya digo que lo hacemos para los casos en que se den diferentes claves dentro de una misma factura.
Gracias.
------
<sum1:NumSerieFactura>N2500156</sum1:NumSerieFactura>
----

<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>4</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>4</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>10</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>10</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>35</sum1:CuotaTotal>
<sum1:ImporteTotal>335</sum1:ImporteTotal>

dbautistadecabo 07-11-2025 14:20:11

Buen aporte, pero en ese ejemplo tienes diferentes tipos impositivos. En el caso de restar lo que traía una factura de anticipo anterior, son los mismos tipos impositivos. Yo diría que @bmfranky ha dado con la clave del asunto y hay que enviar la factura final quitándole el anticipo en el importe (aunque la factura acabe siendo 0).


A no ser que a alguien se le ocurra algo más elegante.

jakematespain 07-11-2025 15:00:09

Si, lo que dice el compañero es correcto, mi duda era que al ver el error, he comprobado como lo mandamos nosotros, hicimos una modificación ya que antes sólo permitíamos el envío de facturas que usaban un sola claveregimen, pero a raíz de esa modificación lo estamos enviado de esa forma y no nos da ningún error. Era por si algún compañero veía algo raro.
Gracias

ermendalenda 07-11-2025 15:12:39

Cita:

Empezado por dbautistadecabo (Mensaje 569586)
Buen aporte, pero en ese ejemplo tienes diferentes tipos impositivos. En el caso de restar lo que traía una factura de anticipo anterior, son los mismos tipos impositivos. Yo diría que @bmfranky ha dado con la clave del asunto y hay que enviar la factura final quitándole el anticipo en el importe (aunque la factura acabe siendo 0).


A no ser que a alguien se le ocurra algo más elegante.


Esa forma es la más correcta, la segunda posibilidad(menos elegante aunque creo qie admisible , una factura de abono justamente anterior y la factura nueva, no sé puede que algún cliente necesite la factura con los importes por temas de contabilidad, pero habria que entregarles ambas.

aleixep 07-11-2025 15:47:04

Cita:

Empezado por jakematespain (Mensaje 569585)
Hola, viendo el esquema del xml, he realizado una prueba. Hay casos en los que se puede dar que una factura tenga varias claveregimen, por ejemplo algún producto que se tenga que aplicar inversión de sujeto pasivo y otros productos no, en la misma factura. Por lo que hemos estructurado el xml por claveregimen, de forma que si que me admite lo siguiente, este primer ejemplo son dos productos. Estamos aplicando 3 ivas, pero los hemos cada uno separado por su clave regimen, aunque sea la misma. No da ningún error en pruebas, pero no se si es correcto esto. Ya digo que lo hacemos para los casos en que se den diferentes claves dentro de una misma factura.
Gracias.
------
<sum1:NumSerieFactura>N2500156</sum1:NumSerieFactura>
----

<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>4</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>4</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>10</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>10</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>35</sum1:CuotaTotal>
<sum1:ImporteTotal>335</sum1:ImporteTotal>

¡Buenas tardes!

Tan solo un apunte, una operación con Inversión del Sujeto Pasivo se identificará mediante CalificacionOperacion (siento CalificacionOperacion=S2 una factura ISP) y no mediante ClaveRegimen.

Seguro que lo tienes controlado, pero solo es por si acaso. :)

¡Espero que sirva!

jakematespain 07-11-2025 17:41:45

Si, perdón, con tantas cosas que lleva uno, jejeje. Esta sería una factura con diferentes tipos impositivos y con inversión de sujeto pasivo.
Mi duda es si es correcto informar en cada tipo impositivo de esta forma, en usar dos bloques, uno para el sujeto pasivo (S2) y otra para el normal (S1).
Gracias

------------------
<sum1:NumSerieFactura>N2500138</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>04-11-2025</sum1:FechaExpedicionFactura>
------------
<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S2</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>0</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>0</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>

<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>4</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>144.23</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>5.77</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>

<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>10</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>136.36</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>13.64</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>

<sum1:DetalleDesglose>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>82.64</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>17.35</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>

</sum1:Desglose>
<sum1:CuotaTotal>36.76</sum1:CuotaTotal>
<sum1:ImporteTotal>499.99</sum1:ImporteTotal>


La franja horaria es GMT +2. Ahora son las 14:57:24.

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