Guía CFDI40 - Sistrategia/SistrategiaCFDi GitHub Wiki

Guía del Estándar del CFDI4

Esta guía comentará y complementará el estándar de Comprobante fiscal digital por internet especificado en el Anexo 20 de la Resolución Miscelánea Fiscal para el 2022 publicado en el Diario Oficial de la Federación (DOF) el 18 de Enero del 2022

Archivo: Anexo20_2022.pdf

I. Del Comprobante fiscal digital por Internet:

A. Estándar de Comprobante fiscal digital por Internet

El contribuyente que emita comprobantes fiscales por Internet debe generarlos bajo el siguiente estándar XSD base y los XSD complementarios que requiera, validando su forma y sintaxis en un archivo con extensión XML, siendo éste el único formato para poder representar y almacenar comprobantes de manera electrónica o digital.

Para poder ser validado, el comporbante fiscal digital por Internet debe estar referneciado al namespace del comprobante fiscal digital por Internet y referenciar la validación del mismo a la ruta publicada por el SAT en donde se encuentra el esquema XSD objeto de la presente sección (http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd) de la siguiente manera:

Encabezado CFDI4:

<?xml version="1.0" encoding="utf-8"?>
<cfdi:Comprobante 
	xmlns:cfdi="http://www.sat.gob.mx/cfd/4"
	xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd"
	...
	>    
</cfdi:Comprobante>

Es obligatorio el uso de la declaración: xmlns:cfdi="http://www.sat.gob.mx/cfd/4"

Para que un comprobante sea válido debe cumplir con:

  • Los lineamientos técnicos de forma y sintaxis para la generción de archivos XML especificados por el consorcio W3C, establecidos en www.w3.org.
  • Las reglas de validación adicionales establecidas en este Anexo.
  • Las reglas de validación adicionales establecidas en cada complemento que se integre en el archivo XML.
  • Las reglas de validaciópn particulares publicadas en la Resolución Miscelánea Fiscal vigente.

Las reglas se aplican en el orden anterior. Si una regla tiene una redifinición en una regla subsecuente, debe cumplirse sólo la última regla.

Adicionalmente, el contribuyente debe sujetarse a las disposiciones fiscales vigentes y aplicar lo establecido en la Guía de llenado de los comprobantes fiscales digitales por Internet que el Servicio de Administración Tributaria publique en su Portal.

El documento XML debe expresarse bajo el estándar de codificación UTF-8 y en particular se deben usar secuencias de escape cuando en los valores especificados dentro del los atributos del archivo exista alguno de los siguientes casos especiales.

  • En el caso del & se debe utilizar la secuencia &
  • En el caso del " se debe usar la secuencia "
  • En el caso del < se debe utilizar la secuencia <
  • En el caso del > se debe utilizar la secuencia >
  • En el caso del ' se debe utilizar la secuencia '

Por ejemplo para representar nombre="Juan & José & "Niño"" se usa nombre="Juan & José & "Niño""

Comprobante

Estándar de Comprobante Fiscal Digital por Internet

Diagrama

Atributos

Version

Atributo requerido con valor prefijado a 4.0 que indica la versión del estándar bajo el que se encuentra expresado el comprobante.

  • Uso: requerido
  • Valor Prefijado: 4.0
  • Tipo Base: xs:string
  • Espacio en Blanco: Colapsar
