Versión 1.0

This commit is contained in:
lansan69
2026-03-31 20:00:04 -06:00
parent bc513ad2c4
commit e882442f8b
30 changed files with 778 additions and 89 deletions

View File

@@ -0,0 +1,51 @@
from app.schemas.document_standard import DocumentEvaluationRubric, StandardDocumentAnalysis, DocumentEvaluationCriteria
def encode_document_from_bytes(document_bytes: bytes) -> str:
"""
Codifica un documento a base64 a partir de sus bytes.
"""
import base64
return base64.b64encode(document_bytes).decode('utf-8')
def json_to_rubric(json_data: dict) -> DocumentEvaluationRubric:
"""Convierte un diccionario JSON en un objeto DocumentEvaluationRubric mapeando los campos correctos."""
def parse_criteria(criteria_list: list) -> list:
parsed_criteria = []
for item in criteria_list:
# Convertir el valor a float si existe
score_value = float(item["value"]) if item.get("value") is not None else None
description = str(item["description"]) if item.get("description") is not None else None
# Procesar subcriterios recursivamente si existen
sub_raw = item.get("sub_criteria")
sub_parsed = parse_criteria(sub_raw) if sub_raw else None
parsed_criteria.append(DocumentEvaluationCriteria(
name=item["name"],
description=description,
score=score_value,
subcriteria=sub_parsed
))
return parsed_criteria
# Jerarquía de la categoría
category_info = json_data.get("category", {})
hierarchy_list = category_info.get("hierarchy", [])
# Ordenamos por nivel para asegurar la lógica: Nivel 0 -> Nivel 1 -> Nivel 2
sorted_hierarchy = sorted(hierarchy_list, key=lambda x: x.get("level", 0))
# Unimos los nombres con ' > '
specialization_path = " > ".join([item["name"] for item in sorted_hierarchy]) if sorted_hierarchy else None
# Extraer la información principal de la rúbrica
rubric_info = json_data.get("rubric", {})
return DocumentEvaluationRubric(
name=rubric_info.get("name", "Sin nombre"),
description=str(rubric_info["description"]) if rubric_info.get("description") is not None else None,
category=specialization_path,
criteria=parse_criteria(json_data.get("criteria", []))
)