Plataforma para la generación de CFDi


Esta plataforma acredita a Factorum en Proveedor de Servicios de Expedición de Comprobante Fiscal Digital a través de Internet, conforme a los nuevos requerimientos especificados para realiza todas las validaciones de los CFDi exigidas por el SAT.

La plataforma cuenta con diversos productos, de esta manera el cliente puede seleccionar aquel que cumpla sus necesidades y requerimientos.

La finalidad de estos productos (menos cancelación) es de generar los Comprobantes Fiscales Digitales (CFDi) y el código bidimensional (QRCode), a través de Internet. Tiene los últimos requerimientos especificados para realiza todas las validaciones de los CFDi exigidas por el SAT.

Existen desde el más bajo nivel, donde el usuario tiene la facultad de poder generar los datos de su factura en un xml y sellarlo, hasta los que pueden ser usados por los usuarios sin conocimientos en formar y sellar xml y el producto hace todo el trabajo

Los productos son:

·         Webservice

·         Webservice PDF

·         Webservice Portal

·         Web Conector

·         Conector Local

·         Webservice Cancelación

Cada producto tiene datos de entrada que necesita para procesarlos y al final entregar un resultado o datos de salida.

Web Service

Web service PDF

Conector Local

Web Conector

Web service Portal

Características

El Servicio forma el XML y lo sella

 

 

 

El cliente forma el XML y lo sella

 

 

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

 

 

El Servicio manda un Email de aviso al cliente de su factura

 

 

 

Manda a Impresión Automática la factura emitida

 

 

 

 

El usuario tiene notificaciones por Email de folios por acabar

El Servicio hace la generación del PDF

 

Uso de Bóveda Factorum

 

 

 

El Servicio tiene Conectividad con sistemas web

 

 

El servicio tiene Conectividad con sistemas locales

 

El Servicio usa Esquema CFD

 

 

 

 

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

 

 

 

Hay un Portal de consulta

 

 

 

Web Service

Web service PDF

Conector Local

Web Conector

Web service Portal

Entrada

Usr, Pwd, RFC; Proporcionados para acceder

Archivo xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

 

 

Archivo txt layout construido por el usuario, es el  contenido de lo que se quiere facturar

 

 

 

Web Service

Web service PDF

Conector Local

Web Conector

Web service Portal

Salida o resultado

Archivo QRcode

Archivo XML timbrado

Cadena Original Sello

Fecha Timbrado

No Certificado SAT

Sello CDF

Sello SAT

UUID

Tiempo de proceso

 

 

Archivo PDF

 

Código de error

 

 

Mensaje de error

 

 

 

La implementación del servicio se realiza a través del protocolo https. De esta forma, se utiliza un canal de comunicaciones seguro con el Proveedor de Servicios de Emisión de CFDI (PSECFDI).

Desde cualquier tecnología (cualquier lenguaje de programación que soporte llamadas a webservices mediante SOAP) pueda programar y desarrollar aplicaciones compatibles con el servicio e invocar los métodos, y tenga la facultad de recibir los valores devueltos por el servicio.

Untitled 1

Webservice

Webservice

Características

El Servicio forma el XML y lo sella

 

El cliente forma el XML y lo sella

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

 

El Servicio manda un Email de aviso al cliente de su factura

 

Manda a Impresión Automática la factura emitida

 

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

 

Uso de Bóveda Factorum

 

El Servicio tiene Conectividad con sistemas web

El servicio tiene Conectividad con sistemas locales

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

txt layout construido por el usuario, es el  contenido de lo que se quiere facturar

 

 

Salida

Archivo QRcode

Archivo XML timbrado

Cadena Original Sello

Fecha Timbrado

No Certificado SAT

Sello CDF

Sello SAT

UUID

Tiempo de proceso

 

Archivo PDF

 

Código de error

 

Mensaje de error

 

Url de acceso al servicio

https://desarrollo.factorumweb.com/FactorumWSv32/FactorumCFDiService.asmx