Código XSD
<xs:attribute name="Version" use="required" fixed="4.0">
  <xs:annotation>
    <xs:documentation>Atributo requerido con valor prefijado a 4.0 que indica la versión del estándar bajo el que se encuentra expresado el comprobante.</xs:documentation>
  </xs:annotation>
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>
Código T-SQL
-- Atributo requerido con valor prefijado a 4.0 que indica la versión del estándar
-- bajo el que se encuentra expresado el comprobante.
,[version]    NCHAR(3)    NOT NULL  DEFAULT '4.0'
Código C#
[XmlAttribute("Version")]
public string Version {
    get { return this.version; }
    set {
        if (value != "4.0" { // Atributo requerido con valor prefijado a 4.0 
            throw new ArgumentException("Atributo requerido con valor prefijado a 4.0");
        }
        this.version = value;
    }
}
Guía de Llenado

Debe tener el valor “4.0”.

Este dato lo integra el sistema que utiliza el contribuyente para la emisión del comprobante fiscal.

Serie

Atributo opcional para precisar la serie para control interno del contribuyente. Este atributo acepta una cadena de caracteres.

  • Uso: opcional
  • Tipo Base: xs:string
  • Longitud Mínima: 1
  • Longitud Mínima: 25
  • Espacio en Blanco: Colapsar
  • Patrón: [^|]{1,25}
Código XSD
<xs:attribute name="Serie" use="optional">
	<xs:annotation>
		<xs:documentation>Atributo opcional para precisar la serie para control interno del contribuyente. Este atributo acepta una cadena de caracteres.</xs:documentation>
	</xs:annotation>
	<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:maxLength value="25"/>
			<xs:whiteSpace value="collapse"/>
			<xs:pattern value="[^|]{1,25}"/>
		</xs:restriction>
	</xs:simpleType>
</xs:attribute>
Código C#
[XmlAttribute("Serie")]
public string Serie {
    get { return this.serie; }
    set {
        if (!string.IsNullOrEmpty(value) && value.Length > 25) { 
            throw new ArgumentException("El largo del atributo Serie debe "
                + "estar entre 1 y 25 caracteres");
        }
        this.serie = value.Trim();
    }
}
Guía de Llenado

Es el número de serie que utiliza el contribuyente para control interno de su información. Este campo acepta de 1 hasta 25 caracteres alfanuméricos.

Folio

Atributo opcional para control interno del contribuyente que expresa el folio del comprobante, acepta una cadena de caracteres.

  • Uso: opcional
  • Tipo Base: xs:string
  • Longitud Mínima: 1
  • Longitud Mínima: 40
  • Espacio en Blanco: Colapsar
  • Patrón: [^|]{1,40}
Código XSD
<xs:attribute name="Folio" use="optional">
	<xs:annotation>
		<xs:documentation>Atributo opcional para control interno del contribuyente que expresa el folio del comprobante, acepta una cadena de caracteres.</xs:documentation>
	</xs:annotation>
	<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:maxLength value="40"/>
			<xs:whiteSpace value="collapse"/>
			<xs:pattern value="[^|]{1,40}"/>
		</xs:restriction>
	</xs:simpleType>
</xs:attribute>
Código C#
[XmlAttribute("Folio")]
public string? Folio {
    get { return this.folio; }
    set {
        if ((this.version == "3.3" || this.version == "4.0") 
            && (!string.IsNullOrEmpty(value) && value.Length > 40)) {
            throw new ArgumentException("El largo del atributo Folio debe estar entre 1 y 40 caracteres");
        } else if (!string.IsNullOrEmpty(value) && value.Length > 20) { // 3.2 y anteriores
            throw new ArgumentException("El largo del atributo folio debe estar entre 1 y 20 caracteres");
        }
        this.folio = value?.Trim();
    }
}
Guía de Llenado

Es el folio de control interno que asigna el contribuyente al comprobante, puede conformarse desde 1 hasta 40 caracteres alfanuméricos.

Fecha

Atributo requerido para la expresión de la fecha y hora de expedición del Comprobante Fiscal Digital por Internet. Se expresa en la forma AAAA-MM-DDThh:mm:ss y debe corresponder con la hora local donde se expide el comprobante.

(De acuerdo con la especificación ISO 8601)

  • Uso: requerido
  • Tipo Especial: tdCFDI:t_FechaH
  • Longitud Mínima: 1
  • Longitud Mínima: 40
  • Espacio en Blanco: Colapsar
  • Patrón: [^|]{1,40}
Código XSD
<xs:attribute name="Fecha"  type="tdCFDI:t_FechaH" use="required">
  <xs:annotation>
    <xs:documentation>Atributo requerido con valor prefijado a 4.0 que indica la versión del estándar bajo el que se encuentra expresado el comprobante.</xs:documentation>
  </xs:annotation>  
</xs:attribute>
Código XSD (tdCFDI:t_FechaH)
<xs:simpleType name="t_Fecha">
  <xs:annotation>
    <xs:documentation>Tipo definido para la expresión de la fecha. Se expresa en la forma AAAA-MM-DD.</xs:documentation>
  </xs:annotation>  
  <xs:restriction base="xs:date">
    <xs:whiteSpace value="collapse"/>
    <xs:pattern value="((19|20)[0-9][0-9])-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])"/>
  </xs:restriction>
</xs:simpleType>
  • Tipo Base: xs:date
  • Espacio en Blanco: Colapsar
  • Patrón: ((19|20)[0-9][0-9])-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])
