virtualxml-cfdi

Modulo para generar, firmar, sellar, timbrar y cancelar comprobantes fiscales digitales en Mexico (CFDI 4.0 y CFDI 3.3)

Usage no npm install needed!

<script type="module">
  import virtualxmlCfdi from 'https://cdn.skypack.dev/virtualxml-cfdi';
</script>

README

# virtualxml-cfdi

MIT License NPM version NODE version NPM downloads

Librería para firmar, sellar y timbrar CFDI v4.0 y v3.3

Introducción

Librería para la generación y cancelación de CFDI 4.0 y CFDI 3.3, incluidos todos los complementos vigentes. Incluye el proceso de firmado, Sellado y tambien el Timbrado por medio del servicio de VirtualPAC, de acuerdo a la especificación del SAT.

Características

  • Generación de CFDI 4.0
  • Generación de CFDI 3.3
  • Generación de todos los complementos vigentes:
    • [Complementos y Complementos Concepto]
  • Generación de representacion impresa simple (PDF)
  • Generación de Codigo de Barras Bidimensional en formatos: png, jpg y bmp
  • Sellado local (tu llave privada y clave son usadas localmente)
  • Soporta la solicitud de Cancelación de CFDI con el formato vigente a 2022 (tu llave privada y clave son usadas localmente)

Instalación

NPM:

$ npm install --save virtualxml-cfdi

Requisitos

  • Contar con un CSD vigente (Certificado de Sello Digital).
  • Contar con los archivos .cer, .key
  • Contar con la clave del archivo .key
  • En caso de desear timbrar con credenciales diferentes al demo; haber contratado un plan de timbres con VirtualPAC

NOTA: Los archivos .cer/.key de la FIEL no funcionan para el proceso de timbrado, deberan usarse los del CSD

Información DEMO

Estas credenciales pueden usarse sin necesidad de ningun tipo de registro

  • usuario: demo_nodejs
  • rfcemisor: EKU9003173C9
  • Certificado Emisor: CSD_EKU9003173C9.cer (archivo ubicado dentro de la carpeta "test" del paquete)
  • Llave Privada Emisor: CSD_EKU9003173C9.key (archivo ubicado dentro de la carpeta "test" del paquete)
  • Clave Llave Privada: 12345678a

Contacto

  • Correo electronico: soporte@ciber-tec.com

Métodos

cancelaCFDI2022

Procesa la solicitud de cancelación y devuelve el Acuse de solicitud/estatus Cancelación en caso de ser exitoso.

Esta funcion implementa los nuevos requisitos de cancelacion aplicables a partir de 2022.

  • Parametros Nombre | Tipo | Requerido | Ejemplo ------------------- | ------------------- | -------- | -------- usuario | Cadena | Sí | demo_nodejs rfcemisor | Cadena | Sí | EKU9003173C9 uuid | Cadena | Sí | FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF motivo | Cadena | Sí | 02 foliosust | Cadena | Sí | Texto en blanco si no se usa certificado | Cadena | Sí | ./MisCertificados/EKU9003173C9.cer o Base64 (MIIF+TCCA+GgAwIBAgI...) llaveprivada | Cadena | Sí | ./MisCertificados/EKU9003173C9.key o Base64 (MIIFDjBABgkqhkiG9w0...) clave | Cadena | Sí | 12345678a outbasepath | Cadena | No | ../../salida/ outprefix | Cadena | No | prefijo outsuffix | Cadena | No | sufijo

  • Retorno Regresa una promesa. Una solicitud exitosa resolvera la promesa (resolve/then) y la respuesta contendra un exitcode = 201 o exitcode = 202, un uuid y un acuse. Cualquier otro valor sera un error en el proceso y debera referirse al mensaje message = ... normalmente en el rechazo (reject/catch) de la promesa

    • Resolve (Then)

      { 
      "exitcode": 201, 
      "message": "201 - Solicitud de cancelación recibida."
      "uuid": "025357315-4D60-4E56-A056-7AA0B1D8D95F", 
      "acuse": "XML del acuse en base64"
      }
      
    • Resolve (Then)

      { 
      "exitcode": 202, 
      "message": "202 - UUID Previamente cancelado."
      "uuid": "025357315-4D60-4E56-A056-7AA0B1D8D95F", 
      "acuse": "XML del acuse en base64"
      }
      
    • Reject (Catch)

      { 
      "exitcode": 205, 
      "message": "CA205 - El UUID no existe => Error al cancelar el UUID de la factura"
      }
      
cancelaCFDI33 (Deprecated)

Metodo inválido a partir de 2022. Usar cancelaCFDI2022

addFunctionCall

Agrega al Stack FIFO una llamada referenciada a la funcion funcName con los parámetros especificados.

  • Parametros Nombre | Tipo | Requerido | Ejemplo ------------------- | ------------------- | -------- | -------- funcName | Cadena | Sí | VirtualXML_SetEmisorInfo_cfdi33 ...args | Multi parámetros | Sí | 'EKU9003173C9', 'NombreDelEmisorRazónSocial', '601'

NOTA: Dependiendo de la funcion referenciada (funcName), el numero de parámetros varía. Ver las funciones disponibles y numero de argumentos en la sección funciones referenciadas

  • Retorno La instancia de la clase, para usarse con llamadas secuenciales en 1 sola linea si se desea.
emiteCFDI40

Procesa Stack de funciones e intenta timbrar el documento generado.

  • Parametros Nombre | Tipo | Requerido | Ejemplo ------------------- | ------------------- | -------- | -------- usuario | Cadena | Sí | demo_nodejs rfcemisor | Cadena | Sí | EKU9003173C9 certificado | Cadena | Sí | ./MisCertificados/EKU9003173C9.cer o Base64 (MIIF+TCCA+GgAwIBAgI...) llaveprivada | Cadena | Sí | ./MisCertificados/EKU9003173C9.key o Base64 (MIIFDjBABgkqhkiG9w0...) clave | Cadena | Sí | 12345678a outbasepath | Cadena | No | ../../salida/ outprefix | Cadena | No | prefijo outsuffix | Cadena | No | sufijo qrpng | Bool | No | true qrbmp | Bool | No | false qrjpg | Bool | No | false pdf | Bool | No | true

  • Retorno Regresa una promesa. Un timbrado exitoso resolvera la promesa (resolve/then) y la respuesta contendra un exitcode = 0, un uuid y un xmltimbrado. Cualquier otro valor sera un error en el proceso y debera referirse al mensaje message = ... normalmente en el rechazo (reject/catch) de la promesa

    • Resolve (Then)

      { 
      "exitcode": 0, 
      "message": ""
      "uuid": "025357315-4D60-4E56-A056-7AA0B1D8D95F", 
      "xmltimbrado": "XML en base64", 
      "cadenasat": "Cadena Original del complemento de certificación digital del SAT", 
      "qrpng": "QR.png en base64",
      "qrjpg": "QR.jpg en base64",
      "qrbmp": "QR.bmp en base64",
      "pdf": "Representacion impresa PDF en base64",
      }
      
    • Reject (Catch)

      { 
      "exitcode": -5, 
      "message": "Algunas funciones no son validas: VirtualXML_NoExiste"
      }
      
emiteCFDI33

Procesa Stack de funciones e intenta timbrar el documento generado.

  • Parametros Nombre | Tipo | Requerido | Ejemplo ------------------- | ------------------- | -------- | -------- usuario | Cadena | Sí | demo_nodejs rfcemisor | Cadena | Sí | EKU9003173C9 certificado | Cadena | Sí | ./MisCertificados/EKU9003173C9.cer o Base64 (MIIF+TCCA+GgAwIBAgI...) llaveprivada | Cadena | Sí | ./MisCertificados/EKU9003173C9.key o Base64 (MIIFDjBABgkqhkiG9w0...) clave | Cadena | Sí | 12345678a outbasepath | Cadena | No | ../../salida/ outprefix | Cadena | No | prefijo outsuffix | Cadena | No | sufijo qrpng | Bool | No | true qrbmp | Bool | No | false qrjpg | Bool | No | false pdf | Bool | No | true

  • Retorno Regresa una promesa. Un timbrado exitoso resolvera la promesa (resolve/then) y la respuesta contendra un exitcode = 0, un uuid y un xmltimbrado. Cualquier otro valor sera un error en el proceso y debera referirse al mensaje message = ... normalmente en el rechazo (reject/catch) de la promesa

    • Resolve (Then)

      { 
      "exitcode": 0, 
      "message": ""
      "uuid": "025357315-4D60-4E56-A056-7AA0B1D8D95F", 
      "xmltimbrado": "XML en base64", 
      "cadenasat": "Cadena Original del complemento de certificación digital del SAT", 
      "qrpng": "QR.png en base64",
      "qrjpg": "QR.jpg en base64",
      "qrbmp": "QR.bmp en base64",
      "pdf": "Representacion impresa PDF en base64",
      }
      
    • Reject (Catch)

      { 
      "exitcode": -5, 
      "message": "Algunas funciones no son validas: VirtualXML_NoExiste_cfdi33"
      }
      

Proceso

El siguiente diagrama muestra el proceso completo:

virtualxml-cfdi">

