# `Cfdi.Concepto.Complemento`

`cfdi:ComplementoConcepto` — contenedor de complementos fiscales
anidados dentro de un `cfdi:Concepto` (ej. `iedu:instEducativas`).

Cada hijo es un struct de `Cfdi.Complementos.*` que implementa el
comportamiento `Cfdi.Complementos.Complemento` (expone `get_complement/1`
con su tag, xmlns y payload). El contenedor nunca inventa el tag o los
atributos — delega en el complemento.

# `t`

```elixir
@type t() :: %Cfdi.Concepto.Complemento{complementos: list() | nil}
```

# `add`

Añade un complemento (struct que implementa `Cfdi.Complementos.Complemento`).

# `local_name`

```elixir
@spec local_name() :: String.t()
```

Nombre local del tag, sin namespace. Ej: `"Emisor"`.

# `namespace`

```elixir
@spec namespace() :: String.t() | nil
```

Prefijo de namespace del tag (`"cfdi"`) o `nil` si no lleva.

# `tag`

```elixir
@spec tag() :: String.t()
```

Tag XML completo (con namespace, si lo hay). Ej: `"cfdi:Emisor"`.

# `to_element`

```elixir
@spec to_element(t()) :: tuple()
```

# `to_element`

```elixir
@spec to_element(t(), iodata()) :: tuple()
```

# `to_map`

```elixir
@spec to_map(t() | nil) :: map() | nil
```

Proyecta la struct a mapa.

Opciones:
  * `:ns` — `true` (default) incluye prefijo y envuelve bajo `"cfdi:Tag"`;
    `false` devuelve solo los atributos como mapa plano.
  * `:wrap` — `true` (default) envuelve bajo la llave del tag; `false`
    devuelve solo el cuerpo.

---

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