Cfdi.Complementos.Registry
(cfdi_complementos v4.0.2)
Copy Markdown
Índice inverso de los complementos: dado lo que aparece en un XML, resuelve el módulo que lo maneja.
Es la pieza que permite decodificar (CFDI.from_xml/2): al serializar,
cada complemento sabe su propia key; al deserializar hace falta el
camino contrario, "http://www.sat.gob.mx/Pagos20" →
Cfdi.Complementos.Pago20.
Descubrimiento
Los módulos NO se listan a mano: se descubren en runtime recorriendo los
módulos de la aplicación :cfdi_complementos y quedándose con los que
exponen __complemento__/0 (marca que agrega
use Cfdi.Complementos.Complemento). Agregar un complemento nuevo lo
registra solo — no hay lista que se desincronice.
El índice se construye una vez y se cachea en :persistent_term.
Resolver por namespace, no por prefijo
by_xmlns/1 es la vía correcta al decodificar XML: la URI del namespace
es el identificador autoritativo. El prefijo es convención y un emisor
puede usar el que quiera. Ver Cfdi.Complementos.Complemento.
Summary
Functions
Todos los módulos de complemento conocidos.
Resuelve el módulo por su key canónica (con prefijo del SAT).
Resuelve el módulo por la URI de su namespace. Vía preferida al decodificar.
Descarta el índice cacheado. Útil tras recompilar en desarrollo.
Functions
@spec all() :: [module()]
Todos los módulos de complemento conocidos.
Resuelve el módulo por su key canónica (con prefijo del SAT).
Sólo sirve cuando la key ya viene en la convención oficial; para XML de
terceros usar by_xmlns/1.
Resuelve el módulo por la URI de su namespace. Vía preferida al decodificar.
iex> Cfdi.Complementos.Registry.by_xmlns("http://www.sat.gob.mx/Pagos20")
Cfdi.Complementos.Pago20
@spec refresh() :: :ok
Descarta el índice cacheado. Útil tras recompilar en desarrollo.