> For the complete documentation index, see [llms.txt](https://docs.voa.health/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.voa.health/integracao/plugin/output-estruturado.md).

# Output estruturado

Ao inicializar o plugin, caso o [parâmetro de configuração *"structuredOutputSchema"*](https://docs.voa.health/integracao/fluxo-de-uso#parametros-de-configuracao) seja preenchido com um schema válido, ao usar "Preencher prontuário" o plugin envia os dados estruturados na mensagem **voa.plugin.ehr.structured\_output** (veja [Comunicação com a página – mensagens](https://docs.voa.health/integracao/mensagens)). A mensagem de preenchimento (**voa.plugin.ehr.fill**) contém apenas o texto do documento; o objeto estruturado vem em **eventData.output** na mensagem **voa.plugin.ehr.structured\_output** (e **eventData.from\_cache** indica se o resultado veio de cache).

Esse schema segue o padrão [JSON Schema](https://json-schema.org/understanding-json-schema/reference), conforme o exemplo abaixo:

### Estrutura do *schema*

```javascript
// Exemplo de schema
{                                    // ← Schema raiz
  "type": "object",
  "properties": {
    "paciente": {                    // ← Schema da propriedade "paciente"
      "type": "object",
      "description": "Dados do paciente",
      "properties": {
        "nome": {                    // ← Schema da propriedade "nome"
          "description": "Nome completo do paciente"
          "type": "string"
        },
        "idade": {                    // ← Schema da propriedade "idade"
          "description": "Idade do paciente em número inteiro"
          "type": "number"
        }
      }
    },
    "medicamentos_em_uso": {         // ← Schema da propriedade "medicamentos_em_uso"
      "type": "array",
      "items": {                     // ← Schema dos itens da lista
        "type": "object"
        "properties": {
          "nome": {                  // ← Schema da propriedade "nome"
            "description": "Nome do medicamento em uso"
            "type": "string"
          },
          "dosagem": {               // ← Schema da propriedade "idade"
            "description": "Dosagem em uso do medicamento"
            "type": "string"
          }
        }
      }
    }
  }
}

// Exemplo de output
{
  "paciente": {
    "nome": "Fulano",
    "idade": 25
  },
  "medicamentos_em_uso": [
    {
      "nome": "dipirona",
      "dosagem": "1g em caso de dor"
    }
  ]
}
```

O schema é um objeto javascript que define o formato do output.&#x20;

* A raíz do schema é sempre um schema do tipo *object* que pode ter outros schemas aninhados.
* Cada schema devem ter as propriedades description e type.
* A propriedade type pode ter os seguintes valores:

| Tipo    | Descrição                         |
| ------- | --------------------------------- |
| string  | Texto livre                       |
| number  | Valores numéricos                 |
| boolean | Verdadeiro ou Falso               |
| object  | Objeto com propriedades definidas |
| array   | Lista de itens                    |

* Todo schema do tipo object deve ter uma propriedade "*properties"* que são itens chave/valor de outros schemas.
* Todo schema do tipo array deve ter uma propriedade items que é o schema dos itens da lista

É possível utilizar ferramentas que transformam JSONs em schemas automaticamente para facilitar o processo, como o [transform](https://transform.tools/json-to-json-schema).

{% hint style="info" %}
Note que o nome dos campos do schema são apenas exemplos. Os schemas são flexíveis e é possível utilizar qualquer nome/idioma para as propriedades. Certifique-se somente de deixar claro na descrição o significado e instruções de preenchimento de cada campo.
{% endhint %}

## Campos Especiais

O schema oferece **campos especiais,** que são campos pré-configurados pela nossa equipe que facilitam a extração de informações médicas comuns. Estes campos contêm instruções e validações otimizadas para maximizar a precisão no preenchimento das informações.<br>

* CID (Classificação Internacional de Doenças)

O campo especial CID instrui o preenchimento de um código e descrição CID, conforme no exemplo abaixo:

```javascript
{
    "type": "object",
    "properties": {
        "diagnostico_principal": {
            "$ref": "#/$defs/CID" // Nomeclatura de referência aos campos especiais
        },
        "diagnosticos_secundarios": {
            "type": "array",
            "items": {
                "$ref": "#/$defs/CID" // Nomeclatura de referência aos campos especiais
            }
        }
    }
}

// Output
{
    "diagnostico_principal": {
        "code": "G20",
        "description": "Doença de Parkinson"
    },
    "diagnosticos_secundarios": [
        {
            "code": "I10",
            "description": "Hipertensão essencial (primária)"
        }
    ]
}
```

* Dados Antropométricos

O campo especial de dados antropométricos extrai as informações de peso, altura e IMC (Índice de massa corporal) com padronização de unidade.

```javascript
{
    "type": "object",
    "properties": {
        "dados_antropometricos": {
            "$ref": "#/$defs/AnthropometricData"
        },
    }
}

// Output
{
    "dados_antropometricos": {
        'weight': 100, // Peso em kg
        'height': 180, // Altura em cm
        'imc': 30.86   // IMC com arredondamento de 2 casas decimais
    }
}

```


---

# 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://docs.voa.health/integracao/plugin/output-estruturado.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.