Para acceder al web service definition lenguaje (WSDL:

http://desarrollo.factorumweb.com/FactorumWSv32/FactorumCFDiService.asmx?WSDL

Métodos

En todos los métodos se necesita la información de un XML de entrada, donde estarán los datos que se quieren facturar, este XML debe de venir sellado

En cada llamada se puede generar un CFDi y el QRCode.

Todos los métodos tienen exactamente la misma estructura de salida, así como de validación, por eso las vamos a mencionar al acabar de explicar todos los métodos

Existen métodos para productivo y para test, se diferencían porque el usuario que usan los de test es de pruebas, esto sirve para una etapa de pruebas.

Existen tanto para productivo como para test, métodos que reciben lo que se desea facturar (el XML de entrada) en un string, o en un array de bytes.

Función

Descripción

FactorumGenYaSellado

Generación de timbre de CFDI. Permite obtener el timbre de la firma digital del CFD y el QRCode, a partir de los datos iniciales de tipo String

FactorumGenYaSelladoTest

Generación de CFDi en test. Funciona igual que el anterior, pero genera un comprobante con un timbre no válido, y no envía el comprobante al SAT. Esto es para pruebas

FactorumGenYaSelladoConArchivo

Generación de timbre de CFDI. Permite obtener el timbre de la firma digital del CFD y el QRCode, a partir de los datos iniciales de un archivo en formato XML

FactorumGenYaSelladoConArchivoTest

 

Generación de CFDI en test. Funciona igual que el anterior, pero genera un comprobante con un timbre no válido, y no envía el comprobante al SAT. Esto es para pruebas

FactorumGenYaSellado

Este método es para producción, para datos reales.

Definición

public ReturnFactorumWS FactorumGenYaSellado(String usuario,

                                             String rfc,

                                             String password,

                                             String xml)

Parámetros

         usuario: Usuario que va realizar la conexión, normalmente es el email

         rfc: RFC del usuario

         password: Contraseña del usuario que va realizar la conexión

         xml: Cadena de caracteres en formato string que tiene la información que se quiere facturar, datos como Emisor, Cliente, Detalle de los productos o servicios, total, etc. Formateado como XML, este XML debe de venir sellado

 

Petición y respuesta SOAP

http://desarrollo.factorumweb.com/FactorumWSv32/FactorumCFDiService.asmx?op=FactorumGenYaSellado

 

FactorumGenYaSelladoTest

Este método es para pruebas, debe de usar el usuario de pruebas.

Definición

public ReturnFactorumWS FactorumGenYaSelladoTest(String usuario,

                                                 String rfc,

                                                 String password,

                                                 String xml)

Parámetros

         usuario, rfc: y password: de pruebas

         xml: Cadena de caracteres en formato XML que tiene la información que se quiere facturar, datos como Emisor, Cliente, Detalle de los productos o servicios, total, etc. Formateado como XML, este XML debe de venir sellado

 

Petición y respuesta SOAP

http://desarrollo.factorumweb.com/FactorumWSv32/FactorumCFDiService.asmx?op=FactorumGenYaSelladotest

 

Ejemplos para FactorumGenYaSellado y FactorumGenYaSelladoTEST

Código del cliente: Para usar el método deseado cambie solamente el nombre del método, aquí le presentamos FactorumGenYaSelladoTest

'Entrada de la información de la venta en formato XML

Dim XmlVta As String = XmlGenerado

'Resultado del CFDi en formato XML

Dim signedXml As String

'Resultado del QRcode

Dim Qrcode As Byte()

'Resultado del CFDi en formato XML

Dim FilesignedXml As Byte()

Dim ws As New FactorumCFDiService

Dim resWS As New ReturnFactorumWS

Try

'llamar al WS

        resWS = ws.FactorumGenYaSelladoTest (userWS, rfcWS, pwdWS, XmlVta)

'Regresa el CFDi sellado y timbrado

        signedXml = resWS.ReturnStringXML

'Regresa el CFDi en archivo

        FilesignedXml = resWS.ReturnFileXML

Guardar fisicamente el xml en un archivo

        Dim Stream1 As Stream = New FileStream(“C:\a.xml”, FileMode.Create)

        Stream1.Write(FilesignedXml, 0, FilesignedXml.Length)

        Stream1.Flush()

        Stream1.Close()

'Regresa el QRcode

        Qrcode = resWS.ReturnFileQRCode

Guardar fisicamente el QRcode en un gif

        Dim stream2 As Stream = New FileStream(“C:\a.gif”,FileMode.Create)

        stream2.Write(Qrcode, 0, Qrcode.Length)

        stream2.Flush()

        stream2.Close()

Catch excep As Exception

        Me.Mensaje.Text = excep.Message 

End Try

 

FactorumGenYaSelladoConArchivo

Este método es para producción, para datos reales. Es parecido a el método de FactorumGenYaSellado, solo que el último parámetro es un array de bytes (un archivo)

Definición

public ReturnFactorumWS FactorumGenYaSelladoConArchivo(String usuario,

                                                       String rfc,

                                                       String password,

                                                       Byte[] xml)

Parámetros

         usuario: Usuario que va realizar la conexión, normalmente es el email

         rfc: RFC del usuario

         password: Contraseña del usuario que va realizar la conexión

         xml: array de bytes que contiene la lectura de un archivo en formato XML que tiene la información que se quiere facturar, datos como Emisor, Cliente, Detalle de los productos o servicios, total, etc. Formateado como XML, este XML debe de venir sellado

Petición  y Respuesta SOAP

http://desarrollo.factorumweb.com/FactorumWSv32/FactorumCFDiService.asmx?op=FactorumGenYaSelladoConArchivo

 

FactorumGenYaSelladoConArchivoTest

Este método es para pruebas, debe de usar el usuario de pruebas.

Definición

public ReturnFactorumWS FactorumGenYaSelladoConArchivoTest(String usuario,

                                                           String rfc,

                                                           String password,

                                                           Byte[] xml)

Parámetros

         usuario, rfc: y password: de Pruebas

         xml: array de bytes que contiene la lectura de un archivo en formato XML que tiene la información que se quiere facturar, datos como Emisor, Cliente, Detalle de los productos o servicios, total, etc. Formateado como XML, este XML debe de venir sellado

Petición  y Respuesta SOAP

http://desarrollo.factorumweb.com/FactorumWSv32/FactorumCFDiService.asmx?op=FactorumGenYaSelladoConArchivoTest

Ejemplos

Lectura de la información de la venta en formato XML

Dim FileXmlClient As Byte()

Dim stream As Stream = New FileStream(“C:Prueba.xml”, FileMode.Open, FileAccess.Read, FileShare.Read)

Dim streamReader As StreamReader = New StreamReader(stream, Encoding.Default)

 

 Dim datalen As Integer = stream.Length

 ReDim FileXmlClient (datalen)

 

 stream.Seek(0, SeekOrigin.Begin)

 stream.Read(FileXmlClient, 0, datalen)

 stream.Close()

 

'Resultado del CFDi en formato XML

Dim FilesignedXml As Byte()

'Resultado del QRcode

Dim Qrcode As Byte()

 

'llamar al WS *************************************************************************

Dim ws As New FactorumCFDiService

Dim resWS As New ReturnFactorumWS

 

Try

'llamar al WS

        resWS = ws.FactorumYaSelladoConArchivoTest (userWS, _

                                                    rfcWS, _

                                                    pwdWS, _

                                                    FileXmlClient)

'Regresa el CFDi sellado y timbrado

        FilesignedXml = resWS.ReturnFileXML

Guardar fisicamente el xml en un archivo

        Dim Stream1 As Stream = New FileStream(“C:\a.xml”, FileMode.Create)

        Stream1.Write(FilesignedXml, 0, FilesignedXml.Length)

        Stream1.Flush()

        Stream1.Close()

'Regresa el QRcode

        Qrcode = resWS.ReturnFileQRCode

Guardar fisicamente el QRcode en un gif

        Dim stream2 As Stream = New FileStream(“C:\a.gif”, FileMode.Create)

        stream2.Write(Qrcode, 0, Qrcode.Length)

        stream2.Flush()

        stream2.Close()

Catch excep As Exception

        Me.Mensaje.Text = excep.Message

End Try

 

Respuesta de los métodos

Todos los métodos anteriores regresan un tipo de datos: ReturnFactorumWS  el cual es definido como sigue:

public class ReturnFactorumWS

    {

        public String ReturnStringXML;

        public Byte[] ReturnFileXML;

        public Byte[] ReturnFileQRCode;

        public dateTime FechaTimbrado
        public String UUID
        public String SelloCFD
        public String NoCertificadoSAT
        public String SelloSAT
        public String CadenaOriginalSello

    }

         ReturnStringXML: Es un string que contiene el CFDi, es en formato XML.

         ReturnFileXML: Es el archivo que contiene el CFDi, es en formato XML.

         ReturnFileQRCode: Es el archivo del Código Bidimensional, cuando se recibe, se puede guardar en formato GIF.

         FechaTimbrado: Regresa la fecha en la que fue timbrado el CFDi

         UUID: Regresa el timbre del SAT. El código se forma por una cadena compuesta por 32 dígitos hexadecimales

         SelloCFD: regresa el sello del CFD proporcionado por el SAT.

         NoCertificadoSat: Regresa el Número de Certíficado proporcionado por el SAT.

         SelloSat: Regresa el Sello que proporciona el SAT.

         CadenaOriginalSello: Regresa la cadena original con la que fue sellado el documento antes de enviarlo a Timbrar

 

Validaciones que contiene el servicio

Para todos los métodos:

         Valida que el nombre de Usuario y Password coincidan y estén en la base de datos.

         Valida que la estructura del parámetro de entrada (String xml) cumple con las especificaciones técnicas.

         Valida que el usuario no sea de tipo DEMO, en caso de los que no tengan terminación TEST

         Valida que los folios contratados estén vigentes en caso de productivo

         Valida los diferentes estatus que el usuario pueda tener (cancelado, baja, activo)

         Envía un email indicando cuántos folios quedan por usar, cuando se llegue a una línea de 15% restantes, 10% restantes y 5% restantes

Para poder detectar si hubo un error, es necesario utilizar un manejo de errores dentro de la programación, y poder tomar decisiones dentro del código

Lista de códigos de error

El SAT ha publicado una lista estándar de códigos de error (códigos del 301 al 403) aplicables a las respuestas no satisfactorias.

El servicio detecta estos errores, y los regresa. También verifica otras situaciones de error directamente relacionadas con la aplicación de Factorum.

 

ERRORES

ESTATUS DE USUARIO INCORRECTO

ESTATUS IRRECONOCIBLE

PASSWORD NO COINCIDE

USUARIO Y PASSWORD INCORRECTO, NO ENCONTRADO EN BD

PASSWORD NO PROPORCIONADO

USUARIO NO PROPORCIONADO

ERROR AL GUARDAR EN DISCO EL ARCHIVO GIF

ERROR AL GUARDAR EN DISCO EL ARCHIVO XML


 

Untitled 1

Webservice PDF

Webservice PDF

Características

El Servicio forma el XML y lo sella

 

El cliente forma el XML y lo sella

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

El Servicio manda un Email de aviso al cliente de su factura

 

Manda a Impresión Automática la factura emitida

 

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

Uso de Bóveda Factorum

 

El Servicio tiene Conectividad con sistemas web

El servicio tiene Conectividad con sistemas locales

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

txt layout construido por el usuario, es el  contenido de lo que se quiere facturar

 

 

Salida

Archivo QRcode

Archivo XML timbrado

Cadena Original Sello

Fecha Timbrado

No Certificado SAT

Sello CDF

Sello SAT

UUID

Tiempo de proceso

Archivo PDF

Código de error

Mensaje de error

 

Url de acceso al servicio

http://desarrollo.factorumweb.com/FactorumWSpdfV32/Factorumwspdf.asmx

Para acceder al web service definition lenguaje (WSDL:

http://desarrollo.factorumweb.com/FactorumWSpdfv32/Factorumwspdf.asmx?WSDL

Método

Función

Descripción

wsFactorumWSpdf

Generación de timbre de CFDI. Permite obtener el timbre de la firma digital del CFD, el archivo PDF y el QRCode, a partir de los datos iniciales de un archivo en formato XML

En cada llamada se puede generar un CFDi , PDF y el QRCode.

Definición

public ReturnFactorumService wsFactorumWSpdf (String usuario,

                                              String rfc,

                                              String password,

                                              String NombreArchivo,

                                              Byte[] xml,

                                              Boolean FlagTest)

Parámetros

         usuario: Usuario que va realizar la conexión, normalmente es el email

         rfc: RFC del usuario

         password: Contraseña del usuario que va realizar la conexión

         NombreArchivo: Se le indica cuál es el nombre para el PDF resultante, el nombre físico del archivo. Sin extensión y sin ruta.

         xml: array de bytes, que es la lectura del Archivo en formato XML que tiene la información que se quiere facturar, datos como Emisor, Cliente, Detalle de los productos o servicios, total, etc. Formateado como XML, este XML debe de venir sellado

         FlagTest: True= ambiente de pruebas, False = Ambiente productivo. Cuando tenga el valor de true, deberá de poner los datos del usuario de pruebas.


 

Petición  y Respuesta SOAP

http://desarrollo.factorumweb.com/FactorumWSvpdfv32/Factorumwspdf.asmx?op=wsFactorumWSpdf

Respuesta del método

Regresa un tipo de datos: ReturnFactorumService el cual es definido como sigue:

Public Class ReturnFactorumService

        Public StringXML As String = ""

        Public ByteXML As Byte()

        Public ByteQRCode As Byte()

        Public BytePDF As Byte()

        Public FechaTimbrado As System.DateTime

        Public UUID As String = ""

        Public SelloCFD As String = ""

        Public NoCertificadoSAT As String = ""

        Public SelloSAT As String = ""

        Public CadenaOriginalSello As String = ""

        Public TiempoProceso As String = ""

    End Class

         StringXML: Es un string que contiene el CFDi, es en formato XML.

         ByteXML: Es el archivo que contiene el CFDi, es en formato XML.

         ByteQRCode: Es el archivo del Código Bidimensional, cuando se recibe, se puede guardar en formato GIF.

         BytePDF: Es el archivo de la factura lista para imprimir en formato PDF

         FechaTimbrado: Regresa la fecha en la que fue timbrado el CFDi

         UUID: Regresa el timbre del SAT. El código se forma por una cadena compuesta por 32 dígitos hexadecimales

         SelloCFD: regresa el sello del CFD proporcionado por el SAT.

         NoCertificadoSat: Regresa el Número de Certíficado proporcionado por el SAT.

         SelloSat: Regresa el Sello que proporciona el SAT.

         CadenaOriginalSello: Regresa la cadena original con la que fue sellado el documento antes de enviarlo a Timbrar

         TiempoProceso: Regresa en segundos, cuánto tiempo tardo la transacción

Validaciones que contiene el servicio

         Valida que el nombre de Usuario y Password coincidan y estén en la base de datos.

         Valida que la estructura del parámetro de entrada (Byte [] xml) cumple con las especificaciones técnicas.

         Valida que el usuario no sea de tipo DEMO

         Valida que los folios contratados estén vigentes

         Valida los diferentes estatus que el usuario pueda tener

Ejemplos

Código del cliente:

Dim FileXmlClient As Byte()

Dim stream As Stream = New FileStream(“C:Prueba.xml”, FileMode.Open, FileAccess.Read, FileShare.Read)

Dim streamReader As StreamReader = New StreamReader(stream, Encoding.Default)

 Dim datalen As Integer = stream.Length

 ReDim FileXmlClient (datalen)

 stream.Seek(0, SeekOrigin.Begin)

 stream.Read(FileXmlClient, 0, datalen)

 stream.Close()

 

Dim NombreArchivoFactura As String=”Fac0001”

       

        Try

            wsResultado = wsConector.wsFactorumWSpdf(Usuario, RFC, PWD, _

                                       NombreArchivoFactura,

                                       FileXmlClient, _

                                       FlagTest)

            'el resultado esta en la clase de wsResultado

            'Guardar en archivo los arrays de bytes

            func.EscribeBytesEnArchivo(Path & NombreArchivoFactura & ".PDF", wsResultado.BytePDF)

            func.EscribeBytesEnArchivo(Path & NombreArchivoFactura & ".XML", wsResultado.ByteXML)

            func.EscribeBytesEnArchivo(Path & NombreArchivoFactura & ".GIF", wsResultado.ByteQRCode)

            'Mostrar en pantalla los datos

            func.EscribeEnPantalla("Los archivos GIF, XML, y PDF estan en: : ", Path)

            func.EscribeEnPantalla("CadenaOriginalSello: ", wsResultado.CadenaOriginalSello)

            func.EscribeEnPantalla("FechaTimbrado: ", wsResultado.FechaTimbrado)

            func.EscribeEnPantalla("NoCertificadoSAT: ", wsResultado.NoCertificadoSAT)

            func.EscribeEnPantalla("SelloCFD: ", wsResultado.SelloCFD)

            func.EscribeEnPantalla("SelloSAT: ", wsResultado.SelloSAT)

            func.EscribeEnPantalla("UUID: ", wsResultado.UUID)

            func.EscribeEnPantalla("Todo el proceso tardo: ", wsResultado.TiempoProceso & " segundos")

        Catch wsError As Exception

            If wsError.Message.Contains("|") Then

                func.EscribeEnPantalla("-- ERROR CODIGO-- ", wsError.Message.Split("|")(1))

                func.EscribeEnPantalla("-- ERROR DESCRIPCION-- ", wsError.Message.Split("|")(2))

            Else

                func.EscribeEnPantalla("-- ERROR -- ", wsError.Message)

            End If

        End Try

Lista de códigos de error

El SAT ha publicado una lista estándar de códigos de error (códigos del 301 al 403) aplicables a las respuestas no satisfactorias.

El servicio detecta estos errores, y los regresa. También verifica otras situaciones de error directamente relacionadas con la aplicación de Factorum.

ERRORES

ESTATUS DE USUARIO INCORRECTO

ESTATUS IRRECONOCIBLE

PASSWORD NO COINCIDE

USUARIO Y PASSWORD INCORRECTO, NO ENCONTRADO EN BD

PASSWORD NO PROPORCIONADO

USUARIO NO PROPORCIONADO

ERROR AL GUARDAR EN DISCO EL ARCHIVO GIF

ERROR AL GUARDAR EN DISCO EL ARCHIVO XML

EL SERVICIO OPERA LA SIGUIENTE CLASIFICACIÓN DE ERRORES:

01 - ERROR AL RECOLECTAR LOS DATOS INICIALES (CLSRECOLECTADS)

02 - ERROR NO ESPECIFICADO AL REGRESAR FOLIO FACTORUM

03 - ERROR FACTURA YA HECHA (FACTURA TIMBRADA ANTERIORMENTE)

04 - ERROR AL TIMBRAR EL XML

05 - ERROR AL ACTUALIZAR DATOS DE TIMBRE (ACTUALIZATIMBRE)

07 - ERROR AL CREAR EL PDF (CREAPDF)

08 - ERROR AL ACTUALIZAR TABLA CONTROL

 

Para poder detectar si hubo un error, es necesario utilizar un manejo de errores dentro de la programación, y poder tomar decisiones dentro del código


 

Untitled 1

WebService Portal

WebService  Portal

Características

El Servicio forma el XML y lo sella

 

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

 

El Servicio manda un Email de aviso al cliente de su factura

 

Manda a Impresión Automática la factura emitida

 

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

Uso de Bóveda Factorum

 

El Servicio tiene Conectividad con sistemas web

 

El servicio tiene Conectividad con sistemas locales

 

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

 

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

 

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

txt layout construido por el usuario, es el  contenido de lo que se quiere facturar

 

 

Salida

Archivo QRcode

 

Archivo XML timbrado

Cadena Original Sello

 

Fecha Timbrado

 

No Certificado SAT

 

Sello CDF

 

Sello SAT

 

UUID

 

Tiempo de proceso

 

Archivo PDF

Código de error

Mensaje de error

Url de acceso al servicio

http://desarrollo.factorumweb.com/wsportalv32/

 

Se necesita firmar para que pueda entrar al portal:

Una vez firmado, puede seleccionar entre dos opciones, una para pruebas y otra para productivo, una vez que proporcione su logo, puede aparecer en la pantalla:

En cualquiera de las dos opciones, deberá subir un XML ya sellado para poder timbrarlo, este XML es la representación de lo que se quiere facturar:

 

Cuando se sube el archivo y se selecciona el botón de timbrar, nos sale una pantalla para poder recoger la información

Podemos obtener así, el XML, el QRCode y el PDF resultantes del proceso de timbrar un XML que representa los datos que se quieren facturar.


 

Untitled 1

Web Conector

Web Conector

Características

El Servicio forma el XML y lo sella

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

El Servicio manda un Email de aviso al cliente de su factura

Manda a Impresión Automática la factura emitida

 

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

Uso de Bóveda Factorum

El Servicio tiene Conectividad con sistemas web

El servicio tiene Conectividad con sistemas locales

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

 

txt layout construido por el usuario, es el  contenido de lo que se quiere facturar

 

Salida

Archivo QRcode

Archivo XML timbrado

Cadena Original Sello

Fecha Timbrado

No Certificado SAT

Sello CDF

Sello SAT

UUID

Tiempo de proceso

Archivo PDF

Código de error

Mensaje de error

Url de acceso al servicio

https://desarrollo.factorumweb.com/conectorwebv32/Factorumwebconector.asmx


Para acceder al web service definition lenguaje (WSDL):

http://desarrollo.factorumweb.com/conectorwebv32/Factorumwebconector.asmx?WSDL

Métodos

Función

Descripción

wsFactorumWebConector

Generación de timbre de CFDI. Permite obtener el timbre de la firma digital del CFD, el archivo PDF y el QRCode, a partir de los datos iniciales de un archivo en formato txt apoyado en un Layout

En cada llamada se puede generar un CFDi y el QRCode.

Definición

public ReturnFactorumService wsFactorumWSpdf (String usuario,

                                              String rfc,

                                              String password,

                                              String NombreArch,

                                              Byte[] txtLayout,

                                              Boolean FlagTest)

Parámetros

         usuario: Usuario que va realizar la conexión, normalmente es el email

         rfc: RFC del usuario

         password: Contraseña del usuario que va realizar la conexión

         NombreArch: Es el nombre físico del archivo que tendrá la base de datos factorum para esta factura.

         TxtLayout: Array de bytes, que es la lectura de un archivo en formato texto que se forma mediante un layout, y representa los datos de una factura.

         FlagTest: True= ambiente de pruebas, False = Ambiente productivo

Explicacion del Layout:

Para formar el archivo TXT que representa a la factura, se debe de seguir un layout.

Al inicio de un registro hay un identificador de registro (E01, EA1, D01..etc.) en cada registro hay campos numerados.

Cada campo debe de ser separado por Pipes

Cuando no haya valor en un campo, se debe de poner vacio, por ejemplo EA1|||

Hay Registros que se pueden repetir dentro del archivo, por ejemplo el detalle de la factura (D01), para estos campos, se indican en el layout mediante un corchete.

Nota, es importante que el primer campo tenga el Folio y Serie, separados por un undersocre, por ejemplo:

E01|0001_A... Esto significa que es folio 0001 y serie A.

Este es un ejemplo del archivo de entrada del método, generado en base al layout:


E01|11533_prueba04|2012-05-26 00:00:00|CREDITO DE 20 DIAS|13200|0||15312|DEPOSITO-TRANSFERENCIA|01|0
E02|4|COM890720N64|COMPAÑIA SA DE CV
E03|LIBERTAD|114||TAMULTE|VILLHERMOSA||VILLHERMOSA|TABASCO|MEXICO|86150
E04|-1|-1|0|0|0|0|0|0|0|0
E06|VP16|16|2112
EA1|-18|MXN|1|Quince mil trescientos doce/100*************************************** pesos
EA2|3|||COMPAÑIA SA DE CV|LIBERTAD|666||TAMULTE|||VILLHERMOSA|TABASCO|MEXICO||||
EA3|||||||
EA9||
D01|12|PZ|4705||PRODUCTO 1|120|1440||1|0
D02|||
DA1|1699|2012-05-22|0|KG
DA2|1|2012-05-24||2074|S||0
DA3|
DA4||||
DA5|
DA6|VP16|2112|16
DA7||
DA8||0||0
DC3
DC4|
DC5|
DC6|
DC7|
DC8|
DC10|
D01|50|PZ|4707||PRODUCTO 2|120|6000||2|0
D02|||
DA1|1699|2012-05-22|0|KG
DA2|1|2012-05-24||2074|S||0
DA3|
DA4||||
DA5|
DA6|VP16|2112|16
DA7||
DA8||0||0
DC3
DC4|
DC5|
DC6|
DC7|
DC8|
DC10|
C03|
C04|
C05|
C06|
C07|
C08|
C09|
C10|
C11|
C12|
C13|
C14|
C16|
C17|
C18|
C19|DEPOSITO-TRANSFERENCIA
C20|
C21|
C22|
C23|
C24|
C25|

Petición  y Respuesta SOAP

Para conocer el request y response se puede ver mediante esta liga:

http://desarrollo.factorumweb.com/conectorwebv32/Factorumwebconector.asmx?op=wsFactorumWebConector

Respuesta

Regresa un tipo de datos: ReturnFactorumService el cual es definido como sigue:

Public Class ReturnFactorumService

        Public StringXML As String = ""

        Public ByteXML As Byte()

        Public ByteQRCode As Byte()

        Public BytePDF As Byte()

        Public FechaTimbrado As System.DateTime

        Public UUID As String = ""

        Public SelloCFD As String = ""

        Public NoCertificadoSAT As String = ""

        Public SelloSAT As String = ""

        Public CadenaOriginalSello As String = ""

        Public TiempoProceso As String = ""

        Public CodigError As Integer = 0

        Public DescripcionError As String = ""

    End Class

         StringXML: Es un string que contiene el CFDi, es en formato XML.

         ByteXML: Es el archivo que contiene el CFDi, es en formato XML.

         ByteQRCode: Es el archivo del Código Bidimensional, cuando se recibe, se puede guardar en formato GIF.

         BytePDF: Es el archivo de la factura lista para imprimir en formato PDF

         FechaTimbrado: Regresa la fecha en la que fue timbrado el CFDi

         UUID: Regresa el timbre del SAT. El código se forma por una cadena compuesta por 32 dígitos hexadecimales

         SelloCFD: regresa el sello del CFD proporcionado por el SAT.

         NoCertificadoSat: Regresa el Número de Certíficado proporcionado por el SAT.

         SelloSat: Regresa el Sello que proporciona el SAT.

         CadenaOriginalSello: Regresa la cadena original con la que fue sellado el documento antes de enviarlo a Timbrar

         TiempoProceso: Regresa en segundos, cuánto tiempo tardo la transacción

         CodigoError: Regresa el código de error. 0=Sin error

         DescripcionError: Regresa la descripción del error, si es que hubiera.

Validaciones que contiene el servicio

         Valida que el nombre de Usuario y Password coincidan y estén en la base de datos.

         Valida que la estructura del parámetro de entrada cumple con las especificaciones del layout.

         Valida que los folios contratados estén vigentes

         Valida los diferentes estatus que el usuario pueda tener

Ejemplo

 

Código del cliente:

'Lee el archivo generado del layout

Dim txtLayout As Byte()

Dim stream As Stream = New FileStream(“C:Prueba.txt”, FileMode.Open, FileAccess.Read, FileShare.Read)

Dim streamReader As StreamReader = New StreamReader(stream, Encoding.Default)

 Dim datalen As Integer = stream.Length

 ReDim txtLayout (datalen)

 stream.Seek(0, SeekOrigin.Begin)

 stream.Read(txtLayout, 0, datalen)

 stream.Close()

       Try

            wsResultado = wsConector. wsFactorumWebConector(Usr, RFC, PWD, _

                                       NombreArchivoFactura, txtLayout, _

                                       FlagTest)

            'el resultado esta en la clase de wsResultado

            'Guardar en archivo los arrays de bytes

            func.EscribeBytesEnArchivo(Path & NombreArchivoFactura & ".PDF", wsResultado.BytePDF)

            func.EscribeBytesEnArchivo(Path & NombreArchivoFactura & ".XML", wsResultado.ByteXML)

            func.EscribeBytesEnArchivo(Path & NombreArchivoFactura & ".GIF", wsResultado.ByteQRCode)

            'Mostrar en pantalla los datos

            func.EscribeEnPantalla("Los archivos GIF, XML, y PDF estan en: : ", Path)

            func.EscribeEnPantalla("CadenaOriginalSello: ", wsResultado.CadenaOriginalSello)

            func.EscribeEnPantalla("FechaTimbrado: ", wsResultado.FechaTimbrado)

            func.EscribeEnPantalla("NoCertificadoSAT: ", wsResultado.NoCertificadoSAT)

            func.EscribeEnPantalla("SelloCFD: ", wsResultado.SelloCFD)

            func.EscribeEnPantalla("SelloSAT: ", wsResultado.SelloSAT)

            func.EscribeEnPantalla("UUID: ", wsResultado.UUID)

            func.EscribeEnPantalla("Todo el proceso tardo: ", wsResultado.TiempoProceso & " segundos")

        Catch wsError As Exception

            If wsError.Message.Contains("|") Then

                func.EscribeEnPantalla("-- ERROR CODIGO-- ", wsError.Message.Split("|")(1))

                func.EscribeEnPantalla("-- ERROR DESCRIPCION-- ", wsError.Message.Split("|")(2))

            Else

                func.EscribeEnPantalla("-- ERROR -- ", wsError.Message)

            End If

        End Try

 

Lista de códigos de error

El SAT ha publicado una lista estándar de códigos de error (códigos del 301 al 403) aplicables a las respuestas no satisfactorias.

El servicio detecta estos errores, y los regresa. También verifica otras situaciones de error directamente relacionadas con la aplicación de Factorum.

ERRORES

ESTATUS DE USUARIO INCORRECTO

ESTATUS IRRECONOCIBLE

PASSWORD NO COINCIDE

USUARIO Y PASSWORD INCORRECTO, NO ENCONTRADO EN BD

PASSWORD NO PROPORCIONADO

USUARIO NO PROPORCIONADO

ERROR AL GUARDAR EN DISCO EL ARCHIVO GIF

ERROR AL GUARDAR EN DISCO EL ARCHIVO XML

EL SERVICIO OPERA LA SIGUIENTE CLASIFICACIÓN DE ERRORES:

00 - ERROR DESCONOCIDO + {DESCRIPCIÓN ERROR}1

01 - ERROR AL SACAR INF DEL ARCHIVO (RECOLECTATABLES) + {DESCRIPCIÓN ERROR}1

02 - ERROR NO ESPECIFICADO AL REGRESAR FOLIO FACTORUM + {DESCRIPCIÓN ERROR}1

03 - ERROR FACTURA YA HECHA (FACTURA TIMBRADA ANTERIORMENTE)

04 - ERROR AL TRATAR LA ADDENDA + {DESCRIPCIÓN ERROR}1

05 - ERROR AL CREAR EL XML (FORMAXML) + {DESCRIPCIÓN ERROR}1

06 - ERROR AL TIMBRAR EL XML + {DESCRIPCIÓN TIMBRADO}2

07 - ERROR AL ACTUALIZAR DATOS DE TIMBRE + {DESCRIPCIÓN ERROR}1

08 - ERROR AL ACTUALIZAR LOS DATOS ADICIONALES + {DESCRIPCIÓN ERROR}1

09 - ERROR AL CREAR EL PDF + {DESCRIPCIÓN ERROR}1

10 - ERROR AL ENVIAR EL EMAIL

1 DESCRIPCIÓN ERROR: Descripción del mensaje de la excepción, atrapada por el manejador de errores, EJ: ERR.DESCRIPTION

2 DESCRIPCIÓN TIMBRADO:

ERROR AL TIMBRAR + DESCRIPCIÓN DEL ERROR POR PARTE DEL SAT

ESTE USUARIO SOLO PUEDE USAR METODOS TEST

ACABO LOS FOLIOS CONTRATADOS

NO SE ENCONTRARON DATOS PARA EL QRCODE

ERROR AL GUARDAR EN DISCO EL ARCHIVO GIF

ERROR AL GUARDAR EN DISCO EL ARCHIVO XML

USUARIO Y PASSWORD INCORRECTO, NO ENCONTRADO EN BD

ESTATUS DE USUARIO INCORRECTO


Para poder detectar si hubo un error, es necesario utilizar un manejo de errores dentro de la programación, y poder tomar decisiones dentro del código


 

Untitled 1

Conector Local

Conector Local

Características

El Servicio forma el XML y lo sella

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

El Servicio manda un Email de aviso al cliente de su factura

Manda a Impresión Automática la factura emitida

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

Uso de Bóveda Factorum

El Servicio tiene Conectividad con sistemas web

 

El servicio tiene Conectividad con sistemas locales

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

 

txt layout construido por el usuario, es el  contenido de lo que se quiere facturar

 

Salida

Archivo QRcode

 

Archivo XML timbrado

Cadena Original Sello

 

Fecha Timbrado

 

No Certificado SAT

 

Sello CDF

 

Sello SAT

 

UUID

 

Tiempo de proceso

 

Archivo PDF

Código de error

 

Mensaje de error

 

 

Es un programa que se instala en la máquina del cliente, y espera recibir archivos de texto que contienen la información a facturar, bajo un esquema (layout) acordado, de tal manera que cada archivo depositado es procesado usando internamente nuestro webservice, y se regresa la respuesta en un directorio donde estarán los PDF y XML ya timbrados.

Como requisito, debe de tener instalado el ADOBE READER, para poder imprimir los PDF.

Un apartado importante son el archivo de configuración, y las carpetas que se manejan

Explicación del archivo de configuración:

El archivo de configuración es un archivo en formato XML, donde le podemos modificar parámetros en su nodo de <appSettings>

<add key="SEGUNDOS" value="5" />  es el tiempo que se checará en el directorio de entrada, si hay algún archivo a procesar.

<add key="DEBUG" value="N" /> Si se le pone "S" permite sacar una ventana para "testear" las funciones. N = actúa de manera silenciosa procesando los archivos.

<add key="METODOTEST" value="S" /> Para que el timbrado sea mediante un ambiente de pruebas. N = Productivo

<add key="ADOBE" value="C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe" />  Ruta EXACTA de donde esté instalado el Adobe Reader, esto es para la impresión automática.

<add key="RFC" value="AAA010101AAA" />    Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

<add key="USR" value="prueba1@factorum.com.mx" /> Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

<add key="PWD" value="prueba2011" /> Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

 

Estos parámetros cambiarlos de acuerdo a como haya instalado sus carpetas, o sea, debe de poner la ruta exacta en cada una de ellas:

<add key="PATH_PDF" value="C:\Archivos_PDF" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_IN" value="C:\Archivos_Entrada" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_ERROR" value="C:\Archivos_Error" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_OUT" value="C:\Archivos_Salida" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

Explicacion de las carpetas

Archivos de Entrada:

Los Archivos DAT que están ahí no borrarlos.

Mapping: Sirve para hacer match entre el Layout y nuestra DB

Número.dat: son las direcciones respectivamente (siguiendo el layout original)

0,1: Direccion por sucursales que esta siendo indicado en el Layout

Archvos PDF

La estructura que manejamos para los subdirectorios del PDF es la siguiente:

Dado el siguiente ejemplo de una carpeta:

    \Archivos_PDF\0\05\13

Elementos:

    \Archivos_PDF: Definido en el archivo Config

    \0 : Número de sucursal, este sale del layout en la coordenada E01:10

    \05: Es el mes, que sale de la extracción de la fecha en el Layout es la coordenada E01:2. NOTA: el formato debe de ser "yyyy-mm-dd"

    \13: Es el tipo del documento, en el Layout está en la coordenada E01:9

Entonces queda la agrupación por Sucursal, y por cada sucursal se agrupa por mes, y dentro de cada mes, por tipo de documento.

Archvos Salida

La estructura que manejamos es la siguiente:

Dado el siguiente ejemplo de una carpeta:

    \Archivos_Salida\0

Elementos:

    \Archivos_Salida: Definido en el archivo Config

    \0 : Número de sucursal, este sale del layout en la coordenada E01:10 Aquí se deja una copia del archivo que se proceso, es decir, se quita del directorio de Entrada y se pasa al de Salida.

Archvos ERROR

Aquí se dejan los TXT que no se procesaron porque sucedió algún error. Para saber qué error ocurrió existe un archivo que se llama LogError.txt, el cual va guardando entradas por cada error que ocurre.

Un ejemplo de entrada de error es:

Folio Factorum: 17330|Serie/Folio: U1/666|Paso 1: 1|Paso 2: 2|Paso 3: 0|Paso 4: 0|Paso 5: 0|Paso 6: 0|Nombre Arch: U1AUTOS|Mensaje Error: Error FormaXmlValido:  Server was unable to process request. ---> Object reference not set to an instance of an object.

Separados por pipes contienen los siguientes datos:

·         Indica el ID de la factura, si es que alcanzó a grabar en la base de datos de factorum

·         Indica la Serie y follio de la factura a procesar

·         El estatus de todos los pasos, hay seis pasos, los estatus pueden ser: 

o    1 es Ok

o    2 es Error

o    0 es que no entro al paso

·         Nombre del Archivo TXT que se procesa

·         Mensaje del error

Explicacion del Layout:

Al inicio de un registro hay un identificador de registro (E01, EA1, D01..etc.) en cada registro hay campos numerados.

Cada campo debe de ser separado por Pipes

Cuando no haya valor en un campo, se debe de poner vacio, por ejemplo EA1|||

Hay Registros que se pueden repetir dentro del archivo, por ejemplo el detalle de la factura (D01), para estos campos, se indican en el layout mediante un corchete.

Nota, es importante que el primer campo tenga el Folio y Serie, separados por un undersocre, por ejemplo:

E01|0001_A... Esto significa que es folio 0001 y serie A.

 

Este sería un ejemplo de un TXT generado con el layout:


E01|11533_prueba04|2012-05-26 00:00:00|CREDITO DE 20 DIAS|13200|0||15312|DEPOSITO-TRANSFERENCIA|01|0
E02|4|COM890720N64|COMPAÑIA SA DE CV
E03|LIBERTAD|114||TAMULTE|VILLHERMOSA||VILLHERMOSA|TABASCO|MEXICO|86150
E04|-1|-1|0|0|0|0|0|0|0|0
E06|VP16|16|2112
EA1|-18|MXN|1|Quince mil trescientos doce/100*************************************** pesos
EA2|3|||COMPAÑIA SA DE CV|LIBERTAD|666||TAMULTE|||VILLHERMOSA|TABASCO|MEXICO||||
EA3|||||||
EA9||
D01|12|PZ|4705||PRODUCTO 1|120|1440||1|0
D02|||
DA1|1699|2012-05-22|0|KG
DA2|1|2012-05-24||2074|S||0
DA3|
DA4||||
DA5|
DA6|VP16|2112|16
DA7||
DA8||0||0
DC3
DC4|
DC5|
DC6|
DC7|
DC8|
DC10|
D01|50|PZ|4707||PRODUCTO 2|120|6000||2|0
D02|||
DA1|1699|2012-05-22|0|KG
DA2|1|2012-05-24||2074|S||0
DA3|
DA4||||
DA5|
DA6|VP16|2112|16
DA7||
DA8||0||0
DC3
DC4|
DC5|
DC6|
DC7|
DC8|
DC10|
C03|
C04|
C05|
C06|
C07|
C08|
C09|
C10|
C11|
C12|
C13|
C14|
C16|
C17|
C18|
C19|DEPOSITO-TRANSFERENCIA
C20|
C21|
C22|
C23|
C24|
C25|

Explicacion de los Archivos 0.dat, 1.dat, etc..

Estos archivos representan la identificacion de sucursales, ahi se genera cada archivo (menos el 0) para identificar que sucursal fue la que hizo la factura. Es en realidad los datos del cliente emisor.

La manera de hacerlos es la siguiente:

Separado por pipes, hay que poner en este orden los siguientes campos:

·         [RFC]  

·         [Razonsocial] 

·         [Direccion1]   

·         [Colonia]       

·         [NumInterior]  

·         [NumExterior] 

·         [CP]   

·         [Municipio]    

·         [Localidad]    

·         [Estado]         

·         [Pais]

Si no hubiera sucursales, entonces se manda el 0 en el layout, en el E01 en el campo 10, si hubiera una sucursal, se manda el numero del archivo que le toco.

Explicacion del flujo de información:

Esto se procesa de la siguiente manera. Usted deja el archivo TXT en la carpeta de ENTRADA (eso se pone en el config), el conector esta monitoreando esta carpeta en determinados segundos (eso se pone en el config) y en cuanto haya archivos ahi, los procesa inmediatamente, haciendo el sellado, el timbre, y pocos segundos después, deja el resultado en la carpeta de SALIDA y de PDF (eso se pone en el config), si es que todo salió bien, sino, los deja en la carpeta de ERROR (eso se pone en el config)  con su entrada correspondiente en el log de error.

·         En el paso 0 se busca el archivo TXT candidato para procesar

·         En el paso 1 se lee y se entiende ese archivo, como resultado se presenta el Folio y la serie y el encabezado y detalle que tiene el txt

·         En el paso 2 se graba todo en la base de datos, y regresa un folio de Factorum

·         En el paso 3 se genera un XML sellado y se presenta el array de bytes de ese XML

·         En el paso 4 se manda esa informacion al SAT y presentamos el UUID

·         En el paso 5 se actualiza en nuestra base de datos los datos regresados del SAT

·         En el paso 5.1 se graban datos adicionales en nuestra base de datos

·         En el paso 6 recoplia toda la informacion y crea el PDF, presentamos el array de bytes que representa la informacion

·         En el paso 7 se escribe el PDF en forma local, presentamos el nombre del archivo

·         En el paso 7(bis) se escriben los logs locales

Esta es la pantalla mostrando todos los pasos exitosos en modo de DEBUG = S. No hay error porque la etiqueta de error en los diferentes pasos está vacía.

Untitled 1
Untitled 1

Conector Local lite b

Conector Local

Lite-B

Características

El Servicio forma el XML y lo sella

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

El Servicio manda un Email de aviso al cliente de su factura

Manda a Impresión Automática la factura emitida

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

Uso de Bóveda Factorum

El Servicio tiene Conectividad con sistemas web

 

El servicio tiene Conectividad con sistemas locales

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

 

xml en su versión 2.2, el archivo CFD

 

Salida

Archivo QRcode

 

Archivo XML timbrado

Cadena Original Sello

 

Fecha Timbrado

 

No Certificado SAT

 

Sello CDF

 

Sello SAT

 

UUID

 

Tiempo de proceso

 

Archivo PDF

Código de error

 

Mensaje de error

 

 

Es un programa que se instala en la máquina del cliente, y espera recibir archivos XML en su versión 2.2 que contienen la información a facturar bajo un esquema CFD, de tal manera que cada archivo depositado es procesado usando internamente nuestro webservice, y se regresa la respuesta en un directorio donde estarán los PDF y XML ya timbrados.

Como requisito, debe de tener instalado el ADOBE READER, para poder imprimir los PDF.

Un apartado importante son el archivo de configuración, y las carpetas que se manejan

Explicación del archivo de configuración:

El archivo de configuración es un archivo en formato XML, donde le podemos modificar parámetros en su nodo de <appSettings>

<add key="SEGUNDOS" value="5" />  es el tiempo que se checará en el directorio de entrada, si hay algún archivo a procesar.

<add key="DEBUG" value="N" /> Si se le pone "S" permite sacar una ventana para "testear" las funciones. N = actúa de manera silenciosa procesando los archivos.

<add key="METODOTEST" value="S" /> Para que el timbrado sea mediante un ambiente de pruebas. N = Productivo

<add key="ADOBE" value="C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe" />  Ruta EXACTA de donde esté instalado el Adobe Reader, esto es para la impresión automática.

<add key="RFC" value="AAA010101AAA" />    Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

<add key="USR" value="prueba1@factorum.com.mx" /> Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

<add key="PWD" value="prueba2011" /> Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

 

Estos parámetros cambiarlos de acuerdo a como haya instalado sus carpetas, o sea, debe de poner la ruta exacta en cada una de ellas:

<add key="PATH_PDF" value="C:\Archivos_PDF" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_IN" value="C:\Archivos_Entrada" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_ERROR" value="C:\Archivos_Error" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_OUT" value="C:\Archivos_Salida" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

Explicacion de las carpetas

Archivos de Entrada:

Se depositaran en esta carpeta los archivos XML en version 2.2

Archvos PDF

La estructura que manejamos para los subdirectorios del PDF es la siguiente:

Dado el siguiente ejemplo de una carpeta:

    \Archivos_PDF\0\05\13

Elementos:

    \Archivos_PDF: Definido en el archivo Config

    \0 : Número de sucursal, este sale del layout en la coordenada E01:10

    \05: Es el mes, que sale de la extracción de la fecha en el Layout es la coordenada E01:2. NOTA: el formato debe de ser "yyyy-mm-dd"

    \13: Es el tipo del documento, en el Layout está en la coordenada E01:9

Entonces queda la agrupación por Sucursal, y por cada sucursal se agrupa por mes, y dentro de cada mes, por tipo de documento.

Archvos Salida

La estructura que manejamos es la siguiente:

Dado el siguiente ejemplo de una carpeta:

    \Archivos_Salida\0

Elementos:

    \Archivos_Salida: Definido en el archivo Config

    \0 : Número de sucursal, este sale del layout en la coordenada E01:10 Aquí se deja una copia del archivo que se proceso, es decir, se quita del directorio de Entrada y se pasa al de Salida.

Archvos ERROR

Aquí se dejan los TXT que no se procesaron porque sucedió algún error. Para saber qué error ocurrió existe un archivo que se llama LogError.txt, el cual va guardando entradas por cada error que ocurre.

Un ejemplo de entrada de error es:

Folio Factorum: 17330|Serie/Folio: U1/666|Paso 1: 1|Paso 2: 2|Paso 3: 0|Paso 4: 0|Paso 5: 0|Paso 6: 0|Nombre Arch: U1AUTOS|Mensaje Error: Error FormaXmlValido:  Server was unable to process request. ---> Object reference not set to an instance of an object.

Separados por pipes contienen los siguientes datos:

·         Indica el ID de la factura, si es que alcanzó a grabar en la base de datos de factorum

·         Indica la Serie y follio de la factura a procesar

·         El estatus de todos los pasos, hay seis pasos, los estatus pueden ser: 

o    1 es Ok

o    2 es Error

o    0 es que no entro al paso

·         Nombre del Archivo TXT que se procesa

·         Mensaje del error

Explicacion del CFD (XML VERSION 2.2):

Este sería un ejemplo de un XML Version 2.2 :


Explicacion del flujo de información:

Esto se procesa de la siguiente manera. Usted deja el archivo XML version 2.2 en la carpeta de ENTRADA (eso se pone en el config), el conector esta monitoreando esta carpeta en determinados segundos (eso se pone en el config) y en cuanto haya archivos ahi, los procesa inmediatamente, haciendo el sellado, el timbre, y pocos segundos después, deja el resultado en la carpeta de SALIDA y de PDF (eso se pone en el config), si es que todo salió bien, sino, los deja en la carpeta de ERROR (eso se pone en el config)  con su entrada correspondiente en el log de error.

·         En el paso 0 se busca el archivo XML V 2.2 candidato para procesar

·         En el paso 1 se lee y se entiende ese archivo, como resultado se presenta el Folio y la serie y el encabezado y detalle que tiene el txt

·         En el paso 2 se graba todo en la base de datos, y regresa un folio de Factorum

·         En el paso 3 se genera un XML Version 3.2 sellado y se presenta el array de bytes de ese XML

·         En el paso 4 se manda esa informacion al SAT y presentamos el UUID

·         En el paso 5 se actualiza en nuestra base de datos los datos regresados del SAT

·         En el paso 5.1 se graban datos adicionales en nuestra base de datos

·         En el paso 6 recoplia toda la informacion y crea el PDF, presentamos el array de bytes que representa la informacion

·         En el paso 7 se escribe el PDF en forma local, presentamos el nombre del archivo

·         En el paso 7(bis) se escriben los logs locales

Esta es la pantalla mostrando todos los pasos exitosos en modo de DEBUG = S. No hay error porque la etiqueta de error en los diferentes pasos está vacía.

Untitled 1

Conector Local RECIBOS DE NOMINA

Conector Local

Características

El Servicio forma el XML y lo sella

El Servicio timbra el XML sellado

Guardar en Base de Datos Factorum

El Servicio manda un Email de aviso al cliente de su factura

Manda a Impresión Automática el comprobante emitido

El usuario tiene notificaciones automáticas por correo electrónico de folios por acabar

El Servicio hace la generación del PDF

Uso de Bóveda Factorum

El Servicio tiene Conectividad con sistemas web

 

El servicio tiene Conectividad con sistemas locales

El Servicio usa Esquema CFD

 

El Servicio usa Esquema CFDi

Hay un Portal de aplicación

 

Hay un Portal de consulta

 

 

Entrada

Usr, Pwd, RFC; Proporcionados cuando se adquiere el producto

xml sellado construido por el usuario, es el contenido de lo que se quiere facturar

 

txt layout construido por el usuario, es el  contenido del comprobante de nomina

 

Salida

Archivo QRcode

 

Archivo XML timbrado

Cadena Original Sello

 

Fecha Timbrado

 

No Certificado SAT

 

Sello CDF

 

Sello SAT

 

UUID

 

Tiempo de proceso

 

Archivo PDF

Código de error

 

Mensaje de error

 

 

Es un programa que se instala en la máquina del cliente, y espera recibir archivos de texto que contienen la información de un recibo de nomina, bajo un esquema (layout) acordado, de tal manera que cada archivo depositado es procesado usando internamente nuestro webservice, y se regresa la respuesta en un directorio donde estarán los PDF y XML ya timbrados.

Como requisito, debe de tener instalado el ADOBE READER, para poder imprimir los PDF.

Un apartado importante son el archivo de configuración, y las carpetas que se manejan

Explicación del archivo de configuración:

El archivo de configuración es un archivo en formato XML, donde le podemos modificar parámetros en su nodo de <appSettings>

<add key="SEGUNDOS" value="5" />  es el tiempo que se checará en el directorio de entrada, si hay algún archivo a procesar.

<add key="DEBUG" value="N" /> Si se le pone "S" permite sacar una ventana para "testear" las funciones. N = actúa de manera silenciosa procesando los archivos.

<add key="METODOTEST" value="S" /> Para que el timbrado sea mediante un ambiente de pruebas. N = Productivo

<add key="ADOBE" value="C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe" />  Ruta EXACTA de donde esté instalado el Adobe Reader, esto es para la impresión automática.

<add key="RFC" value="AAA010101AAA" />    Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

<add key="USR" value="prueba1@factorum.com.mx" /> Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

<add key="PWD" value="prueba2011" /> Datos del usuario de prueba, una vez entregado el CER y el KEY y el pwd del SAT, se pondrán sus datos

 

Estos parámetros cambiarlos de acuerdo a como haya instalado sus carpetas, o sea, debe de poner la ruta exacta en cada una de ellas:

<add key="PATH_PDF" value="C:\Archivos_PDF" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_IN" value="C:\Archivos_Entrada" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_ERROR" value="C:\Archivos_Error" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

<add key="PATH_OUT" value="C:\Archivos_Salida" /> Ruta de directorios (cambiar a donde se vayan a realizar las pruebas)

Explicacion de las carpetas

Archivos de Entrada:

Los Archivos DAT que están ahí no borrarlos.

Mapping: Sirve para hacer match entre el Layout y nuestra DB

Número.dat: son las direcciones respectivamente (siguiendo el layout original)

0,1: Direccion por sucursales que esta siendo indicado en el Layout

Archvos PDF

La estructura que manejamos para los subdirectorios del PDF es la siguiente:

Dado el siguiente ejemplo de una carpeta:

    \Archivos_PDF\0\05\13

Elementos:

    \Archivos_PDF: Definido en el archivo Config

    \0 : Número de sucursal, este sale del layout en la coordenada E01:10

    \05: Es el mes, que sale de la extracción de la fecha en el Layout es la coordenada E01:2. NOTA: el formato debe de ser "yyyy-mm-dd"

    \13: Es el tipo del documento, en el Layout está en la coordenada E01:9

Entonces queda la agrupación por Sucursal, y por cada sucursal se agrupa por mes, y dentro de cada mes, por tipo de documento.

Archvos Salida

La estructura que manejamos es la siguiente:

Dado el siguiente ejemplo de una carpeta:

    \Archivos_Salida\0

Elementos:

    \Archivos_Salida: Definido en el archivo Config

    \0 : Número de sucursal, este sale del layout en la coordenada E01:10 Aquí se deja una copia del archivo que se proceso, es decir, se quita del directorio de Entrada y se pasa al de Salida.

Archivos ERROR

Aquí se dejan los TXT que no se procesaron porque sucedió algún error. Para saber qué error ocurrió existe un archivo que se llama LogError.txt, el cual va guardando entradas por cada error que ocurre.

Un ejemplo de entrada de error es:

Folio Factorum: 17330|Serie/Folio: U1/666|Paso 1: 1|Paso 2: 2|Paso 3: 0|Paso 4: 0|Paso 5: 0|Paso 6: 0|Nombre Arch: U1AUTOS|Mensaje Error: Error FormaXmlValido:  Server was unable to process request. ---> Object reference not set to an instance of an object.

Separados por pipes contienen los siguientes datos:

·         Indica el ID de la factura, si es que alcanzó a grabar en la base de datos de factorum

·         Indica la Serie y follio de la factura a procesar

·         El estatus de todos los pasos, hay seis pasos, los estatus pueden ser: 

o    1 es Ok

o    2 es Error

o    0 es que no entro al paso

·         Nombre del Archivo TXT que se procesa

·         Mensaje del error

Explicacion del Layout:

Al inicio de un registro hay un identificador de registro (E01, EA1, D01..etc.) en cada registro hay campos numerados.

Cada campo debe de ser separado por Pipes

Cuando no haya valor en un campo, se debe de poner vacio, por ejemplo EA1|||

Hay Registros que se pueden repetir dentro del archivo, por ejemplo el detalle de la factura (D01), para estos campos, se indican en el layout mediante un corchete.

Nota, es importante que el primer campo tenga el Folio y Serie, separados por un undersocre, por ejemplo:

E01|0001_A... Esto significa que es folio 0001 y serie A.

 

Este sería un ejemplo de un TXT de recibo de nomina generado con el layout:


E01|009_NOM001|2014-01-01 14:43:11||50968.09|||59122.98|No identificado|12|0|000||||
E02|1|SLI8007013R7|SERVICIOS LIVERPOOL SA DE CV
E03|MARIO PANI|200||SANTA FE|||CUAJIMALPA|DF|MEX|05109
E04|0.00|8154.89
E05|||
E06|IVA|16|16.00
EA1||MXN|| CINCUENTA Y NUEVE MIL CIENTO VEINTIDOS 98/100 M.N.
EX1||||||||||
EX2|
EX3|||||||
EA2|E|EMAIL|EMAIL|EMAIL|AV. PROL. PASEO DE LA REFORMA|1240||SANTA FE|||CUAJIMALPA|DF|MEX|05109|jc@factorum.com.mx; ap@factorum.com.mx||
EA3|||||||
EA5|
EA6|
EA9|||
D01|1|NO APLICA|||RECUPERACION CARTERA VENCIDA|50968.09|50968.09|||1234
D02||||
DA1||||
DA2|||||||
DA3|
DA4||||
DA5||
DA6|||
DA7||
DA8|DESCUENTO|0|DESCUENTO|0
DC3|TOTAL 1000.30
DC4|FECHA REF 12/12/13
DC5|
DC6|
DC7|
DC8|
C03|
C04|
C05|
C06|
C07|
C08|
C09|
C10|
C11|
C12|
C13|
C14|
C15|
C16|
C17|
C18|
C19|PAGO EN UNA SOLA EXHIBICIÓN PARA EFECTOS FISCALES
C20|
C21|
C22|
C23|
C24|
C25|
EX4||||
EX5|
ER1|||
VW1||||
N01|0000011|00001|LAXK721023MNENXR09|1|43977713023|01/01/2014|01/01/2014|01/01/2014|30|Sistemas|005294898394893481|Developer|Eventual|Por Hora|Mensual|072|01/01/2014|46|100|1000|1
NP1|1000.30|0.00
NP2|100|001|PAGO DE NOMINA|1000.30|0.00
ND1|1000.30|0.00
ND2|100|001|Seguridad social|1000.30|0.00
NI1|5|2|100.00
NE1|5|Dobles|20|240.50

Explicacion de los Archivos 0.dat, 1.dat, etc..

Estos archivos representan la identificacion de sucursales, ahi se genera cada archivo (menos el 0) para identificar que sucursal fue la que hizo la factura. Es en realidad los datos del cliente emisor.

La manera de hacerlos es la siguiente:

Separado por pipes, hay que poner en este orden los siguientes campos:

·         [RFC]  

·         [Razonsocial] 

·         [Direccion1]   

·         [Colonia]       

·         [NumInterior]  

·         [NumExterior] 

·         [CP]   

·         [Municipio]    

·         [Localidad]    

·         [Estado]         

·         [Pais]

Si no hubiera sucursales, entonces se manda el 0 en el layout, en el E01 en el campo 10, si hubiera una sucursal, se manda el numero del archivo que le toco.

Explicacion del flujo de información:

Esto se procesa de la siguiente manera. Usted deja el archivo TXT en la carpeta de ENTRADA (eso se pone en el config), el conector esta monitoreando esta carpeta en determinados segundos (eso se pone en el config) y en cuanto haya archivos ahi, los procesa inmediatamente, haciendo el sellado, el timbre, y pocos segundos después, deja el resultado en la carpeta de SALIDA y de PDF (eso se pone en el config), si es que todo salió bien, sino, los deja en la carpeta de ERROR (eso se pone en el config)  con su entrada correspondiente en el log de error.

·         En el paso 0 se busca el archivo TXT candidato para procesar

·         En el paso 1 se lee y se entiende ese archivo, como resultado se presenta el Folio y la serie y el encabezado y detalle que tiene el txt

·         En el paso 2 se graba todo en la base de datos, y regresa un folio de Factorum

·         En el paso 3 se genera un XML sellado y se presenta el array de bytes de ese XML

·         En el paso 4 se manda esa informacion al SAT y presentamos el UUID

·         En el paso 5 se actualiza en nuestra base de datos los datos regresados del SAT

·         En el paso 5.1 se graban datos adicionales en nuestra base de datos

·         En el paso 6 recoplia toda la informacion y crea el PDF, presentamos el array de bytes que representa la informacion

·         En el paso 7 se escribe el PDF en forma local, presentamos el nombre del archivo

·         En el paso 7(bis) se escriben los logs locales

Esta es la pantalla mostrando todos los pasos exitosos en modo de DEBUG = S. No hay error porque la etiqueta de error en los diferentes pasos está vacía.

Centro de descargas


Estos proyectos hacen test a los productos, están hechos en Visual Basic, y tienen una guía rápida para su instalación.




Para el Webservice Portal  
   
Utilice el usuario de pruebas para
acceder al Portal
: Solicitelos a Factorum








Cualquier duda estamos a sus órdenes, puede acceder a nuestro sistema de tickets y postear su duda, se le atenderá en la mayor brevedad posible