Demo

En el siguiente enlace se podra descargar un demo que incluye:

  • Cliente Web: Contiene un formulario simple que sirve de interface para llenar la informacion del CFDI asi como observar la respuesta obtenida por el uso de virtualxml-cfdi por parte del servidor.
  • Servidor: Sirve como capa de negocio exponiendo un servicio REST que procesa las solicitudes del cliente y hace uso de este paquete (virtualxml-cfdi) para la firma, sellado y timbrado del CFDI.

NOTA: El paquete virtualxml-cfdi puede ejecutarse en cualquier version Node 4+. Este demo utiliza la version minima de Node 12+

Descarga aqui - version minima NodeJS v12+

UsoDemo

Abrir linea de comandos en folder server y ejecutar:

$ npm install
$ npm start

Abrir linea de comandos en folder client

$ npm install
$ npm start

Abrir browser en direccion http://localhost:3000 y probar el demo.

Funciones Referenciadas

Estas funciones son añadidas a una pila FIFO (FirstIn-FirstOut) para ser enviadas y ejecutadas remotamente. Constan de un nombre funcName y de 1 o mas parámetros.
Las funciones se agregan a la pila mediante el metodo addFunctionCall una vez que la clase VirtualXML ha sido instanciada. El siguiente ejemplo ilustra el modo de uso:

Los parámetros de funcName deberan ser de tipo cadena independientemente del tipo de dato que representen, y deberan tener el formato que corresponda de acuerdo a los lineamientos del SAT.

Los parámetros de funcName deberan ser una cadena vacia si no contiene informacion, y debera respetarse la posicion de los mismos.

const VirtualXML = require('virtualxml-cfdi');
const vxml = new VirtualXML(); // Nueva Instancia
vxml.addFunctionCall( 'VirtualXML_SetComprobanteInfo_cfdi40', // **funcName**
                      'NOM',                                  // param01 = Serie
                      '1',                                    // param02 = Folio
                      '2018-01-30T05:24:30',                  // param03 = Fecha
                      '01',                                   // param04 = FormaPago
                      'CondiciónDePago',                      // param05 = CondicionesDePago
                      '5000.00',                              // param06 = SubTotal
                      '',                                     // param07 = Descuento
                      'MXN',                                  // param08 = Moneda
                      '',                                     // param09 = TipoCambio
                      '5000.00',                              // param10 = Total
                      'I',                                    // param11 = TipoDeComprobante
                      'PUE',                                  // param12 = MetodoPago
                      '68025',                                // param13 = LugarExpedicion
                      '',                                     // param14 = Confirmacion
                      '01');                                  // param15 = Exportacion 

Se pueden agregar tantas llamadas como se necesiten para el correcto llenado del CFDI, teniendo en cuenta que algunos elementos que pueden aparecer varias veces (ej. cfdi.Conceptos), a su vez podran contener un detalle y las funciones del detalle afectaran al ultimo elemento padre al que pertenece. Por ejemplo:

const VirtualXML = require('virtualxml-cfdi');
const vxml = new VirtualXML(); // Nueva Instancia
vxml.addFunctionCall('VirtualXML_SetComprobanteInfo_cfdi40', 'A', '1', FechaCFDI, '99', 'Contado Comercial', '1000.00', '50.00', 'MXN', '', '1102.00', 'I', 'PPD', '53050', '', '01'); 
vxml.addFunctionCall('VirtualXML_SetReceptorInfo_cfdi40', 'MAG041126GT8', 'NombreDelReceptorRazónSocial', '', '', 'G01', '53050', '601');
vxml.addFunctionCall('VirtualXML_AddConcepto_cfdi40', '84111506', 'SEFXXX', '1', 'H87', 'Unidad', 'Paquete X - ObjetoImp1', '500.00', '500.00', '', '02');
vmlx.addFunctionCall('VirtualXML_AddConceptoCuentaPredial_cfdi40','5678901');
vxml.addFunctionCall('VirtualXML_AddConcepto_cfdi40', '84111506', 'SEFXXX', '2', 'H87', 'Unidad', 'Paquete X - ObjetoImp2', '250.00', '500.00', '50.00', '02');
vxml.addFunctionCall('VirtualXML_AddConcepto_cfdi40', '84111506', 'SEFXXX', '2', 'H87', 'Unidad', 'Paquete X - ObjetoImp3', '250.00', '500.00', '50.00', '02');
vxml.addFunctionCall('VirtualXML_AddConceptoTraslado_cfdi40', '450.00', '002', 'Tasa', '0.160000', '72.00');
// Para funciones que afectan informacion unica, NO importa el momento en que se llamen
vxml.addFunctionCall('VirtualXML_SetEmisorInfo_cfdi40', 'EKU9003173C9', 'NombreDelEmisorRazónSocial', '601',''); 
// Esta funcion afectara al ultimo CONCEPTO agregado
vmlx.addFunctionCall('VirtualXML_AddConceptoRetencion_cfdi40','3000.00','003','Tasa','0.300000','900.00');

El resultado seria un CFDI con la siguiente estructura:

CFDI
|--Emisor
|--Receptor
|--Conceptos
      |--Concepto01
            |--CuentaPredial
      |--Concepto02
      |--Concepto03
            |--Impuestos
                  |--Traslado
                  |--Retencion
CFDI40.Básicas
  • VirtualXML_SetComprobanteInfo_cfdi40

    • [01] Serie
    • [02] Folio
    • [03] Fecha
    • [04] FormaPago
    • [05] CondicionesDePago
    • [06] SubTotal
    • [07] Descuento
    • [08] Moneda
    • [09] TipoCambio
    • [10] Total
    • [11] TipoDeComprobante
    • [12] MetodoPago
    • [13] LugarExpedicion
    • [14] Confirmacion
    • [15] Exportacion
  • VirtualXML_SetInformacionGlobal_cfdi40

    • [01] Periodicidad
    • [02] Meses
    • [03] Año
  • VirtualXML_AddCfdiRelacionados_cfdi40

    • [01] TipoRelacion
    • [02] UUID1
    • [03] UUID2
    • [04] UUID3
    • [05] UUID4
    • [06] UUID5
    • [07] UUID6
    • [08] UUID7
    • [09] UUID8
    • [10] UUID9
    • [11] UUID10
  • VirtualXML_AddCfdiRelacionado_cfdi40 (Usar antes AddCfdiRelacionados_cfdi40)

    • [01] UUID
  • VirtualXML_SetEmisorInfo_cfdi40

    • [01] Rfc
    • [02] Nombre
    • [03] RegimenFiscal
    • [04] FacAtrAdquirente
  • VirtualXML_SetReceptorInfo_cfdi40

    • [01] Rfc
    • [02] Nombre
    • [03] ResidenciaFiscal
    • [04] NumRegIdTrib
    • [05] UsoCFDI
    • [06] DomicilioFiscalReceptor
    • [07] RegimenFiscalReceptor
  • VirtualXML_SetImpuestosInfo_cfdi40

    • [01] TotalImpuestosTrasladados
    • [02] TotalImpuestosRetenidos
  • VirtualXML_AddTraslado_cfdi40 (Usar antes SetImpuestosInfo_cfdi40)

    • [01] Impuesto
    • [02] TipoFactor
    • [03] TasaOCuota
    • [04] Importe
    • [05] Base
  • VirtualXML_AddRetencion_cfdi40 (Usar antes SetImpuestosInfo_cfdi40)

    • [01] Impuesto
    • [02] Importe
  • VirtualXML_SetAddenda

    • [01] FragmentoXML (Debe ser válido e incluir los namespaces que no sean parte de un CFDI)
  • VirtualXML_SetAddendaText

    • [01] TextoAddenda
CFDI40.Conceptos
  • VirtualXML_AddConcepto_cfdi40

    • [01] ClaveProdServ
    • [02] NoIdentificacion
    • [03] Cantidad
    • [04] ClaveUnidad
    • [05] Unidad
    • [06] Descripcion
    • [07] ValorUnitario
    • [08] Importe
    • [09] Descuento
    • [10] ObjetoImp
  • VirtualXML_AddConceptoTraslado_cfdi40 (Usar antes AddConcepto_cfdi40)

    • [01] Base
    • [02] Impuesto
    • [03] TipoFactor
    • [04] TasaOCuota
    • [05] Importe
  • VirtualXML_AddConceptoRetencion_cfdi40 (Usar antes AddConcepto_cfdi40)

    • [01] Base
    • [02] Impuesto
    • [03] TipoFactor
    • [04] TasaOCuota
    • [05] Importe
  • VirtualXML_AddConceptoInformacionAduanera_cfdi40 (Usar antes AddConcepto_cfdi40)

    • [01] NumeroPedimento
  • VirtualXML_AddConceptoCuentaPredial_cfdi40 (Usar antes AddConcepto_cfdi40)

    • [01] Numero
  • VirtualXML_AddConceptoParte_cfdi40 (Usar antes AddConcepto_cfdi40)

    • [01] ClaveProdServ
    • [02] NoIdentificacion
    • [03] Cantidad
    • [04] Unidad
    • [05] Descripcion
    • [06] ValorUnitario
    • [07] Importe
    • [08] NumeroPedimento1
    • [09] NumeroPedimento2
    • [10] NumeroPedimento3
    • [11] NumeroPedimento4
    • [12] NumeroPedimento5
  • VirtualXML_SetConceptoACuentaTerceros_cfdi40 (Usar antes AddConcepto_cfdi40)

    • [01] RfcACuentaTerceros
    • [02] NombreACuentaTerceros
    • [03] RegimenFiscalACuentaTerceros
    • [04] DomicilioFiscalACuentaTerceros
