---
name: parse_result
lang: py
domain: core
version: "1.0.0"
algebraic: product
definition: |
  @dataclass
  class ParseResult:
      root: ResourceNode
      source_path: str | None = None
      source_format: str | None = None
      parser_name: str | None = None
      parser_version: str | None = None
      parse_time: float | None = None
      parse_timestamp: datetime | None = None
      meta: dict[str, Any] = field(default_factory=dict)
      warnings: list[str] = field(default_factory=list)
description: "Resultado completo de parsear un documento. Contiene el arbol de nodos, metadata del proceso y warnings. Es el tipo de retorno unificado de todos los parsers del registry."
tags: [parsing, document, result, tree, pipeline, core]
uses_types: [resource_node_py_core, node_type_py_core]
file_path: "python/types/core/parse_result.py"
---

## Propiedades y metodos

- `success -> bool` (property) — True si `warnings` esta vacio.
- `get_all_nodes() -> list[ResourceNode]` — flatten BFS del arbol completo (raiz + todos los descendientes).
- `get_sections(min_level=0, max_level=10) -> list[ResourceNode]` — filtra nodos de tipo SECTION dentro del rango de niveles.

## Helper

```python
def create_parse_result(
    root, source_path=None, source_format=None,
    parser_name=None, parse_time=None, meta=None, warnings=None
) -> ParseResult
```

Construye un ParseResult con valores por defecto sensatos. Evita tener que instanciar `ParseResult` directamente cuando no se necesitan todos los campos.

## Ejemplo

```python
import time
from node_type import NodeType
from resource_node import ResourceNode
from parse_result import ParseResult, create_parse_result

root = ResourceNode(type=NodeType.ROOT, title="Documento")
intro = ResourceNode(type=NodeType.SECTION, title="Intro", level=1, content="...")
root.add_child(intro)

result = create_parse_result(
    root=root,
    source_path="/docs/mi_doc.md",
    source_format="markdown",
    parser_name="MarkdownParser",
    parse_time=0.042,
)

print(result.success)          # True (sin warnings)
print(len(result.get_all_nodes()))   # 2 (root + intro)
print(len(result.get_sections()))    # 1 (solo intro, root es ROOT)
print(result.get_sections(min_level=1, max_level=1))  # [intro]
```

## Notas

El tipo de retorno unificado permite que los consumidores (pipelines, agentes, APIs) trabajen con el mismo contrato independientemente del formato de origen. El campo `warnings` captura problemas no fatales (e.g., encoding issues, headings malformados) sin lanzar excepciones. `get_all_nodes()` usa BFS para preservar el orden natural de lectura del documento.
