Modulo De Factura Electrónica Para Desarrolladores

Nadie opinó sobre este servicio. ¡Sé el primero!
Park Way 0, Lagomar, Canelones
Precio U$S 976
(099) 495475 26826065
¡Listo! Ya enviamos tu consulta. Hacer otra consulta.
¿Usaste este servicio? ¡Danos tu opinión!

Descripción de la publicación

Mercado Libre no vende este artículo y no participa en ninguna negociación, venta o perfeccionamiento de operaciones. Sólo se limita a la publicación de anuncios de sus usuarios.

Modulo De Factura Electrónica Para Desarrolladores

Somos una de las 30 empresas habilitadas en DGI como proveedores de factura electrónica en Uruguay.

https://www.efactura.dgi.gub.uy/principal/sobre-e-Factura?es

Ver donde dice "Proveedores de software"

Ofrecemos un módulo de software para empresas que ya cuenten con software, ingenieros, programadores, que deseen resolver rápidamente la inclusión de sus sistemas con facturación electrónica ante DGI. 

Índice

1    Introducción. 3

2    Funcionamiento general. 3

3    DLL cliente en C#.. 4

3.1      Métodos disponibles de la DLL. 4

4    Servidor en SURBIT. 5

4.1      Envío de sobres a DGI 5

4.2      Ejemplos de errores en sistema cliente. 6

4.3      Envío de reportes a DGI 6

5    Seguridad y privacidad de la información. 7

 

1         Introducción

 

Este documento pretende ser una guía para empresas desarrolladoras de Software que necesiten una solución de factura electrónica en Uruguay, y analicen la viabilidad de ser integradores de nuestra solución.

 

El sistema factura-e desarrollado por SURBIT, consta de una dll desarrollada en c# que comunica a través de web services con servidor dedicado propiedad de SURBIT, y brinda los métodos y funcionalidades necesarias para comunicarse con DGI y superar las fases de testing, homologación y puesta en producción para una empresa que este registrada en DGI.

 

2         Funcionamiento general

 

SURBIT ha desarrollado una pasarela de comprobantes fiscales electrónicos hacia DGI para múltiples empresas. 

Dado un sistema de facturación existente en Windows de una empresa, al mismo se le agrega una dll proporcionada por SURBIT.

Este sistema cliente genera localmente cada uno de los cfe y los envía al servidor SURBIT.

El servidor SURBIT recibe el xml firmado y guarda en base de datos todos los datos recibidos.

 

Esto permite que el sistema cliente pueda operar en modo OFFLINE durante un tiempo corto hasta resolver el problema de conexión a INTERNET.

 

Cada empresa que posee un rut, tendrá 2 bases de datos en el servidor SURBIT, una base de datos para pruebas y otra base de datos para entrar en producción.

El sistema permite múltiples sucursales para la misma empresa (el RUT debe ser idéntico para cada una de las sucursales).

 

El servidor SURBIT en un proceso independiente que corre cada cierta cantidad de minutos levanta los cfe pendientes de envío a DGI, los firma y en caso de no encontrar incoherencias con el xml recibido del lado cliente arma un sobre con todos los CFE pendientes, en este caso se respeta el máximo permitido, si este se alcanza a la siguiente pasada serán enviados en otro sobre y así sucesivamente. 

 

Al final del día el sistema cliente debe enviar a servidor SURBIT a través de la dll para cada tipo de cfe la cantidad de comprobantes generados. Esto se debe realizar luego de la hora 24. El día de trabajo se debe cerrar a la hora 24 indefectiblemente, si el cliente trabaja hasta mas tarde esos comprobantes quedarán para el siguiente día.

Esto permite controlar que lo que esta localmente en el sistema cliente este ya en el servidor SURBIT y además los CFE de tipo EFactura y ETicket con monto > 10.000 UI están aprobados en DGI.

 

En el servidor se corren 3 procesos automatizados para crear, generar y enviar los reportes de todas las empresas a DGI durante todos los días. En la madrugada se procesan los datos del día anterior.

 

Todos estos procesos van acompañados de correos en caso de error, y correos de todos los reportes enviados a DGI a las casillas que desee nuestro integrador.

 

Además el sistema luego de enviar un CFE si el mismo fuera para un contribuyente emisor de CFE se genera automáticamente una comunicación entre empresas, enviando a través de una casilla de correo de SURBIT o cualquiera que disponga el integrador el o los xml necesarios, para comunicar a la empresa el envío correcto del sobre. Todo esto respetando los formatos definidos en DGI.

 

