BuildCFDI 4.7

BuildCFDI es una biblioteca para la creación de comprobantes fiscales digitales en su versión más actual (4.0).

En esta bibilioteca encontrarás funciones y métodos que te permitirán generar y timbrar CFDI con los siguientes complementos:
  • Instituciones educativas 1.0
  • Donatarias 1.1
  • Divisas 1.0
  • Impuestos locales 1.0
  • INE 1.1
  • Comercio exterior 2.0
  • Carta porte 3.1
  • Nómina 1.2
  • Pagos 2.0
Y por otra parte se pone a disposición del usuario funciones y métodos para la cancelación de los comprobantes fiscales digitales.
NOTA IMPORTANTE: El uso de cada una de las funciones de esta biblioteca, consumirá un crédito de su cuenta de PIN (cuenta de timbres).

block Disponible solo para usuarios registrados.


using tagcode.BuildCFDI;


//Configuración general para el uso de servicios
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx4....Hg", "micontraseñaPIN", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");
            
//Puedes establecer los certificados a partir de un dato Byte
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx4....Hg", "micontraseñaPIN", Certificado[], LlavePrivada[], "micontraseña");

//Es posible establecer la cuenta PIN para el uso de servicios
config.EstablecerPIN("CFx4....Hg", "miconstraseñaPIN");

//Es posible establecer los certificados con un método independiente
config.EstablecerCertificados("C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Es posible establecer los certificados con un método independiente a partir de un dato Byte
config.EstablecerCertificados(Certificado[], LlavePrivada[], "micontraseña");

//Podemos establecer una dirección Proxy para el paso de la información a la Red.
config.EstablecerProxy = "127.0.0.1:8888";

//Es posible establecer el comportamiento de los mensajes de errores.
config.MostrarDetallesEnErrores = true;

//Esta propiedad nos permite cambiar la URL de la API para usuarios con servicio personalizado.
config.UrlAPI = "https://...";

'Configuración general para el uso de servicios
Dim config As New ConfiguracionesBuildCFDI
            
'Establecer la cuenta PIN para el uso de servicios
config.EstablecerPIN "CFx4....Hg", "miconstraseñaPIN"

'Establecer los certificados con un método independiente
config.EstablecerCertificados "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña"

'Es posible establecer los certificados con un método independiente a partir de un dato Byte
config.EstablecerCertificadosByte Certificado(), LlavePrivada(), "micontraseña"

'Podemos establecer una dirección Proxy para el paso de la información a la Red.
config.EstablecerProxy = "127.0.0.1:8888"

'Es posible establecer el comportamiento de los mensajes de errores.
config.MostrarDetallesEnErrores = True

'Esta propiedad nos permite cambiar la URL de la API para usuarios con servicio personalizado.
config.UrlAPI = "https://..."
{
  "ConfiguracionesConsola": {
    //Establece la cuenta PIN (Cuenta de timbres)
    "PIN": "CFx45...Hg",
    //Establece la contraseña de la cuenta PIN
    "PasswordPIN": "micontraseña",
    //Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
    "MostrarDetallesEnErrores": true,
    //Podemos establecer una dirección Proxy para el paso de la información a la Red.
    "EstablecerProxy": "127.0.0.1:8888",
    //Indica si la salida de errores será por medio de un Archivo ó directo a la consola.
    "ErroresEnConsola": false,
    //Indica si la salida de resultados de la función ejecutada será por medio de un Archivo ó directo a la consola.
    "ResultadosEnConsola": false,
    //Cuando el campo ErroresEnConsola sea 'true', este campo será obligatorio establecerlo. (Condicional)
    "ArchivoErrores": "C:\\Errores.json",
    //Cuando el campo ResultadosEnConsola sea 'true', este campo será obligatorio establecerlo. (Condicional)
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "..."
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiTimbrado.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, null, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiTimbrado.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , , "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiTimbrado.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura 1",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          },
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura 2",
            "NoIdentificacion": "SKU321514",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ]
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Informacion global
InformacionGlobal ig = new InformacionGlobal("02", "03", 2023);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("XAXX010101000", "PUBLICO EN GENERAL", "01010", "616", "S01");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "ACT", "Venta", 1000, 1000, "02", i.ToString("000"), "", 0, im);
}


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiGlobal.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, ig, null, null, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Información global
Dim ig As New InformacionGlobal
ig.CrearNodo "02", "03", 2023

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "XAXX010101000", "PUBLICO EN GENERAL", "01010", "616", "S01"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "ACT", "Venta", 1000, 1000, "02", Format(i, "000"), , , im
    
Next i


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiGlobal.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, ig, , , "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiGlobal.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2023-03-10T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        //Declaramos el nodo Información global
        "InformacionGlobal": {
          "Periodicidad": "02",
          "Meses": "03",
          "Año": 2023
        },
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "XAXX010101000",
          "Nombre": "PUBLICO EN GENERAL",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "616",
          "UsoCFDI": "S01"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "ACT",
            "Descripcion": "Venta",
            "NoIdentificacion": "001",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          },
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "ACT",
            "Descripcion": "Venta",
            "NoIdentificacion": "002",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ]
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.CfdiRelacionados;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Egreso, "01010", "01", "01", "255", "N", "", opMetodoPago.PUE, 20);

//Creamos el nodo CfdiRelacionado con los comprobantes
CfdiRelacionado rel = new CfdiRelacionado();

//Puedes agregar la cantidad de relaciones necesarias
//for(int i = 0; i < N; i++){
rel.AgregarUUID("3E01CF7D-7258-42F7-9A21-7170C74B35EC");
//}

//Creamos el nodo CfdiRelacionados indicando el tipo de relacion y los documentos relacionados anteriormente.
CfdiRelacionados cr = new CfdiRelacionados("01", rel);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G02");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("84111506", 1, "ACT", "Devolución de producto", 1000, 1000, "02", "SKU321513", "", 10, im);
}


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiEgreso.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, cr, null, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Egreso, "01010", "01", "01", "255", "N", , opMetodoPago_PUE, 20

'Creamos el nodo CfdiRelacionado con los comprobantes
Dim rel As New CfdiRelacionado

'Puedes agregar la cantidad de relaciones necesarias
'For i = 0 To N
    rel.AgregarUUID "3E01CF7D-7258-42F7-9A21-7170C74B35EC"
'Next i
            
'Creamos el nodo CfdiRelacionados indicando el tipo de relacion y los documentos relacionados anteriormente.
Dim cr As New CfdiRelacionados
cr.CrearNodo "01", rel

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G02"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "84111506", 1, "ACT", "Devolución de producto", 1000, 1000, "02", "SKU321513", , 10, im
    
Next i


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiEgreso.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, ig, , , "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiEgreso.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "255",
        "Serie": "N",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "E",
        "FormaPago": "01",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        //Declaramos el nodo CfdiRelacionados con todos los comprobantes y el tipo de relación
        "CfdiRelacionados": {
          "TipoRelacion": "01",
          "CfdiRelacionado": [
            { "UUID": "3E01CF7D-7258-42F7-9A21-7170C74B35EC" }
          ]
        },
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G02"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "84111506",
            "ClaveUnidad": "ACT",
            "Descripcion": "Devolución de producto",
            "NoIdentificacion": "SKU321513",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ]
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Conceptos;
using static tagcode.BuildCFDI.Cfdi.Conceptos.Parte;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Impuestos im = new Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
        im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
        im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}


    //Creamos los nodos Información Aduanera
    InformacionAduanera ia = new InformacionAduanera();

    //Puedes agregar la cantidad de pedimentos necesarios
    //for(int i = 0; i < N; i++){
        ia.AgregarNumeroPedimento("10 47 3807 8003832");
    //}


    //Creamos el nodo Cuenta Predial con el numero correspondiente
    CuentaPredial cp = new CuentaPredial("159-560-10-000");


    //Creamos el nodo ACuentaTerceros con sus datos
    ACuentaTerceros ct = new ACuentaTerceros("JUFA7608212V6", "ALEJANDRA JUAREZ FORLAN", "601", "01010");


    //Creamos el nodo Parte
    Parte p = new Parte();

    //Puedes agregar la cantidad de pedimentos necesarios
    //for(int i = 0; i < N; i++){

        //Agregamos información aduanera correspondiente al concepto del Kit
        InformacionAduaneraParte iap = new InformacionAduaneraParte();

        //Puedes agregar la cantidad de pedimentos necesarios al concepto del Kit
        //for(int i = 0; i < N; i++){
        iap.AgregarNumeroPedimento("10 47 3807 8003832");
    //}

    //Agregamos el concepto del Kit
    p.AgregarParte("51241200", 1, "Descripción del Kit", "KIT0001", "Pieza", 100, 100, iap);
//}



