# `Cfdi.Complementos.Complemento`

Estructura base y comportamiento común de los complementos SAT.

Cada complemento concreto define `new/1` y `get_complement/1`, devolviendo
metadatos (`key`, `xmlns`, `schema_location`, `xmlns_key`) junto con la
carga útil (`complement`).

# `complement_result`

```elixir
@type complement_result() :: %{
  complement: term(),
  key: String.t(),
  schema_location: String.t(),
  xmlns: String.t(),
  xmlns_key: String.t()
}
```

Mapa estándar para ensamblar `cfdi:Complemento` y `xsi:schemaLocation`.

# `t`

```elixir
@type t() :: %Cfdi.Complementos.Complemento{
  data: term() | nil,
  key: String.t() | nil,
  xmlns: String.t() | nil,
  xsd: String.t() | nil
}
```

# `get_complement`

```elixir
@callback get_complement(term()) :: complement_result()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