CFDI33.Básicas.Proximo.Desuso
  • VirtualXML_SetComprobanteInfo_cfdi33

    • [01] Serie
    • [02] Folio
    • [03] Fecha
    • [04] FormaPago
    • [05] CondicionesDePago
    • [06] SubTotal
    • [07] Descuento
    • [08] Moneda
    • [09] TipoCambio
    • [10] Total
    • [11] TipoDeComprobante
    • [12] MetodoPago
    • [13] LugarExpedicion
    • [14] Confirmacion
  • VirtualXML_SetCfdiRelacionados_cfdi33

    • [01] TipoRelacion
  • VirtualXML_AddCfdiRelacionado_cfdi33 (Usar antes SetCfdiRelacionados)

    • [01] UUID
  • VirtualXML_SetEmisorInfo_cfdi33

    • [01] Rfc
    • [02] Nombre
    • [03] RegimenFiscal
  • VirtualXML_SetReceptorInfo_cfdi33

    • [01] Rfc
    • [02] Nombre
    • [03] ResidenciaFiscal
    • [04] NumRegIdTrib
    • [05] UsoCFDI
  • VirtualXML_SetImpuestosInfo_cfdi33

    • [01] TotalImpuestosTrasladados
    • [02] TotalImpuestosRetenidos
  • VirtualXML_AddTraslado_cfdi33 (Usar antes SetImpuestosInfo)

    • [01] Impuesto
    • [02] TipoFactor
    • [03] TasaOCuota
    • [04] Importe
  • VirtualXML_AddRetencion_cfdi33 (Usar antes SetImpuestosInfo)

    • [01] Impuesto
    • [02] Importe
CFDI33.Conceptos.Proximo.Desuso
  • VirtualXML_AddConcepto_cfdi33

    • [01] ClaveProdServ
    • [02] NoIdentificacion
    • [03] Cantidad
    • [04] ClaveUnidad
    • [05] Unidad
    • [06] Descripcion
    • [07] ValorUnitario
    • [08] Importe
    • [09] Descuento
  • VirtualXML_AddConceptoTraslado_cfdi33 (Usar antes AddConcepto)

    • [01] Base
    • [02] Impuesto
    • [03] TipoFactor
    • [04] TasaOCuota
    • [05] Importe
  • VirtualXML_AddConceptoRetencion_cfdi33 (Usar antes AddConcepto)

    • [01] Base
    • [02] Impuesto
    • [03] TipoFactor
    • [04] TasaOCuota
    • [05] Importe
  • VirtualXML_AddConceptoInformacionAduanera_cfdi33 (Usar antes AddConcepto)

    • [01] NumeroPedimento
  • VirtualXML_AddConceptoCuentaPredial_cfdi33 (Usar antes AddConcepto)

    • [01] Numero
  • VirtualXML_AddConceptoParte_cfdi33 (Usar antes AddConcepto)

    • [01] ClaveProdServ
    • [02] NoIdentificacion
    • [03] Cantidad
    • [04] Unidad
    • [05] Descripcion
    • [06] ValorUnitario
    • [07] Importe
    • [08] NumeroPedimento
CFDI.Conceptos.ComplementoConcepto.iedu10
  • VirtualXML_AddConceptoComplementoIedu10 (Usar antes AddConcepto)
    • [01] nombreAlumno
    • [02] CURP
    • [03] nivelEducativo
    • [04] autRVOE
    • [05] rfcPago
CFDI.Conceptos.ComplementoConcepto.ventavehiculos11
  • VirtualXML_AddConceptoComplementoVentaVehiculos11_cfdi33 (Usar antes AddConcepto)
    • [01] ClaveVehicular
    • [02] Niv
    • [03] numero
    • [04] fecha
    • [05] aduana);
CFDI.Conceptos.ComplementoConcepto.terceros11
  • VirtualXML_SetConceptoComplementoTerceros11 (Usar antes AddConcepto)

    • [01] rfc
    • [02] nombre
    • [03] calle
    • [04] noExterior
    • [05] noInterior
    • [06] colonia
    • [07] localidad
    • [08] referencia
    • [09] municipio
    • [10] estado
    • [11] pais
    • [12] codigoPostal
  • VirtualXML_AddTerceros11InformacionAduanera (Usar antes SetConceptoComplementoTerceros11)

    • [01] numero
    • [02] fecha
    • [03] aduana
  • VirtualXML_AddTerceros11CuentaPredial (Usar antes SetConceptoComplementoTerceros11)

    • [01] numero
  • VirtualXML_AddTerceros11Parte (Usar antes SetConceptoComplementoTerceros11)

    • [01] cantidad
    • [02] unidad
    • [03] noIdentificacion
    • [04] descripcion
    • [05] valorUnitario
    • [06] importe
    • [07] numero
    • [08] fecha
    • [09] aduana
  • VirtualXML_AddTerceros11ParteInformacionAduanera (Usar antes AddTerceros11Parte)

    • [01] numero
    • [02] fecha
    • [03] aduana
  • VirtualXML_AddTerceros11Retencion (Usar antes SetConceptoComplementoTerceros11)

    • [01] impuesto
    • [02] importe
  • VirtualXML_AddTerceros11Traslado (Usar antes SetConceptoComplementoTerceros11)

    • [01] impuesto
    • [02] tasa
    • [03] importe
