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)

sglorka 09-07-2024 13:13:47

Cita:

Empezado por jodaws (Mensaje 556610)
Buenos días, y hola a toda la comunidad.



Yo tengo una duda con los encadenamientos. Cuando tienes por ejemplo distintas tiendas y que se van sincronizando con una central donde se reciben las facturas simplificadas y las generadas por cada TPV, y además tienes la "central" que recibe todos los datos de las tiendas y además puede hacer otros tipos de facturas con distintas series claro. Tienen que ir encadenadas por serie entiendo no? Porque sinó no veo como saber cual es la última factura para hacer el encadenamiento. He visto la documentación y videos y habla de distinto software que no seria el caso.


Saludos y muchas gracies

Tienes que tener claro varios aspectos de Verifactu para que puedas entender cómo debes encadenar:

1.- Un obligado tributario debe emitir facturas a lo largo de un año fiscal donde su campo SerieNumeroFactura no se repita.
2.- Se introduce el concepto de SIF (sistema informático de facturación) que es el encargado de emitir las facturas y generar los registros de facturación de cada factura, que posteriormente, enviamos a Aeat.
3.- Un mismo obligado puede tener varios SIF's, por ejemplo, un programa de facturación en el servidor central y un Tpv deslocalizado geográficamente que va enviando sus facturas generadas al SIF anterior para su recolección. Ambos pueden emitir facturas, por lo tanto, ambos deben generar sus registros de facturación y ambos deben enviarlos a la Aeat.
Si el Tpv no es capaz de generar facturas por sí mismo, debe enviar al SIf central el documento a emitir, el Sif central emitirá la factura, generará el registro de facturación, lo comunicará a la Aeat y le enviará la factura ya emitida al Tpv para que la imprima. Este es el caso de un sólo SIF con dos programas.
4.- El encadenamiento siempre es por SIF y fecha de creación del registro de facturación.

Espero haberte aclarado el asunto.

antoine0 10-07-2024 12:46:20

Cita:

Empezado por bmfranky (Mensaje 556613)
[...] osea las tienes que encadenar por tiempo independientemente de la serie [...]

Ya. Pero el tiempo es lo que dice el programa que realiza el encadenamiento (no es la hora que dice el TPV sino la de la central, en el ejemplo). Entonces este orden por tiempo debe venir naturalmente.

bmfranky 10-07-2024 12:47:56

Cita:

Empezado por antoine0 (Mensaje 556631)
Ya. Pero el tiempo es lo que dice el programa que realiza el encadenamiento (no es la hora que dice el TPV sino la de la central, en el ejemplo). Entonces este orden por tiempo debe venir naturalmente.

No, segun entiendo, el tiempo, es el de generacion y entrega al cliente de la factura, que es el que se incluye en el QR.

bmfranky 10-07-2024 12:49:11

La verdad es que ahun no he acabado de migrar mi programa a todos los requisitos y ya me estoy volviendo loco... ;-)

antoine0 10-07-2024 13:15:09

Cita:

Empezado por bmfranky (Mensaje 556633)
No, segun entiendo, el tiempo, es el de generacion y entrega al cliente de la factura, que es el que se incluye en el QR.

"generación" es en efecto sinónimo de encadenamiento (una incluye el otro). Es de lo que estoy hablando.
"Entrega al cliente de la factura" ocurrirá después. No tiene el porque de ser el mismo día, y por supuesto no a la misma segundo.

Creo que en el QR solo hay el día, no el detalle de la hora. Tiene que ser la fecha de expedición de la factura, que viene impresa en ella, y que no es exactamente lo mismo que el día de la fecha de generación del registro (son dos campos distintos; para saber si los contenidos deben ser idénticos, hay una discusión detallada sobre este tema en el hilo, y no quiero encender este debate otra vez.)

bmfranky 10-07-2024 13:19:29

Cita:

Empezado por antoine0 (Mensaje 556635)
"generación" es en efecto sinónimo de encadenamiento (una incluye el otro). Es de lo que estoy hablando.
"Entrega al cliente de la factura" ocurrirá después. No tiene el porque de ser el mismo día, y por supuesto no a la misma segundo.

Creo que en el QR solo hay el día, no el detalle de la hora. Tiene que ser la fecha de expedición de la factura, que viene impresa en ella, y que no es exactamente lo mismo que el día de la fecha de generación del registro (son dos campos distintos; para saber si los contenidos deben ser idénticos, hay una discusión detallada sobre este tema en el hilo, y no quiero encender este debate otra vez.)

Tienes razon, la verdad depende del punto de vista, desde el mio , como genero la factura en el momento de realizar la Venta/ Reparacion, no tiene sentido que sean diferentes, pero si la venta, se difiere a la fecha de facturacion, es donde esta la pega.
Gracias ,por la respuesta, yo tampoco quiero encender ninguna discusion, intento entender el procedimiento a realizar y por ello doy "Mi" opinion, un saludo a Tod@s.

ermendalenda 10-07-2024 18:05:19

Hay una cosa que hay que tener en cuenta sobre el encadenamiento por SIF
Puede haber momentos desde un tpv que estés trabajando sobre una nube y cuando se caiga la nube trabajas en modo seguro sobre local.
Yo creo qie el SIF que hace el encadenamiento puede ser cada unidad de tov aunque trabaje sobre una nube y esa nube es la que genere el qr, puesto que cuando estés en modo local sigue por el mismo nunero y serie, se genera en local. No creo que la aeat sea tan Tiquismiquis y pretenda que entres en pánico.
Hay que se congruente en lo que puede ser un SIF. Para mi no hay una definición clara común.

sglorka 10-07-2024 18:19:32

Cita:

Empezado por ermendalenda (Mensaje 556638)
Hay una cosa que hay que tener en cuenta sobre el encadenamiento por SIF
Puede haber momentos desde un tpv que estés trabajando sobre una nube y cuando se caiga la nube trabajas en modo seguro sobre local.
Yo creo qie el SIF que hace el encadenamiento puede ser cada unidad de tov aunque trabaje sobre una nube y esa nube es la que genere el qr, puesto que cuando estés en modo local sigue por el mismo nunero y serie, se genera en local. No creo que la aeat sea tan Tiquismiquis y pretenda que entres en pánico.

No entiendo bien el planteamiento que haces. ¿ Podrías definirlo mejor ?

jlmoli_67 10-07-2024 18:29:54

Encadenamiento En El Central
 
Alguien me podria decir que hacer en este caso?


Tengo tres usuarios que acceden a facturar a un servidor central. A cada uno se asigno la misma serie "FA" y el numero se le asigna a cada uno el ultimo + 1. Imaginad que asigno los numeros 1, 2 y 3 respectivamente. El problema es que los tiempos en que cada factura se cierra son distintos, osea, la factura 2 se cierra por completo antes que la factura 1 ya que consta de mas lineas y el usuario es mas lento. Lo mismo ocurre con la factura 3 , se cierra antes que la 1.


