Cfdi.Complementos.Complemento behaviour
(cfdi_complementos v4.0.2)
Copy Markdown
Estructura base, comportamiento y DSL común de los complementos SAT.
Cada complemento concreto se declara con use Cfdi.Complementos.Complemento
pasando sus tres constantes:
defmodule Cfdi.Complementos.Iedu do
use Cfdi.Complementos.Complemento,
key: "iedu:instEducativas",
xmlns: "http://www.sat.gob.mx/iedu",
xsd: "http://www.sat.gob.mx/sitio_internet/cfd/iedu/iedu.xsd"
endEl macro genera:
defstruct [:data]— la carga útil es un mapa opaconew/1— envuelve el mapaget_complement/1— metadatos + carga útil para ensamblarcfdi:Complementoyxsi:schemaLocationkey/0,xmlns/0,xsd/0,xmlns_key/0,local_name/0— accessors__complemento__/0— marca de introspección que usaCfdi.Complementos.Registrypara el descubrimiento
Identidad de un complemento
El identificador autoritativo de un complemento es la URI de su
namespace (xmlns/0), NO el prefijo. El prefijo que aparece en key/0
(iedu, pago20) es la convención del SAT y la que emitimos al
serializar, pero un XML de terceros puede declarar el mismo namespace
con cualquier prefijo:
<x:instEducativas xmlns:x="http://www.sat.gob.mx/iedu"/>sigue siendo el complemento de instituciones educativas. Por eso
Registry.by_xmlns/1 es la vía de resolución preferida al decodificar
XML, y Registry.by_key/1 sólo sirve cuando ya se conoce la key
canónica.
Summary
Functions
Metadatos de un complemento genérico, no registrado.
Types
Callbacks
@callback get_complement(term()) :: complement_result()
Functions
@spec get_complement(t()) :: complement_result()
Metadatos de un complemento genérico, no registrado.
Cfdi.Decoder cae acá cuando encuentra en un XML un complemento cuyo
namespace no resuelve a ningún módulo conocido: en vez de descartarlo
—perder datos fiscales en silencio— lo envuelve en este struct, que
preserva su key, su namespace y su carga útil. Así el complemento
sobrevive el ida y vuelta aunque la librería no lo conozca.