> ## 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 y arreglar un Word antes de enviarlo

> Cómo revisar un documento Word (.docx) por código, arreglar sus problemas de formato y saber si está listo para enviar.

Vas a hacer un script que recibe un Word, lo revisa, descarga la versión arreglada y te dice si se puede enviar o si
queda algo por mirar. La revisión no usa IA y nunca cambia tu texto ni tus importes: solo arregla lo seguro (tablas
que se salen de la página, títulos solos al final de una página, firmas partidas, numeración con saltos…) e informa
del resto.

## Qué necesitas

* Una API key de Doconda en `DOCONDA_API_KEY`. Créala en el panel, en **API keys**.
* Python 3.9+ o Node 20+.
* Un Word que revisar, por ejemplo `contrato.docx`. También vale `.doc`: sale como `.docx`.

## 1. Instala el SDK

<CodeGroup>
  ```bash Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  pip install doconda
  ```

  ```bash TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  npm install @doconda/sdk
  ```
</CodeGroup>

## 2. Sube el archivo y pide la revisión

`create` con `operation: "review"` espera a que la revisión termine y devuelve el documento.

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from doconda import Doconda

  doconda = Doconda()
  file = doconda.files.upload("contrato.docx")
  reviewed = doconda.documents.create(operation="review", file=file["id"])

  print(reviewed["status"])
  ```

  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { readFile, writeFile } from "node:fs/promises"
  import { Doconda } from "@doconda/sdk"

  const doconda = new Doconda()
  const file = await doconda.files.upload(await readFile("contrato.docx"), "contrato.docx")
  const reviewed = await doconda.documents.create({ operation: "review", file: file.id })

  console.log(reviewed.status)
  ```
</CodeGroup>

`status` te dice cómo ha quedado:

| `status` | Qué significa |
| - | - |
| `ready` | Sin problemas (o todos arreglados). |
| `ready_with_warnings` | Quedan avisos menores. |
| `needs_review` | Queda algo que no se puede arreglar sin cambiar tu contenido. |

## 3. Lee el informe

El informe tiene dos listas: `ledger`, con cada arreglo que se intentó (aplicado o rechazado, y por qué), e `issues`,
con lo que queda por mirar y dónde está.

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  report = doconda.documents.report(reviewed["id"])

  for fix in report["ledger"]:
      print(fix["outcome"], fix["fix"])
  for issue in report["issues"]:
      print(issue["severity"], issue["code"], issue["message"], issue["location"].get("pages"))
  ```

  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  const report = await doconda.documents.report(reviewed.id)

  for (const fix of report.ledger) console.log(fix.outcome, fix.fix)
  for (const issue of report.issues) console.log(issue.severity, issue.code, issue.message, issue.location.pages)
  ```
</CodeGroup>

Un aviso del informe se ve así:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "code": "crossref.broken",
  "severity": "error",
  "message": "…",
  "fixable": false,
  "location": { "pages": [4] }
}
```

## 4. Decide y descarga el Word arreglado

Si el estado es `ready` o `ready_with_warnings`, guardas la versión arreglada. Si no, toca mirar el informe.

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  if reviewed["status"] in ("ready", "ready_with_warnings"):
      open("contrato-revisado.docx", "wb").write(doconda.documents.download(reviewed["id"], "docx"))
      print("Listo para enviar: contrato-revisado.docx")
  else:
      print(f"No lo envíes todavía ({reviewed['status']}): mira el informe.")
  ```

  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  if (reviewed.status === "ready" || reviewed.status === "ready_with_warnings") {
    await writeFile("contrato-revisado.docx", await doconda.documents.download(reviewed.id, "docx"))
    console.log("Listo para enviar: contrato-revisado.docx")
  } else {
    console.log(`No lo envíes todavía (${reviewed.status}): mira el informe.`)
  }
  ```
</CodeGroup>

## Resultado

* `contrato-revisado.docx`: el mismo documento, con los arreglos seguros aplicados. Sigue siendo editable.
* La versión en PDF, si la necesitas: `download(id, "pdf")`.
* El informe: qué se arregló, qué se descartó y qué queda por mirar, con la página de cada aviso.

Si `status` es `needs_review`, el informe dice qué falta y dónde. Por ejemplo, un importe en letra que no cuadra con la
cifra (`money.words_mismatch`) se señala, pero no se corrige: decides tú.

## Siguientes pasos

* [Revisar](/guides/review): todos los problemas que se detectan en Word, PowerPoint, Excel y PDF.
* [SDK de Python](/sdk/python) y [SDK de TypeScript](/sdk/introduction): todos los métodos.
* [Ejemplos completos en GitHub](https://github.com/B-C-Software/doconda-examples).


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