# `CorvoNfse.Resources.Companies`
[🔗](https://github.com/corvo-technology/corvo-nfse-elixir/blob/main/lib/corvo_nfse/resources/companies.ex#L1)

Company management: create, list, iterate, get, update and remove.

    CorvoNfse.Resources.Companies.create(client, %{
      "legalName" => "Acme Ltda",
      "taxId" => "12345678000199",
      "taxRegime" => "Simples Nacional"
    })

# `list_option`

```elixir
@type list_option() :: {:limit, pos_integer()} | {:cursor, String.t()}
```

# `create`

```elixir
@spec create(CorvoNfse.Client.t(), CorvoNfse.Types.Company.create_params()) ::
  {:ok, map()} | {:error, CorvoNfse.Error.t()}
```

Creates a company (`POST /v1/companies`).

# `get`

```elixir
@spec get(CorvoNfse.Client.t(), String.t()) ::
  {:ok, map()} | {:error, CorvoNfse.Error.t()}
```

Reads one company (`GET /v1/companies/:id`).

# `iterate`

```elixir
@spec iterate(CorvoNfse.Client.t(), [list_option()]) ::
  {:ok, Enumerable.t()} | {:error, CorvoNfse.Error.t()}
```

Lazily iterates every company across pages.

The first page is fetched eagerly: `{:error, error}` means it failed and
nothing was produced; `{:ok, stream}` yields companies one by one. A failure
in a later page raises the `%CorvoNfse.Error{}` while consuming the stream.

# `list`

```elixir
@spec list(CorvoNfse.Client.t(), [list_option()]) ::
  {:ok, CorvoNfse.Types.Common.page()} | {:error, CorvoNfse.Error.t()}
```

Lists companies (`GET /v1/companies`) with cursor pagination.

Returns `{:ok, %{data: [map], pagination: map}}`; `pagination` keeps the
server's camelCase keys (`limit`, `hasMore`, `nextCursor`) unchanged.

# `remove`

```elixir
@spec remove(CorvoNfse.Client.t(), String.t()) ::
  {:ok, nil} | {:error, CorvoNfse.Error.t()}
```

Deletes a company (`DELETE /v1/companies/:id`); 204 yields `{:ok, nil}`.

# `update`

```elixir
@spec update(
  CorvoNfse.Client.t(),
  String.t(),
  CorvoNfse.Types.Company.update_params()
) ::
  {:ok, map()} | {:error, CorvoNfse.Error.t()}
```

Updates a company (`PATCH /v1/companies/:id`).

---

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