From 22a3348bd88bbdb139f4b8d099d9bfae3a04950a Mon Sep 17 00:00:00 2001 From: Ivan Date: Fri, 19 Jun 2026 15:11:09 -0500 Subject: [PATCH] =?UTF-8?q?fix(mantenibilidad):=20eliminar=202=20warnings?= =?UTF-8?q?=20de=20deuda=20t=C3=A9cnica=20(future-proofing)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cierre de #8. La red de seguridad (smoke tests de generadores) destapó 2 warnings reales — ahora corregidos, con los tests como guard: 1. gen_excel_eme: midagri.groupby("DEPARTAMENTO").apply(...) emitía FutureWarning de pandas (apply operando sobre la columna de agrupación, deprecado en pandas>=2.2 → rompería en una versión futura). Fix: include_groups=False. Verificado seguro: _build_district_text solo usa PROVINCIA/DISTRITO, no DEPARTAMENTO, así que excluir la columna de grupo no cambia el resultado. 2. data_processor.get_departamento_data: df_depto era un slice y al agregarle la columna "_fecha" emitía SettingWithCopyWarning (code smell que puede hacer que la escritura no surta efecto). Fix: .copy() explícito al filtrar. Sin cambios de comportamiento (smoke tests + dept tests verdes). La suite pasa de "51 passed, 2 warnings" a "51 passed" limpio. Co-Authored-By: Claude Opus 4.8 --- data_processor.py | 6 ++++-- gen_excel_eme.py | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/data_processor.py b/data_processor.py index 11c1706..f1e9ff5 100644 --- a/data_processor.py +++ b/data_processor.py @@ -873,8 +873,10 @@ def _get_departamento_data_impl(datos, depto): midagri = datos["midagri"] materia = datos["materia"] - # Filtrar MIDAGRI por departamento (sin copy — solo lectura) - df_depto = midagri[midagri["DEPARTAMENTO"] == depto_upper] + # Filtrar MIDAGRI por departamento. .copy() explícito: más abajo se le + # agrega la columna "_fecha"; sin la copia es un slice y pandas emite + # SettingWithCopyWarning (y el resultado podría no escribirse). + df_depto = midagri[midagri["DEPARTAMENTO"] == depto_upper].copy() mat_depto = materia[materia["DEPARTAMENTO"] == depto_upper] # Datos estáticos del departamento diff --git a/gen_excel_eme.py b/gen_excel_eme.py index ecc34bb..7ef1892 100644 --- a/gen_excel_eme.py +++ b/gen_excel_eme.py @@ -39,8 +39,11 @@ def generate_reporte_eme(datos): # Distritos por departamento if "DISTRITO" in midagri.columns and "PROVINCIA" in midagri.columns: + # include_groups=False: pandas>=2.2 deprecó que apply opere sobre la + # columna de agrupación. _build_district_text solo usa PROVINCIA/DISTRITO + # (no DEPARTAMENTO), así que excluirla no cambia el resultado. dist_info = midagri.groupby("DEPARTAMENTO").apply( - lambda g: _build_district_text(g) + lambda g: _build_district_text(g), include_groups=False ).reset_index() dist_info.columns = ["DEPARTAMENTO", "DISTRITOS"] dept_data = dept_data.merge(dist_info, on="DEPARTAMENTO", how="left")