Introducción

El Conector INSIGNA es una aplicación cliente desarrollada en Java cuya función es la de efectuar el timbrado, cancelación y validación de CFDIs. Esto lo realiza mediante la conexión a un servidor del sistema INSIGNA. La naturaleza misma de la aplicación permite que sea instalada y ejecutada en diferentes sistemas operativos.

El Conector está diseñado como una herramienta de timbrado rápida y segura. Es capaz de timbrar CFDIs generados en archivos de texto, soportando los formatos CSV y XML.

En este documento se describen las características del Conector, así como la lista de los requerimientos mínimos para su instalación y funcionamiento.

Tipos de CFDI

En el Conector INSIGNA se identifica como un CFDI a los siguientes tipos de comprobantes:

  • Comprobante Fiscal Digital por Internet (CFDI V3.3)
  • Documento Electrónico de Retenciones e información de Pagos (Retención Pago V1.0)

Por lo que al hacer referencia a un CFDI dentro de este manual tomaremos en cuenta los comprobantes previamente mencionados.

Funcionalidad del Conector

La funcionalidad del Conector se resume en los siguientes puntos:

  1. Timbrado, Cancelación y Validación de CFDIs.
  2. Lectura de datos a través de un sistema de archivos.
  3. Guardado de XML timbrados.
  4. Generación de representación impresa personalizable.
  5. Envío de correo electrónico personalizables.
  6. Manejo seguro de información sensible.

Timbrado, Cancelación y Validación de CFDI

La comunicación entre las aplicaciones es configurable para adaptarse a la operación del cliente.

La siguiente gráfica muestra la comunicación entre las diferentes aplicaciones:

Proceso de Cancelación

El proceso de cancelación se aplicará a todos los CFDIs excepto a los que tengan alguna de éstas características:

  • CFDI que aparen ingresos hasta $5,000.00
  • Nómina
  • Egreso
  • Traslado
  • Emitido desde el portal web del SAT "Mis Cuentas"
  • CFDI de retenciones e información de pagos
  • CFDI de ingreso expedidos a contribuyentes del RIF
  • Dentro de los tres días siguientes a la emisión
  • Operaciones con público en general
  • Recibidos por residentes en el extranjero
  • CFDI a través del adquiriente y sector primario
  • CFDI emitido por integrantes del sistema Financiero
Importante

Durante el proceso de cancelación todos los CFDIs que tengan cancelación con aceptación pasarán a la carpeta cancelaciones/en_proceso en donde se procesaran hasta que cambien de estatus (cancelado o vigente).

Para saber cuándo cambian de estatus se brindará el servicio de Notificaciones de estatus de cancelación el cual hasta en cinco correos se podrá recibir las notificaciones; para acceder a este servicio será necesario entrar a https://www.insigna.mx/ en la sección MiCuenta > Configuración Adicional donde se deberá ingresar el correo en el cuál desea recibir las notificaciones del cambio de estatus y seleccionar el checkbox para activar el servicio.

Lectura de datos a través de un sistema de archivos

La lectura de datos desde un sistema de archivos permite timbrar archivos XML o CSV leyéndolos desde una carpeta configurada en el Conector. Esto permite que se ingrese la información desde cualquier sistema que pueda escribir un archivo en un fichero, incluyendo programas como una macro en Microsoft Excel, un ERP o un sistema hecho a la medida.

Guardado de XML timbrados

El Conector puede guardar los CFDIs timbrados para su almacenamiento y administración en 2 lugares:

  1. Sistema de archivos. Si está configurado el modo lectura desde sistema de archivos, la salida de XML y PDF a un sistema de archivos es obligatoria para que el usuario reciba esta información.
  2. Envío por email. Para el modo de entrada por sistema de archivos con formato CSV (se excluye XML), se puede configurar el envío de emails con los archivos adjuntos XML y PDF como se detalla más adelante.

Generación de representación impresa personalizable (PDF)

Una vez timbrado un XML, el Conector puede generar la representación impresa del CFDI en formato PDF para facilitar su lectura.

INSIGNA soporta distintas opciones de representaciones impresas a elegir para que se adecuen a las necesidades del cliente. Cada RFC con el que se desee emitir en el Conector puede tener una representación impresa diferente.

En el caso de requerir otro diseño con imágenes y colores diferentes a los proporcionados, INSIGNA ofrece un servicio de personalización el cual puede solicitarse a Servicio al Cliente.

Envío de correo electrónico

El Conector puede ser configurado para enviar correos electrónicos con la información de los CFDIs timbrados a los usuarios administradores del sistema y/o al receptor del CFDI.

El correo electrónico adjunta los archivos generados del CFDI: un archivo XML timbrado y su representación impresa en PDF.

El texto del email es personalizable y se puede enviar un texto diferente por cada RFC emisor.

IMPORTANTE: Para utilizar esta funcionalidad es requisito que el cliente tenga un servidor de correos en su infraestructura.

Manejo seguro de información sensible

El certificado, la llave privada y la contraseña de un emisor se consideran información importante y sensible.

El Conector ofrece una mayor seguridad cifrando todas las contraseñas a través de una frase única (masterkey) manejada por el administrador del sistema. Esto previene la obtención de la información sensible en caso de un acceso indebido a los servidores donde se encuentra la instalación del Conector.

Requisitos

Durante el proceso de configuración será requerida información que corresponde al SAT e INSIGNA. Se sugiere revisar cada uno de los requisitos para una correcta instalación.

Conector

Hardware

Un servidor con conexión a Internet de 512 Kb libres o mayor , 256 MB libres en RAM y 100 MB libres de disco duro para la instalación. Posteriormente, se requerirán 7 MB por cada 100 CFDIs generados.

Si se utilizará la conexión mediante TCP a los servicios de INSIGNA, es necesario que el servidor cuente con una IP pública (homologada). En caso que se utilice la conexión mediante Web Service a INSIGNA no es necesario contar con la IP pública.

Software

  • Sistema operativo:
    • Windows Server 2003, 2008 o 2012.
  • Máquina virtual de Java (JVM) con JRE versión 1.8 o superior.
  • Soporte ilimitado para criptografía en Java (Ver Anexo 14.5).
  • OpenSSL:
    • 0.9.8 para Unix
    • Cygwin con OpenSSL 0.9.8 para Windows
  • Para envío de correos:
    • Servidor SMTP

SAT

Certificado de sello digital (CSD) para facturar electrónicamente.

https://goo.gl/cbAPk

https://goo.gl/vrqfSB

INSIGNA

  • Cuenta de acceso a INSIGNA.
  • Timbres suficientes para realizar cada operación.
  • Certificado SSL para la comunicación segura, si es que se utilizará una conexión mediante el protocolo TCP.

Tanto la cuenta de acceso como el certificado SSL se generan durante el proceso de contratación.

Instalación

Antes de iniciar con los pasos de la instalación, se debe saber cuál es la funcionalidad que se va a activar para esta instancia de Conector.

Procedimiento de instalación

  • 1. Descomprimir el archivo Conector.zip en la carpeta donde se desee hacer la instalación; se puede utilizar cualquier software que descomprima archivos .zip. El archivo Conector.zip será enviado por INSIGNA al cliente vía correo electrónico.
  • 2. Se declara la variable de entorno CONECTOR_HOME . El valor que se establece en la variable debe ser igual a la carpeta de instalación del Conector.
	  SET CONECTOR_HOME= C:\conector\
	

  • 3. Para la ejecución de los comandos, la variable de entorno JAVA_HOME debe apuntar a la instalación requerida de Java (como se observa en la imagen, JAVA_HOME apunta al directorio donde está instalado Java).

Esto se puede validar tecleando el comando "java". Si la variable JAVA_HOME está configurara correctamente, la consola reconocerá el comando "java" y desplegará lo siguiente, independientemente del directorio en el que esté posicionada.


  • 4. Configurar la ruta de archivo para el guardado de la bitácora del Conector, para lo cual es necesario abrir el archivo ubicado en %CONECTOR_HOME%configlogging.properties y configurar la propiedad java.util.logging.FileHandler.pattern , donde por default se encuentra el valor "conector%u.%g.log". El valor de esta propiedad debe ser una ruta de archivo absoluta para asegurar que la bitácora sólo sea guardada en esa ubicación y no de forma relativa a la posición actual en la consola.
	 Ejemplo:
     C:/conector/bin/conector%u.%g.log
     Nota: Es importante señalar que para la definición de esta ruta no es posible
     utilizar cualquier variable de entorno. Además, es imperativo usar como separador
     de directorios la diagonal, más específicamente, el carácter “/”. 
	
  • 5. Verificar la instalación del Conector ejecutando el comando conector help.
	  %CONECTOR_HOME%/bin/conector help
	

Respuesta al comando conector help al ejecutarse en el sistema operativo Windows


  • 6.Extensión de Criptografía en Java

Las librerías de criptografía de Java por defecto no soportan llaves de más de 128 bits. Para utilizar una llave SSL de INSIGNA (de 1024 bits) se necesita reemplazar un par de archivos en la instalación de Java (ver sección 4.1, paso 3).

Los archivos se encuentran disponibles en el zip del Conector:


O bien pueden descargarse en las siguientes rutas:

