El complemento permite incorporar a la factura la información de identificación del vehículo correspondiente a personas físicas integrantes de coordinados que opten por pagar el impuesto de manera individual, de conformidad con lo establecido en el artículo 83, séptimo párrafo, de la Ley del Impuesto sobre la Renta.
En el siguiente enlace encontrará el estándar y la documentación necesaria para generar el comprobante con complemento de PFIC.
| Nombre | Documento |
|---|---|
| Estándar del complemento | 📥 Descargar |
| Esquema XSD | 📥 Descargar |
| Utilería XSLT | 📥 Descargar |
| Nombre | Dirección |
|---|---|
| namespace | http://www.sat.gob.mx/pfic |
| Location | http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xsd |
| Uso | 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/pfic http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xsd“ |
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/4"
xmlns:pfic="http://www.sat.gob.mx/pfic"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/pfic http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xsd" 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=" CondicionesDePago="CONDICIONES" Exportacion="01" Fecha="2026-03-24T12:36:22" Folio="167ABC" FormaPago="01" LugarExpedicion="26000" MetodoPago="PUE" Moneda="MXN" NoCertificado="30001000000500003416" Sello="gGX6NDNOuZNQ1VYzZqBtZD1qP0qDKbXn8XDqzjXjB8zOK+hD+x2GnF3nrOeD2LUKY1i6YG/WThiZg/z9if/YZpwtOw1j4ipvipSPU1SrbMhjwpH1uonc6reYEMRh58HVTeWTAh5pznKY+T+lNcANq5r/3uNdfEKplU66hBNhDKZh72JzIqCKSHsDpP0eO+oVETFhAuDmrAbm0RTMdJN1f3EYzpH+peIbJU/ELorn3sG8xZxprj3iKzMFbav7D4gRlblO0dbL8WFVXXsQDi7C0DFMLi2Me9B+as1fnsCesyCphgVm1jt92dgWhWQyPK7U4BTHf1GqcSs+ljC3JeQavw==" SubTotal="2000.00" TipoDeComprobante="I" Total="2000.00" Version="4.0">
<cfdi:Emisor Nombre="ESCUELA KEMPER URGATE" RegimenFiscal="601" Rfc="EKU9003173C9"/>
<cfdi:Receptor DomicilioFiscalReceptor="80290" Nombre="MARIA OLIVIA MARTINEZ SAGAZ" RegimenFiscalReceptor="616" Rfc="MASO451221PM4" UsoCFDI="S01"/>
<cfdi:Conceptos>
<cfdi:Concepto Cantidad="1.00" ClaveProdServ="25101503" ClaveUnidad="H87" Descripcion="PAGO" Importe="2000.00" NoIdentificacion="00001" ObjetoImp="02" Unidad="KILOGRAMO" ValorUnitario="2000.00">
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado Base="2000.00" Importe="0.00" Impuesto="002" TasaOCuota="0.000000" TipoFactor="Tasa"/>
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Concepto>
</cfdi:Conceptos>
<cfdi:Impuestos TotalImpuestosTrasladados="0.00">
<cfdi:Traslados>
<cfdi:Traslado Base="2000.00" Importe="0.00" Impuesto="002" TasaOCuota="0.000000" TipoFactor="Tasa"/>
</cfdi:Traslados>
</cfdi:Impuestos>
<cfdi:Complemento>
<pfic:PFintegranteCoordinado ClaveVehicular="123456" Placa="FJC" RFCPF="MASO451221PM4" version="1.0"/>
</cfdi:Complemento>
</cfdi:Comprobante>
# -*- coding: utf-8 -*-
from lxml import etree
# ================= RUTA =================
ruta_xml = "cfdi_pfic.xml"
# ================= NAMESPACES =================
NSMAP = {
"cfdi": "http://www.sat.gob.mx/cfd/4",
"xsi": "http://www.w3.org/2001/XMLSchema-instance",
"pfic": "http://www.sat.gob.mx/pfic"
}
# ================= 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/pfic http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xsd"
)
# ================= ATRIBUTOS =================
cfdi.set("Version", "4.0")
cfdi.set("Serie", "Serie")
cfdi.set("Folio", "Folio")
cfdi.set("Fecha", "2024-03-01T00:00:00")
cfdi.set("Sello", "") # <-- sello real aquí
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")
pfic = etree.SubElement(
complemento,
"{http://www.sat.gob.mx/pfic}PFintegranteCoordinado"
)
pfic.set("version", "1.0")
pfic.set("ClaveVehicular", "12356789")
pfic.set("Placa", "12345678")
# ================= GUARDAR =================
tree = etree.ElementTree(cfdi)
tree.write(
ruta_xml,
pretty_print=True,
xml_declaration=True,
encoding="UTF-8"
)
print("CFDI con complemento PFIC generado sin timbre")
<?php
date_default_timezone_set("America/Mexico_City");
error_reporting(E_ALL);
// ================= RUTA =================
$rutaXML = "cfdi_pfic.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:pfic", "http://www.sat.gob.mx/pfic");
// 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/pfic http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xsd"
);
// ================= ATRIBUTOS =================
$cfdi->setAttribute("Version", "4.0");
$cfdi->setAttribute("Serie", "Serie");
$cfdi->setAttribute("Folio", "Folio");
$cfdi->setAttribute("Fecha", "2024-03-01T00:00:00");
$cfdi->setAttribute("Sello", ""); // <-- sello real
$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");
// Traslados
$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");
// PFIC
$pfic = $xml->createElementNS(
"http://www.sat.gob.mx/pfic",
"pfic:PFintegranteCoordinado"
);
$pfic->setAttribute("version", "1.0"); // ojo: minúscula
$pfic->setAttribute("ClaveVehicular", "12356789");
$pfic->setAttribute("Placa", "12345678");
$complemento->appendChild($pfic);
$cfdi->appendChild($complemento);
// ================= GUARDAR =================
$xml->save($rutaXML);
echo "CFDI con complemento PFIC generado sin timbre\n";
?>