En otro proceso que corre una vez por hora, se genera la última comunicación necesaria entre empresas para responder un acuse de recibo de un sobre o para recibir la respuesta de otros emisores electrónicos. Estas respuestas se pueden enviar a la parte administrativa que con una herramienta de software le permitirá ver el CFE en formato legible para una persona sin conocimientos de XML.

 

En las siguientes secciones se detallan las funcionalidades de  cada sistema construido.

 

3         DLL cliente en C#

 

El sistema desarrollado en C# permite generar un objeto CFE a través de clases que brinda la dll para generar un cfe en cualquier ambiente de desarrollo Windows que maneje dlls (ejemplos vb.net, c#, vb6, delphi entre otros).

 

Se debe mantener la firma digital en el pc con clave (pfx con una clave)

 

Las funcionalidades requeridas del integrador del lado cliente son:

1 – Manejar una tabla en su base de datos para facilitar el envío y reenvío del comprobante CFE a SURBIT

Los datos son proporcionados por SURBIT con ejemplo de que datos se guardan (no mas de 10 campos).

2 – Pedir los CAE en DGI

3 – Administrar los tipos de cfe, serie y número desde su sistema. SURBIT solo indica y advierte si el número, serie y tipo ya fue utilizado para prevenir se pasen por encima datos previamente grabados.

4 – Enviar los rangos no utilizados a SURBIT.

5 – Cálculos básicos de iva tasa básica, iva tasa mínima, según la configuración de los impuestos de los productos de su sistema de facturación.

 

3.1      Métodos disponibles de la DLL

 

Método para enviar un CFE hacia el servidor de SURBIT

 

EnviarCFE(CFE cfe, ConfigurationManager cfgMgr, Adenda adenda, bool enviarADgi)

 

Retorna: ResultadoCfeVO

 

El objeto ResultadoCfeVO contiene las siguientes propiedades: TipoError, MsgError

El resultado es correcto si TipoError es cero. De lo contrario, TipoError distinto de cero en MsgError va el error correspondiente.

 

El método al ser llamado y resultado correcto, genera 3 archivos en la ruta especificada por un atributo de la clase ConfigurationManager

 

111_A_141_1_10_2014.xml

111_A_141_1_10_2014_qrcode.jpg

111_A_141_1_10_2014_signed.xml

 

Esto permite fácilmente la impresión de la factura del lado del cliente, dejando disponible el qrcode en formato jpg para levantar e imprimir en la impresora de su preferencia (térmica, laser, etc).

 

Método para chequear el estado de un CFE en el servidor de SURBIT

 

CheckCFEStatus(ConfigurationManager cfgMgr, int tipoCfe, int nroCfe, string serie, DateTime fecha)

 

Retorna: ResultadoCFEStatusVO

 

El objeto ResultadoCFEStatusVO contiene las siguientes propiedades: Status, CodError, MsgError

Este método puede retornar en su Status los siguientes:

 

1 = NO RECIBIDO EN SURBIT

2 = RECIBIDO EN SURBIT, PENDIENTE ENVIO a DGI
3 = ENVIADO A DGI UNA VEZ y ACEPTADO EL SOBRE. SE ESPERA RESPUESTA DE DGI.
4 = ENVIADO A DGI CON ERROR en token
5 = ENVIADO Y ACEPTADO EN DGI
6 = ENVIADO Y RECHAZADO EN DGI
7 = ENVIADO, RECHAZADO Y OBSERVADO EN DGI

 

Método para anular rango de CAEs no utilizados

 

AnularRangoManual(ConfigurationManager cfgMgr, RangoAnuladoManual rango)

 

Retorna: ResultadoAnularRangoVO

 

El objeto ResultadoAnularRangoVO  contiene las siguientes propiedades: Status, CodError, MsgError

 

Método para verificar el cierre de día (previo a enviar reporte a dgi)

