Spaces:
Sleeping
Sleeping
Adzacam commited on
Commit ·
2ee6390
1
Parent(s): 9f5c52c
feat: add financial reporting fields to schema, update data ingestion logic, and lower AI confidence threshold for revision
Browse files
app.py
CHANGED
|
@@ -138,6 +138,10 @@ class ProcessSheetPayload(BaseModel):
|
|
| 138 |
# Financial fields
|
| 139 |
monto_deuda: Optional[float] = 0.0
|
| 140 |
cuotas_impagas: Optional[int] = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
|
| 142 |
# Marketing fields
|
| 143 |
leads: Optional[int] = 0
|
|
@@ -451,7 +455,7 @@ def analyze_nlp_only(payload: ProcessSheetPayload, db: Session = Depends(get_db)
|
|
| 451 |
payload.incumplimiento_tareas < 0 or payload.incumplimiento_tareas > 100
|
| 452 |
)
|
| 453 |
|
| 454 |
-
forzar_revision = (confianza_ia < 0.
|
| 455 |
|
| 456 |
alertas_disparadas = []
|
| 457 |
if payload.tipo_fuente not in ["FINANCE", "BUDGET", "MARKETING", "SURVEYS"]:
|
|
@@ -592,7 +596,7 @@ def procesar_lote_tabular(payloads: List[ProcessSheetPayload], db: Session = Dep
|
|
| 592 |
else:
|
| 593 |
entidades = ner_engine.extract_entities(payload.texto_celda)
|
| 594 |
confianza_ia = sum([e["score"] for e in entidades]) / len(entidades) if entidades else 1.0
|
| 595 |
-
forzar_revision = confianza_ia < 0.
|
| 596 |
|
| 597 |
nombre_resuelto = payload.texto_celda[:200].strip()
|
| 598 |
estudiante = next((e for e in estudiantes_db if e.codigo_estudiante == payload.codigo_estudiante), None) if payload.codigo_estudiante else None
|
|
@@ -626,8 +630,17 @@ def procesar_lote_tabular(payloads: List[ProcessSheetPayload], db: Session = Dep
|
|
| 626 |
hechos_budget.append(FactRentabilidadPresupuesto(
|
| 627 |
id_modulo=payload.id_modulo, id_tiempo=payload.id_tiempo,
|
| 628 |
id_categoria=1,
|
| 629 |
-
monto_ejecutado=getattr(payload, '
|
| 630 |
-
monto_meta=getattr(payload, '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 631 |
))
|
| 632 |
else: # ACADEMIC
|
| 633 |
hechos_academic.append(FactRendimientoAcademico(
|
|
@@ -642,6 +655,7 @@ def procesar_lote_tabular(payloads: List[ProcessSheetPayload], db: Session = Dep
|
|
| 642 |
if hechos_marketing: db.add_all(hechos_marketing)
|
| 643 |
if hechos_surveys: db.add_all(hechos_surveys)
|
| 644 |
if hechos_budget: db.add_all(hechos_budget)
|
|
|
|
| 645 |
if hechos_academic: db.add_all(hechos_academic)
|
| 646 |
|
| 647 |
db.commit()
|
|
@@ -1477,7 +1491,7 @@ def batch_analyze_nlp(
|
|
| 1477 |
db.flush()
|
| 1478 |
estudiantes_existentes.append(estudiante)
|
| 1479 |
|
| 1480 |
-
candidatos_difusos = get_top_matches(nombre_resuelto, estudiantes_existentes, top_k=5) if requiere_revision or (confianza_ia < 0.
|
| 1481 |
|
| 1482 |
# Calculo de alertas
|
| 1483 |
alertas = []
|
|
|
|
| 138 |
# Financial fields
|
| 139 |
monto_deuda: Optional[float] = 0.0
|
| 140 |
cuotas_impagas: Optional[int] = 0
|
| 141 |
+
monto_ejecutado: Optional[float] = 0.0
|
| 142 |
+
monto_meta: Optional[float] = 0.0
|
| 143 |
+
estado_cartera: Optional[str] = None
|
| 144 |
+
tipo_alerta: Optional[str] = None
|
| 145 |
|
| 146 |
# Marketing fields
|
| 147 |
leads: Optional[int] = 0
|
|
|
|
| 455 |
payload.incumplimiento_tareas < 0 or payload.incumplimiento_tareas > 100
|
| 456 |
)
|
| 457 |
|
| 458 |
+
forzar_revision = (confianza_ia < 0.50) or fuera_de_rango
|
| 459 |
|
| 460 |
alertas_disparadas = []
|
| 461 |
if payload.tipo_fuente not in ["FINANCE", "BUDGET", "MARKETING", "SURVEYS"]:
|
|
|
|
| 596 |
else:
|
| 597 |
entidades = ner_engine.extract_entities(payload.texto_celda)
|
| 598 |
confianza_ia = sum([e["score"] for e in entidades]) / len(entidades) if entidades else 1.0
|
| 599 |
+
forzar_revision = confianza_ia < 0.50
|
| 600 |
|
| 601 |
nombre_resuelto = payload.texto_celda[:200].strip()
|
| 602 |
estudiante = next((e for e in estudiantes_db if e.codigo_estudiante == payload.codigo_estudiante), None) if payload.codigo_estudiante else None
|
|
|
|
| 630 |
hechos_budget.append(FactRentabilidadPresupuesto(
|
| 631 |
id_modulo=payload.id_modulo, id_tiempo=payload.id_tiempo,
|
| 632 |
id_categoria=1,
|
| 633 |
+
monto_ejecutado=getattr(payload, 'monto_ejecutado', getattr(payload, 'costo', 0)),
|
| 634 |
+
monto_meta=getattr(payload, 'monto_meta', getattr(payload, 'costo', 0))
|
| 635 |
+
))
|
| 636 |
+
elif area == "FINANCE":
|
| 637 |
+
hechos_finance.append(FactSituacionFinanciera(
|
| 638 |
+
id_estudiante=estudiante.id_estudiante,
|
| 639 |
+
id_tiempo=payload.id_tiempo,
|
| 640 |
+
monto_deuda=getattr(payload, 'monto_deuda', 0),
|
| 641 |
+
cuotas_impagas=getattr(payload, 'cuotas_impagas', 0),
|
| 642 |
+
estado_cartera=getattr(payload, 'estado_cartera', 'PENDIENTE'),
|
| 643 |
+
tipo_alerta=getattr(payload, 'tipo_alerta', 'NINGUNA')
|
| 644 |
))
|
| 645 |
else: # ACADEMIC
|
| 646 |
hechos_academic.append(FactRendimientoAcademico(
|
|
|
|
| 655 |
if hechos_marketing: db.add_all(hechos_marketing)
|
| 656 |
if hechos_surveys: db.add_all(hechos_surveys)
|
| 657 |
if hechos_budget: db.add_all(hechos_budget)
|
| 658 |
+
if hechos_finance: db.add_all(hechos_finance)
|
| 659 |
if hechos_academic: db.add_all(hechos_academic)
|
| 660 |
|
| 661 |
db.commit()
|
|
|
|
| 1491 |
db.flush()
|
| 1492 |
estudiantes_existentes.append(estudiante)
|
| 1493 |
|
| 1494 |
+
candidatos_difusos = get_top_matches(nombre_resuelto, estudiantes_existentes, top_k=5) if requiere_revision or (confianza_ia < 0.50 and area in ['ACADEMIC', 'FINANCE']) else []
|
| 1495 |
|
| 1496 |
# Calculo de alertas
|
| 1497 |
alertas = []
|