Totalmente listas y cerradas quedarian en este orden segun la hora de cierre:
fa-2 15:00:00

fa-3 15:05:00

fa-1 15:20:00


Como veis la serie y el numero es correlativo (1,2 y 3) pero la hora de cierre de la factura no. La encadenaria manteniendo entonces este orden basado en la hora de cierre (2,3,1) sin importar la serie y numero?


Si baso el encadenamiento en la fecha y hora de creacion y no de cierre entonces los numeros irian continuados (1,2,3) pero no sabria los totales de cada factura porque aun hay facturas abriertas y eso me impide encadenarlas. Ya se que con numeros y series temporales esto se subsanaria facilmente tal como dijo carlos en un post anterior pero estoy tanteando otras posibilidades.



En resumen....., se podria encadenar facturas de una misma serie cuyo numero no van correlativos en el tiempo? (asi podria indexar por hora de cierre, numero de factura) y se acabo el problema.

sglorka 10-07-2024 19:19:30

Cita:

Empezado por jlmoli_67 (Mensaje 556641)
Alguien me podria decir que hacer en este caso?


Tengo tres usuarios que acceden a facturar a un servidor central. A cada uno se asigno la misma serie "FA" y el numero se le asigna a cada uno el ultimo + 1. Imaginad que asigno los numeros 1, 2 y 3 respectivamente. El problema es que los tiempos en que cada factura se cierra son distintos, osea, la factura 2 se cierra por completo antes que la factura 1 ya que consta de mas lineas y el usuario es mas lento. Lo mismo ocurre con la factura 3 , se cierra antes que la 1.


Totalmente listas y cerradas quedarian en este orden segun la hora de cierre:
fa-2 15:00:00

fa-3 15:05:00

fa-1 15:20:00


Como veis la serie y el numero es correlativo (1,2 y 3) pero la hora de cierre de la factura no. La encadenaria manteniendo entonces este orden basado en la hora de cierre (2,3,1) sin importar la serie y numero?


Si baso el encadenamiento en la fecha y hora de creacion y no de cierre entonces los numeros irian continuados (1,2,3) pero no sabria los totales de cada factura porque aun hay facturas abriertas y eso me impide encadenarlas. Ya se que con numeros y series temporales esto se subsanaria facilmente tal como dijo carlos en un post anterior pero estoy tanteando otras posibilidades.

En resumen....., se podria encadenar facturas de una misma serie cuyo numero no van correlativos en el tiempo? (asi podria indexar por hora de cierre, numero de factura) y se acabo el problema.

Ya te digo yo que te llaman a capítulo. La frase que dice textualmente el reglamento en su artículo 9, "... deberán generar automáticamente un registro de facturación de alta de forma simultánea o inmediatamente anterior a la expedición de cada factura." te obliga a utilizar un documento intermedio, ya que por expedición de la factura se entiende el momento en que se obtiene el número de factura válido para un documento y no el momento en que se termina la factura después de haber obtenido un número de factura válido y haber poblado todas sus líneas, descuentos, etc, de lo contario, no tendría sentido lo que dice ese punto del reglamento porque si no hemos terminado la factura no tenemos la información para generar el registro de facturación. Por ello, mi recomendación y creo que es la única solución, es que utilices un documento intermedio, llámalo nota de entrega, albarán, prefactura, etc. Una vez terminado dicho documento, solicitas un número de factura válido y emites la factura con ese contenido y además el registro de facturación. Esto te asegura otro punto del reglamento de facturación y es que debe haber una correlación entre los números de factura y su fecha de emisión

jlmoli_67 10-07-2024 19:25:59

ok, gracias. Tengo en cuenta tu recomendacion

ermendalenda 10-07-2024 19:59:15

Cita:

Empezado por sglorka (Mensaje 556640)
No entiendo bien el planteamiento que haces. ¿ Podrías definirlo mejor ?

Hola
Conozco softwares que están trabajando normalmente online contra un servidor en la nube.
Ese servidor es el que tiene la base datos de tiquets y en la que se proceda, genera, guarda tiquets, contadores y series.
Pero, en las tiendas tienen un tpv que hace de backup y si cae la nube este tpv es el que hace de principal ahora.
Que pasaría si hacemos caso al planteamiento que hemos interpretado todos, incluido yo.
Ese tpv central en la Red local ya no tiene acceso a la nube y por tanto pierde el encadenamiento con el r4sto de tpvs del mismo cif que estén en otras sedes que no sean de la red local. Con lo cual se nos plantea un lío impresionante. Hasta ahora estos tpvs cuando entraban de nuevo en marcha con la nube volcaban a la nube lo que han generado localmente, pero seria imposible de insertar en el encadenamiento con el resto de equipos de otras sedes.
Ahora el mismo planteamiento a nivel local. Un servidor central que lo genera todo en la Red local, y si cae. Cada tpv sigue generando independientemente.
Por tanto, al menos en estas circunstancias y para mí el SIF debe ser cada tpv.

jlmoli_67 10-07-2024 20:17:57

Cita:

Empezado por ermendalenda (Mensaje 556645)
Hola
Conozco softwares que están trabajando normalmente online contra un servidor en la nube.
Ese servidor es el que tiene la base datos de tiquets y en la que se proceda, genera, guarda tiquets, contadores y series.
Pero, en las tiendas tienen un tpv que hace de backup y si cae la nube este tpv es el que hace de principal ahora.
Que pasaría si hacemos caso al planteamiento que hemos interpretado todos, incluido yo.
Ese tpv central en la Red local ya no tiene acceso a la nube y por tanto pierde el encadenamiento con el r4sto de tpvs del mismo cif que estén en otras sedes que no sean de la red local. Con lo cual se nos plantea un lío impresionante. Hasta ahora estos tpvs cuando entraban de nuevo en marcha con la nube volcaban a la nube lo que han generado localmente, pero seria imposible de insertar en el encadenamiento con el resto de equipos de otras sedes.
Ahora el mismo planteamiento a nivel local. Un servidor central que lo genera todo en la Red local, y si cae. Cada tpv sigue generando independientemente.
Por tanto, al menos en estas circunstancias y para mí el SIF debe ser cada tpv.

buenas,
por eso yo he hecho ese planteamiento en mi pregunta anterior porque si extrapolamos lo que yo planteaba sobre la fecha/hora de cierre de factura a la fecha/hora de llegada al servidor de la factura y se pudiera encadenar los registros por dicha fecha/hora de llegada sin importar la serie y numero seria solo el servidor el que generara secuencialmente el encadenamiento y envio pero sino es asi coincido contigo en que "el SIF debe ser cada tpv".