Se envía a SURBIT para cada tipo de CFE la cantidad de comprobantes (CFEs), lo que será controlado previamente en el servidor de SURBIT para enviar el reporte a DGI. Esto permite no enviar el reporte si el control no llega y da correcto (ejemplo si un cfe no se envió a SURBIT, el reporte no se enviará pues la cantidad de comprobantes en el Server de SURBIT será menor a la cantidad de comprobantes enviado en este control.

 

EnviarControlCierreDia(ConfigurationManager cfgMgr, List<ControlCierreDia> controles)

 

Retorna: ResultadoControlCierreDiaVO

 

El objeto ResultadoControlCierreDiaVO contiene las siguientes propiedades: Status, CodError, MsgError

 

4         Servidor en SURBIT

 

El servidor de SURBIT es un servidor dedicado, ubicado en USA, que asegura una disponibilidad de 99,9% de uptime.

El mismo tiene un SO linux, distribución ubuntu (actualmente en versión 12.04).

El desarrollo de la aplicación servidor esta en lenguaje PHP, servidor de aplicaciones apache, base de datos MySQL.

 

En el servidor se almacenan las claves privadas y públicas con sus respectivas contraseñas (se mantienen las que se setean en el pfx del lado cliente).

 

4.1      Envío de sobres a DGI

 

El sistema cliente envía un cfe firmado a través del método EnviarCFE

En este método se indica si SURBIT debe enviar además el CFE a DGI (se debe enviar si es CFE de tipo EFactura o si es ETicket y su valor es mayor a 10.000 UI).

 

El servidor recibe el xml firmado y guarda en base de datos todos los datos recibidos.

 

Se obtienen todos los cfe pendientes de envío a DGI.

Para cada empresa se genera un sobre con todos sus cfe pendientes de envío.

 

El enviar un sobre a DGI y recibir un aceptado de DGI, no implica que sus CFEs fueron aceptados, sino que cada uno de los CFE seran procesados en DGI y luego de un tiempo que ronda los 15 minutos (lo establece la DGI en cada invocación según su necesidad) deberán ser consultados nuevamente a DGI a través de un token que se recibe como respuesta de cada sobre enviado a DGI.

 

Transcurrido ese tiempo y consultado nuevamente el estado del sobre, proceso que corre automáticamente en el servidor SURBIT, la DGI nos informa el estado de cada uno de los cfe que fueron aceptados, rechazados y/o observados. En caso de rechazo u observación nos indica el motivo. Dado este motivo se le informará al integrador por mail como se muestra en el siguiente punto.

 

 

4.2      Ejemplos de errores en sistema cliente

 

En caso de errores de formato al realizar envíos de cfe hacía DGI el sistema informa distintos tipos de errores de formatos, de certificados, y de distintos tipos.

 

Algunos ejemplos son:

 

 

Se envía un CFE en dólares pero no se especifica el tipo de cambio.

 

Comercio: [20] - 'pedidos_delysoft_test'
Tipo CFE: 111, Nro CFE: 167, Serie CFE: A, Fecha CFE: 2015-07-03

Motivo: E05, Glosa: No cumple validaciones de Formato comprobantes, Detalle: Debe especificarse 'TpoCambio' mayor que 0, si 'TpoMoneda' diferente de 'UYU'

 

Se envía un CFE en pesos pero se envía mal el formato del archivo de la clave pública

 

Comercio: [20] - 'pedidos_delysoft_test'
Tipo CFE: 111, Nro CFE: 144, Serie CFE: A, Fecha CFE: 2015-07-08

Motivo: E04, Glosa: Firma electrónica no es válida, Detalle: No se ha podido validar la firma del CFE - *RSA signature did not verify*

 

4.3      Envío de reportes a DGI

 

Es obligación para cada empresa al estar en producción con factura electrónica enviar un reporte diario por cada día calendario, haya trabajado la empresa o no, haya vendido o no, se debe enviar de todas maneras a DGI, resumiendo las operaciones en un archivo XML.

 

Todo este proceso se genera en el servidor SURBIT en distintos procesos que corren entre las 2 am y las 6 am de cada día. 

 

5         Seguridad y privacidad de la información

 

Los datos que se almacenan en nuestros servidores por las facturas electrónicas son propiedad exclusiva de la empresa configurada para comunicarse con DGI, en este caso la empresa cuyo rut configurado en la base de datos de SURBIT coincide con la clave privada utilizada para firmar cada uno de los cfe.

 

Ni SURBIT ni el integrador podrán utilizar sus datos, salvo expresa autorización firmada por la empresa configurada.

 

Sin embargo, tal como se establece en las preguntas frecuentes de DGI, se indica por el organismo:

 

“La conservación de los CFE la puede hacer el propio emisor electrónico o delegar dicha función a terceros, pero siempre el sujeto pasivo es el responsable ante la DGI. Ante requerimientos de documentación, la empresa deberá proporcionar la misma en los plazos establecidos por DGI.”

https://www.efactura.dgi.gub.uy/principal/ampliacion-de-contenido/7-6-como-se-almacenan-y-conservan-los-comprobantes-fiscales-electronicos?es

 

Esto implica que la DGI deberá poder acceder a los datos almacenados en la base de datos de producción de la empresa configurada.

 

La base de datos se respalda en distinto servidor ubicado en USA todos los días a la madrugada.

Opiniones

Nadie opinó sobre este servicio.¡Sé el primero!

Quiero opinar