Código C#
[XmlAttribute("Fecha")]
public DateTime Fecha {
    get { return this.fecha; }
    set {
        string fechaString = Convert.ToDateTime(value).ToString("dd/MM/yyyy HH:mm:ss");
        IFormatProvider culture = new System.Globalization.CultureInfo("es-MX", true);
        value = DateTime.ParseExact(fechaString, "dd/MM/yyyy HH:mm:ss", culture);
        this.fecha = value;
    }
}
Guía de Llenado

Es la fecha y hora de expedición del comprobante fiscal. Se expresa en la forma AAAA-MM-DDThh:mm:ss y debe corresponder con la hora local donde se expide el comprobante.

Este dato lo integra el sistema que utiliza el contribuyente para la emisión del comprobante fiscal.

Ejemplo: Fecha= 2022-01-27T11:49:48

Sello

Atributo requerido para contener el sello digital del comprobante fiscal, al que hacen referencia las reglas de resolución miscelánea vigente. El sello debe ser expresado como una cadena de texto en formato Base 64.

  • Uso: requerido
  • Tipo Base: xs:string
  • Espacio en Blanco: Colapsar
Guía de Llenado

Es el sello digital del comprobante fiscal generado con el certificado de sello digital del contribuyente emisor del comprobante; éste funge como la firma del emisor del comprobante y lo integra el sistema que utiliza el contribuyente para la emisión del comprobante.

FormaPago

Atributo condicional para expresar la clave de la forma de pago de los bienes o servicios amparados por el comprobante.

  • Uso: opcional
  • Tipo Especial: catCFDI:c_FormaPago
Guía de Llenado

Se debe registrar la clave de la forma de pago de los bienes, la prestación de los servicios, el otorgamiento del uso o goce, o la forma en que se recibe el donativo, contenidos en el comprobante.

  • En el caso, de que se haya recibido el pago de la contraprestación al momento de la emisión del comprobante fiscal, los contribuyentes deberán consignar en éste, la clave vigente correspondiente a la forma en que se recibió el pago de conformidad con el catálogo c_FormaPago publicado en el Portal del SAT. En este supuesto no se debe emitir adicionalmente un CFDI al que se le incorpore el “Complemento para recepción de pagos”, porque el comprobante ya está pagado.
  • En el caso de aplicar más de una forma de pago en una transacción, los contribuyentes deben incluir en este campo, la clave vigente del catálogo c_FormaPago de la forma de pago con la que se liquida la mayor cantidad del pago. En caso de que se reciban distintas formas de pago con el mismo importe, el contribuyente debe registrar a su consideración, una de las formas de pago con las que se recibió el pago de la contraprestación.
  • En el caso de que no se reciba el pago de la contraprestación al momento de la emisión del comprobante fiscal (pago en parcialidades o diferido), los contribuyentes deberán seleccionar la clave “99” (Por definir) del catálogo c_FormaPago publicado en el Portal del SAT. En este supuesto la clave del método de pago debe ser “PPD” (Pago en parcialidades o diferido) y cuando se reciba el pago total o parcial se debe emitir adicionalmente un CFDI al que se le incorpore el “Complemento para recepción de pagos” por cada pago que se reciba.

En el caso de donativos entregados en especie, en este campo se debe registrar la clave “12” (Dación en pago).

Las diferentes claves de forma de pago se encuentran incluidas en el catálogo c_FormaPago.

Ejemplo: FormaPago= 02

c_FormaPago Descripción
01 Efectivo
02 Cheque nominativo
03 Transferencia electrónica de fondos
99 Por definir

Cuando el tipo de comprobante sea “E” (Egreso), se deberá registrar como forma de pago, la misma clave vigente que se registró en el CFDI “I” (Ingreso) que dio origen a este comprobante, derivado ya sea de una devolución, descuento o bonificación, conforme al catálogo de formas de pago del Anexo 20, opcionalmente se podrá registrar la clave vigente de forma de pago con la que se está efectuando el descuento, devolución o bonificación en su caso.

Ejemplo: Un contribuyente realiza la compra de un producto por un valor de $1000.00, y se le emite un CFDI de tipo “I” (Ingreso). La compra se pagó con forma de pago “01” (Efectivo), posteriormente, éste realiza la devolución de dicho producto, por lo que el contribuyente emisor del comprobante debe emitir un CFDI de tipo “E” (Egreso) por dicha devolución, registrando la forma de pago “01” (Efectivo), puesto que ésta es la forma de pago registrada en el CFDI tipo “I” (Ingreso) que se generó en la operación de origen.

FormaPago= 01