> For the complete documentation index, see [llms.txt](https://ftcoders.first-tech.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ftcoders.first-tech.com/landing-page/modulo-cvv/padroes-de-resposta-e-schemas.md).

# Padrões de Resposta e Schemas

Os endpoints do módulo CVV partilham um conjunto de *schemas* (modelos de objetos) estruturados como heranças de uma base comum. Conhecer essa arquitetura facilita o reaproveitamento de DTOs (*Data Transfer Objects*) no código da sua aplicação .

### Padrões de Resposta (Envelopes)

Todas as respostas do módulo seguem um envelope unificado. A validação do sucesso de uma chamada deve sempre analisar primeiro o campo `retCode` (onde `0` significa sucesso e qualquer outro valor indica um código de erro proveniente do HSM).

#### ReturnSingle

Utilizado pelos endpoints `GenerateCV`, `ValidateCV` e `VerifyDynCV` (quando o retorno esperado é apenas um valor único).

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Campo</th><th>Tipo</th><th>Descrição</th></tr></thead><tbody><tr><td><code>retCode</code></td><td><code>integer</code></td><td>Código de retorno. <code>0</code> = sucesso; outros valores indicam erro.</td></tr><tr><td><code>retValue</code></td><td><code>string</code></td><td>Valor de retorno simples (o CVV gerado ou uma descrição como <code>"CVV Validated"</code>).</td></tr><tr><td><code>retMultiValue</code></td><td><code>any</code></td><td>Sempre <code>null</code> nestes endpoints.</td></tr><tr><td><code>retValid</code></td><td><code>boolean</code></td><td>Indica se a operação global foi bem-sucedida.</td></tr><tr><td><code>retDesc</code></td><td><code>string</code></td><td>Descrição textual do resultado (ex.: <code>"OK"</code> ou <code>"CVV failed verification"</code>).</td></tr></tbody></table>

#### ReturnMultiValue

Utilizado exclusivamente pelo endpoint `SuperGenerateCV` (quando o retorno é uma matriz de múltiplos valores).

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Campo</th><th>Tipo</th><th>Descrição</th></tr></thead><tbody><tr><td><code>retCode</code></td><td><code>integer</code></td><td>Código de retorno. <code>0</code> = sucesso.</td></tr><tr><td><code>retValue</code></td><td><code>string</code></td><td>Sempre <code>null</code> neste <em>schema</em>.</td></tr><tr><td><code>retMultiValue</code></td><td><code>string[]</code></td><td><em>Array</em> de <em>strings</em> contendo os CVVs gerados, apresentados exatamente na mesma ordem do <em>array</em> enviado na requisição.</td></tr><tr><td><code>retValid</code></td><td><code>boolean</code></td><td>Indica se a operação foi bem-sucedida.</td></tr><tr><td><code>retDesc</code></td><td><code>string</code></td><td>Descrição textual do resultado.</td></tr></tbody></table>

#### ReturnError

Ocorre em respostas HTTP 400, 404 e 500. Mantém o mesmo formato do `ReturnSingle`, mas com `retValid` igual a `false`, `retCode` preenchido com o código de falha do HSM e `retDesc` detalhando o erro .

### Schemas de Entrada (Requisição)

#### CvvInputBase (Campos Comuns)

*Schema* base que é herdado pelas operações de geração e validação estática.

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Campo</th><th>Tipo</th><th>Obrigatório</th><th>Descrição Técnica</th></tr></thead><tbody><tr><td><code>client_id</code></td><td><code>integer</code></td><td>Sim</td><td>Identificador numérico do cliente.</td></tr><tr><td><code>keyId</code></td><td><code>string</code></td><td>Sim</td><td>Alias da chave CVK no banco.</td></tr><tr><td><code>pan</code></td><td><code>string</code></td><td>Sim</td><td>PAN do cartão (1 a 19 dígitos numéricos).</td></tr><tr><td><code>expDate</code></td><td><code>string</code></td><td>Sim</td><td>Data de expiração no formato <code>YYMM</code> ou <code>MMYY</code>.</td></tr><tr><td><code>serviceCode</code></td><td><code>string</code></td><td>Sim</td><td><em>Service code</em> do cartão.</td></tr></tbody></table>

#### Extensões por Endpoint

`GenerateCvInput`: Idêntico ao `CvvInputBase`. Não exige campos adicionais.

`SuperGenerateCvInput`: Estende o `CvvInputBase`, mas substitui o campo de *string* `serviceCode` pelo *array* `serviceCodeArray`.

* `serviceCodeArray` (`string[]`): *Array* de *service codes*. Gera um CVV distinto por cada elemento.

`ValidateCvInput`: Estende o `CvvInputBase` adicionando o código que será submetido a validação.

* `cv` (`string`): O CVV/CVC a ser validado. Exige exatamente 3 dígitos numéricos (Regex: `^[0-9]+$`).
* `dynCv` (`string`): Usado apenas se o `serviceCode` for `"999"`.

`VerifyDynCvInput` (Validação Dinâmica): Este *schema* é completamente autónomo (não herda do base). Utiliza a chave `MKAC` e possui campos exclusivos para mapear a perspetiva dinâmica da bandeira e versão. Os campos detalhados estarão descritos na secção dedicada à validação dinâmica.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ftcoders.first-tech.com/landing-page/modulo-cvv/padroes-de-resposta-e-schemas.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