CFDI.Complemento.CartaPorte20
  • VirtualXML_SetCartaPorte20

    • [01] TranspInternac
    • [02] EntradaSalidaMerc
    • [03] PaisOrigenDestino
    • [04] ViaEntradaSalida
    • [05] TotalDistRec
  • VirtualXML_CartaPorte20AddUbicacion (Usar antes SetCartaPorte20)

    • [01] TipoUbicacion
    • [02] IDUbicacion
    • [03] RFCRemitenteDestinatario
    • [04] NombreRemitenteDestinatario
    • [05] NumRegIdTrib
    • [06] ResidenciaFiscal
    • [07] NumEstacion
    • [08] NombreEstacion
    • [09] NavegacionTrafico
    • [10] FechaHoraSalidaLlegada
    • [11] TipoEstacion
    • [12] DistanciaRecorrida
    • [13] Calle
    • [14] NumeroExterior
    • [15] NumeroInterior
    • [16] Colonia
    • [17] Localidad
    • [18] Referencia
    • [19] Municipio
    • [20] Estado
    • [21] Pais
    • [22] CodigoPostal
  • VirtualXML_CartaPorte20SetMercancias (Usar antes SetCartaPorte20)

    • [01] PesoBrutoTotal
    • [02] UnidadPeso
    • [03] PesoNetoTotal
    • [04] NumTotalMercancias
    • [05] CargoPorTasacion
  • VirtualXML_CartaPorte20AddMercancia (Usar antes SetCartaPorte20)

    • [01] BienesTransp
    • [02] ClaveSTCC
    • [03] Descripcion
    • [04] Cantidad
    • [05] ClaveUnidad
    • [06] Unidad
    • [07] Dimensiones
    • [08] MaterialPeligroso
    • [09] CveMaterialPeligroso
    • [10] Embalaje
    • [11] DescripEmbalaje
    • [12] PesoEnKg
    • [13] ValorMercancia
    • [14] Moneda
    • [15] FraccionArancelaria
    • [16] UUIDComercioExt
    • [17] UnidadPesoMerc
    • [18] PesoBruto
    • [19] PesoNeto
    • [20] PesoTara
    • [21] NumPiezas
  • VirtualXML_CartaPorte20AddMercanciaPedimentos (Usar antes CartaPorte20AddMercancia)

    • [01] Pedimento
  • VirtualXML_CartaPorte20AddMercanciaGuiasIdentificacion (Usar antes CartaPorte20AddMercancia)

    • [01] NumeroGuiaIdentificacion
    • [02] DescripGuiaIdentificacion
    • [03] PesoGuiaIdentificacion
  • VirtualXML_CartaPorte20AddMercanciaCantidadTransporta (Usar antes CartaPorte20AddMercancia)

    • [01] Cantidad
    • [02] IDOrigen
    • [03] IDDestino
    • [04] CvesTransporte
  • VirtualXML_CartaPorte20SetMercanciasAutotransporte (Usar antes SetCartaPorte20)

    • [01] PermSCT
    • [02] NumPermisoSCT
    • [03] ConfigVehicular
    • [04] PlacaVM
    • [05] AnioModeloVM
    • [06] AseguraRespCivil
    • [07] PolizaRespCivil
    • [08] AseguraMedAmbiente
    • [09] PolizaMedAmbiente
    • [10] AseguraCarga
    • [11] PolizaCarga
    • [12] PrimaSeguro
    • [13] SubTipoRem1
    • [14] Placa1
    • [15] SubTipoRem2
    • [16] Placa2
  • VirtualXML_CartaPorte20SetMercanciasTransporteMaritimo (Usar antes SetCartaPorte20)

    • [01] PermSCT
    • [02] NumPermisoSCT
    • [03] NombreAseg
    • [04] NumPolizaSeguro
    • [05] TipoEmbarcacion
    • [06] Matricula
    • [07] NumeroOMI
    • [08] AnioEmbarcacion
    • [09] NombreEmbarc
    • [10] NacionalidadEmbarc
    • [11] UnidadesDeArqBruto
    • [12] TipoCarga
    • [13] NumCertITC
    • [14] Eslora
    • [15] Manga
    • [16] Calado
    • [17] LineaNaviera
    • [18] NombreAgenteNaviero
    • [19] NumAutorizacionNaviero
    • [20] NumViaje
    • [21] NumConocEmbarc
    • [22] MatriculaContenedor
    • [23] TipoContenedor
    • [24] NumPrecinto
  • VirtualXML_CartaPorte20AddMercanciasTransporteMaritimoContenedor (Usar antes CartaPorte20SetMercanciasTransporteMaritimo)

    • [01] MatriculaContenedor
    • [02] TipoContenedor
    • [03] NumPrecinto
  • VirtualXML_CartaPorte20SetMercanciasTransporteAereo (Usar antes SetCartaPorte20)

    • [01] PermSCT
    • [02] NumPermisoSCT
    • [03] MatriculaAeronave
    • [04] NombreAseg
    • [05] NumPolizaSeguro
    • [06] NumeroGuia
    • [07] LugarContrato
    • [08] CodigoTransportista
    • [09] RFCEmbarcador
    • [10] NumRegIdTribEmbarc
    • [11] ResidenciaFiscalEmbarc
    • [12] NombreEmbarcador
  • VirtualXML_CartaPorte20SetMercanciasTransporteFerroviario (Usar antes SetCartaPorte20)

    • [01] TipoDeServicio
    • [02] TipoDeTrafico
    • [03] NombreAseg
    • [04] NumPolizaSeguro
    • [05] TipoDerechoDePaso
    • [06] KilometrajePagado
    • [07] TipoCarro
    • [08] MatriculaCarro
    • [09] GuiaCarro
    • [10] ToneladasNetasCarro
    • [11] TipoContenedor
    • [12] PesoContenedorVacio
    • [13] PesoNetoMercancia
  • VirtualXML_CartaPorte20AddMercanciasTransporteFerroviarioDerechosDePaso (Usar antes CartaPorte20SetMercanciasTransporteFerroviario)

    • [01] TipoDerechoDePaso
    • [02] KilometrajePagado
  • VirtualXML_CartaPorte20AddMercanciasTransporteFerroviarioCarro (Usar antes CartaPorte20SetMercanciasTransporteFerroviario)

    • [01] TipoCarro
    • [02] MatriculaCarro
    • [03] GuiaCarro
    • [04] ToneladasNetasCarro
    • [05] TipoContenedor
    • [06] PesoContenedorVacio
    • [07] PesoNetoMercancia
  • VirtualXML_CartaPorte20AddMercanciasTransporteFerroviarioCarroContenedor (Usar antes CartaPorte20SetMercanciasTransporteFerroviario o CartaPorte20AddMercanciasTransporteFerroviarioCarro)

    • [01] TipoContenedor
    • [02] PesoContenedorVacio
    • [03] PesoNetoMercancia
  • VirtualXML_CartaPorte20AddFiguraTransporteTiposFigura (Usar antes SetCartaPorte20)

    • [01] TipoFigura
    • [02] RFCFigura
    • [03] NumLicencia
    • [04] NombreFigura
    • [05] NumRegIdTribFigura
    • [06] ResidenciaFiscalFigura
    • [07] ParteTransporte
    • [08] Calle
    • [09] NumeroExterior
    • [10] NumeroInterior
    • [11] Colonia
    • [12] Localidad
    • [13] Referencia
    • [14] Municipio
    • [15] Estado
    • [16] Pais
    • [17] CodigoPostal
  • VirtualXML_CartaPorte20AddFiguraTransporteTiposFiguraPartesTransporte (Usar antes CartaPorte20AddFiguraTransporteTiposFigura)

    • [01] ParteTransporte
CFDI.Complemento.Nomina12
  • VirtualXML_SetNomina12

    • [01] TipoNomina
    • [02] FechaPago
    • [03] FechaInicialPago
    • [04] FechaFinalPago
    • [05] NumDiasPagados
    • [06] TotalPercepciones
    • [07] TotalDeducciones
    • [08] TotalOtrosPagos
  • VirtualXML_Nomina12SetEmisor (Usar antes SetNomina12)

    • [01] Curp
    • [02] RegistroPatronal
    • [03] RfcPatronOrigen
    • [04] OrigenRecurso
    • [05] MontoRecursoPropio
  • VirtualXML_Nomina12SetReceptor (Usar antes SetNomina12)

    • [01] Curp
    • [02] NumSeguridadSocial
    • [03] FechaInicioRelLaboral
    • [04] Antigüedad
    • [05] TipoContrato
    • [06] Sindicalizado
    • [07] TipoJornada
    • [08] TipoRegimen
    • [09] NumEmpleado
    • [10] Departamento
    • [11] Puesto
    • [12] RiesgoPuesto
    • [13] PeriodicidadPago
    • [14] Banco
    • [15] CuentaBancaria
    • [16] SalarioBaseCotApor
    • [17] SalarioDiarioIntegrado
    • [18] ClaveEntFed
  • VirtualXML_Nomina12AddSubContratacion (Usar antes Nomina12SetReceptor)

    • [01] RfcLabora
    • [02] PorcentajeTiempo
  • VirtualXML_Nomina12SetPercepciones (Usar antes SetNomina12)

    • [01] TotalSueldos
    • [02] TotalSeparacionIndemnizacion
    • [03] TotalJubilacionPensionRetiro
    • [04] TotalGravado
    • [05] TotalExento
  • VirtualXML_Nomina12AddPercepcion (Usar antes Nomina12SetPercepciones)

    • [01] TipoPercepcion
    • [02] Clave
    • [03] Concepto
    • [04] ImporteGravado
    • [05] ImporteExento
    • [06] Dias
    • [07] TipoHoras
    • [08] HorasExtra
    • [09] ImportePagado
    • [10] ValorMercado
    • [11] PrecioAlOtorgarse
  • VirtualXML_Nomina12SetJubilacionPensionRetiro (Usar antes Nomina12SetPercepciones)

    • [01] TotalUnaExhibicion
    • [02] TotalParcialidad
    • [03] MontoDiario
    • [04] IngresoAcumulable
    • [05] IngresoNoAcumulable
  • VirtualXML_Nomina12SetSeparacionIndemnizacion (Usar antes Nomina12SetPercepciones)

    • [01] TotalPagado
    • [02] NumAñosServicio
    • [03] UltimoSueldoMensOrd
    • [04] IngresoAcumulable
    • [05] IngresoNoAcumulable
  • VirtualXML_Nomina12SetDeducciones (Usar antes SetNomina12)

    • [01] TotalOtrasDeducciones
    • [02] TotalImpuestosRetenidos
  • VirtualXML_Nomina12AddDeduccion (Usar antes Nomina12SetDeducciones)

    • [01] TipoDeduccion
    • [02] Clave
    • [03] Concepto
    • [04] Importe
  • VirtualXML_Nomina12AddOtroPago (Usar antes SetNomina12)

    • [01] TipoOtroPago
    • [02] Clave
    • [03] Concepto
    • [04] Importe
    • [05] SaldoAFavor
    • [06] Año
    • [07] RemanenteSalFav
    • [08] SubsidioCausado
  • VirtualXML_Nomina12AddIncapacidad (Usar antes SetNomina12)

    • [01] DiasIncapacidad
    • [02] TipoIncapacidad
    • [03] ImporteMonetario