//Agregamos el nodo concepto
con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im, ia, cp, null, ct, p);
}


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiTimbrado.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, null, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    
    'Creamos los nodos Información Aduanera
    Dim ia As New InformacionAduanera
    'Puedes agregar la cantidad de pedimentos necesarios
    'For i = 0 To N
        ia.AgregarNumeroPedimento "10 47 3807 8003832"
    'Next i


    'Creamos el nodo Cuenta Predial con el numero correspondiente
    Dim cp As New CuentaPredial
    cp.CrearNodo "159-560-10-000"


    'Creamos el nodo ACuentaTerceros con sus datos
    Dim ct As New ACuentaTerceros
    ct.CrearNodo "JUFA7608212V6", "ALEJANDRA JUAREZ FORLAN", "601", "01010"


    'Creamos el nodo Parte
    Dim p As New Parte

    'Puedes agregar la cantidad de pedimentos necesarios
    'For i = 0 To N

        'Agregamos información aduanera correspondiente al concepto del Kit
        Dim iap As New InformacionAduaneraParte

        'Puedes agregar la cantidad de pedimentos necesarios al concepto del Kit
        'For i = 0 To N
            iap.AgregarInformacionAduanera "10 47 3807 8003832"
        'Next i

        'Agregamos el concepto del Kit
        p.AgregarParte "51241200", 1, "Descripción del Kit", "KIT0001", "Pieza", 100, 100, iap
     'Next i


     'Agregamos el nodo concepto
     con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im, ia, cp, , ct, p
    
Next i


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiTimbrado.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , , "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiTimbrado.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura 1",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            },
            //Creación de información aduanera
            "InformacionAduanera": [
              {
                "NumeroPedimento": "10 47 3807 8003832"
              }
            ],
            //Creación de cuenta predial
            "CuentaPredial": {
              "Numero": "159-560-10-000"
            },
            "ACuentaTerceros": {
              "RfcACuentaTerceros": "JUFA7608212V6",
              "NombreACuentaTerceros": "ALEJANDRA JUAREZ FORLAN",
              "RegimenFiscalACuentaTerceros": "601",
              "DomicilioFiscalACuentaTerceros": "01010"
            },
            //Creación de nodo parte
            "Parte": [
              {
                "ClaveProdServ": "51241200",
                "Cantidad": 1,
                "Descripcion": "Descripción del Kit",
                "Unidad": "Pieza",
                "ValorUnitario": "100",
                "Importe": "100",
                "InformacionAduanera": [
                  {
                    "NumeroPedimento": "10 47 3807 8003835"
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Conceptos;
using static tagcode.BuildCFDI.Cfdi.Conceptos.ComplementoConcepto;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Impuestos im = new Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}


    //Creamos el nodo ComplementoConcepto
    ComplementoConcepto comcon = new ComplementoConcepto();

    //Creamos el nodo Institución educativa
    InstitucionEducativa iedu = new InstitucionEducativa("MARIANA ROQUE DIAZ", "XEXX010101HNEXXXA4", opnivelEducativo.Primaria, "118141", "ROQB401225R10");

    //Agregamos el nodo Institución educativa al nodo ComplementoConcepto
    comcon.AgregarComplementoConcepto(iedu);


    //Agregamos el nodo concepto
    con.AgregarConcepto("86121500", 1, "E48", "Colegiatura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im, null, null, comcon);
}


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiIEDU.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, null, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
        
    'Creamos el nodo ComplementoConcepto
    Dim comcon As New ComplementoConcepto

    'Creamos el nodo Institución educativa
    Dim iedu As New InstitucionEducativa
    iedu.CrearNodo "MARIANA ROQUE DIAZ", "XEXX010101HNEXXXA4", opnivelEducativo.Primaria, "118141", "ROQB401225R10"

    'Agregamos el nodo Institución educativa al nodo ComplementoConcepto
    comcon.AgregarComplementoConceptoInstitucionEducativa iedu


    'Agregamos el nodo concepto
    con.AgregarConcepto "86121500", 1, "E48", "Colegiatura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im, , , comcon
    
Next i


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiIEDU.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , , "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiIEDU.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "86121500",
            "ClaveUnidad": "E48",
            "Descripcion": "Colegiatura",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            },
            //Creación de ComplementoConcepto
            "ComplementoConcepto": {
              //Creación de Institución educativa
              "instEducativas": {
                "nombreAlumno": "MARIANA ROQUE DIAZ",
                "CURP": "XEXX010101HNEXXXA4",
                "nivelEducativo": "Primaria",
                "autRVOE": "118141",
                "rfcPago": "ROQB401225R10"
              }
            }
          }
        ]
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Complemento;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Creamos el nodo Complemento
Complemento com = new Complemento();

//Creamos el nodo Divisas
Complemento.Divisas divisas = new Complemento.Divisas(optipoOperacion.venta);

//Agregamos el nodo Divisas al Complemento
com.AgregarComplemento(divisas);



//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiDivisas.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, com, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Creamos el nodo Complemento
Dim com As New Complemento

'Creamos el nodo Divisas
Dim divisas As New divisas
divisas.CrearNodo optipoOperacion.venta

'Agregamos el nodo Divisas al Complemento
com.AgregarComplementoDivisas divisas


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiDivisas.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , com, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiDivisas.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ],
        //Creamos el nodo Complemento
        "Complemento": {
          //Creación del nodo Divisas
          "Divisas": {
            "tipoOperacion": "venta"
          }
        }
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Complemento;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Creamos el nodo Complemento
Complemento com = new Complemento();

//Creamos el nodo Donatarias
Donatarias donatarias = new Donatarias("325-SAT-28-I-(21)-4109", DateTime.Now, "Este comprobante ampara un donativo, el cual será destinado por la donataria a los fines propios de su objeto social. En el caso de que los bienes donados hayan sido deducidos previamente para los efectos de impuestos sobre la renta, este donativo no es deducible. La reproducción no autorizada de este comprobante constituye un delito en los términos de las disposiciones fiscales Efectos Fiscales al Pago");

//Agregamos el nodo Donatarias al Complemento
com.AgregarComplemento(donatarias);



//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiDonatarias.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, com, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Creamos el nodo Complemento
Dim com As New Complemento

'Creamos el nodo Donatarias
Dim donatarias As New donatarias
donatarias.CrearNodo "325-SAT-28-I-(21)-4109", Now, "Este comprobante ampara un donativo, el cual será destinado por la donataria a los fines propios de su objeto social. En el caso de que los bienes donados hayan sido deducidos previamente para los efectos de impuestos sobre la renta, este donativo no es deducible. La reproducción no autorizada de este comprobante constituye un delito en los términos de las disposiciones fiscales Efectos Fiscales al Pago"

'Agregamos el nodo Donatarias al Complemento
com.AgregarComplementoDonatarias donatarias


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiDonatarias.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , com, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiDonatarias.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ],
        //Creamos el nodo Complemento
        "Complemento": {
          //Creación del nodo Donatarias
          "Donatarias": {
            "noAutorizacion": "325-SAT-28-I-(21)-4109",
            "fechaAutorizacion": "2050-12-25",
            "leyenda": "Este comprobante ampara un donativo, el cual será destinado por la donataria a los fines propios de su objeto social. En el caso de que los bienes donados hayan sido deducidos previamente para los efectos de impuestos sobre la renta, este donativo no es deducible. La reproducción no autorizada de este comprobante constituye un delito en los términos de las disposiciones fiscales Efectos Fiscales al Pago"
          }
        }
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Complemento;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Creamos el nodo Complemento
Complemento com = new Complemento();

//Creamos el nodo ImpuestosLocales
ImpuestosLocales implocales = new ImpuestosLocales();

//Puedes agregar la cantidad de trasladados necesarios
//for(int i = 0; i < N; i++){
implocales.AgregarImpuestoLocalTrasladado("ISH Hospedaje", 4, 48);
//

//Puedes agregar la cantidad de retenciones necesarias
//for(int i = 0; i < N; i++){
implocales.AgregarImpuestoLocalRetenido("Cedular", 2.5, 125);
//

//Agregamos el nodo Impuesto Local al Complemento
com.AgregarComplemento(implocales);



//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiImpLocales.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, com, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Creamos el nodo Complemento
Dim com As New Complemento

'Creamos el nodo ImpuestosLocales
Dim implocales As New ImpuestosLocales

'Puedes agregar la cantidad de trasladados necesarios
'For i = 0 To N
    implocales.AgregarImpuestoLocalTrasladado "ISH Hospedaje", 4, 48
'Next i

'Puedes agregar la cantidad de retenciones necesarias
'For i = 0 To N
    implocales.AgregarImpuestoLocalRetenido "Cedular", 2.5, 125
'Next i

'Agregamos el nodo Impuesto Local al Complemento
com.AgregarComplementoImpuestosLocales implocales


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiImpLocales.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , com, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiImpLocales.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ],
        //Creamos el nodo Complemento
        "Complemento": {
          //Creación del nodo ImpuestosLocales
          "ImpuestosLocales": {
            "RetencionesLocales": [
              {
                "ImpLocRetenido": "Cedular",
                "TasadeRetencion": 2.5,
                "Importe": 125
              }
            ],
            "TrasladosLocales": [
              {
                "ImpLocTrasladado": "ISH Hospedaje",
                "TasadeTraslado": "4",
                "Importe": 48
              }
            ]
          }
        }
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Complemento;
using static tagcode.BuildCFDI.Cfdi.Complemento.INE;
using static tagcode.BuildCFDI.Cfdi.Complemento.INE.EntidadINE;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Creamos el nodo Complemento
Complemento com = new Complemento();

