Complemento para la expedición de Comprobantes Fiscales Digitales por Internet (CFDI) por la donación en la facilidad fiscal de Pago en especie.
| Nombre | Documento | Versión |
|---|---|---|
| Estándar | 📥 Descargar | 1.0 Revisión A |
| Esquema (XSD) | 📥 Descargar | 1.0 Revisión A |
| Secuencia Cadena Original (XSLT) | 📥 Descargar | 1.0 Revisión A |
<?xml version="1.0" encoding="utf-8"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pagoenespecie="http://www.sat.gob.mx/pagoenespecie" xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/pagoenespecie http://www.sat.gob.mx/sitio_internet/cfd/pagoenespecie/pagoenespecie.xsd" Version="4.0" Serie="Serie" Fecha="2026-03-24T00:00:10" Sello="VrW93Naul1DRerrE/crqg41qhQ6Q7+KBSBEHjCxnSoMHhcQqkCrH/rIonLObEF4iX1iAP+noakTgu6Eah3jPD1MdKUMjQetWneA39GpGsbmTrfp8KPSBqf5n1mmurpN07nD5eJYF+y/Pay5e9E67SVY84+9oHyufnLvagZMCpAG2ikHvIwRBW3zr8L1l7AYQIlOHfg/bdm2SjlA5bAlmHb7LZftWp0M9HtxT5yoMETCGh5U8VQu+QkJ8Nz2cJV3Fd82VylzWbtUFMqCaPHUDzkhrWmi4ijIFv6jmik3rdvU/5M1IT2B/LMdHQUdp/qsTKFa1uG1NREHV5tpT1s/C1w==" CondicionesDePago="Condiciones" SubTotal="10" Moneda="MXN" TipoCambio="1" Total="11.6" TipoDeComprobante="I" Exportacion="01" MetodoPago="PPD" FormaPago="99" LugarExpedicion="60000" NoCertificado="30001000000500003416" Certificado="MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=">
<cfdi:Emisor Rfc="EKU9003173C9" Nombre="ESCUELA KEMPER URGATE" RegimenFiscal="601" />
<cfdi:Receptor Rfc="GCA000415UX7" Nombre="GRUPO DE CONSTRUCCION ARQUITECTONICA NACIONAL" DomicilioFiscalReceptor="11830" RegimenFiscalReceptor="601" UsoCFDI="G01" />
<cfdi:Conceptos>
<cfdi:Concepto ClaveProdServ="50211503" Cantidad="1" ClaveUnidad="H87" Unidad="Pieza" Descripcion="VASOS" ValorUnitario="10.00" Importe="10.00" ObjetoImp="02">
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado Base="10.0" Importe="1.6" Impuesto="002" TasaOCuota="0.160000" TipoFactor="Tasa" />
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Concepto>
</cfdi:Conceptos>
<cfdi:Impuestos TotalImpuestosTrasladados="1.60">
<cfdi:Traslados>
<cfdi:Traslado Base="10.0" Importe="1.60" Impuesto="002" TasaOCuota="0.160000" TipoFactor="Tasa" />
</cfdi:Traslados>
</cfdi:Impuestos>
<cfdi:Complemento>
<pagoenespecie:PagoEnEspecie CvePIC="B&P0317286F1-19000101-030" FolioSolDon="PE-53-78436" PzaArtAProd="1502" PzaArtDim="5.17 metros de altura y 5,572 kilogramos de masa" PzaArtNombre="Pedro" PzaArtTecn="Pago" Version="1.0" />
</cfdi:Complemento>
</cfdi:Comprobante>
# -*- coding: utf-8 -*-
from lxml import etree
# ================= RUTA =================
ruta_xml = "cfdi_pago_especie.xml"
# ================= NAMESPACES =================
NSMAP = {
"cfdi": "http://www.sat.gob.mx/cfd/4",
"xsi": "http://www.w3.org/2001/XMLSchema-instance",
"pagoenespecie": "http://www.sat.gob.mx/pagoenespecie"
}
# ================= COMPROBANTE =================
cfdi = etree.Element("{http://www.sat.gob.mx/cfd/4}Comprobante", nsmap=NSMAP)
cfdi.set("{http://www.w3.org/2001/XMLSchema-instance}schemaLocation",
"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd "
"http://www.sat.gob.mx/pagoenespecie http://www.sat.gob.mx/sitio_internet/cfd/pagoenespecie/pagoenespecie.xsd"
)
# ================= ATRIBUTOS =================
cfdi.set("Version", "4.0")
cfdi.set("Serie", "Serie")
cfdi.set("Folio", "renovacion")
cfdi.set("Fecha", "2024-03-01T00:00:10")
cfdi.set("Sello", "") # <-- aquí tu sello real
cfdi.set("CondicionesDePago", "CondicionesDePago")
cfdi.set("SubTotal", "200")
cfdi.set("Moneda", "MXN")
cfdi.set("TipoCambio", "1")
cfdi.set("Total", "199.95")
cfdi.set("TipoDeComprobante", "I")
cfdi.set("Exportacion", "01")
cfdi.set("MetodoPago", "PPD")
cfdi.set("FormaPago", "99")
cfdi.set("LugarExpedicion", "20000")
cfdi.set("NoCertificado", "30001000000500003416")
cfdi.set("Certificado", "CERTIFICADO_BASE64")
# ================= EMISOR =================
emisor = etree.SubElement(cfdi, "{http://www.sat.gob.mx/cfd/4}Emisor")
emisor.set("Rfc", "EKU9003173C9")
emisor.set("Nombre", "ESCUELA KEMPER URGATE")
emisor.set("RegimenFiscal", "601")
# ================= RECEPTOR =================
receptor = etree.SubElement(cfdi, "{http://www.sat.gob.mx/cfd/4}Receptor")
receptor.set("Rfc", "URE180429TM6")
receptor.set("Nombre", "UNIVERSIDAD ROBOTICA ESPAÑOLA")
receptor.set("DomicilioFiscalReceptor", "86991")
receptor.set("RegimenFiscalReceptor", "601")
receptor.set("UsoCFDI", "G01")
# ================= CONCEPTOS =================
conceptos = etree.SubElement(cfdi, "{http://www.sat.gob.mx/cfd/4}Conceptos")
concepto = etree.SubElement(conceptos, "{http://www.sat.gob.mx/cfd/4}Concepto")
concepto.set("ClaveProdServ", "50211503")
concepto.set("Cantidad", "1")
concepto.set("ClaveUnidad", "H87")
concepto.set("Unidad", "Pieza")
concepto.set("Descripcion", "Cigarros")
concepto.set("ValorUnitario", "200.00")
concepto.set("Importe", "200.00")
concepto.set("ObjetoImp", "02")
# ----- Impuestos del concepto -----
imp = etree.SubElement(concepto, "{http://www.sat.gob.mx/cfd/4}Impuestos")
# Traslados
traslados = etree.SubElement(imp, "{http://www.sat.gob.mx/cfd/4}Traslados")
t = etree.SubElement(traslados, "{http://www.sat.gob.mx/cfd/4}Traslado")
t.set("Base", "1")
t.set("Impuesto", "002")
t.set("TipoFactor", "Tasa")
t.set("TasaOCuota", "0.160000")
t.set("Importe", "0.16")
# Retenciones
retenciones = etree.SubElement(imp, "{http://www.sat.gob.mx/cfd/4}Retenciones")
r1 = etree.SubElement(retenciones, "{http://www.sat.gob.mx/cfd/4}Retencion")
r1.set("Base", "1")
r1.set("Impuesto", "001")
r1.set("TipoFactor", "Tasa")
r1.set("TasaOCuota", "0.100000")
r1.set("Importe", "0.10")
r2 = etree.SubElement(retenciones, "{http://www.sat.gob.mx/cfd/4}Retencion")
r2.set("Base", "1")
r2.set("Impuesto", "002")
r2.set("TipoFactor", "Tasa")
r2.set("TasaOCuota", "0.106666")
r2.set("Importe", "0.11")
# ================= IMPUESTOS GLOBALES =================
imp_tot = etree.SubElement(cfdi, "{http://www.sat.gob.mx/cfd/4}Impuestos")
imp_tot.set("TotalImpuestosRetenidos", "0.21")
imp_tot.set("TotalImpuestosTrasladados", "0.16")
# Retenciones
ret_tot = etree.SubElement(imp_tot, "{http://www.sat.gob.mx/cfd/4}Retenciones")
rt1 = etree.SubElement(ret_tot, "{http://www.sat.gob.mx/cfd/4}Retencion")
rt1.set("Impuesto", "001")
rt1.set("Importe", "0.10")
rt2 = etree.SubElement(ret_tot, "{http://www.sat.gob.mx/cfd/4}Retencion")
rt2.set("Impuesto", "002")
rt2.set("Importe", "0.11")
# Traslados
tras_tot = etree.SubElement(imp_tot, "{http://www.sat.gob.mx/cfd/4}Traslados")
tt = etree.SubElement(tras_tot, "{http://www.sat.gob.mx/cfd/4}Traslado")
tt.set("Base", "1")
tt.set("Impuesto", "002")
tt.set("TipoFactor", "Tasa")
tt.set("TasaOCuota", "0.160000")
tt.set("Importe", "0.16")
# ================= COMPLEMENTO =================
complemento = etree.SubElement(cfdi, "{http://www.sat.gob.mx/cfd/4}Complemento")
pago = etree.SubElement(
complemento,
"{http://www.sat.gob.mx/pagoenespecie}PagoEnEspecie"
)
pago.set("Version", "1.0")
pago.set("CvePIC", "A&C8317286A1-18000101-020")
pago.set("FolioSolDon", "PE-53-78436")
pago.set("PzaArtAProd", "1501")
pago.set("PzaArtDim", "5.17 metros de altura y 5,572 kilogramos de masa")
pago.set("PzaArtNombre", "El David")
pago.set("PzaArtTecn", "Esculpido en marmol a cincel")
# ================= GUARDAR =================
tree = etree.ElementTree(cfdi)
tree.write(
ruta_xml,
pretty_print=True,
xml_declaration=True,
encoding="UTF-8"
)
print("XML generado correctamente sin timbre")
<?php
date_default_timezone_set("America/Mexico_City");
error_reporting(E_ALL);
// ================= RUTA =================
$rutaXML = "cfdi_pago_especie.xml";
// ================= XML =================
$xml = new DOMDocument("1.0", "UTF-8");
$xml->formatOutput = true;
// ================= COMPROBANTE =================
$cfdi = $xml->createElementNS("http://www.sat.gob.mx/cfd/4", "cfdi:Comprobante");
$xml->appendChild($cfdi);
// Namespaces
$cfdi->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
$cfdi->setAttribute("xmlns:pagoenespecie", "http://www.sat.gob.mx/pagoenespecie");
// SchemaLocation
$cfdi->setAttribute("xsi:schemaLocation",
"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd ".
"http://www.sat.gob.mx/pagoenespecie http://www.sat.gob.mx/sitio_internet/cfd/pagoenespecie/pagoenespecie.xsd"
);
// ================= ATRIBUTOS =================
$cfdi->setAttribute("Version", "4.0");
$cfdi->setAttribute("Serie", "Serie");
$cfdi->setAttribute("Folio", "renovacion");
$cfdi->setAttribute("Fecha", "2024-03-01T00:00:10");
$cfdi->setAttribute("Sello", ""); // <-- generar con openssl si lo necesitas
$cfdi->setAttribute("CondicionesDePago", "CondicionesDePago");
$cfdi->setAttribute("SubTotal", "200");
$cfdi->setAttribute("Moneda", "MXN");
$cfdi->setAttribute("TipoCambio", "1");
$cfdi->setAttribute("Total", "199.95");
$cfdi->setAttribute("TipoDeComprobante", "I");
$cfdi->setAttribute("Exportacion", "01");
$cfdi->setAttribute("MetodoPago", "PPD");
$cfdi->setAttribute("FormaPago", "99");
$cfdi->setAttribute("LugarExpedicion", "20000");
$cfdi->setAttribute("NoCertificado", "30001000000500003416");
$cfdi->setAttribute("Certificado", "CERTIFICADO_BASE64");
// ================= EMISOR =================
$emisor = $xml->createElement("cfdi:Emisor");
$emisor->setAttribute("Rfc", "EKU9003173C9");
$emisor->setAttribute("Nombre", "ESCUELA KEMPER URGATE");
$emisor->setAttribute("RegimenFiscal", "601");
$cfdi->appendChild($emisor);
// ================= RECEPTOR =================
$receptor = $xml->createElement("cfdi:Receptor");
$receptor->setAttribute("Rfc", "URE180429TM6");
$receptor->setAttribute("Nombre", "UNIVERSIDAD ROBOTICA ESPAÑOLA");
$receptor->setAttribute("DomicilioFiscalReceptor", "86991");
$receptor->setAttribute("RegimenFiscalReceptor", "601");
$receptor->setAttribute("UsoCFDI", "G01");
$cfdi->appendChild($receptor);
// ================= CONCEPTOS =================
$conceptos = $xml->createElement("cfdi:Conceptos");
$concepto = $xml->createElement("cfdi:Concepto");
$concepto->setAttribute("ClaveProdServ", "50211503");
$concepto->setAttribute("Cantidad", "1");
$concepto->setAttribute("ClaveUnidad", "H87");
$concepto->setAttribute("Unidad", "Pieza");
$concepto->setAttribute("Descripcion", "Cigarros");
$concepto->setAttribute("ValorUnitario", "200.00");
$concepto->setAttribute("Importe", "200.00");
$concepto->setAttribute("ObjetoImp", "02");
// ----- Impuestos del concepto -----
$imp = $xml->createElement("cfdi:Impuestos");
// Traslado
$traslados = $xml->createElement("cfdi:Traslados");
$t = $xml->createElement("cfdi:Traslado");
$t->setAttribute("Base", "1");
$t->setAttribute("Impuesto", "002");
$t->setAttribute("TipoFactor", "Tasa");
$t->setAttribute("TasaOCuota", "0.160000");
$t->setAttribute("Importe", "0.16");
$traslados->appendChild($t);
// Retenciones
$retenciones = $xml->createElement("cfdi:Retenciones");
$r1 = $xml->createElement("cfdi:Retencion");
$r1->setAttribute("Base", "1");
$r1->setAttribute("Impuesto", "001");
$r1->setAttribute("TipoFactor", "Tasa");
$r1->setAttribute("TasaOCuota", "0.100000");
$r1->setAttribute("Importe", "0.10");
$r2 = $xml->createElement("cfdi:Retencion");
$r2->setAttribute("Base", "1");
$r2->setAttribute("Impuesto", "002");
$r2->setAttribute("TipoFactor", "Tasa");
$r2->setAttribute("TasaOCuota", "0.106666");
$r2->setAttribute("Importe", "0.11");
$retenciones->appendChild($r1);
$retenciones->appendChild($r2);
$imp->appendChild($traslados);
$imp->appendChild($retenciones);
$concepto->appendChild($imp);
$conceptos->appendChild($concepto);
$cfdi->appendChild($conceptos);
// ================= IMPUESTOS GLOBALES =================
$impTot = $xml->createElement("cfdi:Impuestos");
$impTot->setAttribute("TotalImpuestosRetenidos", "0.21");
$impTot->setAttribute("TotalImpuestosTrasladados", "0.16");
// Retenciones
$retTot = $xml->createElement("cfdi:Retenciones");
$rTot1 = $xml->createElement("cfdi:Retencion");
$rTot1->setAttribute("Impuesto", "001");
$rTot1->setAttribute("Importe", "0.10");
$rTot2 = $xml->createElement("cfdi:Retencion");
$rTot2->setAttribute("Impuesto", "002");
$rTot2->setAttribute("Importe", "0.11");
$retTot->appendChild($rTot1);
$retTot->appendChild($rTot2);
// Traslados
$trasTot = $xml->createElement("cfdi:Traslados");
$t2 = $xml->createElement("cfdi:Traslado");
$t2->setAttribute("Base", "1");
$t2->setAttribute("Impuesto", "002");
$t2->setAttribute("TipoFactor", "Tasa");
$t2->setAttribute("TasaOCuota", "0.160000");
$t2->setAttribute("Importe", "0.16");
$trasTot->appendChild($t2);
$impTot->appendChild($retTot);
$impTot->appendChild($trasTot);
$cfdi->appendChild($impTot);
// ================= COMPLEMENTO =================
$complemento = $xml->createElement("cfdi:Complemento");
$pago = $xml->createElementNS("http://www.sat.gob.mx/pagoenespecie", "pagoenespecie:PagoEnEspecie");
$pago->setAttribute("Version", "1.0");
$pago->setAttribute("CvePIC", "A&C8317286A1-18000101-020");
$pago->setAttribute("FolioSolDon", "PE-53-78436");
$pago->setAttribute("PzaArtAProd", "1501");
$pago->setAttribute("PzaArtDim", "5.17 metros de altura y 5,572 kilogramos de masa");
$pago->setAttribute("PzaArtNombre", "El David");
$pago->setAttribute("PzaArtTecn", "Esculpido en marmol a cincel");
$complemento->appendChild($pago);
$cfdi->appendChild($complemento);
// ================= GUARDAR =================
$xml->save($rutaXML);
echo "XML generado sin timbre correctamente\n";
?>