Yo lo que voy buscando es precisamente quitar a los tpvs el trabajo de encadenar y enviar,¿porque?, pues porque despues caducan los certificados, el cliente pasa de todo o no se quiere enterar y cuando se entera te pasa un embolao de mil pares de demonios que tu debes de solucionar para ayer. En fin, sigo dando vueltas al tema.

sglorka 10-07-2024 20:20:06

Cita:

Empezado por ermendalenda (Mensaje 556645)
Hola
Conozco softwares que están trabajando normalmente online contra un servidor en la nube.
Ese servidor es el que tiene la base datos de tiquets y en la que se proceda, genera, guarda tiquets, contadores y series.
Pero, en las tiendas tienen un tpv que hace de backup y si cae la nube este tpv es el que hace de principal ahora.
Que pasaría si hacemos caso al planteamiento que hemos interpretado todos, incluido yo.
Ese tpv central en la Red local ya no tiene acceso a la nube y por tanto pierde el encadenamiento con el r4sto de tpvs del mismo cif que estén en otras sedes que no sean de la red local. Con lo cual se nos plantea un lío impresionante. Hasta ahora estos tpvs cuando entraban de nuevo en marcha con la nube volcaban a la nube lo que han generado localmente, pero seria imposible de insertar en el encadenamiento con el resto de equipos de otras sedes.
Ahora el mismo planteamiento a nivel local. Un servidor central que lo genera todo en la Red local, y si cae. Cada tpv sigue generando independientemente.
Por tanto, al menos en estas circunstancias y para mí el SIF debe ser cada tpv.

Sí, es la forma más segura, que cada tpv sea un SIF diferente dentro de la red generando su línea de facturación con el prefijo de su número de máquina, cada tpv encadena, genera y envía su registro de facturación.
Hay otra alternativa, mientras haya conexión con la nube o con la red de área local, se puede trabajar con un sólo SIF que sería el central y éste se encargaría de generar, encadenar y emitir los registros de facturación. Si un tpv queda fuera de la red por problemas técnicos, podría convertirse automáticamente en SIF dicho tpv y seguir generando sus facturas, encadenamientos y registros de facturación siguiendo otros contadores propios preparados para tal efecto. EN cuanto recupere la conexión, ese tpv deja de actuar como un SIF, mantiene sus contadores para la próxima vez, y se vuelve a integrar en el SIF central.
EL caso extremo, se cae la nube o servidor central, todos los tpv pasarían a trabajar en modo SIF. Ojo, siempre el mismo identificador de SIF para cada Tpv, o sea, que no lo cambie cada vez que cae.

ermendalenda 10-07-2024 20:22:34

Cita:

Empezado por jlmoli_67 (Mensaje 556641)
Alguien me podria decir que hacer en este caso?


Tengo tres usuarios que acceden a facturar a un servidor central. A cada uno se asigno la misma serie "FA" y el numero se le asigna a cada uno el ultimo + 1. Imaginad que asigno los numeros 1, 2 y 3 respectivamente. El problema es que los tiempos en que cada factura se cierra son distintos, osea, la factura 2 se cierra por completo antes que la factura 1 ya que consta de mas lineas y el usuario es mas lento. Lo mismo ocurre con la factura 3 , se cierra antes que la 1.


Totalmente listas y cerradas quedarian en este orden segun la hora de cierre:
fa-2 15:00:00

fa-3 15:05:00

fa-1 15:20:00


Como veis la serie y el numero es correlativo (1,2 y 3) pero la hora de cierre de la factura no. La encadenaria manteniendo entonces este orden basado en la hora de cierre (2,3,1) sin importar la serie y numero?


Si baso el encadenamiento en la fecha y hora de creacion y no de cierre entonces los numeros irian continuados (1,2,3) pero no sabria los totales de cada factura porque aun hay facturas abriertas y eso me impide encadenarlas. Ya se que con numeros y series temporales esto se subsanaria facilmente tal como dijo carlos en un post anterior pero estoy tanteando otras posibilidades.



En resumen....., se podria encadenar facturas de una misma serie cuyo numero no van correlativos en el tiempo? (asi podria indexar por hora de cierre, numero de factura) y se acabo el problema.

El contador lo tienes que tener al final, además, si varios uauarios trabajan sobre la misma serie tienes que tener en cuenta un bloqueo de acceso del contador para que no puedan acceder simultáneamente 2 personas, ya ue podrías duplicar el número, trabaja mucho en este tema por que si no te vas a encontrar con un problema gordo gordo.

ermendalenda 10-07-2024 20:26:43

Cita:

Empezado por jlmoli_67 (Mensaje 556647)
buenas,
por eso yo he hecho ese planteamiento en mi pregunta anterior porque si extrapolamos lo que yo planteaba sobre la fecha/hora de cierre de factura a la fecha/hora de llegada al servidor de la factura y se pudiera encadenar los registros por dicha fecha/hora de llegada sin importar la serie y numero seria solo el servidor el que generara secuencialmente el encadenamiento y envio pero sino es asi coincido contigo en que "el SIF debe ser cada tpv".

Yo lo que voy buscando es precisamente quitar a los tpvs el trabajo de encadenar y enviar,¿porque?, pues porque despues caducan los certificados, el cliente pasa de todo o no se quiere enterar y cuando se entera te pasa un embolao de mil pares de demonios que tu debes de solucionar para ayer. En fin, sigo dando vueltas al tema.

Lo de los certificados te pasaría solo si trabajas en modo No Verifactu, es una de las razones por lo que es recomendable que sea Verifactu, en ese caso no hay que firmar nada, y si necesitas el certificado para el envio es otro tema que no es tan problemático y tiene solución.

jlmoli_67 10-07-2024 20:35:55

Cita:

Empezado por ermendalenda (Mensaje 556650)
Lo de los certificados te pasaría solo si trabajas en modo No Verifactu, es una de las razones por lo que es recomendable que sea Verifactu, en ese caso no hay que firmar nada, y si necesitas el certificado para el envio es otro tema que no es tan problemático y tiene solución.

pero..... no me refiero a la firma del xml sino al certificado de autentificacion de la llamada soap y ese tiene que estar disponible en cada sif para poder firmar la peticion. Por lo tanto , si caducara, mientras que se dan cuenta y una cosa y otra (por muchos mensajes en rojo fusia que lance) tengo clientes capaces de tirarse un mes con estas alertas sin darle mayor importancia. Tengo cada cliente que pa mi se queda y en ese sentido intento que todo fluya con la menor interactuacion del cliente ya que , aunque no seria cosa mia despues de sacar unos cartelones diciendo que algo va mal, lo que no quiero es mas estres del que tengo y ellos son especialistas en crearme dicho estres