CFDI.Complemento.cce11
  • VirtualXML_SetComercioExterior11

    • [01] MotivoTraslado
    • [02] TipoOperacion
    • [03] ClaveDePedimento
    • [04] CertificadoOrigen
    • [05] NumCertificadoOrigen
    • [06] NumeroExportadorConfiable
    • [07] Incoterm
    • [08] Subdivision
    • [09] Observaciones
    • [10] TipoCambioUSD
    • [11] TotalUSD
  • VirtualXML_CCE11SetEmisor (Usar antes SetComercioExterior11)

    • [01] Curp
    • [02] Calle
    • [03] NumeroExterior
    • [04] NumeroInterior
    • [05] Colonia
    • [06] Localidad
    • [07] Referencia
    • [08] Municipio
    • [09] Estado
    • [10] Pais
    • [11] CodigoPostal
  • VirtualXML_CCE11AddPropietario (Usar antes SetComercioExterior11)

    • [01] NumRegIdTrib
    • [02] ResidenciaFiscal
  • VirtualXML_CCE11SetReceptor (Usar antes SetComercioExterior11)

    • [01] NumRegIdTrib
    • [02] Calle
    • [03] NumeroExterior
    • [04] NumeroInterior
    • [05] Colonia
    • [06] Localidad
    • [07] Referencia
    • [08] Municipio
    • [09] Estado
    • [10] Pais
    • [11] CodigoPostal
  • VirtualXML_CCE11AddDestinatario (Usar antes SetComercioExterior11)

    • [01] NumRegIdTrib
    • [02] Nombre
    • [03] Calle
    • [04] NumeroExterior
    • [05] NumeroInterior
    • [06] Colonia
    • [07] Localidad
    • [08] Referencia
    • [09] Municipio
    • [10] Estado
    • [11] Pais
    • [12] CodigoPostal
  • VirtualXML_CCE11AddMercancia (Usar antes SetComercioExterior11)

    • [01] NoIdentificacion
    • [02] FraccionArancelaria
    • [03] CantidadAduana
    • [04] UnidadAduana
    • [05] ValorUnitarioAduana
    • [06] ValorDolares
    • [07] Marca
    • [08] Modelo
    • [09] SubModelo
    • [10] NumeroSerie
  • VirtualXML_CCE11AddMercanciaDescripcionesEspecificas (Usar antes CCE11AddMercancia)

    • [01] Marca
    • [02] Modelo
    • [03] SubModelo
    • [04] NumeroSerie
CFDI.Complemento.pagos10
  • VirtualXML_SetPagos10

    • Sin parametros adicionales
  • VirtualXML_Pagos10AddPago (Usar antes SetPagos10)

    • [01] FechaPago
    • [02] FormaDePagoP
    • [03] MonedaP
    • [04] TipoCambioP
    • [05] Monto
    • [06] NumOperacion
    • [07] RfcEmisorCtaOrd
    • [08] NomBancoOrdExt
    • [09] CtaOrdenante
    • [10] RfcEmisorCtaBen
    • [11] CtaBeneficiario
    • [12] TipoCadPago
    • [13] CertPago
    • [14] CadPago
    • [15] SelloPago
  • VirtualXML_Pagos10AddPagoDoctoRelacionado (Usar antes Pagos10AddPago)

    • [01] IdDocumento
    • [02] Serie
    • [03] Folio
    • [04] MonedaDR
    • [05] TipoCambioDR
    • [06] MetodoDePagoDR
    • [07] NumParcialidad
    • [08] ImpSaldoAnt
    • [09] ImpPagado
    • [10] ImpSaldoInsoluto
  • VirtualXML_Pagos10AddPagoImpuestos (Usar antes Pagos10AddPago)

    • [01] TotalImpuestosRetenidos
    • [02] TotalImpuestosTrasladados
  • VirtualXML_Pagos10AddPagoImpuestosRetencion (Usar antes Pagos10AddPagoImpuestos)

    • [01] Impuesto
    • [02] Importe
  • VirtualXML_Pagos10AddPagoImpuestosTraslado (Usar antes Pagos10AddPagoImpuestos)

    • [01] Impuesto
    • [02] TipoFactor
    • [03] TasaOCuota
    • [04] Importe
CFDI.Complemento.pagos20
  • VirtualXML_SetPagos20

    • [01] TotalRetencionesIVA
    • [02] TotalRetencionesISR
    • [03] TotalRetencionesIEPS
    • [04] TotalTrasladosBaseIVA16
    • [05] TotalTrasladosImpuestoIVA16
    • [06] TotalTrasladosBaseIVA8
    • [07] TotalTrasladosImpuestoIVA8
    • [08] TotalTrasladosBaseIVA0
    • [09] TotalTrasladosImpuestoIVA0
    • [10] TotalTrasladosBaseIVAExento
    • [11] MontoTotalPagos
  • VirtualXML_Pagos20AddPago (Usar antes SetPagos20)

    • [01] FechaPago
    • [02] FormaDePagoP
    • [03] MonedaP
    • [04] TipoCambioP
    • [05] Monto
    • [06] NumOperacion
    • [07] RfcEmisorCtaOrd
    • [08] NomBancoOrdExt
    • [09] CtaOrdenante
    • [10] RfcEmisorCtaBen
    • [11] CtaBeneficiario
    • [12] TipoCadPago
    • [13] CertPago
    • [14] CadPago
    • [15] SelloPago
  • VirtualXML_Pagos20AddPagoDoctoRelacionado (Usar antes Pagos20AddPago)

    • [01] IdDocumento
    • [02] Serie
    • [03] Folio
    • [04] MonedaDR
    • [05] EquivalenciaDR
    • [06] NumParcialidad
    • [07] ImpSaldoAnt
    • [08] ImpPagado
    • [09] ImpSaldoInsoluto
    • [10] ObjetoImpDR
  • VirtualXML_Pagos20AddPagoDoctoRelacionadoRetencionDR (Usar antes Pagos20AddPagoDoctoRelacionado)

    • [01] BaseDR
    • [02] ImpuestoDR
    • [03] TipoFactorDR
    • [04] TasaOCuotaDR
    • [05] ImporteDR
  • VirtualXML_Pagos20AddPagoDoctoRelacionadoTrasladoDR (Usar antes Pagos20AddPagoDoctoRelacionado)

    • [01] BaseDR
    • [02] ImpuestoDR
    • [03] TipoFactorDR
    • [04] TasaOCuotaDR
    • [05] ImporteDR
  • VirtualXML_Pagos20AddPagoImpuestosPRetencionP (Usar antes Pagos20AddPago)

    • [01] ImpuestoP
    • [02] ImporteP
  • VirtualXML_Pagos20AddPagoImpuestosPTrasladoP (Usar antes Pagos20AddPago)

    • [01] BaseP
    • [02] ImpuestoP
    • [03] TipoFactorP
    • [04] TasaOCuotaP
    • [05] ImporteP
CFDI.Complemento.ImpuestosLocales10
  • VirtualXML_SetImpuestosLocales10

    • [01] TotaldeTraslados
    • [02] TotaldeRetenciones
  • VirtualXML_ImpLocal10AddRetencionesLocales (Usar antes SetImpuestosLocales10)

    • [01] ImpLocRetenido
    • [02] TasadeRetencion
    • [03] Importe
  • VirtualXML_ImpLocal10AddTrasladosLocales (Usar antes SetImpuestosLocales10)

    • [01] ImpLocTrasladado
    • [02] TasadeTraslado
    • [03] Importe
CFDI.Complemento.Donatarias11
  • VirtualXML_SetDonatarias11
    • [01] noAutorizacion
    • [02] fechaAutorizacion
    • [03] leyenda
CFDI.Complemento.INE11
  • VirtualXML_SetINE11

    • [01] TipoProceso
    • [02] TipoComite
    • [03] IdContabilidad
    • [04] ClaveEntidad
    • [05] Ambito
    • [06] EntidadContabilidadIdContabilidad
  • VirtualXML_INE11AddEntidad (Usar antes SetINE11)

    • [01] ClaveEntidad
    • [02] Ambito
    • [03] IdContabilidad
  • VirtualXML_INE11AddEntidadContabilidad (Usar antes INE11AddEntidad)

    • [01] IdContabilidad
CFDI.Complemento.Divisas10
  • VirtualXML_SetDivisas10
    • [01] tipoOperacion
CFDI.Complemento.Aerolineas10
  • VirtualXML_SetAerolineas10

    • [01] TUA
    • [02] TotalCargos
    • [03] CodigoCargo
    • [04] Importe
  • VirtualXML_Aerolineas10AddCargo (Usar antes SetAerolineas10)

    • [01] CodigoCargo
    • [02] Importe
CFDI.Complemento.NotariosPublicos10
  • VirtualXML_SetNotariosPublicos10

    • [01] TipoInmueble
    • [02] Calle
    • [03] NoExterior
    • [04] NoInterior
    • [05] Colonia
    • [06] Localidad
    • [07] Referencia
    • [08] Municipio
    • [09] Estado
    • [10] Pais
    • [11] CodigoPostal
    • [12] NumInstrumentoNotarial
    • [13] FechaInstNotarial
    • [14] MontoOperacion
    • [15] Subtotal
    • [16] IVA
    • [17] CURP
    • [18] NumNotaria
    • [19] EntidadFederativa
    • [20] Adscripcion
    • [21] CoproSocConyugalEEnajenante
    • [22] CoproSocConyugalEAdquiriente
  • VirtualXML_NotariosPublicos10AddDescInmueble (Usar antes SetNotariosPublicos10)

    • [01] TipoInmueble
    • [02] Calle
    • [03] NoExterior
    • [04] NoInterior
    • [05] Colonia
    • [06] Localidad
    • [07] Referencia
    • [08] Municipio
    • [09] Estado
    • [10] Pais
    • [11] CodigoPostal
  • VirtualXML_NotariosPublicos10AddDatosUnEnajenante (Usar antes SetNotariosPublicos10)

    • [01] Nombre
    • [02] ApellidoPaterno
    • [03] ApellidoMaterno
    • [04] RFC
    • [05] CURP
  • VirtualXML_NotariosPublicos10AddDatosEnajenanteCopSC (Usar antes SetNotariosPublicos10)

    • [01] Nombre
    • [02] ApellidoPaterno
    • [03] ApellidoMaterno
    • [04] RFC
    • [05] CURP
    • [06] Porcentaje
  • VirtualXML_NotariosPublicos10AddDatosUnAdquiriente (Usar antes SetNotariosPublicos10)

    • [01] Nombre
    • [02] ApellidoPaterno
    • [03] ApellidoMaterno
    • [04] RFC
    • [05] CURP
  • VirtualXML_NotariosPublicos10AddDatosAdquirienteCopSC (Usar antes SetNotariosPublicos10)

    • [01] Nombre
    • [02] ApellidoPaterno
    • [03] ApellidoMaterno
    • [04] RFC
    • [05] CURP
    • [06] Porcentaje
