Spaces:
Sleeping
Sleeping
Adzacam commited on
Commit ·
432899b
1
Parent(s): 5bfe767
feat: implement dynamic budget category creation based on program names during data ingestion
Browse files
app.py
CHANGED
|
@@ -528,7 +528,9 @@ def procesar_lote_tabular(payloads: List[ProcessSheetPayload], db: Session = Dep
|
|
| 528 |
tiempos_db = {t.id_tiempo for t in db.query(DimTiempo).all()}
|
| 529 |
docs_db = {d.id_documento for d in db.query(DimOrigenDocumental).all()}
|
| 530 |
users_db = {u.id for u in db.query(Users).all()}
|
| 531 |
-
|
|
|
|
|
|
|
| 532 |
|
| 533 |
nuevos_estudiantes = []
|
| 534 |
nuevos_docentes = []
|
|
@@ -574,9 +576,13 @@ def procesar_lote_tabular(payloads: List[ProcessSheetPayload], db: Session = Dep
|
|
| 574 |
# Para presupuestos asumimos categoría base por defecto (ID 1) si no existe
|
| 575 |
area_check = getattr(payload, 'tipo_fuente', 'ACADEMIC')
|
| 576 |
if not area_check: area_check = 'ACADEMIC'
|
| 577 |
-
if area_check == 'BUDGET'
|
| 578 |
-
|
| 579 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 580 |
|
| 581 |
# Insertar nuevas dimensiones en bloque si existen
|
| 582 |
if nuevos_docentes: db.add_all(nuevos_docentes)
|
|
@@ -628,9 +634,10 @@ def procesar_lote_tabular(payloads: List[ProcessSheetPayload], db: Session = Dep
|
|
| 628 |
puntuacion=getattr(payload, 'puntuacion', 5.0), comentario=nombre_resuelto
|
| 629 |
))
|
| 630 |
elif area == "BUDGET":
|
|
|
|
| 631 |
hechos_budget.append(FactRentabilidadPresupuesto(
|
| 632 |
id_modulo=payload.id_modulo, id_tiempo=payload.id_tiempo,
|
| 633 |
-
id_categoria=1,
|
| 634 |
monto_ejecutado=getattr(payload, 'monto_ejecutado', getattr(payload, 'costo', 0)),
|
| 635 |
monto_meta=getattr(payload, 'monto_meta', getattr(payload, 'costo', 0))
|
| 636 |
))
|
|
|
|
| 528 |
tiempos_db = {t.id_tiempo for t in db.query(DimTiempo).all()}
|
| 529 |
docs_db = {d.id_documento for d in db.query(DimOrigenDocumental).all()}
|
| 530 |
users_db = {u.id for u in db.query(Users).all()}
|
| 531 |
+
|
| 532 |
+
existing_categorias = {c.nombre_categoria: c.id_categoria for c in db.query(DimCategoriaFinanciera).all()}
|
| 533 |
+
categorias_db = set(existing_categorias.values())
|
| 534 |
|
| 535 |
nuevos_estudiantes = []
|
| 536 |
nuevos_docentes = []
|
|
|
|
| 576 |
# Para presupuestos asumimos categoría base por defecto (ID 1) si no existe
|
| 577 |
area_check = getattr(payload, 'tipo_fuente', 'ACADEMIC')
|
| 578 |
if not area_check: area_check = 'ACADEMIC'
|
| 579 |
+
if area_check == 'BUDGET':
|
| 580 |
+
cat_name = payload.programa.strip() if getattr(payload, 'programa', None) else "Presupuesto General"
|
| 581 |
+
if cat_name not in existing_categorias:
|
| 582 |
+
new_id = max(existing_categorias.values() or [0]) + 1
|
| 583 |
+
nuevas_categorias.append(DimCategoriaFinanciera(id_categoria=new_id, nombre_categoria=cat_name, tipo="EGRESO"))
|
| 584 |
+
existing_categorias[cat_name] = new_id
|
| 585 |
+
categorias_db.add(new_id)
|
| 586 |
|
| 587 |
# Insertar nuevas dimensiones en bloque si existen
|
| 588 |
if nuevos_docentes: db.add_all(nuevos_docentes)
|
|
|
|
| 634 |
puntuacion=getattr(payload, 'puntuacion', 5.0), comentario=nombre_resuelto
|
| 635 |
))
|
| 636 |
elif area == "BUDGET":
|
| 637 |
+
cat_name = payload.programa.strip() if getattr(payload, 'programa', None) else "Presupuesto General"
|
| 638 |
hechos_budget.append(FactRentabilidadPresupuesto(
|
| 639 |
id_modulo=payload.id_modulo, id_tiempo=payload.id_tiempo,
|
| 640 |
+
id_categoria=existing_categorias.get(cat_name, 1),
|
| 641 |
monto_ejecutado=getattr(payload, 'monto_ejecutado', getattr(payload, 'costo', 0)),
|
| 642 |
monto_meta=getattr(payload, 'monto_meta', getattr(payload, 'costo', 0))
|
| 643 |
))
|