Files

38 lines
1.4 KiB
Python

"""Perfiles de extracción.
Define configuraciones por tipo de documento para guiar prompts, envoltura
de resultados y agregaciones especiales en CSV.
"""
from __future__ import annotations
from typing import Dict, List, Optional, TypedDict
class Profile(TypedDict, total=False):
name: str
wrap_root: Optional[str]
default_instruction: str
aggregate_list_paths: List[str]
DEFAULT_INVOICE_INSTRUCTION = (
"Extrae los datos de la factura a un JSON, identificando la tabla principal por sus columnas (código, cantidad, valor unitario) "
"para crear un array con la clave fija 'items', y usando las etiquetas literales del documento como claves para el resto de la información. "
"Si el documento muestra una línea o bloque de texto bajo una etiqueta como «Observación:», «Observaciones» o equivalente, "
"inclúyelo en el JSON con la misma clave que refleje el documento (respeta mayúsculas, tildes y singular/plural tal como aparezcan). "
"Ten especial cuidado en no confundir el número de autorización con el código."
)
PROFILES: Dict[str, Profile] = {
"invoice": {
"name": "invoice",
"wrap_root": None,
"default_instruction": DEFAULT_INVOICE_INSTRUCTION,
"aggregate_list_paths": [],
},
}
def get_profile(name: str) -> Profile:
key = (name or "invoice").lower()
return PROFILES.get(key, PROFILES["invoice"]) # por defecto factura