//Creamos el nodo Contabilidad del nodo Entidad del complemento INE
ContabilidadEntidadINE contabilidad = new ContabilidadEntidadINE();

//Puedes agregar la cantidad de registros contabilidad necesarios
//for(int i = 0; i < N; i++){
contabilidad.AgregarContabilidad(4512);
//}

//Creamos el nodo Entidad del complemento INE
EntidadINE entidad = new EntidadINE();

//Puedes agregar la cantidad de registros Entidad necesarios
//for(int i = 0; i < N; i++){
entidad.AgregarEntidad("MEX", opAmbitoINE.Federal, contabilidad);
//}

//Creamos el nodo INE
INE ine = new INE(opTipoProcesoINE.Campaña, opTipoComiteINE.Ejecutivo_Nacional, 8723, entidad);

//Agregamos el nodo INE al Complemento
com.AgregarComplemento(ine);



//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiINE.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, com, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Creamos el nodo Complemento
Dim com As New Complemento

'Creamos el nodo Contabilidad del nodo Entidad del complemento INE
Dim contabilidad As New ContabilidadEntidadINE

'Puedes agregar la cantidad de registros contabilidad necesarios
'For i = 0 To N
    contabilidad.AgregarContabilidad 4512
'Next i

'Creamos el nodo Entidad del complemento INE
Dim entidad As New EntidadINE

'Puedes agregar la cantidad de registros Entidad necesarios
'For i = 0 To N
    entidad.AgregarEntidad "MEX", opAmbitoINE_Federal, contabilidad
'Next i

'Creamos el nodo INE
Dim ine As New ine
ine.CrearNodo opTipoProcesoINE_Campaña, opTipoComiteINE_Ejecutivo_Nacional, 8723, entidad

'Agregamos el nodo INE al Complemento
com.AgregarComplementoINE ine
            


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiINE.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , com, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiINE.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ],
        //Creamos el nodo Complemento
        "Complemento": {
          //Creación del nodo INE
          "INE": {
            "TipoProceso": "Campaña",
            "TipoComite": "Ejecutivo Nacional",
            "IdContabilidad": 8723,
            "Entidad": [
              {
                "Ambito": "Federal",
                "ClaveEntidad": "MEX",
                "Contabilidad": {
                  "IdContabilidad": [
                    4512,
                    4513
                  ]
                }
              }
            ]
          }
        }
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Complemento;
using static tagcode.BuildCFDI.Cfdi.Complemento.CartaPorte;
using static tagcode.BuildCFDI.Cfdi.Complemento.CartaPorte.UbicacionesCartaPorte;
using static tagcode.BuildCFDI.Cfdi.Complemento.CartaPorte.MercanciasCartaPorte;
using static tagcode.BuildCFDI.Cfdi.Complemento.CartaPorte.MercanciasCartaPorte.MercanciaMercanciasCartaPorte;
using static tagcode.BuildCFDI.Cfdi.Complemento.CartaPorte.MercanciasCartaPorte.AutotransporteMercanciasCartaPorte;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Creamos el nodo Complemento
Complemento com = new Complemento();

//Ubicaciones

//Creamos nodo Ubicaciones
UbicacionesCartaPorte ubicaciones = new UbicacionesCartaPorte();

//Establecemos el nodo Domicilio de la Ubicacion Origen
DomicilioUbicacionesCartaPorte domorigen = new DomicilioUbicacionesCartaPorte("DUR", "MEX", "34000", "Av. 20 de Noviembre", "4000", "", "0001", "01", "", "005");
//Agregamos la ubicación
ubicaciones.AgregarUbicacion(opTipoUbicacionCartaPorte.Origen, "BBB010101BBB", DateTime.Now, domorigen, 0, "OR000001", "EMPRESA PROPIETARIA SA DE CV");

//Establecemos el nodo Domicilio de la Ubicacion Destino
DomicilioUbicacionesCartaPorte domdestino = new DomicilioUbicacionesCartaPorte("NLE", "MEX", "64720", "Domicilio conocido", "S/N", "", "0376", "07", "", "039");
ubicaciones.AgregarUbicacion(opTipoUbicacionCartaPorte.Destino, "ROQB401225R10", DateTime.Now, domdestino, 595, "DE000001", "BERNARDO ROQUE QUIÑONES");


//Mercancias

//Puedes agregar la cantidad de nodo mercancia que necesites
//for(int i = 0; i < N; i++){
MercanciaMercanciasCartaPorte mercancia = new MercanciaMercanciasCartaPorte();
CantidadTransportaMercanciaCartaPorte cantidad = new CantidadTransportaMercanciaCartaPorte();

//Puedes agregar la cantidad de nodos CantidadTransporta necesarios
//for(int i = 0; i < N; i++){
cantidad.AgregarCantidadTransporta(1, "OR000001", "DE000001");
//}

//Agregamos la mercancía con los datos de CantidadTransporta
mercancia.AgregarMercancia("11121900", "Perfume varios", 1, "XBX", 100, opMaterialPeligrosoCartaPorte.Sí, "", "CAJA", "", "1266", "4H2", "Descripcion embalaje", 12300, "MXN", "", "", null, null, cantidad);
//}


//Ingresamos los datos del nodo IdentificacionVehicular
IdentificacionVehicularAutotransporteMercanciaCartaPorte identificacion = new IdentificacionVehicularAutotransporteMercanciaCartaPorte("VL", "501BD", 2018);

//Ingresamos los datos del seguro
SegurosAutotransporteMercanciaCartaPorte seguros = new SegurosAutotransporteMercanciaCartaPorte("PFG Seguros S.A. de C.V.", "154647", "PFG Seguros S.A. de C.V.", "65323131");

//Ingresamos los datos del remolque
RemolquesAutotransporteMercanciaCartaPorte remolques = new RemolquesAutotransporteMercanciaCartaPorte();

//Puedes agregar la cantidad de remolques que necesites
//for(int i = 0; i < N; i++){
remolques.AgregarRemolque("CTR021", "XVG3421");
//}

//Agregamos el nodo Autotransporte
AutotransporteMercanciasCartaPorte autotransporte = new AutotransporteMercanciasCartaPorte("TPAF01", "Permiso no contemplado en el catálogo", identificacion, seguros, remolques);

//Creamos nodo Mercancias
MercanciasCartaPorte mercancias = new MercanciasCartaPorte(100, "XBX", 1, mercancia, autotransporte);


//FigurasTransporte

//Creamos nodo Figuras
FiguraTransporteCartaPorte figura = new FiguraTransporteCartaPorte();

//Puedes agregar la cantidad de nodo FiguraTransporte que necesites
//for(int i = 0; i < N; i++){
figura.AgregarTiposFigura("01", "GUMA840209KJ2", "1023442", "Alberto Guzman Manriquez");
//}

//Creamos nodo Carta Porte
CartaPorte cartaporte = new CartaPorte(opTransInternacCartaPorte.No, ubicaciones, mercancias, figura, 595);


//Agregamos el nodo Carta Porte al Complemento
com.AgregarComplemento(cartaporte);



//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiCartaPorte.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, com, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Creamos el nodo Complemento
Dim com As New Complemento

'Creamos nodo Carta Porte
Dim cartaporte As New cartaporte

'Ubicaciones

'Creamos nodo Ubicaciones
Dim ubicaciones As New UbicacionesCartaPorte

'Establecemos el nodo Domicilio de la Ubicacion Origen
Dim domorigen As New DomicilioUbicacionesCartaPorte
domorigen.CrearNodo "DUR", "MEX", "34000", "Av. 20 de Noviembre", "4000", , "0001", "01", , "005"
'Agregamos la ubicación
ubicaciones.AgregarUbicacion opTipoUbicacionCartaPorte_Origen, "BBB010101BBB", Now, domorigen, 0, "OR000001", "EMPRESA PROPIETARIA SA DE CV"

'Establecemos el nodo Domicilio de la Ubicacion Destino
Dim domdestino As New DomicilioUbicacionesCartaPorte
domdestino.CrearNodo "NLE", "MEX", "64720", "Domicilio conocido", "S/N", , "0376", "07", "", "039"
ubicaciones.AgregarUbicacion opTipoUbicacionCartaPorte_Destino, "ROQB401225R10", Now, domdestino, 595, "DE000001", "BERNARDO ROQUE QUIÑONES"


'Mercancias

'Creamos nodo Mercancias
Dim mercancias As New MercanciasCartaPorte