Antes de proseguir es necesario revisar el valor de la variable JAVA_HOME (ver punto #3 de la sección 4.1).


A continuación, se toman los archivos local_policy.jar y US_export_policy.jar (contenidos en el archivo zip descargado) y se colocan en el directorio definido en %JAVA_HOME%/lib/ security:


Hecho este procedimiento se podrá utilizar sin problemas la conexión SSL con INSIGNA. Se recomienda hacer esta sustitución de archivos con el Conector apagado.

Configuración archivo .properties

En esta sección, y en otras posteriores, se estarán configurando propiedades en archivos tipo .properties de Java. Es importante revisar la documentación de Java referente al formato de los archivos de propiedades , para aclarar la forma en que estos archivos deberán ser llenados. Tambien podras encontrar en la carpeta "/conector/docs/config" ejemplo de dos archivos de configuración listos para su funcionamiento con el rfc emisor LAN7008173R5

  • 1. Archivo program.properties: Configurar ruta/ubicación del comando OpenSSL y tipo de conexión a INSIGNA.
	 %CONECTOR_HOME%/config/program.properties
	
	openssl.command.path = [Ruta del comando OPENSSL]
		
		•	Tipo de dato: cadena (Ejemplo: C:/cygwin/bin/openssl)
		•	Requerido: sí, cuando el tipo de conexión es TCP o si se tiene configurado un rfc con sus respectivos archivos cert y key.
	
	 connection.type = [Tipo de conexión a INSIGNA]
	
	•	Tipo de dato: selector (1, 2). Si se desea la conexión mediante el protocolo TCP, ingresar el valor “1”; si se desea la conexión mediante Web Service, ingresar “2”.
	•	Requerido: No
	•	Valor default: 1
	

Configuración de cuenta INSIGNA

Si en el archivo program.properties (ver paso 4.2) no se especificó un tipo de conexión o se especificó el tipo de conexión 1 (conexión mediante TCP) es necesario configurar:

  • 1. Archivo pac_client.properties: configurar cuenta de acceso y revisar servidor TCP de INSIGNA.
	%CONECTOR_HOME%/config/pac_client.properties
	
	pac.tcp.server = [Dirección TCP de INSIGNA y puerto]
		
		•	Formato: [dirección]#[puerto]
		•	Requerido: sí
		•	Valor default: signer.insigna.mx#2700
	
	pac.tcp.username = [Nombre de usuario INSIGNA]
	
	•	Requerido: sí 
	

Si en el archivo program.properties se especificó el tipo de conexión 2 (conexión mediante Web Service) es necesario configurar:

  • 1. Archivo ws_client.properties: configurar cuenta de acceso y URL del Web Service de INSIGNA.
	 %CONECTOR_HOME%/config/ws_client.properties
	
	pac.ws.wsdl = [Dirección del WSDL del Web Service de INSIGNA]
		
		•	Formato: [URL]/services?wsdl
		•	Requerido: no
		•	Valor default: https://ws.insigna.mx/services?wsdl
	
	pac.ws.username = [Nombre de usuario INSIGNA]
		
		•	Requerido: sí 
	

Instalación de certificado SSL de INSIGNA

Si en el archivo program.properties (ver paso 4.2) no se especificó un tipo de conexión o se especificó el tipo de conexión 1 (conexión mediante TCP) es necesario configurar:

  • 1. Añadir los archivos tcp-server.pem y el archivo tcp-client.pk12 a la carpeta SSL
		C:\conector\config\ssl
	

Ambos archivos se generan durante el proceso de contratación con INSIGNA. El archivo tcp-server.pem será proporcionado directamente por INSIGNA, mientras que el archivo tcp-client.pk12 será generado de acuerdo a las indicaciones dadas por INSIGNA. Es importante que los archivos tengan los nombres tcp-server.pem y tcp-client.pk12, para que el Conector los pueda procesar.

Configuración de contraseñas

Todas las contraseñas en el Conector se manejan a través del comando conector masterkey.

	  %CONECTOR_HOME%/bin/conector masterkey
	

Con el comando conector masterkey se define una contraseña única que engloba a todas las demás. Este manual se referirá a esta contraseña como llave maestra.

El comando es ejecutado en consola con el comando conector masterkey el cual ejecuta el proceso para definir una nueva llave maestra y las contraseñas correspondientes. Se tiene un máximo de 3 intentos para definir cada contraseña; en el caso de las cuentas INSIGNA, TCP-INSIGNA, y WS-INSIGNA estos intentos cuentan de manera conjunta. Las contraseñas que el comando pide son:

  • Llave maestra.
  • Contraseña de usuario INSIGNA.
  • Contraseña de la llave privada que corresponde al certificado SSL entregado por INSIGNA (solo si el tipo de conexión es TCP).
  • Contraseña de servidor de correo (en caso de implementarse).
  • Contraseña de la llave privada de cada RFC agregado.

El comando sólo pide las contraseñas necesarias para la configuración que se tenga hasta ese momento.

Para más información sobre el comando conector masterkey referirse a la sección 14.4.

Instalación de certificado de sello digital (CSD) y su llave privada

  1. Renombrar cada uno de los archivos (.cer y .key) bajo el nombre de su RFC.
  2. Depositar ambos archivos en la carpeta llamada ‘CERTS’ dentro del conector
	  C:\conector\config\certs
	

Si el tipo de conexión seleccionado en el paso 4.2 fue "Web Service" y el certificado y llave privada del RFC ya fueron dados de alta en la página web de INSIGNA, no es necesario incluir dichos archivos en Conector.

Alta/Baja de empresas en archivo rfc.properties

  • 1. El último paso consiste en configurar los RFCs
	  %CONECTOR_HOME%/config/rfc.properties
	
	 rfc.emisor.list = RFC1,RFC2,RFC3
		
		•	Tipo de dato: cadena (RFCs separados por comas)
		•	Requerido: obligatorio
	

Importante: Para dar de baja un RFC del listado, sólo se requiere borrarlo de la propiedad rfc.emisor.list

  • 2. Ejecutando el comando conector masterkey se puede determinar la contraseña de la llave privada para cada RFC.
		%CONECTOR_HOME%/bin/conector masterkey
	

Alta/Baja de unidades de negocio en archivo rfc.properties

Muchas empresas tienen sucursales o unidades de negocio que utilizan el mismo RFC para facturación, en caso de requerir una representación impresa del CFDI diferente para cada unidad de negocio es necesario dar de alta la unidad de negocio.

  • 1. Establecer las unidades de negocio relacionadas al RFC, este previamente tuvo que haber sido dado de alta.
	  [RFC].rfc.busUnit.list = [UNIDADDENEGOCIO],[UNIDADDENEGOCIO]
		
		•	Tipo de dato: cadena (Nombre identificador de la unidad de negocio separado por comas)
		•	Requerido: Sólo si necesita representaciones impresas de CFDI para un mismo RFC
	

Importante: Para dar de baja una unidad de negocio del listado, sólo se requiere borrarlo de la propiedad [RFC].rfc.busUnit.list

  • 2. Establecer la plantilla correspondiente para cada unidad de negocio.
	 [RFC].rfc.busUnit.[UNIDADDENEGOCIO].pdf.template = 
		
		•	Tipo de dato: Nombre de plantilla sin extensión(referirse a las contenidas en la carpeta establecida en program.properties en la propiedad pdf.template.path
		•	Requerido: Requerido por cada UNIDADDENEGOCIO declarada en [RFC].rfc.busUnit.list
	
  • 3. Establecer el valor a coincidir con el campo serie del CFDI para determinar la pertenencia de un CFDI con determinado RFC a una UNIDADDENEGOCIO declarada.
	  [RFC].rfc.busUnit.[UNIDADDENEGOCIO].value = 
		
		•	Tipo de dato: Cadena
		•	Requerido: Requerido por cada UNIDADDENEGOCIO declarada en [RFC].rfc.busUnit.list
	

Revisión de instalación

El comando conector test verifica la información existente de la aplicación Conector.

	  %CONECTOR_HOME%/bin/conector test
	

Durante la ejecución, el comando solicita la llave maestra para ejecutar el set de pruebas completo. En el caso de pasar toda revisión se puede ejecutar la aplicación.

La siguiente imagen muestra un ejemplo de resultado cuando se configura el Conector utilizando el tipo de conexión a INSIGNA mediante TCP:


En caso de que el Conector encuentre un error en alguno de los puntos anteriores, mostrará en pantalla un mensaje de error indicando los puntos en donde se encuentra el problema.


*Se pueden encontrar todas las revisiones a detalle que hace el comando conector test en los anexos.

Ejecución

La ejecución del Conector se hace con el comando conector run.

	 %CONECTOR_HOME%/bin/conector run
	

Con este comando el Conector estará activo y conectado al Servidor TCP de INSIGNA para ejecutar el proceso de timbrado, cancelación y validación de CFDIs. El usuario no tendrá que preocuparse por dicha conexión dada la implementación de un administrador automático de conexiones que las gestiona de una forma eficiente y silenciosa para solventar las peticiones de timbrado y cancelación que el Conector realice.

IMPORTANTE: el Conector no soporta múltiples ejecuciones, es decir, para un cliente de INSIGNA en específico sólo podrá existir un Conector en ejecución.


Apagado del Conector

Si se desea apagar el Conector en ejecución es necesario hacerlo usando el comando conector stop.

Para poder ejecutarlo es requerido que se abra una nueva consola y se ejecute la siguiente línea:

	%CONECTOR_HOME%/bin/conector stop
	

Configuración de correos

IMPORTANTE: La funcionalidad de envío de correos no está disponible para el modo de sistema de archivos en formato XML.

Para utilizar la funcionalidad de envío de correos en cada una de las empresas, se necesita realizar los siguientes pasos:

  • 1. Editar el archivo program.properties: Activar la funcionalidad de envío de correos
	%CONECTOR_HOME%/config/program.properties
	
	activate.mail = true
		•	Tipo de dato: boleano (true/false)
		•	Requerido: obligatorio
	
  • 2. Editar el archivo mail.properties: Configurar servidor de correo SMTP y plantillas
	%CONECTOR_HOME%/config/mail.properties 
	
	config.smtp.url = [dirección del servidor de correo SMTP]
		•	Formato: [dirección]:[puerto]
		•	Ejemplo: mailserver.example.com:25
		La dirección del servidor de correo debe ser una URL válida, y se sugiere utilizar el puerto 25, el cual es el más común para el protocolo SMTP.
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos. Tanto la dirección como el puerto son obligatorios.
		
	config.smtp.user = [Nombre de usuario del correo electrónico]
		•	Tipo de dato: cadena
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos	
		
	
	mail.templates = [Nombre de plantilla]
		•	Tipo de dato: cadena (nombres de plantillas separados por comas). Los nombres de plantilla deberán 
		ser de una sola palabra, es decir no deberán contener espacios intermedios.
		•	Ejemplo: plantilla1, plantilla2, plantilla3
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos  	
		
	[Nombre de plantilla].mail.from = [Dirección de correo del remitente]
		•	Tipo de dato: cadena (correo electrónico)
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos 
		
	
	[Nombre de plantilla].mail.cc = [Dirección de correo para recibir una copia]
		•	Tipo de dato: cadena (correo electrónico, sólo se admite una dirección)
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos
		
	
	[Nombre de plantilla].mail.bcc = [Envío de copia oculta a correo electrónico]
		•	Tipo de dato: cadena (correo electrónico, sólo se admite una dirección)
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos
		
		
	[Nombre de plantilla].mail.subject = [Asunto del correo]
		•	Tipo de dato: cadena
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos
	
		
	[Nombre de plantilla].mail.body = [Cuerpo del correo]
		•	Tipo de dato: cadena especial***
			Esta cadena puede contener texto en general, además de que puede ser particionada con el carácter "\", 
			esto para generar cuerpos de correo largos conservando su visibilidad en pantalla. Además, pueden ser 
			introducidos los caracteres especiales de cadenas (String Java 6. Para mayor información) como el caso 
			del salto de línea "\n" para formatear el cuerpo del correo. Por último, se pueden añadir variables que 
			corresponden al CFDI enviado en el correo para personalizar el mensaje.
		•	Datos en las variables:
			-	receptorName
			-	invoiceDate
		•	Formato de entrada de variables:
			-	<variable>receptorName</variable>
		•	Ejemplo: 
		
			Estimado <variable>receptorName</variable>:\n\nPor medio del \
			presente correo nos permitimos hacerle llegar el CFDI correspondiente \
			a su compra efectuada el día <variable>invoiceDate</variable>.\n\n\
			Nuevamente, reiteramos nuestro compromiso con usted y todos nuestros \
			clientes. Además, le informamos que pronto tendremos promociones \
			especiales, ¡Esté atento!\n\nAtentamente\n\nEmpresa Pruebas XYZ S.A.\
			de C.V.
		
		•	Requerido: Obligatorio cuando se Activa la funcionalidad de envío de correos	
	

Para eliminar una plantilla es necesario borrar su nombre de la lista de plantillas activas en la propiedad mail.templates. No es necesario el borrado de sus propiedades, sólo de la lista de plantillas activas. No debe haber empresas que sigan haciendo referencia a plantillas eliminadas o el Conector no iniciará ejecución.

  • 3. Editar el archivo rfc.properties; seleccionar la plantilla de correo para una empresa
	 %CONECTOR_HOME%/config/rfc.properties
	

Se pueden configurar las plantillas de correo para cada RFC una vez que las plantillas estén hechas.

En el archivo rfc.properties se define la propiedad [RFC].mail.template en el cual se agrega el nombre de la plantilla que se desee seleccionar.

			[RFC].mail.template = [nombre de la plantilla]
		*** Referirse a las plantillas definidas en el archivo mail.properties
		•	Tipo de dato: cadena (valores como los utilizados en la propiedad "mail.templates")
		•	Requerido: Obligatorio cuando se activa la funcionalidad de envío de correos.
	

Timbrado de CFDIs

Creación de archivos XML

El Conector lee los archivos de la carpeta filesystem.cfdi_to_sign. Cada archivo representa un CFDI a ser timbrado. El archivo debe estar en formato XML o CSV (el formato CSV no aplica para la versión 3.3 de CFDI y está limitado a los tipos de comprobantes mencionados en esta sección) y guardado en codificación UTF-8 y el tamaño del CFDI que generen no debe superar los 5 MB. Como referencia, una factura normal oscila entre 4 y 8 kb.

El contenido del archivo CSV para Retención Pago V1.0 tiene el siguiente formato:

    [PRIMER RENGLÓN]
	retencion,claveRetencion,folioInterno,descripción,fechaExpedición
	
	[SEGUNDO RENGLÓN]
	emisor,rfc,nombreDenominaciónRazonSocial,curp
	
	[TERCER RENGLÓN]
	receptor-nacional,rfc, nombreDenominaciónRazonSocial,curp
	receptor-extranjero, nombreDenominaciónRazonSocial,numeroRegistroIdFiscal
	
	[CUARTO RENGLÓN]
	periodo,mesInicio,mesFin,añoEjercicioFiscal
	
	[QUINTO RENGLÓN]
	totales,montoTotalOperacion,montoTotalGravado,montoTotalExento,montoTotalRetenciones
	
	[N RENGLONES POR IMPUESTO RETENIDO]
	impuestoretenido,montoRetenido,tipoPagoRetención, baseImpuesto,tipoImpuesto
	
	[ÚLTIMO RENGLÓN]
	complemento,enajenaciondeacciones,contratoIntermediación,ganancia,pérdida
	
	complemento, operacionesconderivados,montoGananciaAcumulable,montoPerdidaDeducible
	
	complemento, sectorfinanciero,idFideicomiso,nombreFideicomiso,descripciónFideicomiso
	
	complemento, intereses,provieneDeSistemaFinanciero,interesesRetirados,correspondeAOperacionFinancieraDerivada,
	montoInterésNominal,montoInteresesReales,pérdida
	
	complemento,arrendamientoenfideicomiso, pagoFiduciarioArrendador, remdimientosObtenidos,deduccionesArrendamiento,
	montoTotalRetención, montoResfiscalFIBRAS,montoOtrosConceptosDistribuidos,descripciónConceptosDistribuidos 
	
	complemento, premios,entidadFederativaPago,montoPago,montoGravado,montoTotalExento
	
	complemento,pagosaextranjeros,esBeneficiarioDirecto,paisDeResidencia,conceptoPagoNB,descripcionConceptoNB,
	rfc,Curp,razónSocialB,conceptoPagoB,descripcionConceptoB 
	
	complemento,planesderetiro,sistemaFinanciero,montoTotAportAnioInmAnterior, montoIntRealesDevengAniooInmAnt,
	huboRetirosAnioInmAntPer,montoTotRetiradoAnioInmAntPer, montoTotExentRetiradoAnioInmAnt,
	montoTotExedenteAnioInmAnt, huboRetirosAnioInmAnt, montoTotRetiradoAnioInmAnt
	 
	complemento, intereseshipotecarios, creditoOtorgadoPorInstFinanciera,saldoInsoluto,proporciónDeducibleDelCrédito,
	montoTotaInteresesNominalesDevengados, montoTotaInteresesNominalesDevengadosPagados,
	montTotaInteresesRealesPagadosDeducibles,numContratoCréditoHipotecario
	

Información a detalle sobre el formato completo para la inserción de datos en archivos CSV se puede encontrar en la sección 14.3.

Por defecto, el delimitador es una coma simple para la separación de datos; las comillas se utilizan como carácter de escape de la coma simple. Los delimitadores pueden ser modificados en las propiedades del archivo program.properties .

Creación de archivos XML

En caso de tratarse de un CFDI V3.3, el XML debe cumplir con el esquema descrito por la SAT en el anexo 20.

https://goo.gl/oJxQuW

En caso de ser una Retención Pago V1.0, el XML debe cumplir con el esquema descrito por la SAT en el documento Retención Pago.

https://goo.gl/zdqRw3

Proceso de timbrado

Como se menciona en la sección 5, este proceso se efectúa con el comando conector run. El Conector toma los archivos de la carpeta de entrada y procesa cada uno como un CFDI. El tiempo de este ciclo está determinado por timer.period que por defecto es de 10 segundos.

En caso de éxito, se escribirá un archivo XML con el CFDI timbrado y un PDF como representación impresa, ambos usando como nombre de archivo el generado por el formato definido de nombre de archivo para el RFC emisor del CFDI ( propiedad [RFC].cfdis.file_name_format ). Éstos son escritos en las carpetas [RFC].signed_cfdis y [RFC].cfdi_pdfs.

Al ocurrir un error en los datos de entrada o un error de comunicación se generan dos nuevos archivos en la carpeta filesystem.cfdis_failed_to_sign; el primero es el archivo de entrada y el segundo un log (archivo de texto) con la descripción del error ocurrido, el cual se crea con el mismo nombre y agregando el sufijo "_log" En caso de nombres repetidos, se agrega el sufijo _#. En el caso de que existan más de 3 intentos de timbrado fallidos de manera consecutiva, es decir se obtenga un error (2500), el conector se detendrá para que se ejecute una revisión manual de esos archivos y después se podrá iniciar nuevamente.


Manejo de Addendas

INSIGNA permite la inclusión de addendas dentro de los archivos XML que se van a timbrar. Las addendas soportadas por INSIGNA (en modo de archivo XML) son XML, EDIFACT y texto libre. Por el momento, el Conector no soporta el manejo de addendas en archivos CSV.

Para el caso de las adendas en XML (es decir, no EDIFACT ni texto libre) es necesario proporcionar la definición de dicha addenda en un archivo XSD (XML Schema Definition). La ubicación del archivo se especifica en la propiedad addendas.path, como se puede consultar en la Sección 14.1 (Tabla 1) de este manual.

A continuación se muestran ejemplos de los distintos tipos de Addendas soportados por INSIGNA:

XML

	<Addenda>
		<Tienda>
		<Tienda:Discos>
		  <Tienda:Disco id="201203048843" precio="125.00"/>
		  <Tienda:Disco id="201115234533" precio="185.00"/>
		<Tienda:Discos/>
		<Tienda:Libros>
		  <Tienda:Libro id="PR2323388" precio="325.00"/>
		  <Tienda:Libro id="CL8484320" precio="45.00"/>
		<Tienda:Libros/>
		</Tienda>
	</Addenda>
    

EDIFACT

	<Addenda>
		<Documento>
		UNB+IATB:1+6XPPC+LHPPC+940101:0950+1'
		UNH+1+PAORES:93:1:IA'
		MSG+1:45'
		IFT+3+XYZCOMPANY AVAILABILITY'
		ERC+A7V:1:AMD'
		IFT+3+NO MORE FLIGHTS'
		ODI'
		TVL+240493:1000::1220+FRA+JFK+DL+400+C'
		</Documento>
	</Addenda>
    

TEXTO LIBRE

    <Addenda>
     	Este es un ejemplo de addenda con texto libre. El contenido no necesita seguir ninguna estructura en XML,
     	con tal de que la codificación sea la misma que en el resto del archivo (UTF-8). Aquí se puede poner
     	texto a discreción del usuario. 
    </Addenda>
	

Cancelación de CFDIs

El proceso de cancelación se lleva a cabo de la misma forma que el proceso de timbrado.

El proceso inicia leyendo de la carpeta filesystem.cfdis_to_cancel, donde el cliente debe depositar los archivos CFDIs a cancelar. El proceso lee los archivos en formato XML y arroja los acuses de recibo (recibidos directamente del SAT) en la carpeta [RFC].canceled_cfdis para las cancelaciones exitosas. Para las cancelaciones fallidas se deja en la carpeta filesystem.cfdis_failed_to_cancel el archivo original (XML) de la cancelación así como un archivo de log con la descripción del error.

XML

El XML insertado en el sistema de archivos para ser cancelado debe ser el mismo que el XML timbrado.

Recuperación de CFDIs

El Conector permite a un usuario recuperar los CFDIs que dicho usuario ha timbrado con INSIGNA. Para ello es necesario realizar los siguientes pasos:

  • 1. Descargar el reporte de CFDIs timbrados del sitio de INSIGNA, disponible en la dirección https://www.insigna.mx/jsf/invoicer/report/report.jsf . Es necesario que el usuario se autentique proporcionando el nombre de usuario INSIGNA (ver sección 4.4) y la contraseña de usuario INSIGNA (ver sección 4.6).
  • 2. Una vez descargado este reporte (un archivo en formato CSV) se requiere colocarlo en una carpeta dentro de la instalación del conector, definida por la propiedad filesystem.cfdis_input_report, cuyo valor por defecto se puede consultar en la sección 13.1 (Tabla 1).

Es importante que el reporte CSV sea el único archivo presente en la carpeta, dado que el Conector no pide de antemano un nombre para dicho archivo, sino que procesa el primero que encuentre en el directorio especificado.

  • 3. La recuperación de CFDIs no se ejecuta de modo paralelo al timbrado y a la cancelación, por lo cual, en caso de que el conector esté ejecutándose, es necesario detenerlo mediante el comando conector stop (ver sección 6).
  • 4. Si el conector no se encuentra en proceso de timbrado o de cancelación, se podrá ejecutar el comando de recuperación de CFDIs:
	%CONECTOR_HOME%/bin/conector download
	
  • 5. Como parte de la ejecución, se validará la configuración del conector, incluyendo la parte de contraseñas (llave maestra).

  • 6. Si las validaciones de configuración son exitosas, el conector comenzará a procesar el reporte, avisando con el texto:

  • 7. De existir algún problema con el reporte, el conector avisará con un mensaje de error:

Las posibles causas de error son las siguientes:

  • No se encontró ningún archivo en el directorio.
  • Se encontró un archivo que no es de tipo CSV.
  • No se encontraron UUIDs a procesar en el reporte.
  • El reporte excede el tamaño permitido a procesar del Conector (5 MB).
  • Se encontró una carpeta adicional en el directorio.
  • Ocurrió un error de IO (InputOutput) al intentar abrir el archivo.
  • 8. Si el reporte es procesado correctamente, se mostrará un mensaje de confirmación y se generarán los archivos XML correspondientes:


  • 9. De existir algunos errores encontrados en el reporte (por ejemplo, si el archivo fue accidentalmente modificado) se generará un archivo txt con el mismo nombre del reporte y la terminación "..._log.txt":

  • 10. Si se desea que el Conector reanude el procesamiento de facturas (timbrado, cancelación y validación), se necesita introducir el comando conector run (Ver sección 5).
	%CONECTOR_HOME%/bin/conector run
	

Validación de CFDIs

Proceso de Validación

El Conector lee los archivos de la carpeta filesystem.validation.new. Cada archivo dentro de esa carpeta debe ser un CFDI timbrado y en formato XML. El tamaño máximo que puede tener un CFDI es de 5 MB; como referencia, un CFDI regular oscila entre los 4 y 8 KB.

Como se menciona en la sección 5, el proceso de validación se efectúa con el comando conector run. El Conector toma los archivos de la carpeta de entrada e intenta procesar cada uno como un CFDI para validarlo en el sistema de INSIGNA. El tiempo en que se ejecuta este comando de manera recurrente, se define en la propiedad timer.period dentro del archivo program.properties; por defecto esta variable tiene un valor de 10 segundos.

Tras validar los CFDIs que se pusieron en la carpeta filesystem.validation.new, el Conector los moverá a otras 3 carpetas dependiendo del resultado de la validación, estas carpetas son las que se indiquen en las propiedades: filesystem.validation.successful, filesystem.validation.failed, y filesystem.validation.no_validated. El resultado de la validación de los CFDIs puede ser: válido, inválido, y no validado.

Además de mover los archivos según el resultado de la validación, se generará un reporte con los resultados de las validaciones realizadas. Dicho reporte se creará en la carpeta indicada en la propiedad filesystem.validation.report dentro del archivo program.properties. El reporte contendrá información detallada respecto a los resultados, si hubo algún error o el archivo es inválido, se indicará con los errores correspondientes; estos se pueden consultar en la sección 13 de este documento.

Resultados de Validación

En la sección anterior se menciona que la validación de un CFDI tiene 3 posibles resultados:

  • Válido: el documento cumple con la estructura que el SAT dicta para un CFDI y también se encuentra en los sistemas del SAT.
  • Inválido: el documento no cumple con la estructura que el SAT dicta para un CFDI o no se encuentra en los sistemas del SAT.
  • No validado: el documento no es un CFDI en formato XML, hubo un problema al comunicarse con el SAT, o el cliente no tiene timbres disponibles.

Representación Impresa

El Conector permite generar representaciones impresas de CFDIs o Retenciones que ya hayan sido timbrados previamente. La generación la hace obteniendo los archivos que se encuentren dentro de la carpeta indicada en la propiedad filesystem.print_representation.new dentro del archivo program.properties.

La generación de representación impresa se efectúa con el comando conector run. Si el RFC emisor tiene configurada una plantilla se tomará dicha plantilla para la representación generada por el conector, en caso que no se tenga una plantilla se utilizará una plantilla genérica.

Los archivos PDF de las representaciones genéricas generadas, así como el archivo fuente en formato XML, serán colocadas por el Conector dentro de la carpeta configurada en la propiedad filesystem.print_representation.successful dentro del archivo program.properties. Si la representación impresa no se pudo generar, se copiará el archivo fuente a la carpeta indicada en la propiedad filesystem.print_representation.failed que se configuró en el archivo program.properties, y también se creará un archivo de tipo TXT donde se indicará la causa por la que no se pudo generar la representación impresa del archivo correspondiente; el nombre del archivo será igual que el archivo fuente pero con la terminación “_log.txt”.

Archivo Catalogs.properties

Existe un archivo llamado Catologs.properties dentro de la carpeta "bundles" donde se encuentra instalado el conector, dicho archivo contiene las descripciones de las claves de los catálogos del SAT y esas descripciones son usadas en las plantillas. Este archivo puede ser modificado para cambiar las descripciones que vienen predeterminadas por descripciones que los usuarios consideren más adecuadas o se sean más claras para su negocio y esos cambios solo se verán reflejados en los PDF generados, ya sea por el proceso de timbrado o por la regeneración de la representación impresa.

Los catálogos que se pueden modificar son:

  • Forma de pago
  • Método de pago
  • Régimen fiscal
  • Tipo comprobante
  • Uso CFDI
  • Tipo de Cadena de Pago (solo aplica para complemento de pago)
  • receptorName

Ejemplo de Uso

Cambiar la forma de pago "02-Cheque nominativo" por solo "Cheque".

Antes del cambio


Despues del cambio

Errores

A continuación se muestra una lista de errores locales, es decir que son validaciones propias del conector, existen catálogos de errores adicionales que son proporcionados por el SAT, por ejemplo CFDI33### para CFDI 3.3, NOM### para recibos de nómina y CCE### para complemento de comercio exterior.

https://goo.gl/W6pr6q
https://goo.gl/3kfViw
https://goo.gl/UH2Zvd

Código de Error Mensaje Detalles
CON-10202 No se pudo encontrar el archivo: X. El programa no pudo encontrar la ubicación de un archivo de configuración del Conector.
CON-10400 Error de conector en el proceso de configuración: X. Existe un error de configuración del Conector, revisar los archivos de configuración. Para mayor información ir a la sección 4 de la guía de usuario.
CON-20101 La URL del servidor de correos es inválida: X. Revisar en el archivo mail.properties que la URL del servidor de correos tenga un formato válido. Para mayor información ir a la sección 7 de la guía de usuario.
CON-20102 El CFDI: X es inválido. Revisar la carpeta de error configurada en la propiedad filesystem.failed_to_sign. El error de validación se especifica en un archivo .txt con el mismo nombre que el archivo de entrada más el sufijo “_log”.
CON-20103 Una o más direcciones de correo electrónico son inválidas: X. Revisar en el archivo mail.properties que las direcciones de correo electrónico tengan un formato válido. Para mayor información ir a la sección 7 de la guía de usuario.
CON-20104 El CFDI: X es inválido. Revisar la carpeta de error configurada en la propiedad filesystem.failed_to_sign. El error de validación se especifica en un archivo .txt con el mismo nombre que el archivo de entrada más el sufijo “_log”.
CON-20105 Sello inválido del CFDI: X. Revisar en la carpeta de CFDIs por timbrar, el campo sello del CFDI [X]. Para mayor información sobre la carpeta de CFDIs por timbrar ir a la sección 11 de la guía de usuario.
CON-20106 Se encontró elemento TimbreFiscalDigital, posiblemente porque el CFDI ya fue timbrado: X. El archivo XML procesado contiene un elemento que sólo debe estar presente en los CFDIs ya timbrados. Revisar que no se estén enviando a la carpeta de CFDIs por timbrar aquellos CFDIs ya timbrados.
CON-20204 No se pudo leer el CFDI: X. El Conector tuvo problemas con la lectura del CFDI [X], revisar que el CFDI [X] se encuentre en la carpeta de CFDIs por timbrar y que la carpeta cuente con permisos de lectura.
CON-20205 No se pudo crear el CFDI: X. El Conector tuvo problemas con la creación del CFDI [X], revisar que el CFDI [X] se encuentre en la carpeta de CFDIs por timbrar, en caso de que el CFDI [X] exista el error puede deberse a que no puede guardarse el PDF del CDFI [X] en la carpeta de PDFs. Para mayor información sobre la carpeta de CFDIs por timbrar ir a la sección 11 de la guía de usuario.
CON-20206 No se pudo escribir el CFDI: X. El Conector no pudo guardar el PDF correspondiente al CFDI [X].
CON-20207 No se pudo cerrar el CFDI: X. El Conector no pudo cerrar la ruta de escritura del PDF correspondiente al CFDI [X].
CON-20208 El tamaño del archivo excede el límite establecido: X. El tamaño máximo del archivo a timbrar es de 5MB.
CON-20400 Error de sistema en el procesamiento de CFDIs: X. El Conector tuvo un error inesperado durante el procesamiento de CFDIs (para su timbrado o cancelación).
CON-20501 Ocurrió un error al intentar enviar el correo electrónico correspondiente al CFDI: X. Revisar que los campos del archivo mail.properties estén correctos. Para mayor información consultar la sección 7 de la guía de usuario.
CON-20601 Error al inicializar la fábrica de PDFs al intentar generar el archivo del CFDI: X. Existe un error con la plantilla de PDFs (archivo de extensión .jasper).
CON-20602 No se pudo generar el archivo PDF del CFDI: X. Existe un error al generar el PDF del CFDI usando la plantilla de PDFs.
CON-30101 Sello inválido del CFDI: X. Revisar en la carpeta de CFDIs por cancelar el campo sello del CFDI [X]. Para mayor información sobre la carpeta de CFDIs por cancelar ir a la sección 11 de la guía de usuario.
CON-30102 El CFDI: X es inválido. Existe un error con el CFDI [X] que se quiere cancelar. Revisar el CFDI [X] en la carpeta de CFDIs por cancelar. Para mayor información ir a la sección 11 de la guía de usuario.
CON-30105 Ocurrió un error al analizar la gramática del archivo ubicado en la ruta: X. El archivo ubicado en la ruta [X] tiene errores en la estructura de la información, revisar que el archivo tenga los datos estructurados de acuerdo al formato de CSV de este manual o que sea un XML bien formado con la estructura del CFDI explicada en el anexo 20 del SAT.
CON-30201 No se pudo encontrar el CFDI: X. No se pudo encontrar el CFDI [X] enviado a cancelar. Para mayor información ir a la sección 11 de la guía de usuario.
CON-30204 No se pudo leer el CFDI: X. Pudo haber un error al leer el CFDI [X] enviado a cancelar o un error al intentar guardar el archivo XML del CFDI cancelado. Revisar la carpeta de CFDIs por cancelar. Para mayor información ir a la sección 11 de la guía de usuario.
CON-30205 El tamaño del archivo excede el límite establecido: X. El tamaño máximo del archivo a cancelar su timbrado es de 5MB.
CON-30206 El tipo de archivo no coincide con los archivos soportados: X. El archivo no coincide con las extensiones CSV ni XML.
CON-40401 Error al intentar apagar el Conector: X. Existe un error en el Conector al intentar apagarse.
CON-50202 CFDI previamente cancelado. El CFDI enviado a cancelar ya había sido previamente cancelado.
CON-50203 El UUID del CFDI no concuerda con el RFC. El UUID no fue emitido por el RFC proporcionado, verificar que la información en el archivo de entrada sea correcta. Para mayor información sobre el archivo de cancelación ir a la sección 9 de la guía de este manual.
CON-50205 El UUID no existe. El UUID a cancelar no está registrado en INSIGNA, verificar que la información en el archivo de entrada sea correcta. Para mayor información sobre el archivo de cancelación ir a la sección 9 de este manual.
CON-50302 Sello mal formado o inválido. El UUID a cancelar se envió con una llave y/o certificado que no corresponden al RFC con que dicho UUID fue emitido.
CON-50303 El RFC del certificado no coincide con el RFC emisor. El certificado CSD configurado no corresponde al RFC emisor. Para mayor información ir a la sección 3.2 de este manual.
CON-50304 El certificado se encuentra revocado. El certificado CSD configurado se encuentra revocado. Se tiene que configurar el certificado activo proporcionado por la SAT y correspondiente al RFC emisor. Para mayor información ir a la sección 3.2 de este manual.
CON-50305 La fecha de emisión no se encuentra dentro del rango de validez del certificado. La vigencia del certificado configurado no cubre la fecha para la que se está emitiendo la factura. Para mayor información ir a la sección 3.2 de este manual.
CON-50306 Certificado inválido. El certificado configurado es inválido. Se tiene que configurar el certificado CSD (no FIEL) proporcionado por la SAT y correspondiente al RFC emisor. Para mayor información ir a la sección 3.2 de este manual.
CON-50307 El CFDI contiene un timbre previo. Se está procesando un CFDI que ya fue enviado a timbrar anteriormente.
CON-50308 Certificado no firmado por el CA (certificate authority). El certificado CSD configurado es inválido. Se tiene que configurar el certificado activo proporcionado por la SAT y correspondiente al RFC emisor. Para mayor información ir a la sección 3.2 de este manual.
CON-50401 El tiempo entre la fecha de emisión y fecha del timbrado excede el límite establecido. La fecha de cancelación se encuentra fuera de los límites establecidos. Revisar que la fecha de emisión proporcionada corresponda con la fecha actual. Revisar que la hora de la máquina corriendo el Conector corresponda con la fecha actual.
CON-50402 El certificado no se encuentra en la lista de LCO. El emisor no tiene obligaciones fiscales. El certificado configurado es inválido. Se tiene que configurar el certificado activo proporcionado por la SAT y correspondiente al RFC emisor. Para mayor información ir a la sección 4 de la guía de usuario..
CON-50403 La fecha de emisión es anterior al límite establecido. Revisar que la fecha de emisión proporcionada corresponda con la fecha actual.
CON-52309 No hay timbres disponibles / El RFC está bloqueado. Asegurarse que existan timbres disponibles para el usuario INSIGNA configurado en el Conector y que el RFC emisor no se encuentre bloqueado.
CON-52500 Error en el servidor. Ocurrió un error desconocido en el servidor. Favor de comunicarse a INSIGNA.
CON-60101 El archivo XML es Inválido. El archivo que se validó en INSIGNA no cumple con las validaciones de un CFDI correcto.
CON-60102 El archivo XML es una Retención no un CFDI. El archivo XML que se trató de validar es un archivo correspondiente a una Retención.
CON-60201 No se pudo leer el archivo del CFDI. No se pudo obtener el archivo correspondiente al CFDI que se quería validar.
CON-60202 El tamaño del archivo excede el máximo soportado. El archivo que se trató de validar excede al tamaño máximo permitido.
CON-60203 El tipo de archivo no coincide con los archivos soportados. El archivo que se trató de validar no es de tipo XML, es un tipo de archivo no soportado para validación.
CON-70001 No se pudo leer el archivo. No se pudo leer o escribir en el archivo relacionado a la representación impresa.
CON-70002 El tamaño del archivo excede el máximo soportado. El archivo que se trató de obtener para generar la representación impresa excede al tamaño máximo permitido.
CON-70003 El tipo de archivo no coincide con los archivos soportados. El archivo que se trató de obtener para generar la representación impresa no es de tipo XML, es un tipo de archivo no soportado para esta funcionalidad.
CON-70004 El archivo XML es inválido. El archivo que se trató de obtener para generar la representación impresa no cumple con las validaciones propias de un CFDI o Retención.
CON-70005 Sello del CFDI inválido. El CFDI o Retención a la que se trató de generar representación impresa, no contiene un sello válido.
CON-70006 Error al intentar generar el archivo PDF. Ocurrió un error desconocido al momento de intentar generar la representación impresa del CFDI o Retención.
CON-70007 Error mientras se escribía el archivo PDF. Ocurrió un error desconocido al momento de generar la representación impresa del CFDI o Retención.
CON-70008 No se encontró el CFDI. No se encontró el CFDI o Retención a la que se trató de generar la representación impresa.

Anexos

Propiedades de configuración

El Conector permite su configuración a través de cinco archivos (se genera un archivo extra en memoria para almacenar las contraseñas, las cuales no estarán visibles).

Sólo el archivo "logging.properties" sigue las especificaciones de logging de Java, por lo que no es presentado.

A continuación se muestra una descripción de los parámetros de configuración del Conector.

Tabla 1 Propiedades configurables del archivo program.properties

Nombre Propiedad Descripción Tipo de dato Default
Modo de entrada de CFDIs input.mode Modo de entrada de CFDIs al Conector Selector(1,2) 1. Base de datos 2.- Archivos en carpetas del sistema. 2
Salida de CFDIs output.filesystem Salida de CFDIs al Conector Booleano (true/false) false
Separador de datos CSV csv.separator Separador de datos que se usará en los archivos de sistema que corresponderán a los CFDIs por procesar en formato CSV. Caracter ,
Carácter de escape CSV csv.escape.character Carácter de escape que se usará en los archivos de sistema que corresponderán a los CFDIs por procesar en formato CSV. Caracter
Carpeta CFDIs por timbrar filesystem.cfdis_to_sign Dirección de sistema en donde se colocarán los CFDIs listos para timbrarse Cadena(dirección de archivos del sistema) ./default/Timbrado/nuevos
Carpeta CFDIs fallidos por timbrado filesystem.cfdis_failed_to_sign Dirección de sistema en donde se colocarán los CFDIs que fallaron en el proceso de timbrado junto con sus logs. Los logs se presentarán con el mismo nombre del archivo del CFDI añadiendo el postfijo "_log" Cadena(dirección de archivos del sistema) ./default/Timbrado/fallados
Carpeta CFDIs por cancelar filesystem.cfdis_to_cancel Dirección de sistema en donde se colocarán los CFDIs a cancelar junto con sus logs. Los logs se presentarán con el mismo nombre del archivo del CFDI añadiendo el postfijo "_log" y contendrán información del proceso de cancelación. Cadena(dirección de archivos del sistema) ./default/Cancelacion/nuevos
Carpeta de CFDIs fallidos por cancelación filesystem.cfdis_failed_to_cancel Dirección de sistema en donde se colocarán los CFDIs que fallaron en el proceso de cancelación junto con sus logs. Los logs se presentarán con el mismo nombre del archivo del CFDI añadiendo el postfijo "_log" Cadena(dirección de archivos del sistema) ./default/Cancelacion/fallados
Carpeta de CFDIs a validar filesystem.validation.new Dirección de sistema en donde se colocarán los CFDIs listos para validarse Cadena(dirección de archivos del sistema) ./default/Validacion/nuevos
Carpeta de CFDIs válidos filesystem.validation.successful Dirección de sistema en donde se colocarán los CFDIs que pudieron ser enviados a INSIGNA y que son válidos. Cadena(dirección de archivos del sistema) ./default/Validacion/validos
Carpeta de CFDIs inválidos filesystem.validation.failed Dirección de sistema en donde se colocarán los CFDIs que pudieron ser enviados a INSIGNA y que son inválidos. Cadena(dirección de archivos del sistema) ./default/Validacion/invalidos
Carpeta de CFDIs no validados filesystem.validation.no_validated Dirección de sistema en donde se colocarán los CFDIs que no pudieron ser enviados a INSIGNA. Cadena(dirección de archivos del sistema) ./default/Validacion/no_validados
Ubicación de reporte de validación de CFDIs filesystem.validation.report Dirección de sistema en donde se colocará el reporte con el resultado de las validaciones a los CFDIs. Cadena(dirección de archivos del sistema) ./default/Validacion/
Carpeta de logs de operación filesystem.operation_log Dirección de sistema en donde se colocarán los archivos que contendrán la información concerniente a los procesos del sistema en forma de bitácora de operación Cadena(dirección de archivos del sistema) ./log
Carpeta plantillas PDF pdf.template.path Dirección de sistema en donde se encuentran las plantillas para la creación de los PDFs. *La carga de cualquier otro tipo de archivo puede causar problemas en la funcionalidad del conector. Cadena(dirección de archivos del sistema) ./config/templates
Carpeta para generación de representación impresa de CFDIs filesystem.print_representation.new Dirección de sistema en donde se encuentran los CFDIs a los que se generará una representación impresa. Cadena(dirección de archivos del sistema) ./default/Generacion de Representacion Impresa/nuevos
Carpeta de representaciones impresas falladas filesystem.print_representation.failed Dirección de sistema en donde se encuentran los archivos a los que no se les pudo generar una representación impresa. Cadena(dirección de archivos del sistema) ./default/Generacion de Representacion Impresa/fallados
Carpeta de representaciones impresas generadas filesystem.print_representation.successful Dirección de sistema en donde se encuentran las representaciones impresas generadas de manera exitosa. Cadena(dirección de archivos del sistema) ./default/Generacion de Representacion Impresa/representaciones_impresas_generadas
Carpeta certificados y llaves de los RFCs certs_pks.path Dirección de sistema en donde se encuentran los certificados y llaves privadas Cadena(dirección de archivos del sistema) ./config/certs
Número de CFDIs a bloquear por proceso de timbrado database.rows.per.process Número de CFDIs que se bloquearán por proceso de timbrado del sistema. (sólo modo base de datos) Entero Positivo (1-500) 20
Activación de envío de CFDIs activate.mail Activar o desactivar el envío de CFDI por correo electrónico Boleano (true/false) false
Puerto de conexión para apagado del sistema shutdown.port Puerto para establecer la conexión con el sistema en el proceso de apagado del mismo. Entero positivo (recordar que está sujeto a número de puertos del S.O.) 26632
Path del comando openssl openssl.command.path Ruta del comando openssl. Cadena(dirección de archivos del sistema) *Debe de ser establecido por el usuario
Periodo de proceso timer.period Periodo de tiempo que el sistema tardará en volver a realizar el proceso de timbrado. *Tiempo Menor 1 segundo – Mayor 999999 - "s" para segundos - "m" para minutos - "h" para horas - "d" para días - "w" para semanas 10s
Carpeta para XSDs addendas.path Dirección de sistema en donde se encuentran los esquemas de las addendas con extensión .xsd que serán cargados por el sistema Cadena (dirección de archivos de sistema) *Definido por el usuario. No es requerido
Ancho de pantalla out.message.width Ancho en número de caracteres para el correcto formateo de los mensajes Entero positivo (60-200) 80
Tipo de conexión a los servicios de INSIGNA connection.type Tipo de conexión que se utilizará para conectarse a los servicios de INSIGNA Selector (1, 2) 1 – TCP 2 – Web Service 1
Habilitar respaldo de CFDIs enable.output.backup_cfdis Permite habilitar la configuración de respaldo de los CFDIs emitidos por el conector Booleano (true/false) false
Salida de respaldo de CFDIs output.backup_cfdis Permite utilizar una dirección donde se guardan respaldos de los CFDIs emitidos por el conector Cadena (dirección de archivos de sistema) ./default/Respaldo:CFDIsYaTimbrados_MailSender
Pausa entre firmado de XML pause.between.signs Tiempo de espera (en milisegundos) después de firmar un XML antes de firmar el siguiente Entero positivo 0
Activación de la escritura del carácter BOM – UTF-8 filesystem.utf8.with.bom Permite indicar si se desea que se escriba el carácter BOM para UTF-8 Booleano (true/false) false
Url cancelación de retenciones retention.cancel.namespace Url para generar el sello de cancelación de retenciones Cadena http://www.sat.gob.mx/esquemas/retencionpago/1

Tabla 2 Propiedades configurables del archivo rfc.properties

Nombre Propiedad Descripción Tipo de dato Default
RFCs emisores activos rfc.emisor.list RFCs que estarán configurados en la parte inferior del documento, además de que se encontrarán activos listos para poder timbrar CFDIs donde ellos sean los emisores Cadena (RFCs separados por comas) *Debe de ser establecido por el usuario
Formato del nombre de archivo para los CFDIs (PDF/XML) [rfc].cfdis.file_name_format Formato para el nombre de los archivos de salida PDF/XML para el resultado de proceso de timbrado o cancelación. Es obligatorio incluir el uuid. En caso de repeticiones de nombre de archivo, se renombran usando un sufijo “_#” para diferenciarlos entre sí. - rfc_emisor - rfc_receptor - año $(yyyy) - mes $(mm) - día $(dd) - hora $(hh) - minuto $(mi) - segundo $(ss) - uuid $(yyyy)$(mm)$(dd)_$(rfc_receptor)_$(uuid)
Carpeta PDFs [rfc].cfdi_pdfs Dirección de sistema en donde se encontrarán los archivos PDF de los CFDIs timbrados Cadena (dirección de archivos de sistema) ./default/Timbrado/timbrados
Carpeta CFDIs timbrados [rfc].signed_cfdis Dirección de sistema en donde se encontrarán los archivos XML de los CFDIs timbrados Cadena (dirección de archivos de sistema) ./default/ Timbrado/timbrados
Carpeta CFDIs cancelados [rfc].canceled_cfdis Dirección de sistema en donde se encontrarán los archivos XML de los CFDIs cancelados Cadena (dirección de archivos de sistema) ./default/Cancelacion/cancelados
Plantilla de correo [rfc].mail.template Plantilla de correo que será utilizada para el envío de los CFDIs correspondientes al RFC Cadena (valores como los utilizados en la propiedad mail.templates del archivo mail.properties) *Requerido (sólo si se activa la propiedad activate.mail)
Plantilla PDF [rfc].pdf.template Plantilla de PDF que será utilizada para la creación de los archivos PDF para los CFDIs Nombre de plantilla (Nombre del archivo contenido en la carpeta de Plantillas PDF sin hacer uso de su extensión) Default(corresponde a default.jasper)
Lista de unidades de negocio [RFC].rfc.busUnit.list Listado de unidades de negocio correspondientes a un RFC, en caso de querer diferentes representaciones impresas para un mismo RFC Cadena(Nombres identificadores de las unidades de negocio separados por comas) *Debe ser establecido por el usuario, si lo requiere
Plantilla PDF para la unidad de negocio [RFC].rfc.busUnit. [UNIDAD DE NEGOCIO].pdf.template Nombre de la plantilla asociada a la unidad de negocio, referirse a las contenidas en la carpeta establecida en pdf.template.path Nombre de plantilla (Nombre del archivo contenido en la carpeta de Plantillas PDF sin hacer uso de su extensión) *Debe ser establecido por el usuario si declaró una unidad de negocio en particular
Valor a coincidir [RFC].rfc.busUnit. [UNIDAD DE NEGOCIO].value Valor que debe coincidir con el campo serie del CFDI y con el RFC para determinar su correspondencia a una unidad de negocio Cadena (Valor a coincidir) *Debe ser establecido por el usuario si declaró una unidad de negocio en particular
Logo plantilla PDF [RFC].pdf.template.logo Permite introducir el logo que será utilizado en los archivos PDF Cadena (Nombre del archivo del logotipo contenido en la carpeta de Plantillas PDF, por ejemplo: images/default.png) Ninguno
Plantilla PDF Retención [RFC].retention.template Permite introducir la plantilla de PDF que será utilizada para las retenciones Cadena (Nombre del archivo sin extensión, ejemplo: defaultRetention) defaultRetention
Logo de plantilla Retención [RFC].retention.template.logo Permite introducir el logo que será uitlizado en los archivos PDF creados para los CFDIs Retenciones Cadena (Nombre del archivo del logotipo contenido en la carpeta de Plantillas PDF, por ejemplo: images/default.png) Ninguno

Tabla 3 Propiedades configurables del archivo mail.properties

Nombre Propiedad Descripción Tipo de dato Default
URL del servidor config.smtp.url Dirección y el puerto donde se encuentra ubicado el servidor. Cadena [dirección]:[puerto] *Requerido
Usuario config.smtp.user Nombre de usuario de correo Cadena *Requerido
Requiere contraseña el servidor config.smtp.requires.password Indica si se utilizará contraseña para el correo electrónico Booleano (true/false) false
Formato de fecha config.mail.date.format Formato de fecha que será usado las fechas que pudieran encontrarse en el cuerpo del correo http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html dd/MM/yyyy HH:mm:ss
Lista de plantillas de correo mail.templates Conjunto de plantillas que estarán configuradas en la parte inferior de este documento y disponibles para ser asignadas en los RFCs del archivo "rfc.properties" Cadena (nombres de plantillas separados por comas) Ejemplo: t1, t2, t3 *Requerido
Correo-De [plantilla].mail.from Dirección de correo desde donde será enviado el correo electrónico Cadena (correo electrónico) *Requerido por cada plantilla que se desee definir
Correo-Con copia [plantilla].mail.cc Dirección de correo a donde será enviada una copia del correo electrónico Cadena (correo electrónico) *Requerido por cada plantilla que se desee definir
Correo-Con copia oculta [plantilla].mail.bcc Dirección de correo a donde será enviada una copia oculta del correo electrónico Cadena (correo electrónico) *Requerido por cada plantilla que se desee definir
Correo-Asunto [plantilla].mail.subject Sí, sólo en caso de que "activate.mail" se encuentre "true", es decir, cuando la propiedad que activa el envío de correos se encuentre activada. Cadena *Requerido por cada plantilla que se desee definir
Correo-Cuerpo [plantilla].mail.body Cuerpo del correo electrónico Anexo 14.2 Cuerpo del correo electrónico *Requerido por cada plantilla que se desee definir
Permite usar SMTP con TLS mail.smtp.starttls.enable Permite configurar si el SMTP usará o no TLS Booleano (true/false) false
Pausa después de enviar un correo mail.pause.between.sends Tiempo de espera después de enviar un correo para evitar que el sistema envíe muchos correos en poco tiempo

Tabla 4 Propiedades configurables del archivo pac_client.properties

Nombre Propiedad Descripción Tipo de dato Default
Dirección del servidor INSIGNA TCP pac.tcp.server Dirección y el puerto donde se encuentra ubicado el servidor. Cadena Formato: [dirección]#[puerto] *Debe de ser definido por el usuario
Nombre de usuario INSIGNA c.tcp.username Nombre de usuario registrado en INSIGNA que será usado para establecer la conexión al servidor. Cadena (correspondiente al usuario registrado en INSIGNA) *Debe de ser definido por el usuario
Modo debug pac.client.debug Agrega al log del conector los comandos del servidor que son ejecutados Boolean (true/false) false
Tiempo de vida de la conexión pac.tcp.ttl Tiempo de vida de la conexión *Periodo de tiempo (ver al final del anexo la especificación) 3600s
Tiempo de espera pac.tcp.timeout Tiempo de espera para efectuar la conexión con el servidor *Periodo de tiempo (ver al final del anexo la especificación) 15s

Tabla 5 Propiedades configurables del archivo ws_client.properties

Nombre Propiedad Descripción Tipo de dato Default
Dirección del WSDL del Web Service de INSIGNA pac.ws.wsdl Dirección donde se encuentra ubicado el WSDL del servidor de INSIGNA. Cadena Formato: [dirección]/services?wsdl *https://ws.insigna.mx/services?wsdl
Nombre de usuario INSIGNA pac.ws.username Nombre de usuario registrado en INSIGNA que será usado para establecer la conexión al servidor. Cadena (correspondiente al usuario registrado en INSIGNA) *Debe de ser definido por el usuario

Periodo de tiempo:

	[#][unidad_tiempo]; 
		donde # es cualquier número entero largo y unidad_tiempo es:
		- "s" para segundos
		- "m" para minutos
		- "h" para horas
		- "d" para días
		- "w" para semanas
		Ejemplos: 10s, 15m, 2d, 5w
		Nota: la mínima unidad de tiempo será de 1 segundo, algo menor a eso será causa de error en el tipo de dato de entrada.
		Para cualquiera de las unidades de tiempo el máximo valor numérico que podrá ser asignado será de 999999.		
	

Cuerpo del correo electrónico

Esta cadena puede contener texto en general, además de que puede ser particionada con el carácter "", esto para generar cuerpos de correo largos conservando su visibilidad en pantalla. Además de esto, pueden ser introducidos los caracteres especiales de cadenas (String Java 6 para mayor información) como en los siguientes casos:

		\t Insertar una tabulación
		\b Insertar un retroceso
		\n Insertar una nueva línea
		\r Insertar un regreso de carro
		\f Insertar un salto de página
		\’ Insertar una comilla simple
		\” Insertar comillas dobles
		\\ Insertar una diagonal invertida en el texto
	

También se pueden añadir variables que corresponden al CFDI enviado en el correo para personalizar el mensaje. Los datos permitidos en las variables son los siguientes:

  • receptorName
  • invoiceDate

La forma de introducirlos al cuerpo del correo es el siguiente:

	  <variable>receptorName</variable>
	

Formato CSV

Formato CSV para Retención Pago V1.0

Timbrado

		[PRIMER RENGLÓN]
		retencion,claveRetencion,folioInterno,descripción,fechaExpedición
		
		[SEGUNDO RENGLÓN]
		emisor,rfc,nombreDenominaciónRazónSocial,curp
		
		[TERCER RENGLÓN]
		receptor-nacional,rfc, nombreDenominaciónRazónSocial,curp
		receptor-extranjero, nombreDenominaciónRazónSocial,numeroRegistroIdFiscal
		
		[CUARTO RENGLÓN]
		periodo,mesInicio,mesFin,añoEjercicioFiscal
		
		[QUINTO RENGLÓN]
		totales,montoTotalOperacion,montoTotalGravado,montoTotalExento,montoTotalRetenciones
		
		[N RENGLONES POR IMPUESTO RETENIDO]
		impuestoretenido,montoRetenido,tipoPagoRetención, baseImpuesto,tipoImpuesto
		
		[SEPTIMO RENGLÓN]
		complemento,enajenaciondeacciones,contratoIntermediación,ganancia,pérdida
		
		complemento,operacionesconderivados,montoGananciaAcumulable,montoPerdidaDeducible
		
		complemento,sectorfinanciero,idFideicomiso,nombreFideicomiso,descripciónFideicomiso
		
		complemento,intereses,provieneDeSistemaFinanciero,interesesRetirados,correspondeAOperacionFinancieraDerivada,
		montoInterésNominal,montoInteresesReales,pérdida
		
		complemento,arrendamientoenfideicomiso,pagoFiduciarioArrendador, remdimientosObtenidos,
		deduccionesArrendamiento,montoTotalRetención,montoResfiscalFIBRAS,montoOtrosConceptosDistribuidos,
		descripciónConceptosDistribuidos complemento,premios,entidadFederativaPago,montoPago,montoGravado,montoTotalExento,observaciones
		
		complemento,pagosaextranjeros,esBeneficiarioDirecto,paisDeResidencia,conceptoPagoNB,descripcionConceptoNB,rfc,Curp,razónSocialB,
		conceptoPagoB,descripcionConceptoB complemento,planesderetiro,sistemaFinanciero,montoTotAportAnioInmAnterior,montoIntRealesDevengAniooInmAnt,
		huboRetirosAnioInmAntPer,montoTotRetiradoAnioInmAntPer,montoTotExentRetiradoAnioInmAnt, montoTotExedenteAnioInmAnt, huboRetirosAnioInmAnt,
		montoTotRetiradoAnioInmAnt
		
		complemento,intereseshipotecarios,creditoOtorgadoPorInstFinanciera,saldoInsoluto,proporciónDeducibleDelCrédito,
		montoTotaInteresesNominalesDevengados,montoTotaInteresesNominalesDevengadosPagados,montTotaInteresesRealesPagadosDeducibles,numContratoCréditoHipotecario	
	

Reglas Generales:

	a.	El archivo del informe deberá ser creado con formato de texto simple, con extensión CSV y contener un registro por renglón.
	
	b.	Cada uno de los atributos que conforman el informe deberá estar delimitado por el carácter separador (por defecto la coma ",")
	y sin espacios entre ellos, debido a que éste será utilizado como carácter de control en la formación del informe.
	
	c.	Opcionalmente, cada uno de los atributos que conforman el informe puede estar contenido dentro de un carácter de escape al
	inicio y un carácter de escape al final del atributo. Por defecto el carácter de escape es la doble coma ("). Esto permite que
	los nombres de los atributos contengan el carácter separador. No se permite usar dicho carácter de escape dentro de los atributos.
		i.	Ejemplo:
		"descripción","nombreDenominaciónRazónSocial","rfc"
	
	d.	El primer registro de cada renglón, deberá contener una de las palabras clave (retencion, emisor, receptor-nacional,
	receptor-extranjero, periodo, totales, impuestoretenido, enajenaciondeacciones, operacionesconderivados, sectorfinanciero,
	intereses, arrendamientoenfideicomiso, premios, planesderetiro, intereseshipotecarios) en minúsculas.
	
	e.	Se expresará únicamente la información del dato sin expresar el atributo al que hace referencia. Por ejemplo, si el
	rfc de la retención fuera "RFCC850101RFC" sólo se expresará " RFCC850101RFC " y nunca "rfc RFCC850101RFC ".
	
	f.	En el caso de datos con valor Nulo (sin valor), simplemente se añade el carácter separador, para indicar la presencia
	de un atributo o -si se prefiere- mediante los caracteres de escape (por defecto las dobles comas "") sin ningún valor entre
	dichos caracteres de escape.
	
	g.	Se puede incluir información relativa a parcialidades en los siguientes campos del primer renglón: folio_fiscal_original,
	serie_folio_fiscal_original,fecha_folio_fiscal_original,monto_folio_fiscal_original
	
	h.	En el caso de existir varios conceptos en una factura, se deberá crear un registro por cada concepto de manera consecutiva
	(un renglón por concepto).
		Ejemplo: domiciliofiscal,calle,número_exterior,número_interior,colonia,localidad,referencia,municipio, estado,país,
		código_postal concepto,cantidad,unidad,número_identificación,descripción,valor_unitario,importe,cuenta_predial,
		complemento_concepto,pedimento_aduana,fecha_aduana,nombre_aduana concepto,cantidad,unidad,número_identificación,descripción,
		valor_unitario,importe,cuenta_predial,complemento_concepto,pedimento_aduana,fecha_aduana,nombre_aduana impuesto,tasa,importe,
		tipo_impuesto,nombre_impuesto
	
	i.	En el caso de existir varias partes por concepto, se deberá crear un registro por cada parte de manera consecutiva inmediatamente
	después del registro del concepto al que pertenecen (un renglón por parte). 
		Ejemplo: domiciliofiscal,calle,número_exterior,número_interior,colonia,localidad,referencia,municipio,estado,país,código_postal
		concepto,cantidad,unidad,número_identificación,descripción,valor_unitario,importe,cuenta_predial,complemento_concepto,
		pedimento_aduana,nombre_aduana,fecha_aduana parte,cantidad,unidad,número_identificación,descripción,valor_unitario,importe,
		pedimento_aduana,fecha_aduana,nombre_aduana parte,cantidad,unidad,número_identificación,descripción,valor_unitario,importe,
		pedimento_aduana,fecha_aduana,nombre_aduana parte,cantidad,unidad,número_identificación,descripción,valor_unitario,importe,
		pedimento_aduana,fecha_aduana,nombre_aduana concepto,cantidad,unidad,número_identificación,descripción,valor_unitario,
		importe,cuenta_predial,complemento_concepto,pedimento_aduana,nombre_aduana,fecha_aduana parte,cantidad,unidad,número_identificación,
		descripción,valor_unitario,importe, pedimento_aduana,fecha_aduana,nombre_aduana concepto,cantidad,unidad,número_identificación,
		descripción,valor_unitario,importe,cuenta_predial,complemento_concepto,pedimento_aduana,nombre_aduana,fecha_aduana impuesto,
		tasa,importe,tipo_impuesto,nombre_impuesto
	
	j.	Los únicos registros que pueden ser múltiples son concepto, parte e impuesto.
	
	k.	Los registros parte y domiciliofiscal son los únicos registros opcionales.
	
	l.	Los registros correspondientes a fechas deberán tener el formato yyyy/MM/dd HH:mm:ss, excepto aquellos de fecha_aduana,
	en donde el Anexo 20 indica que el formato es yyyy/MM/dd.
	
	m.	En el registro emisor, receptor y domiciliofiscal, se podrá referir a México con las palabras “Mex”, “MX” y “México"
    (sin validar mayúsculas o minúsculas). Cualquier palabra distinta se considerará como un país extranjero (y si es un dato 
    asociado a un RFC, se deberá utilizar el RFC genérico para extranjeros: “XEXX010101000”).
    
	n.	El registro regimenesfiscales es la cabeza de una serie de regímenes que puede ir desde 1 régimen 
    (al menos es requerido uno) hasta N regímenes.
	
	o.	En el registro regimenesfiscales, si se introduce un campo  (vacío) será ignorado por el sistema.
	
	p.	El atributo tipo_comprobante del registro factura sólo permite los siguientes valores en minúsculas: ingreso, egreso o traslado.
	
	q.	El atributo tipo_impuesto del registro impuesto sólo permite los siguientes valores en minúsculas: retencion o traslado.
	
	r.	El atributo nombre_impuesto del registro impuesto sólo permite los siguientes valores en mayúsculas para los impuestos
	de tipo traslado: IVA o IEPS y los siguientes valores en mayúsculas para los impuestos de tipo retención: IVA o ISR.
	
	s.	Se generará un archivo de texto por cada factura emitida, es decir, no se permitirá tener varias facturas 
	en un archivo XML/CSV.
	
	t.	El certificado y el número de certificado se registran en un archivo diferente al de la factura en formato base64.
	
	u.	Cada uno de los conceptos registrados en la factura puede contener 0 o sólo 1 elemento de los siguientes: 
	
		a.	cuenta_predial
		b.	complemento_concepto
		c.	aduana (pedimento,fecha,nombre)
		d.	parte
	
	En caso de no cumplir con esta regla se marcará como factura inválida y se reportará el error en el archivo de log de la factura
	

Cancelación

	[PRIMER RENGLÓN] 
		rfc,uuid
	

Comandos

El usuario interactúa con el Conector mediante el uso de comandos, los cuales son introducidos a través de la línea de comandos. De esta manera el Conector recibe la señal de inicio, detención, configuración, pruebas y ayuda. En caso de ocurrir un error el Conector despliega la información del error.

Comando Acceso rápido Descripción
Run /r Ejecuta el programa. El programa no arrancará hasta que toda la configuración esté correcta, un mensaje en pantalla mostrará el error en éstos casos y el programa detendrá su ejecución.
Stop /s Detiene el Conector (una vez ejecutado el comando conector run) sin necesidad de terminar el proceso directamente con el gestor de aplicaciones del sistema operativo, lo cual podría ocasionar problemáticas transaccionales en el Conector. En el momento en que se desee terminar la ejecución del Conector se necesita abrir una ventana de línea de comandos y ejecutar el comando ubicándose en la carpeta del Conector en ejecución. La ventana despliega una serie de mensajes donde se indicará lo sucedido con el proceso. Pantalla 1:

Pantalla 2:
masterkey /m Permite configurar la llave maestra en el Conector. Al ejecutar este comando se pedirán las contraseñas, tanto de las llaves privadas de las empresas configuradas, teniendo disponibles 3 intentos para definir cada una, así como también de las contraseñas correspondientes a la cuenta y la configuración SSL de INSIGNA (si se utilizará la conexión mediante TCP), las cuales tienen 3 intentos para definirse en conjunto, y correos (este último sólo de ser necesario).

En la primera ejecución de este comando, posterior a la configuración inicial del Conector, se requiere realizar una configuración inicial de la llave maestra. Esto implica el configurar una nueva llave maestra cumpliendo con las características definidas –al menos 10 caracteres y hasta 50 caracteres como máximo, al menos un carácter alfabético y al menos un dígito. Posteriormente pedirá las contraseñas mencionadas en el párrafo anterior, sólo de ser necesarias por la configuración del Conector.

Una vez que la llave maestra se encuentra configurada, el comando conector masterkey puede volverse a ejecutar teniendo como resultado el estatus de la configuración de llave maestra. Existen diversos comportamientos del Conector dependiendo de la configuración y el estatus actual del Conector, los cuales se detallan a continuación:

  • 1. En caso de que falten contraseñas por configurar, el Conector las pedirá y finalmente las guardará cifradas.
  • 2. En caso de que no falten contraseñas, el Conector pondrá un estatus (OK) de la configuración de llave maestra y al final presentará 2 flujos alternos:
    • a. Primero preguntará por cambiar la llave maestra, se requiere proporcionar tanto la llave maestra anterior como la nueva. No hay necesidad de introducir las contraseñas previamente configuradas.
    • b. En caso de no haber seleccionado la opción anterior, el Conector preguntará si se desea definir una nueva llave maestra, indicándonos que eso implicaría introducir de nuevo todas las contraseñas que el Conector requiere. No se requiere proporcionar la llave maestra anterior.


En caso de tener 3 intentos fallidos de introducción de cualquier contraseña el Conector detendrá su ejecución.
test /t Permite realizar una comprobación de los diversos módulos del Conector necesarios para la correcta ejecución del Conector.

El comando comprueba:
  • Lectura de propiedades de Conector
  • Periodicidad de Timbrado
  • Apagado del Conector (puerto)
  • Entrada/Salida de CFDIs
  • Configuración comando OpenSSL y descifrado de llave privada de prueba
    • En esta sección se revisa el correcto funcionamiento del comando OpenSSL mediante el descifrado de una llave privada que sirve solamente para efectos de ésta prueba.
  • Validación de Lista de Emisores de RFCs
  • Configuración de Plantillas PDF (Carga de archivos)
  • Configuración de Certificados SAT (Validación del directorio)
  • Configuración de Certificados SAT (Carga de certificados)
  • Configuración de Llaves Privadas SAT (Validación del directorio)
  • Configuración de Llaves Privadas SAT (Carga de archivos)
  • Estado de la llave maestra
    • Descifrado de contraseña PAC
    • Descifrado de contraseña SSL
    • Descifrado de contraseñas de las llaves privadas para los RFCs
    • Descifrado de contraseña de correos (sólo cuando el envío de correos esté activo y el servidor con seguridad habilitada)
  • Configuración de RFCs
  • Configuración de Correos electrónicos
  • Parámetros CSV
  • Revisión de directorios (permisos de lectura y escritura)
  • Conexión TCP de INSIGNA (cliente-servidor) / Conexión Web Service de INSIGNA (cliente-servidor)
help /h Muestra la descripción de los comandos del Conector.

Extensión de Criptografía en Java

Las librerías de criptografía de Java por defecto no soportan llaves de más de 128 bits. Para utilizar una llave SSL de INSIGNA (de 1024 bits) se necesita reemplazar un par de archivos en la instalación de Java (ver sección 4.1, paso 3).

Los archivos se encuentran disponibles en el zip del Conector:


O bien pueden descargarse en las siguientes rutas:

  • Java 8 (archivo jce_policy-8.zip)

https://goo.gl/TpG7TC

Antes de proseguir es necesario revisar el valor de la variable JAVA_HOME (ver punto #3 de la sección 4.1).


A continuación, se toman los archivos local_policy.jar y US_export_policy.jar (contenidos en el archivo zip descargado) y se colocan en el directorio definido en %JAVA_HOME%/lib/ security:


Hecho este procedimiento se podrá utilizar sin problemas la conexión SSL con INSIGNA. Se recomienda hacer esta sustitución de archivos con el Conector apagado.

MailSender

El MailSender es un artefacto que tiene como función enviar CFDIs por correo electrónico de manera independiente del funcionamiento del conector, sin embargo, el mailsender toma como base el sistema de archivos del conector.

El MailSender está alojado en el directorio de instalación del conector y se encuentra ubicado en la carpeta conector/mail-sender/conector_mail_sender.


Al igual que el conector, el MailSender tiene un sistema de carpetas definido para el procesamiento de archivos ubicado en la carpeta mailResend:

  • cfdiNotSent: Carpeta que contiene los archivos que no fueron posibles de enviar
  • cfdiSent: Carpeta que contiene los archivos enviados con éxito
  • cfdiToSend: Carpeta Auxiliar para agregar los archivos que se desean enviar.
  • configuration: Carpeta donde se encuentran los archivos necesarios para la configuración del artefacto.

El MailSender genera un archivo de logueo ubicado en la carpeta de instalación llamado "SendMail_log" en el cual se encuentra el registro del procesamiento de archivos y es útil cuando es necesario identificar las razones por las cuales fallen los envíos.

Configuración

Previo a la ejecución del MailSender es necesario definir dos variables de sistema:

  • MAIL_SENDER_HOME
  • CONECTOR_HOME

El archivo de configuración del MailSender se encuentra en mailResend/configuration/ mail.properties y sus propiedades se enlistan a continuación:

Propiedad Descripción Tipo de dato Default
signed.cfdis.directory Carpeta de donde se leen los archivos que van a ser enviados por correo. (El directorio base es la carpeta de instalación del conector, si se desea que el mail sender tome lo archivos a enviar de la carpeta de timbrados del conector es necesario asignarle a esta propiedad el valor “/default/timbradas”) Cadena N/A
mail.time.between.send Tiempo entre envío de correos en milisegundos Número N/A
number.connection.retries Número máximo de intentos con el servidor de conexiones antes de detener el envío. Número 10
mail.pdf.required Bandera para indicar si el pdf será necesario para enviar el correo. Booleano false
mail.to.source.file.type Tipo de archive del cual se lee el destinario del correo (1=XML,2=TXT) Número 1
mail.host URL del servidor de correos Cadena N/A
mail.port Puerto del servidor de correos Número N/A
mail.userName Usuario del servidor de correos Cadena N/A
mail.smtp.starttls.enable Bandera para indicar si se permite usar SMTP con TLS Booleano false
mail.from “from” para la plantilla del correo Cadena N/A
mail.cc “cc” para la plantilla del correo Cadena N/A
mail.bcc “bcc” para la plantilla del correo Cadena N/A
mail.subject Asunto para la plantilla del correo Cadena N/A
mail.body Cuerpo para la plantilla del correo Cadena N/A
mail.date.format Formato de fecha usado en los correos Cadena dd/mm/yyyy HH:mm:ss

Configuración del destinatario

Para configurar el destinario se tiene que agregar al nodo Receptor del CFDI un atributo llamado correoElectronico que NO aparecerá en el CFDI timbrado, ya que su uso es solamente para el envío del correo.

Ejecución

Para iniciar el MailSender es necesario ejecutar el archivo "mail-sender" que se encuentra en la carpeta bin dentro de la instalación del MailSender:


  1. Al iniciar el MailSender se le pedirá la contraseña del servidor de correos y se procederá a hacer una prueba de conexión con los datos proporcionados.
    • a. En caso de no ingresar correctamente la contraseña se mostrará un mensaje indicando que hubo un error y se detendrá el mail sender.
  2. Se procesarán los archivos encontrados dentro de la carpeta "signed.cfdis.directory" y se mostrará información acerca de los tipos de archivos encontrados.
  3. Se leen los archivos "base" (XML sin sello o TXT) en donde se encuentran las direcciones de correos a los cuales se enviarán los CFDIs.
    • a. Los nombres de losarchivos XML del cfdi timbrado y PDF deberán contener al inicio el nombre del archivo base, por ejemplo: si el archivo base se llama "DST_3030.txt" entonces el cfdi timbrado deberá llamarse "DST_3030_LOQUESEA.xml".
  4. Se buscan los archivos requeridos para él envió: XML del CFDI timbrado y PDF(si se estableció como requerido en la configuración)
    • a. Si la propiedad "mail.pdf.required" tiene un valor "true" y no se encuentra el pdf del CFDI que se está procesando, él envió no se realizará y los archivos serán movidos a la carpeta cfdiNotSent.
  5. Se hace una prueba de conexión del servidor de correos.
    • a. Si el servidor de correos no responde, el mail sender intentará conectarse el número de veces definido en "number.connection.retries" usando el tiempo definido en "mail.time.between.send" entre cada intento. Si se alcanza el número máximo de intentos de conexión sin éxito, el mail sender se detendrá.
  6. Se envían los CFDIS a los destinatarios.
    • a. En caso de que la dirección de correo del destinario no sea una dirección válida, él envió no se realizará y los archivos serán movidos a la carpeta cfdiNotSent.
    • b.Si al momento del envió no se tiene respuesta por parte del servidor de correos, se procederá a esperar el tiempo definido en "mail.time.between.send" y se reintentará enviar de nuevo el correo, hasta que sea posible enviarlo.
  7. Se mueven los archivos involucrados (Archivo base, XML sellado y PDF) a las carpetas correspondientes.
    • a.Los archivos enviados correctamente se moverán a la carpeta cfdiSent
    • b.Los archivos que no fueron enviados por algún error se moverán a la carpeta cfdiNotSent. La razón del problema con el envío se escribirá en el archivo "SendMail_log"
  8. Se espera el tiempo establecido (mail.time.between.send) entre envíos y se reinicia el proceso de envío.

Errores

Como se mencionó anteriormente en el archivo SendMail_log se encuentra detallado las causas de problemas con envíos de correos, a continuación se mencionan algunos de los problemas más comunes y su posible solución:

Mensaje de error Causa Solución
No se pudo localizar el servidor de correos, revise la url Alguno de los datos de la configuración del servidor de correos es inválido. Verificar que las propiedades mail.host, mail.port, mail.userName y mal.smtp.starttls.enable tenga los valores correctos para realizar la conexión
Error a leer la carpeta El valor de la propiedad signed.cfdis.directory no es válido Verificar que exista la dirección especificada en signed.cfdis.directory y que el mail_sender tenga permisos de lectura para dicha carpeta.
Ocurrió un error al leer el archivo: No se encontró el archivo mencionado. El archivo mencionado no tiene un formato válido o está corrupto. Verificar que el archivo mencionado existe en la carpeta definida en “signed.cfdis.directory”
No se encontró el archivo:, No se encontraron los archivos: No se encontraron los archivos requeridos para el envío Verificar que se encuentren los archivos requeridos para el envío XML timbrado y PDF en caso de que se haya definido como requerido. Verificar que el nombre de los archivos inicia con el nombre del archivo base.
Por favor, verifique la escritura de emails. Las direcciones de envío no son válidas Verificar que esté bien escrita la dirección de correo electrónica.

Glosario

  • CFDI: Comprobante Fiscal Digital por Internet.
  • CSV: Tipo de documento en formato abierto sencillo para representar datos en forma de tabla.
  • FIEL: Firma Electrónica Avanzada.
  • CSD: Certificado de Sello Digital.
  • IP: Etiqueta numérica que identifica, de manera lógica y jerárquica, a una interfaz de un dispositivo.
  • PAC: Proveedor Autorizado de Certificación.
  • PDF: Formato de documento portátil.
  • SMTP: Simple Mail Transfer Protocol.
  • TCP: Transmission Control Protocol.
  • Timbrar: Procedimiento que legaliza los documentos necesarios para respaldar las diferentes operaciones que los contribuyentes realizan al llevar a cabo sus actividades económicas.
  • Web Service:Servicio que permite intercambiar información entre aplicaciones mediante el uso de la red o internet.
  • XML: Extensible Markup Language.