CFDI.Complemento.VehiculoRenovacionSustitucionVehiculo10
  • VirtualXML_SetRenovSustitVehiculos10

    • [01] TipoDeDecreto
  • VirtualXML_RenovSustitVehiculos10AddRenovVehicular (Usar antes SetRenovSustitVehiculos10)

    • [01] VehEnaj
    • [02] UsadoPrecioVehUsado
    • [03] UsadoTipoVeh
    • [04] UsadoMarca
    • [05] UsadoTipooClase
    • [06] UsadoAño
    • [07] UsadoModelo
    • [08] UsadoNIV
    • [09] UsadoNumSerie
    • [10] UsadoNumPlacas
    • [11] UsadoNumMotor
    • [12] UsadoNumFolTarjCir
    • [13] UsadoNumPedIm
    • [14] UsadoAduana
    • [15] UsadoFechaRegulVeh
    • [16] UsadoFoliofiscal
    • [17] NuevoAño
    • [18] NuevoModelo
    • [19] NuevoNumPlacas
    • [20] NuevoRFC
  • VirtualXML_RenovSustitVehiculos10AddRenovVehicularVehiculoUsado (Usar antes RenovSustitVehiculos10AddRenovVehicular)

    • [01] UsadoPrecioVehUsado
    • [02] UsadoTipoVeh
    • [03] UsadoMarca
    • [04] UsadoTipooClase
    • [05] UsadoAño
    • [06] UsadoModelo
    • [07] UsadoNIV
    • [08] UsadoNumSerie
    • [09] UsadoNumPlacas
    • [10] UsadoNumMotor
    • [11] UsadoNumFolTarjCir
    • [12] UsadoNumPedIm
    • [13] UsadoAduana
    • [14] UsadoFechaRegulVeh
    • [15] UsadoFoliofiscal
  • VirtualXML_RenovSustitVehiculos10AddSustitVehicular (Usar antes SetRenovSustitVehiculos10)

    • [01] VehEnaj
    • [02] UsadoPrecioVehUsado
    • [03] UsadoTipoVeh
    • [04] UsadoMarca
    • [05] UsadoTipooClase
    • [06] UsadoAño
    • [07] UsadoModelo
    • [08] UsadoNIV
    • [09] UsadoNumSerie
    • [10] UsadoNumPlacas
    • [11] UsadoNumMotor
    • [12] UsadoNumFolTarjCir
    • [13] UsadoNumFolAvisoint
    • [14] UsadoNumPedIm
    • [15] UsadoAduana
    • [16] UsadoFechaRegulVeh
    • [17] UsadoFoliofiscal
    • [18] NuevoAño
    • [19] NuevoModelo
    • [20] NuevoNumPlacas
    • [21] NuevoRFC
CFDI.Complemento.LeyendasFiscales10
  • VirtualXML_SetLeyendasFiscales10Full
    • [01] A_disposicionFiscal01
    • [02] A_norma01
    • [03] A_textoLeyenda01
    • [04] A_disposicionFiscal02
    • [05] A_norma02
    • [06] A_textoLeyenda02
    • [07] A_disposicionFiscal03
    • [08] A_norma03
    • [09] A_textoLeyenda03
    • [10] A_disposicionFiscal04
    • [11] A_norma04
    • [12] A_textoLeyenda04
    • [13] A_disposicionFiscal05
    • [14] A_norma05
    • [15] A_textoLeyenda05
    • [16] A_disposicionFiscal06
    • [17] A_norma06
    • [18] A_textoLeyenda06
    • [19] A_disposicionFiscal07
    • [20] A_norma07
    • [21] A_textoLeyenda07
    • [22] A_disposicionFiscal08
    • [23] A_norma08
    • [24] A_textoLeyenda08
    • [25] A_disposicionFiscal09
    • [26] A_norma09
    • [27] A_textoLeyenda09
    • [28] A_disposicionFiscal10
    • [29] A_norma10
    • [30] A_textoLeyenda10
CFDI.Complemento.VehiculoUsado10
  • VirtualXML_SetVehiculoUsado10

    • [01] montoAdquisicion
    • [02] montoEnajenacion
    • [03] claveVehicular
    • [04] marca
    • [05] tipo
    • [06] modelo
    • [07] numeroMotor
    • [08] numeroSerie
    • [09] NIV
    • [10] valor
    • [11] numero
    • [12] fecha
    • [13] aduana
  • VirtualXML_VehiculoUsado10AddInformacionAduanera (Usar antes SetVehiculoUsado10)

    • [01] numero
    • [02] fecha
    • [03] aduana
CFDI.Complemento.ServicioParcial10
  • VirtualXML_SetServicioParcial10
    • [01] NumPerLicoAut
    • [02] Calle
    • [03] NoExterior
    • [04] NoInterior
    • [05] Colonia
    • [06] Localidad
    • [07] Referencia
    • [08] Municipio
    • [09] Estado
    • [10] CodigoPostal
CFDI.Complemento.SPEI10
  • VirtualXML_Spei10AddSpeiTercero
    • [01] FechaOperacion
    • [02] Hora
    • [03] ClaveSPEI
    • [04] sello
    • [05] numeroCertificado
    • [06] cadenaCDA
    • [07] Concepto
    • [08] IVA
    • [09] MontoPago
    • [10] BancoReceptor
    • [11] NombreReceptor
    • [12] TipoCuentaReceptor
    • [13] CuentaReceptor
    • [14] RFCReceptor
    • [15] BancoEmisor
    • [16] NombreEmisor
    • [17] TipoCuentaEmisor
    • [18] CuentaEmisor
    • [19] RFCEmisor
