# Parse DOCX to Markdown

Fuente conceptual: OpenViking `openviking/parse/parsers/word.py` (AGPL-3.0)
Reimplementar desde cero. No copiar codigo.

## Funcion a implementar

### docx_to_markdown

- **Dominio:** core
- **Lang:** Python
- **Purity:** impure (I/O: lee archivo .docx)
- **Signature:** `docx_to_markdown(docx_path: str) -> str`
- **Descripcion:** Convierte un documento Word (.docx) a markdown preservando estructura, formato y tablas en su posicion original.
- **Algoritmo:**
  1. Abrir con python-docx
  2. Construir mapa de tablas: `{element_xml: Table}` para lookup O(1)
  3. Recorrer `doc.element.body` en orden (preserva posicion de tablas):
     - Si es parrafo (`w:p`):
       - Si estilo es Heading N: `{'#' * level} {text}`
       - Si no: convertir runs con formato (bold→`**`, italic→`*`, underline→`<ins>`)
     - Si es tabla (`w:tbl`): convertir filas a markdown table con `format_table_to_markdown`
  4. Unir partes con `\n\n`
- **Deps:** `python-docx`
- **Error type:** Exception (archivo no encontrado, formato invalido)
- **Notas:**
  - Las tablas deben aparecer en su posicion original, no al final
  - Los heading levels se extraen del nombre del estilo ("Heading 1" → nivel 1)
  - El formato inline (bold/italic/underline) se preserva
- **Tests:** docx con headings y parrafos, docx con tablas intercaladas, docx con formato bold/italic, docx vacio
