# `Isox.Camt052`
[🔗](https://github.com/RicardoSantos-99/isox/blob/v0.2.0/lib/isox/camt052.ex#L1)

Relação de lançamentos da Conta PI: a resposta a uma `Isox.Camt060` que
pediu `REL`, `TRD` ou `TRT`.

Versão 1.3. O perfil do BCB é enxuto de propósito: esta mensagem não
traz lançamento nenhum, traz a contagem (`nb_of_ntries`) e o hash do
arquivo gerado (`addtl_rpt_inf`). O arquivo em si vem pela interface de
arquivos, e o detalhe de um lançamento específico é a `Isox.Camt054`.

## Lote

`Rpt` é ilimitado no schema. Como a camt.060 pede uma conta por vez, o
caminho comum é 1, mas `encode/3` aceita uma mensagem ou uma lista, e
`decode/1` devolve uma struct ou uma lista, conforme o XML.

# `t`

```elixir
@type t() :: %Isox.Camt052{
  acct_ispb: String.t(),
  addtl_rpt_inf: String.t(),
  created_at: DateTime.t(),
  msg_id: String.t(),
  nb_of_ntries: String.t() | non_neg_integer(),
  rpt_id: String.t()
}
```

# `version`

```elixir
@type version() :: :v1_3
```

# `decode`

```elixir
@spec decode(binary()) :: {:ok, t() | [t(), ...], version()} | {:error, term()}
```

Decodifica um XML de camt.052 de volta para a struct, ou
para uma lista de structs quando a
mensagem traz mais de um `Rpt` (lote), para uma lista de structs.

# `encode`

```elixir
@spec encode(t() | [t(), ...], Isox.AppHdr.t(), version()) ::
  {:ok, binary()} | {:error, String.t()}
```

Monta o XML (envelope completo, `AppHdr` + `Document`) para a versão
dada. Aceita 1 mensagem ou uma lista de mensagens (lote: vira vários
`Rpt` na mesma `Document`).

`msg_id`/`created_at` são de `GrpHdr` (uma vez por mensagem XML). Em
lote, têm que ser iguais em todos os itens da lista.

---

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