# `Nfse.Schema.V1_00.TCDocDedRed`
[🔗](https://github.com/ideia4it/nfse/blob/v0.1.0/lib/nfse/schema/v1_00/tc_doc_ded_red.ex#L2)

Tipo `TCDocDedRed` do leiaute 1.00, em `tiposComplexos_v1.00.xsd`.

| Campo | XML | Tipo | Ocorrência | Descrição |
|---|---|---|---|---|
| `ch_nfse` | `chNFSe` | `TSChaveNFSe` | 1, escolha 1 | Chave de Acesso da NFS-e (Padrão Nacional) |
| `ch_nfe` | `chNFe` | `TSChaveNFe` | 1, escolha 1 | Chave de Acesso da NF-e |
| `nfse_mun` | `NFSeMun` | `Nfse.Schema.V1_00.TCDocOutNFSe` | 1, escolha 1 | Grupo de informações de Outras NFS-e (Padrão anterior de NFS-e) |
| `nfnfs` | `NFNFS` | `Nfse.Schema.V1_00.TCDocNFNFS` | 1, escolha 1 | Grupo de informações de NF ou NFS (Modelo não eletrônico) |
| `n_doc_fisc` | `nDocFisc` | `TSDesc255` | 1, escolha 1 | Número de documento fiscal |
| `n_doc` | `nDoc` | `TSDesc255` | 1, escolha 1 | Número de documento não fiscal |
| `tp_ded_red` | `tpDedRed` | `TSIdeDedRed` | 1 | Identificação da Dedução/Redução: 1 – Alimentação e bebidas/frigobar; 2 – Materiais; 3 – Produção externa; 4 – Reembolso de despesas; 5 – Repasse consorciado; 6 – Repasse plano de saúde; 7 – Serviços; 8 – Subempreitada de mão de obra; 9 - Profissional parceiro; 99 – Outras deduções; |
| `x_desc_out_ded` | `xDescOutDed` | `TSDescOutDedRed` | 0..1 | Descrição da Dedução/Redução quando a opção é "99 – Outras Deduções" |
| `dt_emi_doc` | `dtEmiDoc` | `xs:date` | 1 | Data da emissão do documento dedutível. Ano, mês e dia (AAAA-MM-DD) |
| `v_dedutivel_redutivel` | `vDedutivelRedutivel` | `TSDec15V2` | 1 | Valor monetário total dedutível/redutível no documento informado (R$). Este é o valor total no documento informado que é passível de dedução/redução. |
| `v_deducao_reducao` | `vDeducaoReducao` | `TSDec15V2` | 1 | Valor monetário utilizado para dedução/redução do valor do serviço da NFS-e que está sendo emitida (R$). Deve ser menor ou igual ao valor deduzível/redutível (vDedutivelRedutivel). |
| `fornec` | `fornec` | `Nfse.Schema.V1_00.TCInfoPessoa` | 0..1 | Grupo de informações do Fornecedor em Deduções de Serviços |

Escolha 1: exatamente um entre `ch_nfse`, `ch_nfe`, `nfse_mun`, `nfnfs`, `n_doc_fisc` e `n_doc`.

# `t`

```elixir
@type t() :: %Nfse.Schema.V1_00.TCDocDedRed{
  ch_nfe: String.t() | nil,
  ch_nfse: String.t() | nil,
  dt_emi_doc: Date.t() | nil,
  fornec: Nfse.Schema.V1_00.TCInfoPessoa.t() | nil,
  n_doc: String.t() | nil,
  n_doc_fisc: String.t() | nil,
  nfnfs: Nfse.Schema.V1_00.TCDocNFNFS.t() | nil,
  nfse_mun: Nfse.Schema.V1_00.TCDocOutNFSe.t() | nil,
  tp_ded_red: String.t() | nil,
  v_deducao_reducao: Decimal.t() | nil,
  v_dedutivel_redutivel: Decimal.t() | nil,
  x_desc_out_ded: String.t() | nil
}
```

# `decode`

```elixir
@spec decode(Saxy.SimpleForm.t()) :: {:ok, t()} | {:error, Nfse.Error.t()}
```

Lê o elemento, na árvore do `Saxy.SimpleForm`, como este struct e valida o resultado.

# `encode`

```elixir
@spec encode(t(), String.t(), [Nfse.Schema.Runtime.attribute()]) :: iodata()
```

Escreve o struct já validado como o elemento `tag`, na forma canônica. Os `extra_attributes`,
como as declarações de namespace, saem antes dos atributos do struct.

# `new`

```elixir
@spec new(map() | keyword() | t()) :: {:ok, t()} | {:error, Nfse.Error.t()}
```

Converte `attrs` (mapa, lista de palavras-chave ou o próprio struct, também nos campos
aninhados) neste struct e valida o resultado. As regras estão em `Nfse.Schema.Runtime`.

# `validate`

```elixir
@spec validate(t()) :: :ok | {:error, Nfse.Error.t()}
```

Valida o struct contra o XSD e devolve cada erro com o caminho do campo.

---

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