ermendalenda 10-07-2024 20:37:27

Por si os sirve como lo he hecho yo:
Aunque tengo certificados instalados en cada tpv, si se pegan un mes caducados me da un poco igual, por que solo lo uso para una última comprobación de los números de identificación fiscal y nombres de clientes contra el servicio de la AEAt, y si están caducados a pasado al menos por la comprobación del cif.
A ver,
1. Genero la factura con su XML HASH, QR y encadenamiento en el tpv
2.Envio el XML verifactu,el xml face y el pdf de la factura a un servidor que es el que se va a encargar de mandarlo COMO TERCERO a verifactu. Con lo cual he encadenado en un SIF y he enviado desde otro punto.
2.El control de errores lo lleva ese servidor que me envía un email con el reporte de Oks o KOs cada cierto tiempo.
3. Si el servidor central detecta que un tpv lleva 30horas sin enviar, me lo incluye en el reporte (durante 1 semana cada dia,mas tiempo es innecesario indica que se ha dejado de usar o ya es conocido el problema) de que ese tpv de ese comercio no está enviando desde tal fecha a tal hora.
4. Si un tpv empieza a enviar cosas extrañas, duplicadas, saltos de numeración etc, me manda un reporte inmediato.
Llevo con este diseño desde 2020 y me va del carajo
Algo de tranquilidad da.

jlmoli_67 10-07-2024 20:49:03

Cita:

Empezado por ermendalenda (Mensaje 556653)
Por si os sirve como lo he hecho yo:
Aunque tengo certificados instalados en cada tpv, si se pegan un mes caducados me da un poco igual, por que solo lo uso para una última comprobación de los números de identificación fiscal y nombres de clientes contra el servicio de la AEAt, y si están caducados a pasado al menos por la comprobación del cif.
A ver,
1. Genero la factura con su XML HASH, QR y encadenamiento en el tpv
2.Envio el XML verifactu,el xml face y el pdf de la factura a un servidor que es el que se va a encargar de mandarlo COMO TERCERO a verifactu. Con lo cual he encadenado en un SIF y he enviado desde otro punto.
2.El control de errores lo lleva ese servidor que me envía un email con el reporte de Oks o KOs cada cierto tiempo.
3. Si el servidor central detecta que un tpv lleva 30horas sin enviar, me lo incluye en el reporte (durante 1 semana cada dia,mas tiempo es innecesario indica que se ha dejado de usar o ya es conocido el problema) de que ese tpv de ese comercio no está enviando desde tal fecha a tal hora.
4. Si un tpv empieza a enviar cosas extrañas, duplicadas, saltos de numeración etc, me manda un reporte inmediato.
Llevo con este diseño desde 2020 y me va del carajo
Algo de tranquilidad da.

Si, si que me sirve. El punto 2 me abre unas alternativas en las que no habia pensado. Hala!! otra noche sin dormir dando vueltas.(jiji)

Muchas gracias

ermendalenda 10-07-2024 20:59:25

Cita:

Empezado por jlmoli_67 (Mensaje 556654)
Si, si que me sirve. El punto 2 me abre unas alternativas en las que no habia pensado. Hala!! otra noche sin dormir dando vueltas.(jiji)

Muchas gracias

Nada, suerte.
Si tienes como yo montón de tpvs, además de varias empresas, franquicias, etc. Es un sistema que funciona bastante bien. Eso sí, ten en cuenta el numero de tpvs que estén simultáneamente enviando, si vas hacer muchas comprobaciones como hago yo, para dimensionar bien el que pongas, lo tuvimos que cambiar por la carga tan inmensa ee tantos tiquets por wegundo
Por que yo compruebo hasta el hash y el encadenamiento, no me fio ni de mí

bmfranky 11-07-2024 09:03:07

Cita:

Empezado por ermendalenda (Mensaje 556653)
Por si os sirve como lo he hecho yo:
Aunque tengo certificados instalados en cada tpv, si se pegan un mes caducados me da un poco igual, por que solo lo uso para una última comprobación de los números de identificación fiscal y nombres de clientes contra el servicio de la AEAt, y si están caducados a pasado al menos por la comprobación del cif.
A ver,
1. Genero la factura con su XML HASH, QR y encadenamiento en el tpv
2.Envio el XML verifactu,el xml face y el pdf de la factura a un servidor que es el que se va a encargar de mandarlo COMO TERCERO a verifactu. Con lo cual he encadenado en un SIF y he enviado desde otro punto.
2.El control de errores lo lleva ese servidor que me envía un email con el reporte de Oks o KOs cada cierto tiempo.
3. Si el servidor central detecta que un tpv lleva 30horas sin enviar, me lo incluye en el reporte (durante 1 semana cada dia,mas tiempo es innecesario indica que se ha dejado de usar o ya es conocido el problema) de que ese tpv de ese comercio no está enviando desde tal fecha a tal hora.
4. Si un tpv empieza a enviar cosas extrañas, duplicadas, saltos de numeración etc, me manda un reporte inmediato.
Llevo con este diseño desde 2020 y me va del carajo
Algo de tranquilidad da.

Hola,buenos dias, ¿podrias comentar como haces la comprobacion de nombres y NIF, en el servicio?

jlmoli_67 11-07-2024 11:15:30

Cita:

Empezado por bmfranky (Mensaje 556660)
Hola,buenos dias, ¿podrias comentar como haces la comprobacion de nombres y NIF, en el servicio?

Hola, en .net uso la funcion compruebacif() que comprueba la validez de un cof-nif haciendo una llamada a las otras funciones que he pegado. Si esta todo ok entonces hago una peticion soap firmada con los datos que tengo del cliente y me responde si dicho cliente esta censado.

Código:

Function compruebacif() As Integer
        compruebacif = 0

        Dim esCIF As Boolean = Verificar_CIF(TextBox3.Text)
        If Len(TextBox3.Text) = 0 Then
            MsgBox("El valor introducido no es correcto.Corrija el problema y vuelva a intentarlo", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Atencion")

            Exit Function
        End If

     


        Dim esNIF As Boolean = Verificar_NIF(TextBox3.Text)
        If esCIF = True Or esNIF = True Then
            ' LabelInfo.Text &= vbCrLf & "Es un CIF: " & TextBox10.Text
            compruebacif = 1

        End If
     

     
    End Function


Public Function Verificar_NIF(ByVal valor As String) As Boolean
        Dim aux As String

        valor = valor.ToUpper ' ponemos la letra en mayúscula
        aux = valor.Substring(0, valor.Length - 1) ' quitamos la letra del NIF

        If aux.Length >= 7 AndAlso IsNumeric(aux) Then
            aux = CalculaNIF(aux) ' calculamos la letra del NIF para comparar con la que tenemos
        Else
            Return False
        End If

        If valor <> aux Then ' comparamos las letras
            Return False
        End If

        Return True
    End Function
    Private Function CalculaNIF(ByVal strA As String) As String

        Const cCADENA As String = "TRWAGMYFPDXBNJZSQVHLCKE"
        Const cNUMEROS As String = "0123456789"
        Dim a, b, c, NIF As Integer
        Dim sb As New StringBuilder

        strA = Trim(strA)
        If Len(strA) = 0 Then Return ""

        ' Dejar sólo los números
        For i As Integer = 0 To strA.Length - 1
            If cNUMEROS.IndexOf(strA(i)) > -1 Then
                sb.Append(strA(i))
            End If
        Next

        strA = sb.ToString
        a = 0
        NIF = CInt(Val(strA))
        Do
            b = CInt(Int(NIF / 24))
            c = NIF - (24 * b)
            a = a + c
            NIF = b
        Loop While b <> 0
        b = CInt(Int(a / 23))
        c = a - (23 * b)

        Return strA & Mid(cCADENA, CInt(c + 1), 1)
    End Function



Public Function Verificar_CIF(ByVal valor As String) As Boolean
        Dim strLetra As String, strNumero As String, strDigit As String
        Dim strDigitAux As String
        Dim auxNum As Integer
        Dim i As Integer
        Dim suma As Integer
        Dim letras As String

        letras = "ABCDEFGHJNPQRSUVW"
        'KLM
        valor = UCase(valor)

        If Len(valor) < 9 OrElse Not IsNumeric(Mid(valor, 2, 7)) Then
            Return False
        End If

        strLetra = Mid(valor, 1, 1)    ' letra del CIF
        strNumero = Mid(valor, 2, 7)    ' Código de Control
        strDigit = Mid(valor, 9)        ' CIF menos primera y última posición

        If InStr(letras, strLetra) = 0 Then ' comprobamos la letra del CIF (1ª posición)
            Return False
        End If

        For i = 1 To 7
            If i Mod 2 = 0 Then
                suma = suma + CInt(Mid(strNumero, i, 1))
            Else
                auxNum = CInt(Mid(strNumero, i, 1)) * 2
                suma = suma + (auxNum \ 10) + (auxNum Mod 10)
            End If
        Next
        suma = (10 - (suma Mod 10)) Mod 10

        Select Case strLetra
            Case "K", "P", "Q", "S"
                suma = suma + 64
                strDigitAux = Chr(suma)
            Case "X"
                strDigitAux = Mid(CalculaNIF(strNumero), 8, 1)
            Case Else
                strDigitAux = CStr(suma)
        End Select

        If strDigit = strDigitAux Then
            Return True
        Else
            Return False
        End If
    End Function

ejemplo peticion:
MINIF=reemplazar por cif-nif
MINOMBRE=reemplazar por el nombre o razon social


<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vnif="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd" xmlns:LocalPart="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">
<soapenv:Header/>
<soapenv:Body>
<vnif:VNifV2Ent>
<vnif:Contribuyente>
<vnif:Nif>MINIF</vnif:Nif>
<vnif:Nombre>MINOMBRE</vnif:Nombre>
</vnif:Contribuyente>
</vnif:VNifV2Ent>
</soapenv:Body>
</soapenv:Envelope>

un saludo

ermendalenda 11-07-2024 11:19:59

Servicio consulta Identificadores fiscales
 
Cita:

Empezado por bmfranky (Mensaje 556660)
Hola,buenos dias, ¿podrias comentar como haces la comprobacion de nombres y NIF, en el servicio?

Buenos días. creo que está en los primeros post del hilo, ya hace años que lo hice y se ha subido al hilo de ticketbai y a éste.
pero te lo dejo aquí, teniendo en cuenta que está para ejecutarlo desde Curl.exe tendrás que pasarlo a los comandos curl de la aplicación que uses, delphi, php.... Ya alguno creo que lo hicieron y lo subieron también.:

Cita:

CURL CIF ESPAÑOL:
curl.exe --connect-timeout 60 -m 60 -S -L -d "@C:\[path donde esta ubicado]\EnvioNif.xml" -o C:\[path respuesta]\RespuestaNif.xml --cert-type P12 --cert c:\[path certificado]\Ciudadano.pfx:82388133 https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP
Fichero ejemplo a enviar en la llamada (EnvioNif.xml)

Código PHP:


<?xml version="1.0" encoding="utf-8"  ?>   - <Spain:Envelope xmlns:Spain="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ELNIF="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">     <Spain:Header />    - <Spain:Body>   - <ELNIF:VNifV2Ent>   - <ELNIF:Contribuyente>     <ELNIF:Nif>B63272603</ELNIF:Nif>     <ELNIF:Nombre>GOOGLE</ELNIF:Nombre>    </ELNIF:Contribuyente>   </ELNIF:VNifV2Ent>   </Spain:Body>   </Spain:Envelope>


Cita:

Curl Extranjero (VIES):
curl.exe --connect-timeout 60 -m 60 -S -L -d "@C:\[path donde esta ubicado]\EnvioNif_extranjero.xml" -o C:\[path respuesta]\RespuestaNif_extranjero.xml http://ec.europa.eu/taxation_customs...heckVatService

Fichero ejemplo a enviar en la llamada (EnvioNif_extranjero.xml)

Código PHP:

<?xml version="1.0" encoding="utf-8"?>
<Extranjero:Envelope xmlns:Extranjero='http://schemas.xmlsoap.org/soap/envelope/'>
     <Extranjero:Body>
         <Datos:checkVat xmlns:Datos='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>
             <Datos:countryCode>FR</Datos:countryCode>
             <Datos:vatNumber>08353523418</Datos:vatNumber>
         </Datos:checkVat>
     </Extranjero:Body>
</Extranjero:Envelope>



A tener en cuenta:
-Se puede hacer consultas de cifs españoles de entidades Juridicas sin poner nombre y devuelve nombre
-Las consultas de los nifs de personas fisicas deben ir acompañado del nombre y apellidos y devolveria el nombre y apellidos exactos registrado en la aeat si hay una coincidencia de un %del nombre.
-Las consultas al VIES(Extranjero) devuelve ademas la direccion.
- Hay que tener en cuenta que tanto en las llamadas como en las respuestas los nombres/apellidos y direcciones deben ser en UTF8

jlmoli_67 11-07-2024 11:21:34

Cita:

Empezado por jlmoli_67 (Mensaje 556663)
Hola, en .net uso la funcion compruebacif() que comprueba la validez de un cof-nif haciendo una llamada a las otras funciones que he pegado. Si esta todo ok entonces hago una peticion soap firmada con los datos que tengo del cliente y me responde si dicho cliente esta censado.

Function compruebacif() As Integer
compruebacif = 0

Dim esCIF As Boolean = Verificar_CIF(TextBox3.Text)
If Len(TextBox3.Text) = 0 Then
MsgBox("El valor introducido no es correcto.Corrija el problema y vuelva a intentarlo", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Atencion")

Exit Function
End If




Dim esNIF As Boolean = Verificar_NIF(TextBox3.Text)
If esCIF = True Or esNIF = True Then
' LabelInfo.Text &= vbCrLf & "Es un CIF: " & TextBox10.Text
compruebacif = 1

End If



End Function


Public Function Verificar_NIF(ByVal valor As String) As Boolean
Dim aux As String

valor = valor.ToUpper ' ponemos la letra en mayúscula
aux = valor.Substring(0, valor.Length - 1) ' quitamos la letra del NIF

If aux.Length >= 7 AndAlso IsNumeric(aux) Then
aux = CalculaNIF(aux) ' calculamos la letra del NIF para comparar con la que tenemos
Else
Return False
End If

If valor <> aux Then ' comparamos las letras
Return False
End If

Return True
End Function
Private Function CalculaNIF(ByVal strA As String) As String

Const cCADENA As String = "TRWAGMYFPDXBNJZSQVHLCKE"
Const cNUMEROS As String = "0123456789"
Dim a, b, c, NIF As Integer
Dim sb As New StringBuilder

strA = Trim(strA)
If Len(strA) = 0 Then Return ""

' Dejar sólo los números
For i As Integer = 0 To strA.Length - 1
If cNUMEROS.IndexOf(strA(i)) > -1 Then
sb.Append(strA(i))
End If
Next

strA = sb.ToString
a = 0
NIF = CInt(Val(strA))
Do
b = CInt(Int(NIF / 24))
c = NIF - (24 * b)
a = a + c
NIF = b
Loop While b <> 0
b = CInt(Int(a / 23))
c = a - (23 * b)

Return strA & Mid(cCADENA, CInt(c + 1), 1)
End Function



Public Function Verificar_CIF(ByVal valor As String) As Boolean
Dim strLetra As String, strNumero As String, strDigit As String
Dim strDigitAux As String
Dim auxNum As Integer
Dim i As Integer
Dim suma As Integer
Dim letras As String

letras = "ABCDEFGHJNPQRSUVW"
'KLM
valor = UCase(valor)

If Len(valor) < 9 OrElse Not IsNumeric(Mid(valor, 2, 7)) Then
Return False
End If

strLetra = Mid(valor, 1, 1) ' letra del CIF
strNumero = Mid(valor, 2, 7) ' Código de Control
strDigit = Mid(valor, 9) ' CIF menos primera y última posición

If InStr(letras, strLetra) = 0 Then ' comprobamos la letra del CIF (1ª posición)
Return False
End If

For i = 1 To 7
If i Mod 2 = 0 Then
suma = suma + CInt(Mid(strNumero, i, 1))
Else
auxNum = CInt(Mid(strNumero, i, 1)) * 2
suma = suma + (auxNum \ 10) + (auxNum Mod 10)
End If
Next
suma = (10 - (suma Mod 10)) Mod 10

Select Case strLetra
Case "K", "P", "Q", "S"
suma = suma + 64
strDigitAux = Chr(suma)
Case "X"
strDigitAux = Mid(CalculaNIF(strNumero), 8, 1)
Case Else
strDigitAux = CStr(suma)
End Select

If strDigit = strDigitAux Then
Return True
Else
Return False
End If
End Function



ejemplo peticion:
MINIF=reemplazar por cif-nif
MINOMBRE=reemplazar por el nombre o razon social


<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vnif="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd" xmlns:LocalPart="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">
<soapenv:Header/>
<soapenv:Body>
<vnif:VNifV2Ent>
<vnif:Contribuyente>
<vnif:Nif>MINIF</vnif:Nif>
<vnif:Nombre>MINOMBRE</vnif:Nombre>
</vnif:Contribuyente>
</vnif:VNifV2Ent>
</soapenv:Body>
</soapenv:Envelope>

un saludo

Se me olvido puntualizar que si el numero comienza y termina por una letra entonces se trata de un extranjero o de una administracion en cuyo caso lo doy por bueno.....por ahora, entre otras cosas porque no se aun como tratarlo.

ermendalenda 11-07-2024 11:38:10

Cita:

Empezado por jlmoli_67 (Mensaje 556665)
Se me olvido puntualizar que si el numero comienza y termina por una letra entonces se trata de un extranjero o de una administracion en cuyo caso lo doy por bueno.....por ahora, entre otras cosas porque no se aun como tratarlo.

Se puede tratar tambien pero los algoritmos de comprobacion los tengo un poco lioso en varias funciones y me cuesta ordenarlo para ponerlos.
Se puede comprobar. NIES, CIFS de organismo oficiales, personas fisicas y entidades juridicas, cada caso tiene sus algoritmos. Lo fui sacando de internet.

bmfranky 11-07-2024 12:25:23

Cita:

Empezado por jlmoli_67 (Mensaje 556663)
Hola, en .net uso la funcion compruebacif() que comprueba la validez de un cof-nif haciendo una llamada a las otras funciones que he pegado. Si esta todo ok entonces hago una peticion soap firmada con los datos que tengo del cliente y me responde si dicho cliente esta censado.

Código:

Function compruebacif() As Integer
        compruebacif = 0

        Dim esCIF As Boolean = Verificar_CIF(TextBox3.Text)
        If Len(TextBox3.Text) = 0 Then
            MsgBox("El valor introducido no es correcto.Corrija el problema y vuelva a intentarlo", MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Atencion")

            Exit Function
        End If

     


        Dim esNIF As Boolean = Verificar_NIF(TextBox3.Text)
        If esCIF = True Or esNIF = True Then
            ' LabelInfo.Text &= vbCrLf & "Es un CIF: " & TextBox10.Text
            compruebacif = 1

        End If
     

     
    End Function


Public Function Verificar_NIF(ByVal valor As String) As Boolean
        Dim aux As String

        valor = valor.ToUpper ' ponemos la letra en mayúscula
        aux = valor.Substring(0, valor.Length - 1) ' quitamos la letra del NIF

        If aux.Length >= 7 AndAlso IsNumeric(aux) Then
            aux = CalculaNIF(aux) ' calculamos la letra del NIF para comparar con la que tenemos
        Else
            Return False
        End If

        If valor <> aux Then ' comparamos las letras
            Return False
        End If

        Return True
    End Function
    Private Function CalculaNIF(ByVal strA As String) As String

        Const cCADENA As String = "TRWAGMYFPDXBNJZSQVHLCKE"
        Const cNUMEROS As String = "0123456789"
        Dim a, b, c, NIF As Integer
        Dim sb As New StringBuilder

        strA = Trim(strA)
        If Len(strA) = 0 Then Return ""

        ' Dejar sólo los números
        For i As Integer = 0 To strA.Length - 1
            If cNUMEROS.IndexOf(strA(i)) > -1 Then
                sb.Append(strA(i))
            End If
        Next

        strA = sb.ToString
        a = 0
        NIF = CInt(Val(strA))
        Do
            b = CInt(Int(NIF / 24))
            c = NIF - (24 * b)
            a = a + c
            NIF = b
        Loop While b <> 0
        b = CInt(Int(a / 23))
        c = a - (23 * b)

        Return strA & Mid(cCADENA, CInt(c + 1), 1)
    End Function



Public Function Verificar_CIF(ByVal valor As String) As Boolean
        Dim strLetra As String, strNumero As String, strDigit As String
        Dim strDigitAux As String
        Dim auxNum As Integer
        Dim i As Integer
        Dim suma As Integer
        Dim letras As String

        letras = "ABCDEFGHJNPQRSUVW"
        'KLM
        valor = UCase(valor)

        If Len(valor) < 9 OrElse Not IsNumeric(Mid(valor, 2, 7)) Then
            Return False
        End If

        strLetra = Mid(valor, 1, 1)    ' letra del CIF
        strNumero = Mid(valor, 2, 7)    ' Código de Control
        strDigit = Mid(valor, 9)        ' CIF menos primera y última posición

        If InStr(letras, strLetra) = 0 Then ' comprobamos la letra del CIF (1ª posición)
            Return False
        End If

        For i = 1 To 7
            If i Mod 2 = 0 Then
                suma = suma + CInt(Mid(strNumero, i, 1))
            Else
                auxNum = CInt(Mid(strNumero, i, 1)) * 2
                suma = suma + (auxNum \ 10) + (auxNum Mod 10)
            End If
        Next
        suma = (10 - (suma Mod 10)) Mod 10

        Select Case strLetra
            Case "K", "P", "Q", "S"
                suma = suma + 64
                strDigitAux = Chr(suma)
            Case "X"
                strDigitAux = Mid(CalculaNIF(strNumero), 8, 1)
            Case Else
                strDigitAux = CStr(suma)
        End Select

        If strDigit = strDigitAux Then
            Return True
        Else
            Return False
        End If
    End Function

ejemplo peticion:
MINIF=reemplazar por cif-nif
MINOMBRE=reemplazar por el nombre o razon social


<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vnif="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd" xmlns:LocalPart="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">
<soapenv:Header/>
<soapenv:Body>
<vnif:VNifV2Ent>
<vnif:Contribuyente>
<vnif:Nif>MINIF</vnif:Nif>
<vnif:Nombre>MINOMBRE</vnif:Nombre>
</vnif:Contribuyente>
</vnif:VNifV2Ent>
</soapenv:Body>
</soapenv:Envelope>

un saludo

Cita:

Empezado por ermendalenda (Mensaje 556664)
Buenos días. creo que está en los primeros post del hilo, ya hace años que lo hice y se ha subido al hilo de ticketbai y a éste.
pero te lo dejo aquí, teniendo en cuenta que está para ejecutarlo desde Curl.exe tendrás que pasarlo a los comandos curl de la aplicación que uses, delphi, php.... Ya alguno creo que lo hicieron y lo subieron también.:



Fichero ejemplo a enviar en la llamada (EnvioNif.xml)

Código PHP:


<?xml version="1.0" encoding="utf-8"  ?>   - <Spain:Envelope xmlns:Spain="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ELNIF="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Ent.xsd">     <Spain:Header />    - <Spain:Body>   - <ELNIF:VNifV2Ent>   - <ELNIF:Contribuyente>     <ELNIF:Nif>B63272603</ELNIF:Nif>     <ELNIF:Nombre>GOOGLE</ELNIF:Nombre>    </ELNIF:Contribuyente>   </ELNIF:VNifV2Ent>   </Spain:Body>   </Spain:Envelope>



Fichero ejemplo a enviar en la llamada (EnvioNif_extranjero.xml)

Código PHP:

<?xml version="1.0" encoding="utf-8"?>
<Extranjero:Envelope xmlns:Extranjero='http://schemas.xmlsoap.org/soap/envelope/'>
     <Extranjero:Body>
         <Datos:checkVat xmlns:Datos='urn:ec.europa.eu:taxud:vies:services:checkVat:types'>
             <Datos:countryCode>FR</Datos:countryCode>
             <Datos:vatNumber>08353523418</Datos:vatNumber>
         </Datos:checkVat>
     </Extranjero:Body>
</Extranjero:Envelope>

A tener en cuenta:
-Se puede hacer consultas de cifs españoles de entidades Juridicas sin poner nombre y devuelve nombre
-Las consultas de los nifs de personas fisicas deben ir acompañado del nombre y apellidos y devolveria el nombre y apellidos exactos registrado en la aeat si hay una coincidencia de un %del nombre.
-Las consultas al VIES(Extranjero) devuelve ademas la direccion.
- Hay que tener en cuenta que tanto en las llamadas como en las respuestas los nombres/apellidos y direcciones deben ser en UTF8


Hola, gracias, por la respuesta, la cusetion de la opcion de curl, no la veo viable para mi, puesto que mi aplicacion es de escritorio y en c#, asi que intentare migrar la version que me ha facilitado jlmoli_67, si lo consigo hacer funcionar os la pasare aqui, por si a alguien le interesa.
Lo que tengo es una verificacion de la estructura y "crc" del NIF,CIF Y NIE en el momento de ingresarlos, lo que me interesaba es consultar si es real y pertenece al cliente, gracias.

ermendalenda 11-07-2024 13:18:40

Cita:

Empezado por bmfranky (Mensaje 556667)
Hola, gracias, por la respuesta, la cusetion de la opcion de curl, no la veo viable para mi, puesto que mi aplicacion es de escritorio y en c#, asi que intentare migrar la version que me ha facilitado jlmoli_67, si lo consigo hacer funcionar os la pasare aqui, por si a alguien le interesa.
Lo que tengo es una verificacion de la estructura y "crc" del NIF,CIF Y NIE en el momento de ingresarlos, lo que me interesaba es consultar si es real y pertenece al cliente, gracias.

Hay más de un estado
Identificado
No identificado
Identificado-revocado

bmfranky 11-07-2024 13:31:58

Cita:

Empezado por ermendalenda (Mensaje 556670)
Hay más de un estado
Identificado
No identificado
Identificado-revocado

Ok, gracias, lo tendre en cuenta al interpretar la respuesta.

antoine0 11-07-2024 14:52:47

Cita:

Empezado por jlmoli_67 (Mensaje 556665)
Se me olvido puntualizar que si el numero comienza y termina por una letra entonces se trata de un extranjero o de una administracion en cuyo caso lo doy por bueno.....por ahora, entre otras cosas porque no se aun como tratarlo.

No es complejo.

Si empieza por X,Y,Z,K,L,M es una persona física, tratarle como una persona española (NIF empezando con dígito) es decir poner nombre, en orden. Además el algoritmo de comprobación de la letra final es el mismo que para los españoles (módulo 23), después de remplazar la Y por 1, la Z por 2 y los demás por 0.

Todos los demás casos (A-J, N-W) son administraciones, empresas y demás entidades jurídicas, extranjeras o mezcladas. La letra de control es realmente un dígito convertido a letra (1->A, 2->B ... 9->I y 0->J) por tanto debe ser entre A y J. Y no debe ser preciso enviar el nombre al servicio.

xamminf 12-07-2024 09:14:49

Cita:

Empezado por antoine0 (Mensaje 556672)
No es complejo.

Si empieza por X,Y,Z,K,L,M es una persona física, tratarle como una persona española (NIF empezando con dígito) es decir poner nombre, en orden. Además el algoritmo de comprobación de la letra final es el mismo que para los españoles (módulo 23), después de remplazar la Y por 1, la Z por 2 y los demás por 0.

Todos los demás casos (A-J, N-W) son administraciones, empresas y demás entidades jurídicas, extranjeras o mezcladas. La letra de control es realmente un dígito convertido a letra (1->A, 2->B ... 9->I y 0->J) por tanto debe ser entre A y J. Y no debe ser preciso enviar el nombre al servicio.


Para el tema de compras/ ventas con la U.E. Hace años estuve viendo lo de comprobar los VAT de empresas U.E. vía VIES
Me llamo la atencion el caos que habia: Una empresa puede estar realizando operaciones intracomunitarias sin estar de alta en VIES. No lo implementé porque entendí que no valía para nada, aunque era muy facil

antoine0 12-07-2024 09:27:52

Cita:

Empezado por xamminf (Mensaje 556682)
Una empresa puede estar realizando operaciones intracomunitarias sin estar de alta en VIES.

¿Huh? A mi no me parecen operaciones intracomunitarias entonces, al menos en el marco del IVA (entregas intracomunitarias exentas, adquisiciones intracomunitarias con mecanismo de inversión de sujeto pasivo, modelo 349 etc.) ¿Puedes detallar un poco los casos que has encontrado?

keys 12-07-2024 09:30:36

En verifactu no lo se. Pero en el SII me encontrado con algún caso de hacer una factura Intracomunitaria contra un cliente/proveedor que no esta en el VIES y devolver un error el sistema.

jlmoli_67 16-07-2024 09:37:01

noticias
 
El amigo FRANCHE acaba de enviarme este enlace
https://technical-regulation-informa...6031/text/D/ES

Parece que algo se mueve

Sistel 16-07-2024 09:57:57

Cita:

Empezado por xamminf (Mensaje 556682)
Para el tema de compras/ ventas con la U.E. Hace años estuve viendo lo de comprobar los VAT de empresas U.E. vía VIES
Me llamo la atencion el caos que habia: Una empresa puede estar realizando operaciones intracomunitarias sin estar de alta en VIES. No lo implementé porque entendí que no valía para nada, aunque era muy facil

Hola,

Hay una forma sencilla de comprobar si un negocio de la UE está dado de alta o no en el VIES:
https://ec.europa.eu/taxation_custom.../vat/YYYYYYYYY

Sustituyes XX por las dos letras del código del país
Sustituyes YYYYYYYYY por el NIF o identificador que se use en ese país.

En el resultado te aparecerá:
..."isValid" : true...
O bien:
..."isValid" : false...

Saludos

keys 16-07-2024 11:49:25

Cita:

Empezado por Sistel (Mensaje 556728)
Hola,

Hay una forma sencilla de comprobar si un negocio de la UE está dado de alta o no en el VIES:
https://ec.europa.eu/taxation_custom.../vat/YYYYYYYYY

Sustituyes XX por las dos letras del código del país
Sustituyes YYYYYYYYY por el NIF o identificador que se use en ese país.

En el resultado te aparecerá:
..."isValid" : true...
O bien:
..."isValid" : false...

Saludos

Tenéis como hacerlo en el siguiente TEma https://www.clubdelphi.com/foros/showthread.php?t=96416

ermendalenda 16-07-2024 15:33:13

Cita:

Empezado por jlmoli_67 (Mensaje 556727)
El amigo FRANCHE acaba de enviarme este enlace
https://technical-regulation-informa...6031/text/D/ES

Parece que algo se mueve

Gracias
Importante informacion

ermendalenda 16-07-2024 15:37:18

Cita:

Empezado por keys (Mensaje 556729)
Tenéis como hacerlo en el siguiente TEma https://www.clubdelphi.com/foros/showthread.php?t=96416

Interesante el enlace.
Habéis probado el de check vat?

ermendalenda 16-07-2024 15:48:11

Pues a ver donde va a ir la url del QR de Facturae
Debe ser un </AdditionalData>
Cita:

datos de la factura. 2. En caso de tratarse de una factura electrónica, destinada al intercambio de su información de forma estructurada entre sistemas informáticos por medios electrónicos, se deberá incluir como un campo independiente la «URL» contenida en el código «QR», no siendo necesario incluir el propio código «QR».

keys 17-07-2024 08:18:20

Cita:

Empezado por ermendalenda (Mensaje 556731)
Interesante el enlace.
Habéis probado el de check vat?

No. Como el otro funciona bien :D

Neftali [Germán.Estévez] 17-07-2024 09:13:39

Publicado hoy en el portal d desarrolladores:

Corrección de erratas en esquemas XSD en sistemas VER*FACTU y no VER*FACTU

Se ha corregido una errata en uno de los esquemas XSD asociado a los sistemas VERI*FACTU y no VERI*FACTU , concretamente en el esquema "SuministroInformacion.xsd".
El campo IDFacturasSustituida pasa a denominarse IDFacturaSustituida dentro de la agrupación FacturasSustituidas en consonancia con FacturasRectificadas y por coherencia con el Diseño de registro publicado.
Este cambio ya se encuentra publicado en los distintos enlaces dispuestos en el Portal de Desarrolladores.
Ante cualquier duda/sugerencia y/o falta de corrección sobre la nueva información publicada, se recuerda el buzón de consultas técnicas de VERI*FACTU: [email protected]

El Link lleva aquí.


La franja horaria es GMT +2. Ahora son las 03:36:33.

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