Flujo operativo completo: validar el RFC del receptor, armar el payload con el uso CFDI correcto, timbrar con tu PAC y notificar al cliente vía WhatsApp o email. Cero teoría.
CFDI 4.0 es el estándar obligatorio del SAT desde abril 2023 para todos los emisores. La emisión incluye un timbre fiscal digital (TFD) firmado con el sello del SAT, válido legalmente como comprobante.
Tres cosas que el flujo debe garantizar siempre:
# .env mínimo FACTURAMA_USER=tu_usuario FACTURAMA_PASSWORD=tu_password FACTURAMA_ENV=sandbox # o production # Instalar plugin core-mexico (obligatorio) /plugin install core-mexico
Antes de armar nada, confirma que el RFC existe en el padrón SAT vigente.
# En Claude Code /core:validar-rfc # O directo con el MCP mp_sat_portal.padron_rfc({rfc: "XAXX010101000"}) # Respuesta esperada { existe: true, regimen_fiscal: "601", nombre: "PUBLICO EN GENERAL", en_69b: false, simulated: false }
El uso CFDI depende del régimen del receptor y la naturaleza de la operación. La tabla más usada:
| Uso CFDI | Para | Régimen típico |
|---|---|---|
G01 | Adquisición de mercancías | 601, 612, 626 |
G03 | Gastos en general | 601, 612, 626 |
P01 | Por definir | Cualquiera (no deducible) |
D04 | Donativos | Solo donatarias autorizadas Anexo 14 |
D10 | Colegiaturas | Instituciones educativas autorizadas |
S01 | Sin efectos fiscales | Público general (RFC genérico) |
Estructura mínima de un CFDI de ingreso (I) con un concepto:
{
Serie: "A",
Folio: "1024",
FormaPago: "03", # 03 = transferencia electrónica
MetodoPago: "PUE", # PUE = pago una sola exhibición
TipoDeComprobante: "I", # I = Ingreso
Exportacion: "01", # 01 = No aplica
LugarExpedicion: "03100", # CP del emisor
Emisor: {
Rfc: "XAXX010101000",
Nombre: "TU EMPRESA SA DE CV",
RegimenFiscal: "601"
},
Receptor: {
Rfc: "XAXX010101000",
Nombre: "CLIENTE SA DE CV",
DomicilioFiscalReceptor: "03100",
RegimenFiscalReceptor: "601",
UsoCFDI: "G03"
},
Conceptos: [{
ClaveProdServ: "01010101",
Cantidad: 1,
ClaveUnidad: "E48", # E48 = unidad de servicio
Descripcion: "Consultoría fiscal mayo 2026",
ValorUnitario: 10000.00,
Importe: 10000.00,
ObjetoImp: "02", # 02 = sí objeto de impuesto
Impuestos: {
Traslados: [{
Base: 10000.00,
Impuesto: "002", # 002 = IVA
TipoFactor: "Tasa",
TasaOCuota: 0.160000,
Importe: 1600.00
}]
}
}]
}
# En Claude Code (con /core:emitir-y-notificar workflow) /core:emitir-y-notificar # O invocar el MCP directo mp_facturama_extendido.timbrar(payload_arriba) # Respuesta exitosa { uuid: "AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE", folio_fiscal: "A-1024", fecha_timbrado: "2026-06-15T14:32:18-06:00", sello_sat: "...sello SAT...", xml_url: "https://api.facturama.mx/cfdi/AAAA.xml", pdf_url: "https://api.facturama.mx/cfdi/AAAA.pdf" }
Envía el XML + PDF al cliente vía email o WhatsApp Business:
# Con workflow cfdi-emision-completa (incluye notificación) /core:emitir-y-notificar # Template WA aprobado Meta (skill whatsapp-business-mx) "Hola {{1}}, te enviamos tu factura serie A-{{2}} por ${{3}} MXN. XML: {{4}} PDF: {{5}}"
| Error PAC | Causa | Fix |
|---|---|---|
CFDI40103 | RFC receptor no existe | Validar con mp_sat_portal.padron_rfc() antes |
CFDI40147 | Régimen receptor incorrecto | Re-consultar régimen vigente del receptor |
CFDI40161 | UsoCFDI incompatible con régimen | Ver tabla compatibilidad uso vs régimen |
CFDI33184 | Sello digital inválido | Renovar CSD (vigencia 4 años) |
69B-DEFINITIVO | Emisor en lista negra SAT | NO emitas. Auditar emisor |
CFDI 4.0 introdujo el flujo de cancelación con acuse de aceptación. El receptor debe aceptar o se cancelará automáticamente a las 72 horas hábiles.
mp_facturama_extendido.cancelar({ uuid: "AAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE", motivo: "02", # 02 = Comprobantes emitidos con errores sin relación folio_sustituye: "" # obligatorio solo si motivo es 01 }) # Motivos válidos # 01 = Comprobantes con errores con relación (requiere folio_sustituye) # 02 = Comprobantes con errores sin relación # 03 = No se llevó a cabo la operación # 04 = Operación nominativa relacionada en factura global
Tu CFDI ya está timbrado. Lo que sigue depende del caso:
pago-conciliacion para match CFDI vs depósito recibido.MetodoPago=PPD (pago en parcialidades). Usa skill cfdi-complemento-pagos.cierre-fiscal-mensual que audita todos los CFDIs emitidos contra padrón vigente.