'Puedes agregar la cantidad de nodo mercancia que necesites
'For i = 0 To N
    
    Dim mercancia As New MercanciaMercanciasCartaPorte
    Dim cantidad As New CantidadTransportaMercanciaCartaPorte
    
    'Puedes agregar la cantidad de nodos CantidadTransporta necesarios
    'For i = 0 To N
        cantidad.AgregarCantidadTransporta 1, "OR000001", "DE000001"
    'Next
    
    'Agregamos la mercancía con los datos de CantidadTransporta
    mercancia.AgregarMercancia "11121900", "Perfume varios", 1, "XBX", 100, opMaterialPeligrosoCartaPorte_Sí, , "CAJA", , "1266", "4H2", "Descripcion embalaje", 12300, "MXN", , , , , cantidad
    
'Next i

'Agregamos el nodo Autotransporte
Dim autotransporte As New AutotransporteMercanciasCartaPorte

'Ingresamos los datos del nodo IdentificacionVehicular
Dim identificacion As New IdentificacionVehicularAutotransporteMercanciaCartaPorte
identificacion.CrearNodo "VL", "501BD", 2018

'Ingresamos los datos del seguro
Dim seguros As New SegurosAutotransporteMercanciaCartaPorte
seguros.CrearNodo "PFG Seguros S.A. de C.V.", "154647", "PFG Seguros S.A. de C.V.", "65323131"

'Ingresamos los datos del remolque
Dim remolques As New RemolquesAutotransporteMercanciaCartaPorte

'Puedes agregar la cantidad de remolques que necesites
'For i = 0 to N
    remolques.AgregarRemolque "CTR021", "XVG3421"
'Next i


'Agregamos la informacion de IdentificacionVehicular, Seguro y Remolques al nodo Autotransporte
autotransporte.CrearNodo "TPAF01", "Permiso no contemplado en el catálogo", identificacion, seguros, remolques


'Agregamos toda la información al mercancias
mercancias.CrearNodo 100, "XBX", 1, mercancia, autotransporte


'Figuras

'Creamos nodo Figuras
Dim figura As New FiguraTransporteCartaPorte

'Puedes agregar la cantidad de nodo FiguraTransporte que necesites
'For i = 0 To N
    figura.AgregarTiposFigura "01", "GUMA840209KJ2", "1023442", "Alberto Guzman Manriquez"
'Next i
            
cartaporte.CrearNodo opTransInternacCartaPorte_No, ubicaciones, mercancias, figura, 595


'Agregamos el nodo Carta porte al nodo complemento
com.AgregarComplementoCartaPorte cartaporte

           


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiCartaPorte.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , com, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC

                                        

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Cfdi;
using static tagcode.BuildCFDI.Cfdi.Complemento;
using static tagcode.BuildCFDI.Cfdi.Complemento.ComercioExterior;
using static tagcode.BuildCFDI.Cfdi.Complemento.ComercioExterior.EmisorComercioExterior;
using static tagcode.BuildCFDI.Cfdi.Complemento.ComercioExterior.ReceptorComercioExterior;
using static tagcode.BuildCFDI.Cfdi.Complemento.ComercioExterior.DestinatarioComercioExterior;
using static tagcode.BuildCFDI.Cfdi.Complemento.ComercioExterior.MercanciasComercioExterior;


//Creamos el nodo Comprobante
Comprobante c = new Comprobante(DateTime.Now, 1500, 2000, "MXN", opTipoDeComprobante.Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago.PUE, 20, 1);

//Creamos el nodo Emisor
Emisor em = new Emisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
Receptor r = new Receptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03");

//Creamos el nodo Conceptos
Conceptos con = new Conceptos();

