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

# Leitura de documentos

> Acompanhe o processamento e acesse os dados extraídos

## Como funciona

Após o upload, o arquivo passa por três etapas:

1. **Leitura** do conteúdo do documento
2. **Classificação** do tipo (balanço, DRE, nota fiscal, etc.)
3. **Extração** dos dados em formato JSON

## Consultar status

```
GET /v2/file_uploads/:id
```

### Resposta

```json theme={null}
{
  "object": "file_upload",
  "id": "fu_abc123",
  "status": "uploaded",
  "parsing": {
    "status": "completed",
    "template": "balance_sheet",
    "confidence": 0.95,
    "started_time": "2024-12-07T11:01:00.000Z",
    "completed_time": "2024-12-07T11:02:30.000Z"
  },
  "parsed_data": {}
}
```

## Campos retornados

| Campo                    | Tipo   | Descrição                                   |
| ------------------------ | ------ | ------------------------------------------- |
| `parsing.status`         | string | Status atual do processamento               |
| `parsing.template`       | string | Template identificado (ex: `balance_sheet`) |
| `parsing.confidence`     | number | Confiança da Classificação (0 a 1)          |
| `parsing.started_time`   | string | Início do processamento                     |
| `parsing.completed_time` | string | Fim do processamento                        |
| `parsing.error`          | string | Mensagem de erro, se houver                 |

## Templates disponíveis

| Template           | Tipo de documento   | Disponibilidade |
| ------------------ | ------------------- | --------------- |
| `balance_sheet`    | Balanço patrimonial | Disponível      |
| `income_statement` | DRE                 | Em breve        |
| `invoice`          | Notas fiscais       | Em breve        |
| `no_template`      | Outros documentos   | Disponível      |

## Aguardar processamento

<Tip>
  O tempo varia de **30 segundos a 15 minutos**, dependendo do tamanho do
  documento.
</Tip>

Exemplo de polling até a conclusão:

```javascript theme={null}
async function waitForProcessing(fileId, token, maxAttempts = 30) {
  for (let i = 0; i < maxAttempts; i++) {
    const response = await fetch(
      `https://api.base39.com.br/v2/file_uploads/${fileId}`,
      {
        headers: { Authorization: `Bearer ${token}` },
      }
    );

    const data = await response.json();

    if (data.parsing.status === "completed") {
      return data;
    }

    if (data.parsing.status === "failed") {
      throw new Error(data.parsing.error);
    }

    await new Promise((r) => setTimeout(r, 2000));
  }

  throw new Error("Timeout");
}
```

## Acessar dados extraídos

Após o processamento, o JSON estruturado pode ser baixado:

```javascript theme={null}
const fileUpload = await waitForProcessing(fileId, token);

if (fileUpload.parsed_data) {
  const response = await fetch(fileUpload.parsed_data);
  const data = await response.json();

  // Acessar primeira empresa e período
  const company = data.companies[0];
  const period = company.periods[0];

  console.log("Empresa:", company.company_name);
  console.log("Ativo total:", period.assets.value);
  console.log("Passivo total:", period.liabilities.value);
  console.log("Patrimônio Líquido:", period.equity.value);
}
```
