> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Referência do mapeamento regulatório

> As chaves, os valores e as recusas do mapeamento que você envia ao Reporter para um documento regulatório.

O mapeamento é um documento YAML. Ele diz de onde vem cada valor de um documento regulatório nos seus dados. Para enviá-lo, [substitua o mapeamento](https://docs.lerian.studio/pt/reference/products/reporter/replace-subscription-mapping.md) de uma inscrição. O Reporter lê o documento, confere com o contrato da versão fixada e o armazena.

O contrato de um documento e o template dele pertencem à Lerian. O contrato nomeia os conjuntos e os campos do documento. O template coloca cada valor no arquivo. Esta página descreve o mapeamento.

Um mapeamento que o Reporter não consegue ler é recusado com HTTP `400` e `RPT-0143`. O detalhe nomeia o ponto a corrigir, por exemplo `query 'saldos_cosif'`. Veja a [lista de erros](https://docs.lerian.studio/pt/reference/products/reporter/reporter-error-list.md).

## Exemplo

***

Este mapeamento preenche dois conjuntos do CADOC 4010. A consulta `saldos_cosif` soma os lançamentos aprovados de cada `route_code` criados antes do fim do período do parâmetro `dataBase`. Um crédito soma o `amount` dele. Um débito o subtrai. O mapeamento de referência publicado para este documento também filtra pelo ativo BRL, pelos lançamentos que moveram um saldo e pelas linhas que não foram apagadas. Ele também corta o fim do período pelo calendário de dias úteis.

```yaml theme={null}
kind: DocumentBinding
contract: br.bcb.cadoc-4010
contractVersion: 1.0.0

queries:
  - name: declarante
    dataSource: midaz_onboarding
    table: organization
    filters:
      - field: deleted_at
        operator: isNull

  - name: saldos_cosif
    dataSource: midaz_transaction
    table: operation
    filters:
      - field: status
        operator: eq
        values: ["APPROVED"]
      - field: created_at
        operator: lt
        values: [{parameter: dataBase, at: end}]
    compute:
      - as: valor_no_razao
        case:
          column: direction
          when:
            credit: {column: amount}
            debit: {negate: amount}
          otherwise: refuse
    aggregate:
      groupBy: [route_code]
      measures:
        - as: saldo
          fn: sum
          of: valor_no_razao

datasets:
  institution:
    from:
      query: declarante
    fields:
      cnpj:
        from: query
        column: legal_document

  cosif_balances:
    from:
      query: saldos_cosif
    fields:
      cosifCode:
        from: query
        column: route_code
      saldo:
        from: query
        column: saldo
```

## Como o Reporter lê o documento

***

* O documento deve ser YAML. Um documento vazio é recusado. O nível superior deve ser um objeto de chaves e valores.
* Cada bloco aceita as chaves da tabela dele nesta página. Um bloco com qualquer outra chave é recusado. A recusa lista as chaves que o bloco aceita.
* Uma chave conhecida sem valor conta como não escrita.
* Um texto obrigatório não pode ser vazio.
* O Reporter lê um valor como o texto que você escreve. `7` e `"7"` são o mesmo valor.
* O Reporter aceita âncoras e aliases do YAML. Ele recusa a chave de mesclagem `<<`.
* Duas consultas não podem ter o mesmo nome. Dois conjuntos não podem ter o mesmo nome. Dois campos de um conjunto não podem ter o mesmo nome.
* Estes nomes devem corresponder a uma consulta do mapeamento: o `from` de uma consulta, a `query` do `from` de um conjunto, a `query` de um join e a `query` de um campo de um conjunto. Uma consulta pode ser declarada depois do conjunto ou da consulta que se refere a ela.

## Chaves de nível superior

***

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `apiVersion` | texto | Não | Marcador de formato. |
| `kind` | texto | Não | Marcador de formato. Quando você o escreve, o valor deve ser `DocumentBinding`. |
| `contract` | texto | Sim | ID do documento que o mapeamento preenche, por exemplo `br.bcb.cadoc-4010`. |
| `contractVersion` | texto | Não | Versão do contrato com a qual você escreveu o mapeamento. |
| `queries` | lista de consultas | Não | As leituras dos seus dados. |
| `datasets` | objeto de conjuntos | Sim | Como cada conjunto do documento é preenchido. `datasets: {}` é aceito e não mapeia nada. Um documento sem a chave `datasets` é recusado. |
| `manualOverrides` | lista de sobrescritas | Não | Valores que o Reporter valida ao salvar e armazena com o mapeamento. Para mudar um valor em um envio, [corrija o rascunho](https://docs.lerian.studio/pt/reference/products/reporter/correct-regulatory-report.md). |
| `generatable` | `true` ou `false` | Não | Sua declaração de que o documento pode ser gerado ou não. |
| `incompleteReason` | texto | Não | Por que o documento não pode ser gerado. |
| `incompleteFields` | lista de textos | Não | Campos sem origem, cada um escrito como `set.field`. |

## Consultas

***

Uma consulta lê linhas dos seus dados. Conjuntos e outras consultas se referem a uma consulta pelo nome dela.

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `name` | texto | Sim | Dá nome à consulta. |
| `description` | texto | Não | Uma descrição da consulta. |
| `dataSource` | texto | Com `table` | O `configName` da fonte de dados que a consulta lê. |
| `table` | texto | Com `dataSource` | Chave da tabela nessa fonte de dados. |
| `from` | texto | Em vez de `dataSource` e `table` | Outra consulta a ler. Veja as construções que uma geração recusa. |
| `expand` | texto | Não | Lista dentro de cada documento cujos itens viram linhas. |
| `filters` | lista de condições | Não | Mantém as linhas que passam, antes de agrupar. |
| `having` | lista de condições | Não | Veja as construções que uma geração recusa. |
| `join` | lista de joins | Não | Traz uma segunda tabela ou consulta ao lado das linhas. |
| `derive` | lista de colunas derivadas | Não | Veja as construções que uma geração recusa. |
| `compute` | lista de colunas calculadas | Não | Adiciona uma coluna que um caso calcula em cada linha. |
| `aggregate` | objeto | Não | Agrupa as linhas e calcula medidas. |
| `select` | lista de textos | Não | Nomeia as colunas que a consulta retorna. |

Uma consulta é recusada quando:

* ela não tem `dataSource` nem `from`;
* ela tem `from` e também `dataSource` ou `table`;
* ela tem `dataSource` e não tem `table`;
* o `from` dela nomeia a própria consulta, nomeia uma consulta que o mapeamento não declara ou fecha um anel com outras consultas.

### Filtros

Uma linha permanece quando passa em cada condição de `filters`. As condições sobre a mesma coluna se aplicam todas.

Uma condição é um teste ou uma combinação:

| Chave | Tipo | O que faz |
| - | - | - |
| `field` | texto | A coluna a testar. |
| `operator` | texto | Como comparar. |
| `values` | lista | Com o que comparar. |
| `anyOf` | lista de condições | Uma combinação. Veja as construções que uma geração recusa. |
| `allOf` | lista de condições | Uma combinação. Veja as construções que uma geração recusa. |

Uma condição precisa de `field` e `operator`, ou de `anyOf` ou `allOf`. Estes operadores são aceitos:

| Operador | Valores |
| - | - |
| `eq`, `in`, `nin` | Um ou mais valores, ou um parâmetro. |
| `gt`, `gte`, `lt`, `lte` | Um valor, ou um parâmetro. |
| `startsWith`, `notStartsWith` | Um ou mais valores, ou um parâmetro. Cada valor é um prefixo. |
| `between` | Exatamente dois valores: os limites. Um parâmetro não é aceito. |
| `isNull`, `notNull` | Nenhum valor e nenhum parâmetro. |

Para excluir linhas por prefixo, use `notStartsWith`. Este filtro descarta as linhas cujo `route_code` começa com `7` ou `8`:

```yaml theme={null}
filters:
  - field: route_code
    operator: notStartsWith
    values: ["7", "8"]
```

Uma condição é recusada quando:

* ela tem uma chave diferente de `field`, `operator`, `values`, `anyOf` e `allOf`;
* ela tem `field` e também `anyOf` ou `allOf`;
* ela não tem `field` nem `anyOf` nem `allOf`;
* ela tem `field` e não tem `operator`;
* o `operator` dela não está na tabela. A recusa lista os operadores aceitos;
* ela tem `isNull` ou `notNull` com valores ou com um parâmetro;
* ela tem `between` com um parâmetro, ou com um número de valores diferente de dois;
* ela tem qualquer outro operador sem valor e sem parâmetro.

Duas condições de `filters` sobre uma coluna são recusadas quando usam o mesmo operador. Elas também são recusadas quando uma delas é `isNull` ou `notNull`. Dois operadores diferentes sobre uma coluna se combinam, e é assim que você escreve um período: `gte` para o início e `lt` para o fim. Uma geração recusa `between` junto de `gte` ou `lte`.

#### Valores lidos de um parâmetro

Um parâmetro é um valor que você envia na requisição de geração. Um item de `values` que é um objeto lê um parâmetro:

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `parameter` | texto | Sim | Nome do parâmetro. |
| `at` | `start` ou `end` | Não | A borda do período que o parâmetro nomeia. |
| `of` | `day`, `month` ou `year` | Não | O período a que a borda pertence. Ele precisa de `at`. |
| `calendar` | `business` | Não | Corta o período pelos dias úteis do contrato. |

Sem `at`, a condição compara com o valor do parâmetro como a requisição o traz. Com `at`, o parâmetro nomeia um período: `AAAA-MM` para um mês, `AAAA-MM-DD` para um dia. As bordas seguem o fuso horário do relatório. `start` é o primeiro instante dentro do período. `end` é o primeiro instante depois dele. Compare `start` com `gte` e `end` com `lt`. Assim, nenhum instante cai em dois períodos nem em nenhum.

Com `calendar: business`, um período termina logo depois do último dia útil dele. Ele começa logo depois do último dia útil do período anterior.

Esta consulta lê o mês do parâmetro, até o fim do período dele:

```yaml theme={null}
filters:
  - field: created_at
    operator: gte
    values: [{parameter: dataBase, at: start, of: month}]
  - field: created_at
    operator: lt
    values: [{parameter: dataBase, at: end}]
```

Um valor de parâmetro é recusado quando:

* `values` lista dois parâmetros, ou lista um texto ao lado de um parâmetro;
* o objeto do parâmetro tem uma chave diferente de `parameter`, `at`, `of` e `calendar`, ou não tem `parameter`;
* `at` não é `start` nem `end`;
* `of` não é `day`, `month` nem `year`;
* `calendar` não é `business`;
* ele tem `of` ou `calendar` e não tem `at`;
* ele tem `at: start` com um operador diferente de `gte`, ou `at: end` com um operador diferente de `lt`.

Uma geração recusa um `of` mais curto que o período do parâmetro, por exemplo `of: day` em um mês.

### Joins

Um join traz uma tabela ao lado das linhas da consulta. Cada item de `join` tem estas chaves:

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `table` | texto | Uma entre `table` e `query` | A tabela a trazer. |
| `query` | texto | Uma entre `table` e `query` | A consulta a trazer. Veja as construções que uma geração recusa. |
| `match` | objeto | Sim | Emparelha uma coluna desta consulta (chave) com uma coluna da tabela ou da consulta do join (valor). |
| `columns` | objeto | Com `table` | As colunas que o join traz. Cada chave é o nome que esta consulta usa. Cada valor é a coluna da tabela do join. As outras colunas ficam de fora. |
| `type` | texto | Não | `left` ou `inner`. O padrão é `left`. |

Com `left`, cada linha da consulta permanece, e as colunas trazidas ficam vazias onde nenhuma linha emparelha. Com `inner`, as linhas sem par saem. Uma linha com vários pares vira várias linhas.

Um join é recusado quando:

* ele não nomeia `table` nem `query`, ou nomeia as duas;
* ele não tem `match`, ou `match` não tem nenhum par;
* ele escreve `on` no lugar de `match`. Escreva `match`;
* ele tem uma chave diferente de `table`, `query`, `match`, `columns` e `type`;
* ele traz uma tabela e não tem `columns`, ou `columns` não tem nenhum par;
* ele traz uma consulta e tem `columns`;
* dois joins da consulta trazem o mesmo nome, ou um join traz um nome que ele também emparelha em `match`;
* `type` não é `left` nem `inner`.

### Colunas calculadas

`compute` adiciona uma coluna a cada linha. As etapas seguintes a leem como uma coluna da tabela: filtros, agrupamento e somas.

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `as` | texto | Sim | Nome da nova coluna. |
| `case` | objeto | Sim | Escolhe o valor da coluna. |

Um `case` tem estas chaves:

| Chave | Obrigatória | O que faz |
| - | - | - |
| `column` | Sim | A coluna cujo valor escolhe a resposta. |
| `when` | Sim | Um objeto. Cada chave é um valor de `column`. Cada valor é uma resposta. |
| `otherwise` | Sim | A resposta para um valor que `when` não lista. É `refuse` ou uma resposta. |

Uma resposta é um objeto com exatamente uma chave:

| Chave | O valor da nova coluna |
| - | - |
| `column` | O valor dessa coluna. |
| `negate` | O valor dessa coluna com o sinal trocado. |
| `constant` | O texto que você escreve. |

Com `otherwise: refuse`, uma linha cujo valor `when` não lista faz a geração ser recusada.

Uma coluna calculada é recusada quando:

* `compute` tem dois itens com o mesmo `as`;
* um item tem uma chave diferente de `as` e `case`, ou não tem `as` ou `case`;
* o `case` tem uma chave diferente de `column`, `when` e `otherwise`;
* `column` ou `otherwise` faltam, ou `when` falta ou está vazio;
* `otherwise` é um texto diferente de `refuse`;
* `as` é também um nome que um join traz ou que um derive nomeia, ou o `case` lê outra coluna calculada;
* uma resposta não tem exatamente uma entre `column`, `negate` e `constant`, ou o valor dela está vazio.

### Agrupamento e medidas

`aggregate` reduz as linhas a uma linha para cada grupo.

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `groupBy` | lista de textos | Não | Colunas que definem um grupo. Sem ela, todas as linhas viram uma só. |
| `measures` | lista de medidas | Sim | Valores que o Reporter calcula para cada grupo. |

Uma medida tem estas chaves. As três são obrigatórias:

| Chave | O que faz |
| - | - |
| `as` | Nome do resultado. Um campo lê o resultado com este nome. |
| `fn` | A função. Escreva `sum`. O Reporter recusa outra função quando gera uma remessa. |
| `of` | A coluna a somar. Pode ser uma coluna da tabela, uma coluna de join ou uma coluna calculada. |

Uma consulta que agrupa retorna as colunas de `groupBy` e uma coluna para cada medida. Um campo que lê outra coluna é recusado quando você salva. Uma geração é recusada quando uma linha não tem valor em uma coluna de `groupBy`.

`aggregate` é recusado quando tem uma chave diferente de `groupBy` e `measures`, ou quando `measures` falta ou está vazio. Uma medida é recusada quando tem uma chave diferente de `as`, `fn` e `of`, ou quando falta uma delas. Uma geração recusa duas medidas com o mesmo `as`.

### Colunas que uma consulta retorna

`select` nomeia as colunas que uma consulta retorna. Sem ele, a consulta retorna cada coluna e os campos escolhem. Com ele, um campo que lê outra coluna é recusado quando você salva.

`select` é recusado quando a consulta também tem `aggregate`, quando ele está vazio, ou quando nomeia uma coluna duas vezes ou nomeia uma coluna vazia.

### Listas dentro de documentos

`expand` nomeia uma lista dentro de cada documento, como um caminho com pontos dos campos da tabela. Cada item da lista vira uma linha. A consulta lê os campos do item sob o caminho da lista.

Em uma fonte de dados PostgreSQL, a resposta do salvamento lista `expand` em `unexecuted`, e uma geração é recusada.

`expand` é recusado quando o caminho está vazio, começa ou termina com ponto, tem dois pontos seguidos, ou tem um espaço ou um `$`. Ele também é recusado em uma consulta que tem `from`.

### Construções que uma geração recusa

O Reporter lê e armazena estas construções. A resposta do salvamento as lista em `unsupported`. Uma geração de um mapeamento que contém uma delas é recusada.

| Construção | Como você a escreve |
| - | - |
| Uma consulta que lê outra consulta | `from` em uma consulta |
| Filtro depois do agrupamento | `having` |
| Uma coluna derivada | `derive`, com `as`, `from` e `apply`, todas obrigatórias |
| Um join de uma consulta | `query` em um join |
| Condições combinadas | `anyOf` ou `allOf` em `filters` |

## Conjuntos

***

Cada chave de `datasets` é o nome de um conjunto que o contrato declara. O valor dela tem estas chaves:

| Chave | Tipo | Obrigatória | O que faz |
| - | - | - | - |
| `from` | objeto | Não | Tem uma chave, `query`. Ela nomeia a consulta cujas linhas viram as linhas do conjunto. |
| `rowKey` | objeto | Não | Para um conjunto cujas linhas o catálogo publica. Emparelha o campo que identifica uma linha publicada (chave) com a coluna da consulta que identifica a mesma linha (valor). |
| `parentMatch` | objeto | Não | Para um conjunto que o contrato declara como filho de outro conjunto. Emparelha um campo do conjunto pai (chave) com a coluna da consulta que o traz (valor). |
| `fields` | objeto de campos | Sim | De onde cada campo do conjunto tira o valor. Não pode ser vazio. |
| `also` | lista de origens | Não | Outras origens do mesmo conjunto. Veja Consolidação. |

Um conjunto aberto tem uma linha para cada linha da consulta dele. O Reporter ordena as linhas pelos campos-chave do conjunto, como texto em ordem de bytes. Sem `from`, o conjunto não tem linhas de consulta. Se o contrato declara o conjunto como uma linha, as constantes e os parâmetros dele preenchem essa linha. Quando o contrato declara uma hierarquia para o código do conjunto, o Reporter também adiciona uma linha para cada código ancestral, com a soma das linhas abaixo dele. Retorne o valor lançado em cada código. Não retorne um valor de pai que já inclui os filhos, porque o Reporter soma os filhos a ele.

As linhas de um conjunto que o catálogo publica são as linhas publicadas, uma para cada. O mapeamento dá os valores delas:

* As consultas do conjunto leem só as linhas cuja coluna de `rowKey` contém um código publicado. Quando o contrato declara uma hierarquia para o código, elas leem as linhas cujo código está sob um código publicado. O Reporter deixa de fora uma linha com outro código e não a recusa. Em um item de `also`, o Reporter não deixa de fora uma linha com outro código: ele recusa a geração.
* Uma linha de resultado preenche a linha publicada do código dela. Quando o contrato declara uma hierarquia, ela também preenche cada linha publicada acima desse código. Essa linha publicada lê a soma das medidas das linhas de resultado do código dela e dos códigos abaixo dele.
* Com uma hierarquia, retorne o valor lançado em cada código. Não retorne um valor de pai que já inclui os filhos, porque o Reporter soma os filhos a ele.
* Uma linha publicada sem linha de resultado lê `0` em uma medida que uma consulta preenche. As outras colunas de consulta dela ficam sem valor. Um campo obrigatório que lê uma delas faz a geração ser recusada.
* Duas linhas de resultado com o mesmo código fazem a geração ser recusada.
* Uma geração em que nenhuma linha de resultado corresponde a uma linha publicada é recusada.

Um conjunto é recusado quando:

* o `from` dele não é um objeto com a chave `query`;
* ele tem uma chave diferente de `from`, `rowKey`, `parentMatch`, `fields` e `also`;
* `rowKey` ou `parentMatch` não tem nenhum par;
* ele não tem `fields`, ou `fields` está vazio;
* o `from` dele nomeia uma consulta que o mapeamento não declara.

### Campos

Um campo diz de onde vem o valor dele. Escreva uma origem, ou escreva `byRowClass`.

| Chave | Tipo | O que faz |
| - | - | - |
| `from` | texto | A origem do valor: `query`, `constant`, `parameter`, `manual` ou `rowSet`. |
| `column` | texto | A coluna que o Reporter lê. |
| `query` | texto | A consulta que o Reporter lê, quando não é a consulta do conjunto. |
| `value` | texto | O valor fixo. |
| `parameter` | texto | O nome do parâmetro. |
| `pendingReason` | texto | Por que um campo manual não tem valor. |
| `byRowClass` | lista de casos | Escolhe a origem pela linha. |

Cada origem precisa de uma coisa:

| `from` | Precisa de | O valor do campo |
| - | - | - |
| `query` | `column` | A `column` da linha da consulta. Num conjunto cujas linhas o catálogo publica, `query` nomeia a consulta lida no lugar da consulta do conjunto. Escreva a chave `query` do próprio campo só nesse tipo de conjunto. Uma geração é recusada quando a consulta não retorna essa coluna. |
| `constant` | `value` | O `value`. |
| `parameter` | `parameter` | O valor desse parâmetro na requisição de geração. Quando a requisição não o traz, o Reporter usa o padrão do contrato. Sem padrão, um parâmetro que o contrato exige faz a requisição ser recusada. Nomeie um parâmetro que o contrato declara. |
| `manual` | `value` ou `pendingReason` | O `value`, quando você o escreve. Sem valor, o campo fica em branco para uma pessoa preencher no rascunho. O `pendingReason` diz a essa pessoa o motivo. |
| `rowSet` | `column` | A `column` da linha publicada. |

Um campo do contrato que o mapeamento não nomeia fica em branco, e a resposta o lista como uma lacuna. O Reporter recusa aprovar um rascunho enquanto um campo obrigatório estiver em branco.

Uma origem de campo é recusada quando:

* `from` falta, ou não é uma das cinco origens;
* ela nomeia uma `query` e a origem dela não é `query`;
* a origem é `query` ou `rowSet` e não há `column`;
* a origem é `constant` e não há `value`;
* a origem é `parameter` e não há `parameter`;
* a origem é `manual` e não há `value` nem `pendingReason`;
* o campo tem uma chave diferente das chaves da tabela acima;
* a `query` que ela nomeia não é declarada pelo mapeamento.

#### Origens que dependem da linha

`byRowClass` serve a um conjunto cujas linhas o catálogo publica. Cada caso tem `when` e as chaves de uma origem. O primeiro caso cujo `when` corresponde à linha publicada dá o valor. Uma linha que nenhum caso atende não recebe valor deste campo. A geração é recusada quando o contrato exige o campo.

`when` tem duas chaves obrigatórias: `rowSet`, a coluna da linha publicada, e `equals`, o valor que ela deve ter.

Este campo lê um saldo para uma classe de linha e um total mensal para a outra. Cada classe lê a própria consulta:

```yaml theme={null}
saldoDia:
  byRowClass:
    - when: { rowSet: measure, equals: stock }
      from: query
      column: saldoDia
    - when: { rowSet: measure, equals: flow }
      from: query
      query: volumes_fluxo
      column: volumeMes
```

Um `byRowClass` é recusado quando o campo também tem um `from` próprio. Um caso é recusado quando não tem `when`, quando `when` tem uma chave diferente de `rowSet` e `equals`, quando `rowSet` ou `equals` falta, ou quando tem uma chave diferente de `when` e das chaves de uma origem.

### Consolidação

`also` adiciona origens a um conjunto. Cada item mapeia o mesmo conjunto sobre outra consulta, por exemplo outro banco de dados da instituição do envio. O Reporter não limita a consulta de um item à instituição do envio. Os filtros dessa consulta devem escolher as linhas da instituição do envio. O contrato do documento diz como o Reporter junta as linhas das origens, e quais conjuntos aceitam `also`.

Um item tem as chaves `from`, `rowKey` e `fields`. Ele não tem `parentMatch` nem `also`. O `from` dele é obrigatório. O `fields` dele usa as chaves dos campos de um conjunto. Um item sem `fields`, ou com `fields` vazio, não mapeia nada, e cada campo que ele não mapeia é uma lacuna.

O Reporter recusa um item cujo `from` também é o `from` do conjunto ou de outro item. Ele recusa um item que lê uma consulta que o mapeamento de qualquer conjunto lê. Ele também recusa um item que mapeia um campo que o mapeamento do próprio conjunto não mapeia. Dê a cada item as próprias consultas.

## Sobrescritas manuais e declarações

***

O Reporter confere estas chaves quando você salva o mapeamento, e as armazena com ele.

Cada item de `manualOverrides` tem estas chaves:

| Chave | Tipo | Obrigatória | Significado |
| - | - | - | - |
| `field` | texto | Sim | O campo, escrito como `set.field`. |
| `value` | texto | Sim | O valor. |
| `reason` | texto | Não | Por que você o escreveu. |

Um item é recusado quando tem uma chave diferente destas três, ou quando `field` ou `value` está vazio.

`generatable`, `incompleteReason` e `incompleteFields` guardam sua declaração sobre o documento:

* `generatable` deve ser `true` ou `false`.
* `generatable: false` é recusado quando `incompleteReason` falta.
* `incompleteFields` é recusado quando lista um campo e `generatable` não é `false`.

## Conferências com o contrato

***

Depois que o documento é lido, o Reporter o compara com o contrato da versão fixada. O salvamento é recusado quando:

| O mapeamento | O que você muda |
| - | - |
| Nomeia um `contract` diferente do documento da inscrição. | Escreva o ID do documento. |
| Preenche um conjunto ou um campo que o contrato não declara, ou mapeia um campo que o contrato deriva de outro campo. | Use os conjuntos e os campos do contrato. Mapeie o campo de que o campo derivado vem. |
| Compara uma coluna com um parâmetro que o contrato não declara, usa `at` em um parâmetro que não é um mês nem uma data, ou usa `calendar: business` quando o contrato não tem calendário. | Use um parâmetro do contrato. |
| Lê uma coluna de uma consulta que agrupa, em um campo, em `rowKey` ou em `parentMatch`, e a consulta não a retorna. | Nomeie uma coluna de `groupBy` ou o `as` de uma medida. |
| Preenche com uma consulta um conjunto cujas linhas o catálogo publica e não tem `rowKey`, ou emparelha um campo diferente do que identifica as linhas. | Emparelhe o campo que identifica as linhas publicadas. |
| Usa `rowKey` ou `from: rowSet` em um conjunto sem linhas publicadas. | Remova `rowKey` e leia cada valor de outra origem. |
| Preenche um conjunto filho com uma consulta e não emparelha cada chave do pai em `parentMatch`, ou usa `parentMatch` em um conjunto que não é filho. | Emparelhe cada chave do pai. |
| Usa `also` em um conjunto que o contrato não declara para consolidação. | Remova `also`. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.