//Puedes agregar la cantidad de conceptos que necesites
for (int i = 0; i < 3; i++)
{

    //Creamos el nodo impuestos del concepto
    Conceptos.Impuestos im = new Conceptos.Impuestos();

    //Puedes agregar la cantidad de traslados necesarios.
    //for(int i = 0; i < N; i++){
    im.AgregarTraslado(opImpuestosTraslado.IVA, 1000, opImpuestosTipoFactor.Tasa, 0.16, 160);
    //}

    //Puedes agregar la cantidad de retenciones necesarias
    //for(int i = 0; i < N; i++){
    im.AgregarRetencion(opImpuestosRetencion.ISR, 1000, opImpuestosTipoFactor.Tasa, 0.04, 40);
    //}

    //Agregamos el nodo concepto
    con.AgregarConcepto("01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im);
}


//Creamos el nodo Complemento
Complemento com = new Complemento();


//Creación de nodo domicilio del emisor
DomicilioEmisorComercioExterior dom_emisor = new DomicilioEmisorComercioExterior("Av. 20 de Noviembre", "QUE", "MEX", "76199", "2501", "INT B", "0214", "01", "Primer departamento subiendo escaleras", "014");
//Creación de nodo emisor
EmisorComercioExterior cce_emisor = new EmisorComercioExterior("XEXX010101HNEXXXA4", dom_emisor);


//Creación de nodo domicilio de receptor
DomicilioReceptorComercioExterior dom_receptor = new DomicilioReceptorComercioExterior("ST. 5", "TX", "USA", "00000");
//Creación de nodo receptor
ReceptorComercioExterior cce_receptor = new ReceptorComercioExterior("123456789", dom_receptor);


//Creación de nodo destinatario
DestinatarioComercioExterior cce_destinatario = new DestinatarioComercioExterior();

//Puedes agregar la cantidad de destinatarios que necesites
//for(int i = 0; i < N; i++){
DomicilioDestinatarioComercioExterior dom_destinatario = new DomicilioDestinatarioComercioExterior();

//Puedes agregar la cantidad de domicilios destinatarios que necesites
//for(int i = 0; i < N; i++){
    dom_destinatario.AgregarDomicilio("ST. 20", "TX", "USA", "00000");
//}

cce_destinatario.AgregarDestinatario(dom_destinatario, "123456789", "JOSEPH RICE");
//}


//Creacion del nodo propietarios
PropietarioComercioExterior cce_propietarios = new PropietarioComercioExterior();
//Puedes agregar la cantidad de domicilios destinatarios que necesites
//for(int i = 0; i < N; i++){
    cce_propietarios.AgregarPropietario("123456789", "USA");
//}


//Creación del nodo Mercancías
MercanciasComercioExterior cce_mercancias = new MercanciasComercioExterior();
//Puedes agregar la cantidad de mercancías necesarias
//for(int i = 0; i < N; i++){

    DescripcionesEspecificasComercioExterior cce_descripciones = new DescripcionesEspecificasComercioExterior();
    //Puedes agregar la cantidad de descripciones específicas para la mercancía
    //for(int i = 0; i < N; i++){
        cce_descripciones.AgregarDescripcionEspecifica("Marca propia", "303056", "1458", "NX856465T78293");
    //}
    cce_mercancias.AgregarMercancia("01010101", 30, "2402200100", 145.36, "01", 355.40, cce_descripciones);
//}

//Creación del nodo Comercio Exterior
ComercioExterior cce = new ComercioExterior("2", "02", "A1", 1, "12345678901234567890", "1234567890", "FOB", 1, "Observaciones de comercio exterior", 20.4632, 6000, cce_emisor, cce_propietarios, cce_receptor, cce_destinatario, cce_mercancias);

//Agregamos el nodo Carta Porte al Complemento
com.AgregarComplemento(cce);



//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Cfdi cfdi = new Cfdi();
ResultadosTimbre res = cfdi.TimbrarCFDI("C:\\XML\\CfdiComercioExterior.xml", opTipoTimbre.TimbrePrueba, c, em, r, con, null, null, com, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante
Dim c As New Comprobante
c.CrearNodo Now, 1500, 2000, "MXN", opTipoDeComprobante_Ingreso, "01010", "01", "03", "534792", "A", "Pago de contado", opMetodoPago_PUE, 20, 1

'Creamos el nodo Emisor
Dim em As New Emisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New Receptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "G03"

'Creamos el nodo Conceptos
Dim con As New Conceptos

'Puedes agregar la cantidad de conceptos que necesites
For i = 0 To 3

    'Creamos el nodo impuestos del concepto
    Dim im As New Impuestos

    'Puedes agregar la cantidad de traslados necesarios.
    'For i = 0 To N
        im.AgregarTraslado opImpuestosTraslado_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.16, 160
    'Next i

    'Puedes agregar la cantidad de retenciones necesarias
    'For i = 0 To N
        im.AgregarRetencion opImpuestosRetencion_IVA, 1000, opImpuestosTipoFactor_Tasa, 0.04, 40
    'Next i
        
    'Agregamos el nodo concepto
    con.AgregarConcepto "01010101", 1, "E48", "Prueba de factura", 1000, 1000, "02", "SKU321513", "Servicio", 20, im
    
Next i


'Creamos el nodo Complemento
Dim com As New Complemento

'Creación de nodo domicilio del emisor
Dim dom_emisor As New DomicilioEmisorComercioExterior
dom_emisor.CrearNodo "Av. 20 de Noviembre", "QUE", "MEX", "76199", "2501", "INT B", "0214", "01", "Primer departamento subiendo escaleras", "014"
            
'Creación de nodo emisor
Dim cce_emisor As New EmisorComercioExterior
cce_emisor.CrearNodo "XEXX010101HNEXXXA4", dom_emisor

'Creación de nodo domicilio de receptor
Dim dom_receptor As New DomicilioReceptorComercioExterior
dom_receptor.CrearNodo "ST. 5", "TX", "USA", "00000"

'Creación de nodo receptor
Dim cce_receptor As New ReceptorComercioExterior
cce_receptor.CrearNodo "123456789", dom_receptor


'Creación de nodo destinatario
Dim cce_destinatario As New DestinatarioComercioExterior

'Puedes agregar la cantidad de destinatarios que necesites
'For i = 0 To N
    Dim dom_destinatario As New DomicilioDestinatarioComercioExterior

    'Puedes agregar la cantidad de domicilios destinatarios que necesites
    'For i = 0 To N
        dom_destinatario.AgregarDomicilio "ST. 20", "TX", "USA", "00000"
    'Next i

    cce_destinatario.AgregarDestinatario dom_destinatario, "123456789", "JOSEPH RICE"
'Next i


'Creacion del nodo propietarios
Dim cce_propietarios As New PropietarioComercioExterior
'Puedes agregar la cantidad de domicilios destinatarios que necesites
'For i = 0 To N
    cce_propietarios.AgregarPropietario "123456789", "USA"
'Next i


'Creación del nodo Mercancías
Dim cce_mercancias As New MercanciasComercioExterior
'Puedes agregar la cantidad de mercancías necesarias
'For i = 0 To N

    Dim cce_descripciones As New DescripcionesEspecificasComercioExterior
    'Puedes agregar la cantidad de descripciones específicas para la mercancía
    'For i = 0 To N
        cce_descripciones.AgregarDescripcionEspecifica "Marca propia", "303056", "1458", "NX856465T78293"
    'Next i
            
     cce_mercancias.AgregarMercancia "01010101", 30, "2402200100", 145.36, "01", 355.4, cce_descripciones
'Next i

'Creación del nodo Comercio Exterior
Dim cce As New ComercioExterior
cce.CrearNodo "2", "02", "A1", 1, "12345678901234567890", "1234567890", "FOB", 1, "Observaciones de comercio exterior", 20.4632, 6000, cce_emisor, cce_propietarios, cce_receptor, cce_destinatario, cce_mercancias
            

'Agregamos el nodo Carta porte al nodo complemento
com.AgregarComplementoComercioExterior cce
           


'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera el CFDI y timbra.
Dim cfdi As New cfdi
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarCFDI("C:\XML\CfdiComercioExterior.xml", opTipoTimbre_TimbrePrueba, c, em, r, con, , , com, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cfdi": {
      "TimbrarXML": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiComercioExterior.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-02-22T13:00:00",
        "Folio": "2574",
        "Serie": "C",
        "LugarExpedicion": "01010",
        "Moneda": "MXN",
        "TipoDeComprobante": "I",
        "FormaPago": "01",
        "CondicionesDePago": "Pago de contado",
        "SubTotal": 1000,
        "Total": 1100,
        "Descuento": 20,
        "MetodoPago": "PUE",
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "UsoCFDI": "G03"
        },
        "Conceptos": [
          {
            "ClaveProdServ": "01010101",
            "ClaveUnidad": "E48",
            "Descripcion": "Prueba de factura",
            "NoIdentificacion": "SKU321513",
            "Unidad": "Servicio",
            "Cantidad": 1,
            "ValorUnitario": 500,
            "Importe": 500,
            "Descuento": 10,
            "ObjetoImp": "02",
            "Impuestos": {
              "Retenciones": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.04,
                  "Importe": 20
                }
              ],
              "Traslados": [
                {
                  "Base": 500,
                  "Impuesto": "002",
                  "TipoFactor": "Tasa",
                  "TasaOCuota": 0.16,
                  "Importe": 80
                }
              ]
            }
          }
        ],
        //Creamos el nodo Complemento
        "Complemento": {
          //Creación del nodo ComercioExterior
          "ComercioExterior": {
            //Creación del nodo Emisor del ComercioExterior
            "Emisor": {
              "Curp": "XEXX010101HNEXXXA4",
              "Domicilio": {
                "Calle": "Av. 20 de Noviembre",
                "NumeroExterior": "2501",
                "NumeroInterior": "INT B",
                "Colonia": "0214",
                "CodigoPostal": "76199",
                "Referencia": "Primer departamento subiendo escaleras",
                "Localidad": "01",
                "Municipio": "014",
                "Estado": "QUE",
                "Pais": "MEX"
              }
            },
            //Creación del nodo Receptor del ComercioExterior
            "Receptor": {
              "NumRegIdTrib": "123456789",
              "Domicilio": {
                "Calle": "ST. 5",
                "CodigoPostal": "00000",
                "Estado": "TX",
                "Pais": "USA"
              }
            },
            //Creación del nodo Propietario del ComercioExterior
            "Propietario": [
              {
                "NumRegIdTrib": "123456789",
                "ResidenciaFiscal": "USA"
              }
            ],
            //Creación del nodo Destinatario del ComercioExterior
            "Destinatario": [
              {
                "NumRegIdTrib": "123456789",
                "Nombre": "JOSEPH RICE",
                "Domicilio": [
                  {
                    "Calle": "ST. 20",
                    "CodigoPostal": "00000",
                    "Estado": "TX",
                    "Pais": "USA"
                  }
                ]
              }
            ],
            //Creación del nodo Mercancias del ComercioExterior
            "Mercancias": {
              "Mercancia": [
                {
                  "NoIdentificacion": "01010101",
                  "FraccionArancelaria": "2402200100",
                  "CantidadAduana": 145.36,
                  "UnidadAduana": "01",
                  "ValorUnitarioAduana": 355.40,
                  "ValorDolares": 30,
                  "DescripcionesEspecificas": [
                    {
                      "Marca": "Marca propia",
                      "Modelo": "303056",
                      "SubModelo": "1458",
                      "NumeroSerie": "NX856465T78293"
                    }
                  ]
                }
              ]
            }
          }
        }
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Pagos;
using static tagcode.BuildCFDI.Pagos.PagosComplemento;
using static tagcode.BuildCFDI.Pagos.PagosComplemento.DoctoRelacionadoPagosComplemento;


//Creamos el nodo Comprobante
PagosComprobante c = new PagosComprobante(DateTime.Now, "01010", "4792", "N");

//Creamos el nodo CfdiRelacionados
PagosCfdiRelacionados cr = new PagosCfdiRelacionados();
//Puedes agregar la cantidad de relaciones que necesites
//for(int i = 0; i < N; i++){
    cr.AgregarUUID("5FB2822E-396D-4725-8521-CDC4BDD20CCF");
//}

//Creamos el nodo Emisor
PagosEmisor em = new PagosEmisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");

//Creamos el nodo Receptor
PagosReceptor r = new PagosReceptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626", "USA", "87987478972");


//Pagos 2.0

//Creamos nodo Carta Porte
DoctoRelacionadoPagosComplemento docto = new DoctoRelacionadoPagosComplemento();

//Puedes agregar la cantidad de nodos DoctoRelacionado necesarios
//for(int i = 0; i < N; i++){

    //Creamos el nodo ImpuestosDR
    ImpuestosDRPagosComplemento impdr = new ImpuestosDRPagosComplemento();

    //Puedes agregar la cantidad de nodos de impuestos necesarios
    //for(int i = 0; i < N; i++){
        impdr.AgregarTraslado(opImpuestosTraslado.IVA, 1400, opImpuestosTipoFactor.Tasa, 0.16, 193.11);
    //}

    //Para agregar impuestos retenidos en el nodo docto relacionados se usa esta funcion
    //for(int i = 0; i < N; i++){
        impdr.AgregarRetencion(opImpuestosRetencion.ISR, 1400, opImpuestosTipoFactor.Tasa, 0.1, 140);
    //}

    docto.AgregarDoctoRelacionado("750dd2b8-cb5b-11ec-9d64-0242ac120002", "MXN", 2, 1400, 1400, 0, "01", "F", "23452", 1, impdr);

//}


//Declaramos la variable que genera el nodo Pago del complemento
PagosComplemento com = new PagosComplemento();

//Puedes agregar la cantidad de nodos de impuestos necesarios
//for(int i = 0; i < N; i++){
    com.AgregarPago(DateTime.Now, "01", "MXN", 1400, docto, 1, "987492783");
