---
name: format_table_to_markdown
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def format_table_to_markdown(rows: list[list[str]], has_header: bool = True) -> str"
description: "Convierte una lista 2D de celdas a tabla markdown con alineacion de columnas. Escapa pipes en celdas y añade separador header."
tags: [markdown, table, formatting, text, pure]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: rows
    desc: "lista 2D de listas con celdas (cada fila es una lista de strings)"
  - name: has_header
    desc: "si True la primera fila se trata como header y se anade separador"
output: "string con tabla markdown formateada con pipes y alineacion de columnas"
tested: true
tests: ["tabla normal", "tabla con celdas vacias", "tabla con 1 fila", "tabla vacia", "celdas con pipes", "sin header"]
test_file_path: "python/functions/core/format_table_to_markdown_test.py"
file_path: "python/functions/core/format_table_to_markdown.py"
---

## Ejemplo

```python
rows = [["Name", "Age"], ["Alice", "30"], ["Bob", "25"]]
md = format_table_to_markdown(rows)
# | Name  | Age |
# | ----- | --- |
# | Alice | 30  |
# | Bob   | 25  |
```

## Notas

Funcion pura. No tiene dependencias externas. Calcula el ancho maximo por columna para alinear. El separador usa minimo 3 guiones por columna para cumplir con la especificacion markdown. Escapa los pipes dentro de celdas con `\|`. Si `has_header=False`, omite la fila separadora.
