38 lines
1.4 KiB
Python
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 |