//}


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Pagos cfdi = new Pagos();
ResultadosTimbre res = cfdi.TimbrarPagos("C:\\XML\\CfdiPago.xml", opTipoTimbre.TimbrePrueba, c, em, r, com, cr, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante del complemento Pagos 2.0
Dim c As New PagosComprobante
c.CrearNodo Now, "010101", "328", "P"

'Creamos el nodo CfdiRelacionados
Dim cr As New PagosCfdiRelacionados
'Puedes agregar la cantidad de nodos DoctoRelacionado necesarios
'For i = 0 To N
    cr.AgregarUUID "5FB2822E-396D-4725-8521-CDC4BDD20CCF"
'Next

'Creamos el nodo Emisor
Dim em As New PagosEmisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo Receptor
Dim r As New PagosReceptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626"


'Pagos 2.0

'Creamos nodo Carta Porte
Dim docto As New DoctoRelacionadoPagosComplemento

'Puedes agregar la cantidad de nodos DoctoRelacionado necesarios
'For i = 0 To N
    
    Dim impdr As ImpuestosDRPagosComplemento
    Set impdr = New ImpuestosDRPagosComplemento
    
    'Puedes agregar la cantidad de nodos de impuestos necesarios
    'For i = 0 To N
        impdr.AgregarTraslado opImpuestosTraslado_IVA, 1400, opImpuestosTipoFactor_Tasa, 0.16, 193.11
    'Next i
    
    'Para agregar impuestos retenidos en el nodo docto relacionados se usa esta funcion
    'For i = 0 To N
        impdr.AgregarRetencion opImpuestosRetencion_ISR, 1400, opImpuestosTipoFactor_Tasa, 0.1, 140
    'Next i
        
    docto.AgregarDoctoRelacionado "750dd2b8-cb5b-11ec-9d64-0242ac120002", "MXN", 2, 1400, 1400, 0, "01", "F", "23452", 1, impdr
                
'Next i
    
'Declaramos la variable que genera el nodo Pago del complemento
Dim com As New PagosComplemento

'Puedes agregar la cantidad de nodos de impuestos necesarios
'For i = 0 To N
    com.AgregarPago Now, "01", "MXN", 1400, docto, 1, "987492783"
'Next

    

'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera la Nómina y timbra.
Dim cfdi As New Pagos
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarPagos("C:\XML\CfdiPago.xml", opTipoTimbre_TimbrePrueba, c, em, r, com, cr, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Pagos": {
      "TimbrarPagos": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiPago.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-05-16T13:00:00",
        "Folio": "102",
        "Serie": "P",
        "LugarExpedicion": "01010",
        "CfdiRelacionados": {
          "CfdiRelacionado": [
            { "UUID": "18f9ffa8-b043-4b4b-80a9-eb5d0e7a088e" },
            { "UUID": "18f9ffa8-b043-4b4b-80a9-eb5d0e7a088f" }
          ]
        },
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601",
          "FacAtrAdquirente": "0123456789"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626",
          "ResidenciaFiscal": "USA",
          "NumRegIdTrib": "56465165636"
        },
        "Complementos": {
          //Complemento de pago 2.0
          "Pago": [
            {
              "FechaPago": "2022-05-01T00:00:00",
              "FormaDePagoP": "03",
              "MonedaP": "MXN",
              "TipoCambioP": 1,
              "Monto": 3500,
              "NumOperacion": "876387423",
              "RfcEmisorCtaOrd": "BNM840515VB1",
              "NomBancoOrdExt": "NOMBRE DE BANCO EXTRANJERO",
              "CtaOrdenante": "1234567890",
              "RfcEmisorCtaBen": "BBA830831LJ2",
              "CtaBeneficiario": "1234567890",
              "TipoCadPago": "01",
              "CadPago": "||1.0|0408216| ... ||",
              "CertPago": "MIIF8zCCA9ugAw ... cp0OD1M4hydVwyM",
              "DoctoRelacionado": [
                {
                  "IdDocumento": "18f9ffa8-b043-4b4b-80a9-eb5d0e7a088a",
                  "Serie": "A",
                  "Folio": "5569",
                  "MonedaDR": "MXN",
                  "EquivalenciaDR": 1,
                  "NumParcialidad": 1,
                  "ImpSaldoAnt": 4500,
                  "ImpPagado": 2000,
                  "ImpSaldoInsoluto": 2500,
                  "ObjetoImpDR": "02",
                  "ImpuestosDR": {
                    "RetencionesDR": [
                      {
                        "ImpuestoP": "001",
                        "BaseP": 2000,
                        "TasaOCuotaP": 0.10,
                        "TipoFactor": "Tasa",
                        "Importe": 200
                      }
                    ],
                    "TrasladosDR": [
                      {
                        "ImpuestoP": "002",
                        "BaseP": 2000,
                        "TasaOCuotaP": 0.16,
                        "TipoFactor": "Tasa",
                        "Importe": 320
                      }
                    ]
                  }
                },
                {
                  "IdDocumento": "18f9ffa8-b043-4b4b-80a9-eb5d0e7a088b",
                  "Serie": "A",
                  "Folio": "5570",
                  "MonedaDR": "MXN",
                  "EquivalenciaDR": 1,
                  "NumParcialidad": 2,
                  "ImpSaldoAnt": 1500,
                  "ImpPagado": 1500,
                  "ImpSaldoInsoluto": 0,
                  "ObjetoImpDR": "01"
                }
              ]
            }
          ]
        }
      }
    }
  }
}

using tagcode.BuildCFDI;
using static tagcode.BuildCFDI.Nomina;
using static tagcode.BuildCFDI.Nomina.NominaComplemento;
using static tagcode.BuildCFDI.Nomina.NominaComplemento.EmisorNominaComplemento;
using static tagcode.BuildCFDI.Nomina.NominaComplemento.PercepcionesNominaComplemento;
using static tagcode.BuildCFDI.Nomina.NominaComplemento.OtrosPagosNominaComplemento;


//Creamos el nodo Comprobante
NominaComprobante c = new NominaComprobante(DateTime.Now, "01010", "4792", "N");

//Creamos el nodo CfdiRelacionados
NominaCfdiRelacionados cr = new NominaCfdiRelacionados();
//Puedes agregar la cantidad de relaciones que necesites
//for(int i = 0; i < N; i++){
    cr.AgregarUUID("5FB2822E-396D-4725-8521-CDC4BDD20CCF");
//}

//Creamos el nodo Emisor
NominaEmisor em = new NominaEmisor("AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601");
//Creamos el nodo Receptor
NominaReceptor r = new NominaReceptor("ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626");


//Nomina

//Crear nodo EntidadSNCF
EntidadSNCFEmisorNominaComplemento entidad = new EntidadSNCFEmisorNominaComplemento("IP", 1500);
//Crear nodo Emisor del complemento Nómina
EmisorNominaComplemento enom = new EmisorNominaComplemento("CABL840215MDFSRS01", "B5510768108", "AAA010101AAA", entidad);

//Crear nodo Receptor del complemento Nómina
ReceptorNominaComplemento rnom = new ReceptorNominaComplemento("AABL840215MDFSRS01", "01", "02", "001", "02", "JAL", opSindicalizadoReceptorNomina.No, null, "123456789", "P365W", "01", "SISTEMAS", "GERENTE", "1", "002", "072320002084170154", 490, 490);

//Crear nodos Percepciones del complemento Nómina
PercepcionesNominaComplemento pnom = new PercepcionesNominaComplemento();

//Puedes agregar la cantidad de nodos Percepcion necesarios
//for(int i = 0; i < N; i++){

    //Crear nodo Horas Extras
    HorasExtraPercepcionNominaComplemento hextra = new HorasExtraPercepcionNominaComplemento();
    //Puedes agregar la cantidad de nodos HorasExtra necesarios
    //for(int i = 0; i < N; i++){
        hextra.AgregarHorasExtra(1, "01", 2, 200);
    //}

    //Crear nodo AcionesOTitulos
    AccionesOTitulosPercepcionNominaComplemento acciones = new AccionesOTitulosPercepcionNominaComplemento(3000, 4000);

    pnom.AgregarPercepcion("001", "00500", "Sueldos y salarios", 320.2, 129.8, hextra, acciones);
//}

//Crear nodo JubilacionPensionRetiro
JubilacionPensionRetiroPercepcionesNominaComplemento jubilacion = new JubilacionPensionRetiroPercepcionesNominaComplemento(500, 200, 150, 150, 50);
pnom.AgregarJubilacionPensionRetiro(jubilacion);

//Crear nodo SeparacionIndemnizacion
SeparacionIndemnizacionPercepcionesNominaComplemento separacion = new SeparacionIndemnizacionPercepcionesNominaComplemento(400, 3, 2000, 300, 200.5);
pnom.AgregarSeparacionIndemnizacion(separacion);



//Crear nodos Deducciones del complemento Nómina
DeduccionesNominaComplemento dnom = new DeduccionesNominaComplemento();

//Puedes agregar la cantidad de nodos Deduccion necesarios
//for(int i = 0; i < N; i++){
    dnom.AgregarDeduccion("001", "00300", "Seguro Social", 700);
//}



//Crear nodos OtrosPagos del complemento Nómina
OtrosPagosNominaComplemento onom = new OtrosPagosNominaComplemento();

