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

# Revisar

> Detecta y arregla los problemas de tu Word, PowerPoint, Excel o PDF.

Sube tu archivo y pide que lo revisemos. Sin IA: te devolvemos **el mismo archivo arreglado** (en su formato, con su
PDF) y un informe con todo lo que encontramos y lo que hicimos.

Sirve para Word (`.docx`), PowerPoint (`.pptx`), Excel (`.xlsx`) y PDF. También acepta los formatos antiguos `.doc`,
`.ppt` y `.xls`: los convertimos y el resultado sale en el formato moderno (`.docx`, `.pptx`, `.xlsx`).

<Steps>
  <Step title="Sube el archivo">
    ```bash theme={null}
    curl https://api.eu.doconda.com/v1/files \
      -H "Authorization: Bearer $DOCONDA_API_KEY" \
      -F "file=@contrato.docx"
    # → { "id": "file_01JAB3…", "filename": "contrato.docx", … }
    ```
  </Step>

  <Step title="Pide la revisión">
    ```json theme={null}
    POST /v1/documents
    { "operation": "review", "file": "file_01JAB3…" }
    ```

    Como cualquier documento, en modo directo, `stream` o `background`. Si el archivo lo hizo Doconda, pasa su id en
    vez de subirlo: `"file": "doc_01JAB3…"`.
  </Step>

  <Step title="Lee el resultado">
    `status` te dice cómo ha quedado y `GET /documents/{id}/report` te da el detalle.
  </Step>
</Steps>

| `status` | Qué significa |
| - | - |
| `ready` | Sin problemas (o todos arreglados). |
| `ready_with_warnings` | Quedan avisos menores. |
| `needs_review` | Queda algo que no podemos arreglar sin cambiar tu contenido: míralo en el informe. |

<Info>
  **Nunca cambiamos tu texto ni tus valores**: un importe mal escrito se señala, no se corrige. Solo aplicamos los
  arreglos seguros; el resto se informa. Cada arreglo se aplica solo si el archivo mejora; si no, se descarta y queda
  anotado en el informe (`ledger`).
</Info>

## Dónde está cada problema

Cada aviso del informe dice dónde está, en `location`:

* `pages`: las páginas (Word, PDF) o las diapositivas (PowerPoint), empezando en 1.
* `sheet` y `cells`: en Excel, la hoja y las celdas o rangos (`B3`, `A2:B2`).

```json theme={null}
{
  "code": "xlsx.formula_error",
  "severity": "error",
  "message": "En «Ventas» hay celdas con el error #REF!: B7.",
  "fixable": false,
  "location": { "sheet": "Ventas", "cells": ["B7"] }
}
```

## Seguridad

Antes de abrir tu archivo lo revisamos por seguridad:

* **Rechazamos** archivos con macros, archivos que no son del formato que dicen, PDF con contraseña, estructuras
  internas anómalas o declaraciones XML (vías habituales de ataque).
* **Quitamos** lo que se cargaría o se ejecutaría solo: imágenes y enlaces a recursos externos, plantillas adjuntas,
  objetos y ficheros incrustados, acciones automáticas al abrir y enlaces que abren un programa. Los hipervínculos
  normales se mantienen.

Lo que quitemos aparece en el informe, en `sanitized.removed`.

## Qué revisamos

En todos los formatos: `money.words_mismatch` (un importe en letra que no cuadra con la cifra, como "1.200 €" frente a
"mil trescientos euros") y `font.missing` (una fuente que no tenemos). Los dos se informan, no se arreglan.

### Word (`.docx`, `.doc`)

| Código | Qué detecta | Arreglo automático |
| - | - | - |
| `table.overflow_width` | Tabla más ancha que la página | Ajustar al ancho |
| `heading.orphaned` | Título solo al final de una página | Mantenerlo con el siguiente párrafo |
| `signature.split_across_pages` | Firma partida entre páginas | Mantenerla junta |
| `numbering.discontinuous` | Cláusulas o secciones con saltos en la numeración | Renumerar |
| `style.not_applied` | El estilo pedido no aparece en el resultado | Reaplicar el estilo |
| `crossref.broken` | "ver cláusula 5" que no existe | — (se informa; y no renumeramos, para que no apunte a otra) |
| `content.empty_section` | Título sin contenido debajo | — |

### PowerPoint (`.pptx`, `.ppt`)

| Código | Qué detecta | Arreglo automático |
| - | - | - |
| `pptx.text_overflow` | Texto que se sale de su cuadro | Reducir el texto para que quepa |
| `pptx.shape_off_slide` | Forma que se sale en parte de la diapositiva | Devolverla dentro |
| `pptx.empty_placeholder` | Marcador de posición vacío | Quitarlo |
| `pptx.shape_outside_slide` | Forma entera fuera de la diapositiva | — |
| `pptx.text_too_small` | Texto de menos de 12 pt | — |
| `pptx.too_many_fonts` | Demasiadas fuentes distintas | — |
| `pptx.empty_slide` | Diapositiva vacía | — |
| `pptx.no_title` | Diapositiva sin título | — |
| `pptx.duplicate_title` | Títulos repetidos | — |
| `pptx.image_low_resolution` | Imagen de menos de 96 ppp | — |
| `pptx.image_linked` | Imagen enlazada a un archivo externo | — |
| `pptx.no_slide_numbers` | Presentación de 10 o más diapositivas sin números | — |

### Excel (`.xlsx`, `.xls`)

| Código | Qué detecta | Arreglo automático |
| - | - | - |
| `xlsx.number_as_text` | Números guardados como texto | Convertirlos, cuando no hay duda |
| `xlsx.print_too_wide` | Hoja demasiado ancha para imprimir | Ajustar al ancho de la página |
| `xlsx.formula_error` | Fórmulas con error (`#REF!`, `#DIV/0!`…) | — |
| `xlsx.broken_reference` | Referencias rotas | — |
| `xlsx.external_link` | Fórmulas que dependen de otros archivos | — |
| `xlsx.inconsistent_formula` | Número escrito a mano entre fórmulas iguales | — |
| `xlsx.date_as_text` | Fechas guardadas como texto | — |
| `xlsx.hidden_data` | Hojas, filas o columnas ocultas con datos | — |
| `xlsx.merged_in_table` | Celdas combinadas dentro de una tabla | — |
| `xlsx.empty_sheet` | Hoja vacía | — |
| `xlsx.no_header` | Tabla sin encabezado | — |

### PDF

| Código | Qué detecta | Arreglo automático |
| - | - | - |
| `pdf.no_text_layer` | Páginas escaneadas sin texto | Añadir una capa de texto invisible (OCR) para poder buscar y copiar |
| `pdf.title_missing` | Sin título | Ponerlo desde la primera página |
| `pdf.language_missing` | Sin idioma | Ponerlo, detectado del texto |
| `pdf.fonts_not_embedded` | Fuentes no incrustadas | — |
| `pdf.blank_page` | Páginas en blanco | — |
| `pdf.page_size_mixed` | Páginas de tamaños distintos | — |
| `pdf.text_rotated` | Texto de lado o al revés | — |
| `pdf.image_low_resolution` | Imagen de menos de 150 ppp | — |
| `pdf.untagged` | PDF sin etiquetas (accesibilidad) | — |
| `pdf.link_broken` | Enlaces internos rotos | — |
| `pdf.form_empty` | Campos de formulario vacíos | — |
| `pdf.annotations` | Comentarios o marcas de revisión olvidados | — |


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