feat: Introduce bot-digitador service for automated data entry in Integración Total. Add CLI and GUI interfaces for CSV processing, implement auto-start functionality on Windows, and enhance README with setup instructions and usage details. Include necessary configurations in docker-compose for service integration.
This commit is contained in:
@@ -3,6 +3,7 @@ from domain.verificador_st.pipeline import (
|
||||
consolidado_to_records,
|
||||
export_no_aptos_csv,
|
||||
export_paso_bot_csv,
|
||||
export_todos_csv,
|
||||
process_cleaning_sources,
|
||||
)
|
||||
|
||||
@@ -10,5 +11,6 @@ __all__ = [
|
||||
"consolidado_to_records",
|
||||
"export_no_aptos_csv",
|
||||
"export_paso_bot_csv",
|
||||
"export_todos_csv",
|
||||
"process_cleaning_sources",
|
||||
]
|
||||
|
||||
@@ -51,6 +51,8 @@ TABLA_MODERADORA = {
|
||||
2025: {4700, 19200, 50300},
|
||||
2026: {5000, 20100, 52800},
|
||||
}
|
||||
# Todos los montos de la tabla; la clasificación no filtra por año.
|
||||
VALORES_MODERADORA = {v for vals in TABLA_MODERADORA.values() for v in vals}
|
||||
|
||||
# Longitudes según tabla entregada por el usuario.
|
||||
# Los tipos marcados como alfanuméricos permiten letras y números.
|
||||
@@ -554,14 +556,15 @@ def normalizar_autorizacion(valor):
|
||||
|
||||
def separar_copago_moderadora(valor, anio):
|
||||
"""
|
||||
Si el valor coincide con tabla moderadora del año => cuota_moderadora.
|
||||
Si no coincide => copago.
|
||||
Si el valor coincide con cualquier cuota de la tabla (sin importar el año)
|
||||
=> cuota_moderadora. Si no coincide => copago.
|
||||
El parámetro anio se conserva por compatibilidad de firma.
|
||||
"""
|
||||
monto = to_int(valor, default=0)
|
||||
if monto == 0:
|
||||
return 0, 0
|
||||
|
||||
if anio in TABLA_MODERADORA and monto in TABLA_MODERADORA[anio]:
|
||||
if monto in VALORES_MODERADORA:
|
||||
return 0, monto
|
||||
|
||||
return monto, 0
|
||||
|
||||
@@ -223,3 +223,21 @@ def export_no_aptos_csv(rows: list[dict[str, Any]]) -> str:
|
||||
df = df.rename(columns=CSV_FINAL_IT_RENAME)
|
||||
df = df.reindex(columns=headers)
|
||||
return df.to_csv(sep="|", index=False, encoding="utf-8-sig")
|
||||
|
||||
|
||||
def export_todos_csv(rows: list[dict[str, Any]]) -> str:
|
||||
"""CSV pipe-separated con todas las filas (aptos y no aptos) e OBSERVACION."""
|
||||
headers = [*CSV_FINAL_IT_HEADERS, "OBSERVACION"]
|
||||
if not rows:
|
||||
df = pd.DataFrame(columns=headers)
|
||||
else:
|
||||
df = pd.DataFrame(rows)
|
||||
for c in COLUMNAS_FINAL_IT:
|
||||
if c not in df.columns:
|
||||
df[c] = ""
|
||||
if "OBSERVACION" not in df.columns:
|
||||
df["OBSERVACION"] = ""
|
||||
df = df.reindex(columns=[*COLUMNAS_FINAL_IT, "OBSERVACION"]).fillna("")
|
||||
df = df.rename(columns=CSV_FINAL_IT_RENAME)
|
||||
df = df.reindex(columns=headers)
|
||||
return df.to_csv(sep="|", index=False, encoding="utf-8-sig")
|
||||
|
||||
Reference in New Issue
Block a user