//Puedes agregar la cantidad de nodos OtroPago necesarios
//for(int i = 0; i < N; i++){

    //Crear nodo SubsidioAlEmpleo
    SubsidioAlEmpleoOtroPagoNominaComplemento subsidio = new SubsidioAlEmpleoOtroPagoNominaComplemento(98.5);
    //Crear nodo CompensacionSaldosAFavor
    CompensacionSaldosAFavorOtroPagoNominaComplemento compensacion = new CompensacionSaldosAFavorOtroPagoNominaComplemento(200, 2022);

    onom.AgregarOtroPago("001", "00200", "Subsidio al empleo", 450, subsidio, compensacion);
//}


//Crear nodos Incapacidades del complemento Nómina
IncapacidadesNominaComplemento inom = new IncapacidadesNominaComplemento();

//Puedes agregar la cantidad de nodos OtroPago necesarios
//for(int i = 0; i < N; i++){
    inom.AgregarIncapacidad(7, "03", 1500);
//}


//Creamos el complemento Nomina 1.2
NominaComplemento com = new NominaComplemento(opTipoNomina.Ordinaria, DateTime.Now, DateTime.Now.AddDays(-7), DateTime.Now, 7, rnom, enom, pnom, dnom, onom, inom);


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase que genera el CFDI y timbra.
Nomina cfdi = new Nomina();
ResultadosTimbre res = cfdi.TimbrarNomina("C:\\XML\\CfdiNomina.xml", opTipoTimbre.TimbrePrueba, c, em, r, com, cr, "C:\\XML\\QR.png");

//Podemos hacer uso de la información generada con el timbre
Console.WriteLine(res.UUID);
Console.WriteLine(res.CadenaTimbrado);
Console.WriteLine(res.FechaTimbrado);
Console.WriteLine(res.NoCertificadoCFDI);
Console.WriteLine(res.NoCertificadoSAT);
Console.WriteLine(res.SelloCFDI);
Console.WriteLine(res.SelloSAT);
Console.WriteLine(res.Leyenda);
Console.WriteLine(res.PAC);
'Creamos el nodo Comprobante del complemento Nomina 1.2
Dim c As New NominaComprobante
c.CrearNodo Now, "010101", "641", "N"

'Creamos el nodo CfdiRelacionados
Dim cr As New NominaCfdiRelacionados

'Puedes agregar la cantidad de nodos Percepcion necesarios
'For i = 0 To N
    cr.AgregarUUID "5FB2822E-396D-4725-8521-CDC4BDD20CCF"
'Next

'Creamos el nodo emisor
Dim em As New NominaEmisor
em.CrearNodo "AAA010101AAA", "EMPRESA DE PRUEBA SA DE CV", "601"

'Creamos el nodo receptor
Dim r As New NominaReceptor
r.CrearNodo "ROQB401225R10", "BERNARDO ROQUE QUIÑONES", "01010", "626"


'Nomina

'Crear nodo EntidadSNCF
Dim entidad As New EntidadSNCFEmisorNominaComplemento
entidad.CrearNodo "IP", 1500

'Crear nodo Emisor del complemento Nómina
Dim enom As New EmisorNominaComplemento
enom.CrearNodo "CABL840215MDFSRS01", "B5510768108", "AAA010101AAA", entidad

'Crear nodo Receptor del complemento Nómina
Dim rnom As New ReceptorNominaComplemento
rnom.CrearNodo "AABL840215MDFSRS01", "01", "02", "001", "02", "JAL", opSindicalizadoReceptorNomina_No, #1/1/2001#, "123456789", "P365W", "01", "SISTEMAS", "GERENTE", "1", "002", "072320002084170154", 490, 490

'Crear nodos Percepciones del complemento Nómina
Dim pnom As New PercepcionesNominaComplemento

'Puedes agregar la cantidad de nodos Percepcion necesarios
'For i = 0 To N
        
    'Crear nodo Horas Extras
    Dim hextra As New HorasExtraPercepcionNominaComplemento
    'Puedes agregar la cantidad de nodos HorasExtra necesarios
       'For i = 0 To N
            hextra.AgregarHorasExtra 1, "01", 2, 200
       'Next
       
    'Crear nodo AcionesOTitulos
    Dim acciones As New AccionesOTitulosPercepcionNominaComplemento
    acciones.CrearNodo 3000, 4000
    
    pnom.AgregarPercepcion "001", "00500", "Sueldos y salarios", 320.2, 129.8, hextra, acciones
    
'Next

'Crear nodo JubilacionPensionRetiro
Dim jubilacion As New JubilacionPensionRetiroPercepcionesNominaComplemento
jubilacion.CrearNodo 500, 200, 150, 150, 50
pnom.AgregarJubilacionPensionRetiro jubilacion
    
'Crear nodo SeparacionIndemnizacion
Dim separacion As New SeparacionIndemnizacionPercepcionesNominaComplemento
separacion.CrearNodo 400, 3, 2000, 300, 200.5
pnom.AgregarSeparacionIndemnizacion separacion
    


'Crear nodos Deducciones del complemento Nómina
Dim dnom As New DeduccionesNominaComplemento

'Puedes agregar la cantidad de nodos Deduccion necesarios
'For i = 0 To N
    dnom.AgregarDeduccion "001", "00300", "Seguro Social", 700
'Next


'Crear nodos OtrosPagos del complemento Nómina
Dim onom As New OtrosPagosNominaComplemento

'Puedes agregar la cantidad de nodos OtroPago necesarios
'For i = 0 To N

    'Crear nodo SubsidioAlEmpleo
    Dim subsidio As New SubsidioAlEmpleoOtroPagoNominaComplemento
    subsidio.CrearNodo 98.5
    
    'Crear nodo CompensacionSaldosAFavor
    Dim compensacion As New CompensacionSaldosAFavorOtroPagoNominaComplemento
    compensacion.CrearNodo 200, 2022
    
    onom.AgregarOtroPago "001", "00200", "Subsidio al empleo", 450, subsidio, compensacion
'Next


'Crear nodos Incapacidades del complemento Nómina
Dim inom As New IncapacidadesNominaComplemento

'Puedes agregar la cantidad de nodos OtroPago necesarios
'For i = 0 To N
    inom.AgregarIncapacidad 7, "03", 1500
'Next


'Creamos el complemento Nomina 1.2
Dim com As New NominaComplemento
com.CrearNodo opTipoNomina_Ordinaria, Now, Now - 7, Now, 7, rnom, enom, pnom, dnom, onom, inom




'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase que genera la Nómina y timbra.
Dim cfdi As New Nomina
Dim res As ResultadosTimbre
Set res = cfdi.TimbrarNomina("C:\XML\CfdiNomina.xml", opTipoTimbre_TimbrePrueba, c, em, r, com, cr, "C:\XML\QR.png")

