CFDI 4.0 · Fiscal

Cómo emitir un CFDI 4.0 desde cero

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.

Tiempo:15 min primera vez · 1 min reincidente MCPs:mp_facturama_extendido, mp_sat_portal Skills:cfdi-emision, rfc-validacion Pricing real:$0.40-1.20 MXN/timbre
Contenido
  1. Contexto fiscal MX
  2. Requisitos previos
  3. Flujo paso a paso (5 pasos)
  4. Errores comunes y cómo evitarlos
  5. Si tienes que cancelar
  6. Siguientes pasos
SECCIÓN 01

Contexto fiscal MX

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:

  1. RFC receptor existe en el padrón vigente del SAT.
  2. Uso CFDI compatible con el régimen fiscal del receptor.
  3. Emisor no está en lista 69-B EFOS al momento de emitir.
Por qué importa. Un CFDI emitido a un RFC inválido o con uso incompatible NO se puede deducir. Si el receptor presenta declaración con ese CFDI, el SAT lo rechaza. La responsabilidad es del emisor.
SECCIÓN 02

Requisitos previos

Lo que necesitas antes de empezar

RFC emisor
RFC de quien emite. Debe tener obligaciones fiscales vigentes.
CSD activo
Certificado de Sello Digital del emisor (vigencia 4 años SAT).
Cuenta PAC
Proveedor Autorizado de Certificación. Facturama, Sw Sapien, Diverza, etc.
Régimen receptor
601 PM general, 612 PF actividad empresarial, 625 plataformas, etc.

Configuración Claude Code

# .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
SECCIÓN 03

Flujo paso a paso

PASO 01

Validar el RFC del receptor

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
}
Si en_69b es true. NO emitas. Cancela la operación. El SAT rechazará cualquier CFDI con ese receptor.
PASO 02

Determinar uso CFDI compatible

El uso CFDI depende del régimen del receptor y la naturaleza de la operación. La tabla más usada:

Uso CFDIParaRégimen típico
G01Adquisición de mercancías601, 612, 626
G03Gastos en general601, 612, 626
P01Por definirCualquiera (no deducible)
D04DonativosSolo donatarias autorizadas Anexo 14
D10ColegiaturasInstituciones educativas autorizadas
S01Sin efectos fiscalesPúblico general (RFC genérico)
PASO 03

Armar el payload CFDI 4.0

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
      }]
    }
  }]
}
PASO 04

Timbrar con el PAC

# 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"
}
Éxito: obtuviste UUID. El CFDI está timbrado y registrado en SAT. Conserva el XML — es el original legal.
PASO 05

Notificar al cliente

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}}"
SECCIÓN 04

Errores comunes

Error PACCausaFix
CFDI40103RFC receptor no existeValidar con mp_sat_portal.padron_rfc() antes
CFDI40147Régimen receptor incorrectoRe-consultar régimen vigente del receptor
CFDI40161UsoCFDI incompatible con régimenVer tabla compatibilidad uso vs régimen
CFDI33184Sello digital inválidoRenovar CSD (vigencia 4 años)
69B-DEFINITIVOEmisor en lista negra SATNO emitas. Auditar emisor
Antes de cualquier emisión. Validar paso 01. Cada timbre rechazado por el PAC sigue contando contra tu cuota mensual. No emitas sin validar primero.
SECCIÓN 05

Si tienes que cancelar

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
SIGUIENTES PASOS

Después de emitir

Tu CFDI ya está timbrado. Lo que sigue depende del caso:

Sigue aprendiendo

Esta guía cubre el caso happy path. Para casos avanzados (complementos, traslados internacionales, retenciones, nómina) ve las guías relacionadas.