sat_catalogos
Catálogos oficiales del SAT para CFDI 4.0, generados automáticamente desde catCFDI.xsd y catCFDI.xlsx.
Estos archivos son auto-generados por
sat_catalogos_codegen. NO EDITAR a mano.
Catálogos disponibles
| SimpleType SAT | Módulo Elixir | Variante | Átomos | Extras |
|---|---|---|---|---|
c_FormaPago | Sat.Catalogos.FormaPago | :with_atoms | Sí | |
c_MetodoPago | Sat.Catalogos.MetodoPago | :with_atoms | Sí | |
c_TipoDeComprobante | Sat.Catalogos.TipoComprobante | :with_atoms | Sí | |
c_Impuesto | Sat.Catalogos.Impuesto | :with_atoms | Sí | |
c_UsoCFDI | Sat.Catalogos.UsoCFDI | :with_atoms | Sí | |
c_Exportacion | Sat.Catalogos.Exportacion | :with_atoms | Sí | |
c_Moneda | Sat.Catalogos.Moneda | :with_atoms | Sí | |
c_RegimenFiscal | Sat.Catalogos.RegimenFiscal | :regimen_fiscal | No | persona_fisica, persona_moral, inicio_vigencia, fin_vigencia |
c_Periodicidad | Sat.Catalogos.Periodicidad | :strings_only | No | |
c_Meses | Sat.Catalogos.Meses | :strings_only | No | |
c_TipoRelacion | Sat.Catalogos.TipoRelacion | :strings_only | No | |
c_ObjetoImp | Sat.Catalogos.ObjetoImp | :strings_only | No | |
c_TipoFactor | Sat.Catalogos.TipoFactor | :strings_only | No | |
c_Pais | Sat.Catalogos.Pais | :strings_only | No | |
c_Estado | Sat.Catalogos.Estado | :strings_only | No |
API
Catálogos con átomos (FormaPago, MetodoPago, TipoComprobante, Impuesto, UsoCFDI, Exportacion, Moneda)
# Todos los registros
list/0 :: [%{value: atom(), code: String.t(), label: String.t(), deprecated: boolean()}]
# ¿Existe este código SAT?
valid?/1 :: (String.t()) -> boolean() # solo acepta string; atom/integer → false
# Átomo → código SAT string
value/1 :: (atom()) -> String.t() | nil
# Código SAT string → mapa completo
from_code/1 :: (String.t()) -> {:ok, %{value: atom(), code: String.t(), label: String.t(), deprecated: boolean()}} | :error
Catálogos string-only (RegimenFiscal, Periodicidad, Meses, TipoRelacion, ObjetoImp, TipoFactor, Pais, Estado)
# Todos los registros
list/0 :: [%{value: String.t(), label: String.t(), deprecated: boolean(), ...extras}]
# ¿Existe este código SAT?
valid?/1 :: (String.t()) -> boolean() # no hay value/1 en estos módulos
# Código SAT string → mapa completo
from_code/1 :: (String.t()) -> {:ok, %{value: String.t(), label: String.t(), deprecated: boolean(), ...extras}} | :errorNota: los catálogos string-only no exponen
value/1. El campo:valuede cada entrada es directamente el código SAT como string.
Ejemplos
alias Sat.Catalogos.{FormaPago, MetodoPago, RegimenFiscal, Pais, TipoFactor}
# Átomo → código SAT
FormaPago.value(:efectivo)
# => "01"
# Código SAT → mapa completo
FormaPago.from_code("01")
# => {:ok, %{value: :efectivo, code: "01", label: "Efectivo", deprecated: false}}
# Validación por código string
FormaPago.valid?("01") # => true
FormaPago.valid?("ZZ") # => false
FormaPago.valid?(:efectivo) # => false (solo acepta string)
# MetodoPago (atom-bearing)
MetodoPago.from_code("PUE")
# => {:ok, %{value: :pago_en_una_exhibicion, code: "PUE", label: "Pago en una sola exhibición", deprecated: false}}
# RegimenFiscal (string-only con extras)
RegimenFiscal.from_code("601")
# => {:ok, %{value: "601", label: "General de Ley Personas Morales",
# persona_fisica: false, persona_moral: true,
# inicio_vigencia: ~D[2022-01-01], fin_vigencia: nil, deprecated: false}}
RegimenFiscal.valid?("626") # RESICO => true
RegimenFiscal.valid?(601) # integer => false
# TipoFactor (string-only; el código ES el valor)
TipoFactor.valid?("Tasa") # => true
TipoFactor.from_code("Tasa")
# => {:ok, %{value: "Tasa", label: "Tasa", deprecated: false}}
# Pais
Pais.valid?("MEX") # => true
Pais.from_code("MEX")
# => {:ok, %{value: "MEX", label: "México", deprecated: false}}Campos en entradas deprecadas
Las entradas deprecadas siguen siendo accesibles y retornan deprecated: true. Esto permite validar CFDIs históricos. Para filtrar solo activos:
FormaPago.list() |> Enum.reject(& &1.deprecated)