'Podemos hacer uso de la información generada con el timbre
MsgBox res.UUID
MsgBox res.CadenaTimbrado
MsgBox res.FechaTimbrado
MsgBox res.NoCertificadoCFDI
MsgBox res.NoCertificadoSAT
MsgBox res.SelloCFDI
MsgBox res.SelloSAT
MsgBox res.Leyenda
MsgBox res.PAC
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Nominas": {
      "TimbrarNomina": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoXML": "C:\\XML\\CfdiNomina.xml",
        //Opcional
        "ArchivoQR": "C:\\XML\\QR.png"
      },
      //Todos los campos y nodos corresponden a la estructura jerárquica de un CFDI según el Anexo 20
      "Comprobante": {
        "Fecha": "2022-05-16T13:00:00",
        "Folio": "102",
        "Serie": "P",
        "LugarExpedicion": "01010",
        "CfdiRelacionados": {
          "CfdiRelacionado": [
            { "UUID": "18f9ffa8-b043-4b4b-80a9-eb5d0e7a088e" },
            { "UUID": "18f9ffa8-b043-4b4b-80a9-eb5d0e7a088f" }
          ]
        },
        "Emisor": {
          "Rfc": "AAA010101AAA",
          "Nombre": "EMPRESA DE PRUEBA SA DE CV",
          "RegimenFiscal": "601",
          "FacAtrAdquirente": "0123456789"
        },
        "Receptor": {
          "Rfc": "ROQB401225R10",
          "Nombre": "BERNARDO ROQUE QUIÑONES",
          "DomicilioFiscalReceptor": "01010",
          "RegimenFiscalReceptor": "626"
        },
        "Complementos": {
          "Nomina": {
            "TipoNomina": "O",
            "FechaPago": "2022-05-16T00:00:00",
            "FechaInicialPago": "2022-05-07T00:00:00",
            "FechaFinalPago": "2022-05-14T00:00:00",
            "NumDiasPagados": 7,
            "Emisor": {
              "Curp": "CABL840215MDFSRS01",
              "RegistroPatronal": "B5510768108",
              "RfcPatronOrigen": "AAA010101AAA",
              "EntidadSNCF": {
                "OrigenRecursos": "IP",
                "MontoRecursoPropio": 500
              }
            },
            "Receptor": {
              "Curp": "AABL840215MDFSRS01",
              "NumSeguridadSocial": "123456789",
              "FechaInicioRelLaboral": "2010-01-20T00:00:00",
              "Antigüedad": "P110W",
              "TipoContrato": "01",
              "Sindicalizado": false,
              "TipoJornada": "01",
              "TipoRegimen": "02",
              "NumEmpleado": "001056",
              "Departamento": "SISTEMAS",
              "Puesto": "Programador",
              "RiesgoPuesto": "1",
              "PeriodicidadPago": "02",
              "Banco": "002",
              "CuentaBancaria": "002215911558451272",
              "SalarioBaseCotApor": 490.22,
              "SalarioDiarioIntegrado": 146.47,
              "ClaveEntFed": "JAL",
              "SubContratacion": [
                {
                  "RfcLabora": "XAXX010101000",
                  "PorcentajeTiempo": 40
                },
                {
                  "RfcLabora": "XEXX010101000",
                  "PorcentajeTiempo": 60
                }
              ]
            },
            "Percepciones": {
              "Percepcion": [
                {
                  "TipoPercepcion": "001",
                  "Clave": "4533",
                  "Concepto": "Sueldo",
                  "ImporteExento": 100,
                  "ImporteGravado": 40,
                  "AccionesOTitulos": {
                    "ValorMercado": 10000,
                    "PrecioAlOtorgarse": 13000
                  },
                  "HorasExtra": [
                    {
                      "Dias": 1,
                      "TipoHoras": "03",
                      "HorasExtra": 6,
                      "ImportePagado": 600
                    },
                    {
                      "Dias": 1,
                      "TipoHoras": "02",
                      "HorasExtra": 3,
                      "ImportePagado": 1800
                    }
                  ]
                },
                {
                  "TipoPercepcion": "029",
                  "Clave": "6233",
                  "Concepto": "Vales de despensa",
                  "ImporteExento": 600,
                  "ImporteGravado": 300
                }
              ],
              "JubilacionPensionRetiro": {
                "TotalUnaExhibicion": 15000,
                "TotalParcialidad": 10000,
                "MontoDiario": 200,
                "IngresoAcumulable": 30000,
                "IngresoNoAcumulable": 32000
              },
              "SeparacionIndemnizacion": {
                "TotalPagado": 63400.40,
                "NumAñosServicio": 10,
                "UltimoSueldoMensOrd": 8200,
                "IngresoAcumulable": 20000,
                "IngresoNoAcumulable": 14000
              }
            },
            "Deducciones": {
              "Deduccion": [
                {
                  "TipoDeduccion": "001",
                  "Clave": "1000",
                  "Concepto": "ISR",
                  "Importe": 1600
                },
                {
                  "TipoDeduccion": "002",
                  "Clave": "1001",
                  "Concepto": "IMSS",
                  "Importe": 900
                }
              ]
            },
            "OtrosPagos": {
              "OtroPago": [
                {
                  "TipoDeduccion": "002",
                  "Clave": "2005",
                  "Concepto": "Subsidio al empleo",
                  "Importe": 1000,
                  "SubsidioAlEmpleo": {
                    "SubsidioCausado": 200.58
                  }
                },
                {
                  "TipoDeduccion": "004",
                  "Clave": "2005",
                  "Concepto": "Saldo a favor compensación",
                  "Importe": 4000,
                  "CompensacionSaldosAFavor": {
                    "SaldoAFavor": 600,
                    "Año": 2021,
                    "RemanenteSalFav": 215
                  }
                }
              ]
            },
            "Incapacidades": {
              "Incapapacidad": [
                {
                  "DiasIncapacidad": 7,
                  "TipoIncapacidad": "03",
                  "ImporteMonetario": 1030.50
                }
              ]
            }
          }
        }
      }
    }
  }
}

using tagcode.BuildCFDI;


//Configuración general para el uso de servicios (Obligatorio para poder timbrar)
ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = true;

//Iniciamos la clase Cancelación
Cancelaciones cancelacion = new Cancelaciones();

//Podemos cancelar un comprobante a partir de datos específicos.
ResultadosCancelacion res = cancelacion.CancelarCFDI("C:\\Cancelaciones\\Acuse.xml", opTipoCancelacion.CancelacionPrueba, "AAA010101AAA", "453DF4C2-500E-4A93-BD8E-B24C03A0B22C", "01", "FFF92425-B8C8-4560-8C4A-49B5D2FDEF47");

//Tambien podemos cancelar un comprobante a partir de los archivos que deseas cancelar.
ResultadosCancelacion res = cancelacion.CancelarCFDIArchivo("C:\\Cancelaciones\\Acuse.xml", "C:\\XML\\CfdiTimbrado.xml", opTipoCancelacion.CancelacionPrueba, "01", "C:\\XML\\CfdiSustitucion.xml");


//Podemos hacer uso de la información obtenida de la cancelación
Console.WriteLine(res.CodigoEstado);
Console.WriteLine(res.Estado);
'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'Establece los parametros de la cuenta de timbre que se usará para timbrar el documento.
config.EstablecerPIN "CFx45...Hg", "micontraseña"

'Establecemos los certificados con los que firmaremos el CFDI previo al timbre.
config.EstablecerCertificados "C:\CSD\Certificado.cer", "C:\CSD\LlavePrivada.key", "micontraseña"

'Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
config.MostrarDetallesEnErrores = True

'Iniciamos la clase Cancelación
Dim cancelacion As New Cancelaciones
Dim res As ResultadosCancelacion

'Podemos cancelar un comprobante a partir de datos específicos.
Set res = cancelacion.CancelarCFDI("C:\Cancelaciones\Acuse.xml", opTipoCancelacion_CancelacionPrueba, "AAA010101AAA", "453DF4C2-500E-4A93-BD8E-B24C03A0B22C", "01", "FFF92425-B8C8-4560-8C4A-49B5D2FDEF47")

'Tambien podemos cancelar un comprobante a partir de los archivos que deseas cancelar.
Set res = cancelacion.CancelarCFDIArchivo("C:\\Cancelaciones\\Acuse.xml", "C:\\XML\\CfdiTimbrado.xml", opTipoCancelacion_CancelacionPrueba, "01", "C:\\XML\\CfdiSustitucion.xml")


'Podemos hacer uso de la información obtenida de la cancelación
MsgBox res.CodigoEstado
MsgBox res.Estado
{
  "ConfiguracionesConsola": {
    "PIN": "CFx45...Hg",
    "PasswordPIN": "micontraseña",
    "MostrarDetallesEnErrores": true,
    "ErroresEnConsola": false,
    "ResultadosEnConsola": false,
    "ArchivoErrores": "C:\\Errores.json",
    "ArchivoResultados": "C:\\Resultados.json"
  },
  "BuildCFDI": {
    "Cancelaciones": {
      "CancelarCFDI": {
        //Obligatorio
        "Certificado": "C:\\CSD\\Certificado.cer",
        //Obligatorio
        "LlavePrivada": "C:\\CSD\\LlavePrivada.key",
        //Obligatorio
        "PasswordLlavePrivada": "Contraseña",
        //Obligatorio (Prueba, Produccion)
        "TipoServicio": "Prueba",
        //Obligatorio
        "ArchivoAcuse": "C:\\Cancelaciones\\Acuse.xml"
      },
      //Condicional (se debe declarar cuando exista el RfcEmisor)
      "UUID": "453DF4C2-500E-4A93-BD8E-B24C03A0B22C",
      //Condicional (se debe declarar cuando exista el UUID)
      "RfcEmisor": "AAA010101AAA",
      //Obligatorio
      "Motivo": "01",
      //Condicional (se debe declarar dependiendo el Motivo y si existe RfcEmisor y UUID)
      "FolioSustitucion": "FFF92425-B8C8-4560-8C4A-49B5D2FDEF47",
      //Condicional (se debe declarar cuando desee cancelar un comprobante a partir de un archivo XML)
      "ArchivoCFDI": "C:\\XML\\CfdiTimbrado.xml",
      //Condicional (se debe declarar dependiendo el Motivo y si existe ArchivoCFDI)
      "ArchivoCFDISustitucion": "C:\\XML\\CfdiTimbradoSustitucion.xml"
    }
  }
}

El manejo de errores de esta biblioteca, te permitirá mostrar el mensaje de error específico de la información que no obtuvo el resultado esperado.
try
{
    //Configuración general para el uso de servicios (Obligatorio para poder timbrar)
    ConfiguracionesBuildCFDI config = new ConfiguracionesBuildCFDI("CFx45...Hg", "micontraseña", "C:\\CSD\\Certificado.cer", "C:\\CSD\\LlavePrivada.key", "micontraseña");

    //...
    //...
    //...
    //...

}
catch (Exception ex)
{
    //Aquí controlamos nuestro código en caso de un error en el procedimiento de timbrado
    Console.WriteLine(ex.Message);
}
On Error GoTo Errores

'Configuración general para el uso de servicios (Obligatorio para poder timbrar)
Dim config As New ConfiguracionesBuildCFDI

'...
'...
'...
'...
Exit Sub

Errores:
MsgBox Err.Description