CFDI.Complemento.EstadoCuentaCombustible12
  • VirtualXML_SetEstadoDeCuentaCombustible12

    • [01] (NumeroDeCuenta
    • [02] SubTotal
    • [03] Total
  • VirtualXML_EstadoDeCuentaCombustible12AddConcepto (Usar antes SetEstadoDeCuentaCombustible12)

    • [01] Identificador
    • [02] Fecha
    • [03] Rfc
    • [04] ClaveEstacion
    • [05] Cantidad
    • [06] TipoCombustible
    • [07] Unidad
    • [08] NombreCombustible
    • [09] FolioOperacion
    • [10] ValorUnitario
    • [11] Importe
  • VirtualXML_EstadoDeCuentaCombustible12AddConceptoTraslado (Usar antes EstadoDeCuentaCombustible12AddConcepto)

    • [01] Impuesto
    • [02] TasaOCuota
    • [03] Importe
CFDI.Complemento.ConsumoDeCombustibles11
  • VirtualXML_SetConsumoDeCombustibles11

    • [01] numeroDeCuenta
    • [02] subTotal
    • [03] total
  • VirtualXML_ConsumoDeCombustibles11AddConcepto (Usar antes SetConsumoDeCombustibles11)

    • [01] identificador
    • [02] fecha
    • [03] rfc
    • [04] claveEstacion
    • [05] tipoCombustible
    • [06] cantidad
    • [07] nombreCombustible
    • [08] folioOperacion
    • [09] valorUnitario
    • [10] importe
  • VirtualXML_ConsumoDeCombustibles11AddConceptoDeterminado (Usar antes ConsumoDeCombustibles11AddConcepto)

    • [01] impuesto
    • [02] tasaOCuota
    • [03] importe
CFDI.Complemento.PagoEnEspecie10
  • VirtualXML_SetPagoEnEspecie10
    • [01] CvePIC
    • [02] FolioSolDon
    • [03] PzaArtNombre
    • [04] PzaArtTecn
    • [05] PzaArtAProd
    • [06] PzaArtDim
CFDI.Complemento.PFIntegranteCoordinado10
  • VirtualXML_SetPFintegranteCoordinado10
    • [01] ClaveVehicular
    • [02] Placa
    • [03] RFCPF
CFDI.Complemento.TuristaPasajeroExtranjero10
  • VirtualXML_SetTuristaPasajeroExtranjero10
    • [01] fechadeTransito
    • [02] tipoTransito
    • [03] Via
    • [04] TipoId
    • [05] NumeroId
    • [06] Nacionalidad
    • [07] EmpresaTransporte
    • [08] IdTransporte
CFDI.Complemento.ValesDeDespensa10
  • VirtualXML_SetValesDeDespensa10

    • [01] registroPatronal
    • [02] numeroDeCuenta
    • [03] total
    • [04] identificador
    • [05] fecha
    • [06] rfc
    • [07] curp
    • [08] nombre
    • [09] numSeguridadSocial
    • [10] importe
  • VirtualXML_ValesDeDespensa10AddConcepto (Usar antes SetValesDeDespensa10)

    • [01] identificador
    • [02] fecha
    • [03] rfc
    • [04] curp
    • [05] nombre
    • [06] numSeguridadSocial
    • [07] importe
CFDI.Complemento.Detallista10
  • VirtualXML_SetDetallista10

    • [01] A_documentStatus
    • [02] E_requestForPaymentIdentification_entityType
    • [03] E_orderIdentification_referenceIdentification
    • [04] E_orderIdentification_ReferenceDate
    • [05] A_AdditionalInformationReferenceIdentification_type
    • [06] E_AdditionalInformationReferenceIdentification_referenceIdentification
    • [07] E_buyer_gln
    • [08] E_buyerContactInformationPersonOrDepartmentName_text
    • [09] E_seller_gln
    • [10] A_seller_alternatePartyIdentificationType
    • [11] E_seller_alternatePartyIdentification
    • [12] E_shipTo_gln
    • [13] E_shipTo_nameAndAddressName
    • [14] E_shipTo_nameAndAddressStreetAddressOne
    • [15] E_shipTo_nameAndAddressCity
    • [16] E_shipTo_nameAndAddressPostalCode
    • [17] E_InvoiceCreator_gln
    • [18] A_InvoiceCreator_alternatePartyIdentificationType
    • [19] E_InvoiceCreator_alternatePartyIdentification
    • [20] E_InvoiceCreator_nameAndAddressName
    • [21] E_InvoiceCreator_nameAndAddressStreetAddressOne
    • [22] E_InvoiceCreator_nameAndAddressCity
    • [23] E_InvoiceCreator_nameAndAddressPostalCode
    • [24] A_paymentTerms_paymentTermsEvent
    • [25] A_paymentTerms_PaymentTermsRelationTime
    • [26] A_paymentTerms_netPaymentNetPaymentTermsType
    • [27] A_paymentTerms_netPaymentTimePeriod
    • [28] E_paymentTerms_netPaymentValue
    • [29] A_paymentTerms_discountPaymentDiscountType
    • [30] E_paymentTerms_discountPaymentPercentage
    • [31] E_totalAmount_Amount
  • VirtualXML_Detallista10AddOrderIdentificationReferenceIdentification (Usar antes SetDetallista10)

    • [01] E_orderIdentification_referenceIdentification
  • VirtualXML_Detallista10AddAdditionalInformationReferenceIdentification (Usar antes SetDetallista10)

    • [01] A_AdditionalInformationReferenceIdentification_type
    • [02] E_AdditionalInformationReferenceIdentification_referenceIdentification
  • VirtualXML_Detallista10AddSpecialInstruction (Usar antes SetDetallista10)

    • [01] A_code
    • [02] E_text01
    • [03] E_text02
    • [04] E_text03
    • [05] E_text04
    • [06] E_text05
    • [07] E_text06
    • [08] E_text07
    • [09] E_text08
    • [10] E_text09
    • [11] E_text10
    • [12] E_text11
    • [13] E_text12
    • [14] E_text13
    • [15] E_text14
    • [16] E_text15
  • VirtualXML_Detallista10AddDeliveryNote (Usar antes SetDetallista10)

    • [01] E_ReferenceDate
    • [02] E_referenceIdentification01
    • [03] E_referenceIdentification02
    • [04] E_referenceIdentification03
    • [05] E_referenceIdentification04
    • [06] E_referenceIdentification05
    • [07] E_referenceIdentification06
    • [08] E_referenceIdentification07
    • [09] E_referenceIdentification08
    • [10] E_referenceIdentification09
    • [11] E_referenceIdentification10
    • [12] E_referenceIdentification11
    • [13] E_referenceIdentification12
    • [14] E_referenceIdentification13
    • [15] E_referenceIdentification14
    • [16] E_referenceIdentification15
    • [17] E_referenceIdentification16
    • [18] E_referenceIdentification17
    • [19] E_referenceIdentification18
    • [20] E_referenceIdentification19
    • [21] E_referenceIdentification20
  • VirtualXML_Detallista10AddCustoms (Usar antes SetDetallista10)

    • [01] E_gln
  • VirtualXML_Detallista10AddCurrency (Usar antes SetDetallista10)

    • [01] A_currencyISOCode
    • [02] E_currencyFunction01
    • [03] E_currencyFunction02
    • [04] E_currencyFunction03
    • [05] E_rateOfChange
  • VirtualXML_Detallista10AddShipmentDetail (Usar antes SetDetallista10)

    • [01] E_shipmentDetail
  • VirtualXML_Detallista10AddAllowanceCharge (Usar antes SetDetallista10)

    • [01] A_allowanceChargeType
    • [02] A_settlementType
    • [03] A_sequenceNumber
    • [04] E_specialServicesType
    • [05] A_monetaryAmountOrPercentage_base
    • [06] E_monetaryAmountOrPercentage_percentage
  • VirtualXML_Detallista10AddTotalAllowanceCharge (Usar antes SetDetallista10)

    • [01] A_allowanceOrChargeType
    • [02] E_specialServicesType
    • [03] E_Amount
  • VirtualXML_Detallista10AddLineItem (Usar antes SetDetallista10)

    • [01] A_type
    • [02] A_number
    • [03] E_tradeItemIdentification_gtin
    • [04] A_tradeItemDescriptionInformation_language
    • [05] E_tradeItemDescriptionInformation_longText
    • [06] A_invoicedQuantity_unitOfMeasure
    • [07] E_invoicedQuantity_invoicedQuantity
    • [08] E_grossPrice_Amount
    • [09] E_netPrice_Amount
    • [10] A_AdditionalInformation_type
    • [11] E_AdditionalInformation_referenceIdentification
    • [12] A_LogisticUnits_type
    • [13] E_LogisticUnits_serialShippingContainerCode
    • [14] E_palletInformation_palletQuantity
    • [15] A_palletInformation_type
    • [16] E_palletInformation_description
    • [17] E_palletInformation_methodOfPayment
    • [18] E_totalLineAmount_grossAmount
    • [19] E_totalLineAmount_netAmount
  • VirtualXML_Detallista10AddLineItemAlternateTradeItemIdentification (Usar antes Detallista10AddLineItem)

    • [01] A_type
    • [02] E_alternateTradeItemIdentification
  • VirtualXML_Detallista10AddLineItemAditionalQuantity (Usar antes Detallista10AddLineItem)

    • [01] A_QuantityType
    • [02] E_aditionalQuantity
  • VirtualXML_Detallista10AddLineItemCustoms (Usar antes Detallista10AddLineItem)

    • [01] E_gln
    • [02] A_alternatePartyIdentification_type
    • [03] E_alternatePartyIdentification
    • [04] E_ReferenceDate
    • [05] E_nameAndAddress_name
  • VirtualXML_Detallista10AddLineItemExtendedAttributes (Usar antes Detallista10AddLineItem)

    • [01] A_productionDate
    • [02] E_lotNumber
  • VirtualXML_Detallista10AddLineItemAllowanceCharge (Usar antes Detallista10AddLineItem)

    • [01] A_allowanceChargeType
    • [02] A_settlementType
    • [03] A_sequenceNumber
    • [04] E_specialServicesType
    • [05] E_percentagePerUnit
    • [06] E_amountPerUnit
  • VirtualXML_Detallista10AddLineItemTradeItemTaxInformation (Usar antes Detallista10AddLineItem)

    • [01] E_taxTypeDescription
    • [02] E_referenceNumber
    • [03] E_taxPercentage
    • [04] E_taxAmount
    • [05] E_taxCategory
CFDI.Especiales
  • VirtualXML_AddComplemento

    • [01] fragmentoXML (Debe ser válido e incluir los namespaces que pudiera utilizar)
  • VirtualXML_AddComplementoConcepto

    • [01] fragmentoXML (Debe ser válido e incluir los namespaces que pudiera utilizar)
  • VirtualXML_AddNameSpace Agrega un namespace al nodo principal XML del CFDI.

    • [01] Namespace
    • [02] url
    • [03] schemalocation

Ejemplos

Solicitud de Cancelación
  const VirtualXML = require('virtualxml-cfdi');
  let vxml = new VirtualXML();
  let ts = Date.now() - (new Date().getTimezoneOffset()) * 60000; // GMT-6

  vxml.cancelaCFDI2022("demo_nodejs",                          // usuario VirtualPAC
                   "EKU9003173C9",                             // rfcemisor
                   "163feb31-9c01-40f0-b85b-ebe1c771da1f",     // UUID
                   "02",                                       // Motivo
                   "",                                         // folioSustitucion
                   "./test/CSD_EKU9003173C9.cer",              // CER
                   "./test/CSD_EKU9003173C9.key",              // KEY
                   "12345678a",                                // usuario PWD
                   "./test/out/",                              // ruta para guardar acuse generado
                   "prefijo",                                  // prefijo de archivo para acuse generado
                   "cancelacion")                              // sufijo de archivo para acuse generado
      .then((response) => {
        // Handle Response
      }).catch((err) => {
        // Handle Error
      });
CFDI40 Sin Complemento
const VirtualXML = require('virtualxml-cfdi');
let vxml = new VirtualXML();
let ts = Date.now() - (new Date().getTimezoneOffset()) * 60000; // GMT-6
let FechaCFDI = (new Date(ts)).toISOString().substring(0, 19); // Fecha formato 2018-03-29T14:22:10
vxml.addFunctionCall('VirtualXML_SetComprobanteInfo_cfdi40', 'A', '1', FechaCFDI, '99', 'Contado Comercial', '1000.00', '50.00', 'MXN', '', '1102.00', 'I', 'PPD', '53050', '', '01');
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionados_cfdi40', '04', 'FF93C8BE-AF7B-4FC5-8854-6DAE18CFB5B4', 'D8E18C2F-2859-4927-A0F0-EA3E93642DDC', '', '', '', '', '', '', '', '');
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionado_cfdi40', 'BE1D4B47-E167-47A3-8049-70D4D43BCBE8');
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionados_cfdi40', '01', 'FDBA380A-9732-4FB5-A6CB-5FB4BD831697', '', '', '', '', '', '', '', '', '');
vxml.addFunctionCall('VirtualXML_SetEmisorInfo_cfdi40', 'EKU9003173C9', 'ESCUELA KEMPER URGATE SA DE CV', '601', '');
vxml.addFunctionCall('VirtualXML_SetReceptorInfo_cfdi40', 'CTE940531F58', 'CIBERNETICA Y TECNOLOGIA SA DE CV', '', '', 'G01', '53050', '601');
vxml.addFunctionCall('VirtualXML_AddConcepto_cfdi40', '84111506', 'SEFXXX', '1', 'H87', 'Unidad', 'Paquete X - ObjetoImp2', '500.00', '500.00', '', '02');
vxml.addFunctionCall('VirtualXML_AddConceptoTraslado_cfdi40', '500.00', '002', 'Tasa', '0.160000', '80.00');
vxml.addFunctionCall('VirtualXML_AddConcepto_cfdi40', '84111506', 'SEFXXX', '2', 'H87', 'Unidad', 'Paquete X - ObjetoImp2', '250.00', '500.00', '50.00', '02');
vxml.addFunctionCall('VirtualXML_AddConceptoTraslado_cfdi40', '450.00', '002', 'Tasa', '0.160000', '72.00');
vxml.addFunctionCall('VirtualXML_SetImpuestosInfo_cfdi40', '152.00', '');
vxml.addFunctionCall('VirtualXML_AddTraslado_cfdi40', '002', 'Tasa', '0.160000', '152.00', '950.00');
vxml.addFunctionCall('VirtualXML_SetAddenda', '<MyOwnNode name="CFDI40"><AnyChildNode data="BASICO" /></MyOwnNode>');

vxml.emiteCFDI33("demo_nodejs",
                 "EKU9003173C9",
                 "./test/CSD_EKU9003173C9.cer",
                 "./test/CSD_EKU9003173C9.key",
                 "12345678a",
                 "./test/out/",
                 "CFDI40_Basico_" + (new Date(ts)).toISOString().substring(0, 10),
                 "nodejs", true, true, true, true)
    .then((response) => {
      // Handle Response
    }).catch((err) => {
      // Handle Error
    });
CFDI40 CartaPorte20
const VirtualXML = require('virtualxml-cfdi');
let vxml = new VirtualXML();
let ts = Date.now() - (new Date().getTimezoneOffset()) * 60000; // GMT-6
let FechaCFDI = (new Date(ts)).toISOString().substring(0, 19); // Fecha formato 2018-03-29T14:22:10
vxml.addFunctionCall('VirtualXML_SetComprobanteInfo_cfdi40','RogueOne','HNFK231',FechaCFDI,'01','','25000.00','','MXN','1','28000.00','I','PUE','06300','','01');
vxml.addFunctionCall('VirtualXML_SetEmisorInfo_cfdi40','EKU9003173C9','ESCUELA KEMPER URGATE SA DE CV','601','');
vxml.addFunctionCall('VirtualXML_SetReceptorInfo_cfdi40','CTE940531F58','CIBERNETICA Y TECNOLOGIA SA DE CV','','','G03','53050','601');
vxml.addFunctionCall('VirtualXML_AddConcepto_cfdi40','78101500','01','1','E48','SERVICIO','FLETE','25000.00','25000.00','','02');
vxml.addFunctionCall('VirtualXML_AddConceptoRetencion_cfdi40','25000.00','002','Tasa','0.040000','1000.00');
vxml.addFunctionCall('VirtualXML_AddConceptoTraslado_cfdi40','25000.00','002','Tasa','0.160000','4000.00');
vxml.addFunctionCall('VirtualXML_SetImpuestosInfo_cfdi40','4000.00','1000.00');
vxml.addFunctionCall('VirtualXML_AddRetencion_cfdi40','002','1000.00');
vxml.addFunctionCall('VirtualXML_AddTraslado_cfdi40','002','Tasa','0.160000','4000.00','25000.00');
vxml.addFunctionCall('VirtualXML_SetCartaPorte20','No','','','','2');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddUbicacion','Origen','OR101010','EKU9003173C9','','','','','','','2021-11-01T00:00:00','','','calle','211','','0347','23','casa blanca 1','004','COA','MEX','25350');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddUbicacion','Destino','DE202020','EKU9003173C9','','','','','','','2021-11-01T01:00:00','','1','calle','214','','0347','23','casa blanca 2','004','COA','MEX','25350');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddUbicacion','Destino','DE202021','EKU9003173C9','','','','','','','2021-11-01T02:00:00','','1','calle','220','','0347','23','casa blanca 3','004','COA','MEX','25350');
vxml.addFunctionCall('VirtualXML_CartaPorte20SetMercancias','2.0','XBX','','2','');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddMercancia','11121900','','Productos de perfumería','1.0','XBX','','','Sí','1266','4H2','','1.0','','','','','','','','','');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddMercanciaCantidadTransporta','1','OR101010','DE202020','');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddMercancia','11121900','','Productos de perfumería','1.0','XBX','','','Sí','1266','4H2','','1.0','','','','','','','','','');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddMercanciaCantidadTransporta','1','OR101010','DE202021','');
vxml.addFunctionCall('VirtualXML_CartaPorte20SetMercanciasAutotransporte','TPAF01','NumPermisoSCT','VL','plac892','2020','SW Seguros','123456789','SW Seguros Ambientales','123456789','SW Seguros','','','CTR003','PAX1234','','');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddFiguraTransporteTiposFigura','01','VAAM130719H60','a234567890','','','','','calle','423','','0347','23','casa azul 1','004','COA','MEX','25350');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddFiguraTransporteTiposFigura','02','VAAM130719H60','','','','','PT01','calle','523','','0347','23','casa azul 2','004','COA','MEX','25350');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddFiguraTransporteTiposFiguraPartesTransporte','PT02');
vxml.addFunctionCall('VirtualXML_CartaPorte20AddFiguraTransporteTiposFigura','04','VAAM130719H60','','','','','','calle','623','','0347','23','casa azul 3','004','COA','MEX','25350');        
vxml.addFunctionCall('VirtualXML_SetAddenda', '<MyOwnNode name="CFDI40"><AnyChildNode data="CartaPorte20" /></MyOwnNode>');

