Saltar al contenido
oden.tax docs

Catálogos SAT

Dos se pueden buscar por la API, porque son los que nadie se sabe de memoria. El resto no tiene endpoint, y esta página contesta lo que de verdad se pregunta un integrador: qué clave se rechaza aquí, sin costar timbre, y cuál llega hasta el SAT antes de rebotar.

Además de estos, todo comprobante se valida contra el XSD oficial del SAT antes de salir. Ahí se atrapan el atributo fuera de orden y el decimal de más, que de otro modo vuelven como un rechazo que ya costó.

Los que validamos antes de llamar al PAC

c_UsoCFDI
Completo, y con la matriz de qué régimen admite cada uso: es lo que evita el rechazo más común.
c_RegimenFiscal
Los que este producto sabe emitir.
c_ObjetoImp
Los cuatro que sabemos desglosar. Los otros cuatro se rechazan aquí en vez de fingir que se entienden.
c_TipoDeComprobante
Ingreso, egreso y pago. El traslado existe en el catálogo y todavía no tiene camino.
c_Exportacion
Los cuatro.
c_TipoRelacion
Los siete.
c_MotivoCancelacion
Los cuatro, con la regla de que el 01 exige folio de sustitución.
c_FormaPago
Los veintitrés.
c_Periodicidad y c_Meses
Para la factura global, con la regla de que un bimestre pide un mes del 13 al 18.
c_Moneda
Un subconjunto: las de dos decimales, que es lo que las columnas de importes pueden expresar sin mentir en el último dígito.
c_Pais
Un subconjunto, para la residencia fiscal de un receptor extranjero.

Los dos que se pueden buscar

GET /v1/catalogs/product_service_keys · /v1/catalogs/unit_keys

Son los que nadie se sabe de memoria, y equivocarlos es un rechazo. La búsqueda va por prefijo de clave y por parecido en la descripción, así que ?q=contabilidad encuentra 84111506 sin que nadie tenga que saberlo.

c_ClaveProdServ
52,513 claves. La que va en cada concepto.
c_ClaveUnidad
2,418 unidades de medida, con su símbolo.

Tres letras como mínimo: menos empata con media tabla. Devuelve diez por default y cincuenta como máximo, y no hay forma de pedir el catálogo entero — para eso está el portal del SAT, que es de donde nosotros lo sacamos.

Una clave que el SAT dio de baja no aparece en los resultados, porque la rechazaría. Sí se puede pedir con ?retired=1, que es lo que hace falta para leer una factura de hace tres años: viene con "retired": true.

Y el que se valida del otro lado

Que un código postal exista lo valida el SAT: una clave inventada vuelve como invalid_issue_postal_code. De nuestro lado lo usamos para otra cosa, que es la hora del comprobante.

c_CodigoPostal
95,747 códigos. Lo usamos para el huso horario del comprobante; que exista lo valida el SAT.

Las dos claves que más se teclean, 84111506 para servicios contables y E48 para "unidad de servicio", cubren la mayoría de lo que factura un despacho. Guardar un producto es la forma de no volver a escribirlas.

El código postal y la hora

El Fecha de un CFDI es hora local sin huso, y el SAT la lee contra la zona del lugar de expedición. México tiene cuatro zonas, así que el código postal del emisor no sólo lo ubica: decide qué hora lleva escrita el comprobante, y con ella si cae dentro de las 72 horas.

La sacamos del catálogo, que trae el huso de cada código. Es la fuente exacta: es contra ésa que el SAT valida. Guardamos el identificador IANA y no el offset, porque la zona de un código postal no cambia y sus reglas sí — y de ésas se encarga tzdata.