![](img/factorum_logo.png)
![](img/shd.png)
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.
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 |
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 |
|
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 |
|
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
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
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 |
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 |
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)
•
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.
http://desarrollo.factorumweb.com/FactorumWSvpdfv32/Factorumwspdf.asmx?op=wsFactorumWSpdf 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
•
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 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
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
Parámetros
Petición
y Respuesta SOAP
Respuesta del método
Validaciones que contiene el servicio
Ejemplos
Lista de
códigos de error
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.
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 |
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
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.
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.
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 |
Para el conector local | |
Ultima version del Layout | Ultima version del Layout para Recibo de Nómina |
Archivo TXT de prueba y lo que se genera con ese Archivo |
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