vxml.emiteCFDI33("demo_nodejs",
                 "EKU9003173C9",
                 "./test/CSD_EKU9003173C9.cer",
                 "./test/CSD_EKU9003173C9.key",
                 "12345678a",
                 "./test/out/",
                 "CFDI40_Pagos20_" + (new Date(ts)).toISOString().substring(0, 10),
                 "nodejs", true, true, true, true)
    .then((response) => {
      // Handle Response
    }).catch((err) => {
      // Handle Error
    });
CFDI40 Pagos20
const VirtualXML = require('virtualxml-cfdi');
let vxml = new VirtualXML();
let ts = Date.now() - (new Date().getTimezoneOffset()) * 60000; // GMT-6
let FechaCFDI = (new Date(ts)).toISOString().substring(0, 19); // Fecha formato 2018-03-29T14:22:10
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionados_cfdi40', '01', '', '00000000-0000-0000-0000-000000000002', '', '00000000-0000-0000-0000-000000000004', '', '00000000-0000-0000-0000-000000000006', '', '00000000-0000-0000-0000-000000000008', '', '00000000-0000-0000-0000-000000000010');
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionado_cfdi40', '00000000-0000-0000-0000-111111111111');
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionados_cfdi40', '02', '00000000-0000-0000-0000-000000000001', '', '00000000-0000-0000-0000-000000000003', '', '00000000-0000-0000-0000-000000000005', '', '00000000-0000-0000-0000-000000000007', '', '00000000-0000-0000-0000-000000000009', '');
vxml.addFunctionCall('VirtualXML_AddCfdiRelacionado_cfdi40', '00000000-0000-0000-0000-222222222222');
vxml.addFunctionCall('VirtualXML_SetInformacionGlobal_cfdi40', '01', '10', '2021