IDS ltda 35 años
IDS ltda 35 años
Hub de Áreas Portal interno IDS
BI sincronizado

Buen día, Colaborador.

Tenés tareas pendientes y propuestas esperando revisión.

Power BI Clima… Último refresco del dataset corporativo: hoy · 4 tableros publicados
Clientes activos
48
+3 este mes
Horas ahorradas
3 810
Bots en producción
64
todos en verde
ROI promedio
312%
+18 pts

IDS Comunica

Cargando publicaciones…

Mi día

Tareas de hoy
Cargando tareas...

Actividad de bots

— en línea
Bot Última corrida Éxito
Cargando...

Radio IDS 74.1 FM

Pausada
Radio IDS 74.1 FM
Tocá play para escuchar
Abrir la playlist en YouTube Music

Áreas

6 áreas · 77 accesos

Comercial

Clientes, propuestas, estimación de horas y licitaciones.

4 accesos activa

Desarrollo

PDD/SDD, flujos RPA, DevOps, sprints y herramientas internas.

22 accesos en curso

RRHH y Administración

Licencias, insumos, recibos, inventario y legajos de personal.

6 accesos activa

Talento

Candidatos, base de talentos, descripciones de puesto y salarios.

0 accesos activa

Directiva

Tableros ejecutivos Power BI: ventas, CRM de desarrollo y ROI del Home.

3 accesos activa

Próximamente

Nueva área en construcción. Se habilita cuando el módulo esté publicado.

— inactiva
Rendimiento y Funcionamiento de HomeIDS
Métricas de uso, salud de base de datos SQL Server, rendimiento de consultas e infraestructura en tiempo real
Módulos Activos (30d)
0 / 10
Cantidad de módulos del sistema usados por el equipo en el mes.
Usuarios Activos (30d)
0 activos
Miembros del equipo de desarrollo con tareas activas o logins.
Tamaño de Base de Datos
0.00 MB
Almacenamiento actual ocupado por el esquema en SQL Server.
Tasa Éxito Procesos
100 %
Porcentaje de ejecuciones exitosas de IA e integraciones.
Horas Hombre Ahorradas
0.0 h
Tiempo estimado ahorrado mediante generador de PDD/SDD.
Locks Activos SQL
0 locks
Locks concurrentes activos en este instante en SQL Server.

Horas Ahorradas por Módulo Interno

Documentos Generados

Top 5 Consultas más Lentas (por CPU)

CPU Promedio Ejecuciones Sentencia SQL
No hay telemetría de consultas aún.

Bloqueos y Locks Activos en SQL

Session ID Tipo Recurso Modo Estado
No hay bloqueos activos en la base de datos.

Log de Trazabilidad y Auditoría de Procesos

Fecha / Hora Módulo KPI Categoría Valor Detalles del Evento Usuario Responsable
No se han registrado métricas de productividad aún.
Seguridad
Sesiones activas, cuentas bloqueadas y actividad de autenticación en tiempo real.
Sesiones Activas
0
Sesiones con token válido y no revocado en este momento.
Cuentas Bloqueadas
0
Bloqueadas ahora mismo por intentos fallidos repetidos.
Intentos Fallidos (24h)
0
Intentos de login incorrectos en las últimas 24 horas.
Eventos de Error (24h)
0
Errores registrados en el log del sistema, cualquier módulo.

Sesiones Activas

Usuario IP Dispositivo Inicio Expira Acción
Cargando sesiones...

Cuentas Bloqueadas

Usuario Intentos Bloqueada hasta
Cargando...

Centro de Actividad

Fecha / Hora Nivel Módulo Evento Usuario
Cargando actividad...
Relevamiento de Proceso Inicial
IDS Ltda. — Cliente: Cliente | Proyecto: Proyecto
🔒 **Aviso de Confidencialidad y Seguridad:** Toda la información proporcionada en este formulario es de carácter estrictamente confidencial. IDS Ltda. garantiza el cumplimiento de los más altos estándares de seguridad de la información para la protección y resguardo de sus procesos de negocio.
Datos del Referente Técnico en su Empresa (Opcional)
¿Cómo se realiza el proceso hoy en día?
¿Cuáles son los cuellos de botella o dolores?
¿Qué esperan de la automatización?
Estimador de Horas & Calculadora de ROI RPA
IDS Ltda. — Análisis de Eficiencia Operativa y Retorno de Inversión Comercial
💡 **Herramienta Comercial de Impacto:** Esta calculadora permite evaluar el ahorro anual en horas y dinero que logrará el cliente al automatizar un proceso manual con un Bot de RPA (Rocketbot / Python).
1. Datos del Cliente y Proceso Manual
2. Estimación de Costos de Automatización
Ahorro de Tiempo Anual
531 hs

Horas hombre liberadas al año para tareas estratégicas de mayor valor.

Ahorro Económico Bruto/Año
$7,968 USD

Costo operativo manual evitado cada año con el uso del Robot RPA.

Período de Recuperación (Payback)
3.8 meses

🟢 Excelente: La inversión se recupera en menos de 4 meses.

3. Proyección de Ahorro a 3 Años (Línea de Tiempo)
Año 1: $4,968 USD (Neto) Año 2: $7,468 USD Año 3: $7,468 USD
🎉 Ahorro Neto Total Proyectado a 3 Años: $19,904 USD

Metodología de Cálculo Financiero y Comercial

El cálculo de rentabilidad del proyecto RPA se realiza utilizando las siguientes métricas comerciales y financieras estandarizadas:

  • Gasto Manual Anual (AS-IS): Ejecuciones/año × Horas manuales/ejecución × Costo hora empleado. Determina el costo operativo actual del cliente antes de automatizar.
  • Ahorro Neto Anual: Calculado deduciendo los costos de la solución RPA del ahorro bruto anual (100% de la carga de horas manuales):
    • Año 1: Ahorro Bruto − Costo Desarrollo − Mantenimiento/Licencia Anual
    • Año 2 y 3: Ahorro Bruto − Mantenimiento/Licencia Anual
  • Período de Recuperación (Payback / Retorno en Meses): Costo Desarrollo ÷ Ahorro Neto Mensual. Representa los meses necesarios para amortizar la inversión inicial (donde el Ahorro Neto Mensual es (Ahorro Bruto Anual − Licencia Anual) ÷ 12).
  • Retorno de Inversión (ROI % Acumulado): (Ahorro Neto Acumulado a 3 Años ÷ Costo Desarrollo) × 100. Determina la tasa de retorno porcentual del capital invertido en 3 años.
POWER BI
Dashboard Ejecutivo de Negocio & Entregables
Métricas en tiempo real sincronizadas con SQL Server (HomeIDSDB) — Clientes, Pipelines, Tiempos y ROI.
Clima… SQL Server En Vivo
Cuentas & Clientes
0
Base SQL Server Activa
Relevamientos AS-IS
0
Encuestas comerciales registradas
Horas Invertidas
0.0 h
Estimado: 0.0 h | Restante: 0.0 h
Ver Trazabilidad Tareas CRM →
Alertas Post-Venta
0
Seguimientos a 30 días
Robots en Producción
0
Procesos automatizados
Ahorro Anual (ROI)
$0
~0 hrs hombre ahorradas
Ver Cálculo ($8.75/h) →

Pipeline de Proyectos por Fase

En tiempo real

Tareas por Categoría

Horas por Cuenta de Cliente

Estimado vs. Real

Estados de Tareas de Desarrollo

To Do / Doing / Testing / Done
Encuestas de Relevamiento Recibidas
To Do Personal
Tu lista de tareas de la semana (Lunes a Viernes). Lo que no termines el viernes pasa solo al lunes siguiente; lo terminado se limpia al empezar la semana nueva.
Cargando resumen de la semana...
Lunes 0h 0/0
Martes 0h 0/0
Miércoles 0h 0/0
Jueves 0h 0/0
Viernes 0h 0/0
Ficha de Ingreso de Cliente
IDS Ltda. — Registro de Relevamiento Interno
1. Datos Básicos del Proyecto
2. Datos del Contacto Comercial (Persona que nos contacta)
3. Datos de la Contraparte / Responsable Técnico
4. Métricas y Tiempos del Proceso Manual
5. Descripción Operativa del Proceso
Gestor de Boletines (Mailchimp)
Diseña, personaliza y envía campañas de boletines masivos a tus clientes y leads de HubSpot.
Redactar Nueva Campaña
Audiencia seleccionada: --
Vista Previa en Vivo
Completa los campos a la izquierda para previsualizar.
Boletines Enviados
Conector Externo de HubSpot CRM
Visualiza el pipeline de leads sincronizados y la salud de contactos de marketing de IDS.

Estado de Sincronización: Cargando...

Cargando...
MQLs (Marketing Leads)
--
SQLs (Sales Qualified)
--
Clientes Ganados (Won)
--
Bandeja de Leads Recientes (HubSpot)
Lead Fuente Estado Acciones Acción IA
Adquisiciones & Portafolio de Clientes
Visualiza e inventaría qué software, licencias o pólizas de soporte ha comprado cada cliente.
Registrar Compra / Servicio
Historial de Licencias y Servicios Activos
Cliente Servicio Costo Mensual Estado Eliminar
Clasificación y Tipología de Procesos
Clasifica los proyectos para analizar la distribución tecnológica y el ROI promedio.
Categorizar Proyecto
Proporción de Tipologías del Portafolio
Redactor de Contenidos IA (AI Copywriter)
Genera copys profesionales de marketing y lanzamientos tecnológicos usando inteligencia artificial en tiempo real.
Especificaciones del Boletín
Copiado Generado
Completa las especificaciones a la izquierda y presiona 'Generar Boletín con IA' para redactar el boletín interactivo.
Planificar Reunión de Diseño
Herramienta Comercial para agendar la sesión técnica inicial en Microsoft Teams
Selección de Fecha y Hora

Selecciona la fecha y hora de la reunión. Al hacer clic en "Crear Reunión", se abrirá Microsoft Teams localmente con los integrantes predeterminados ya invitados:

Invitados automáticos por defecto:
Generador de Documentos PDD
Genere borradores oficiales de PDD en Word, pre-cargando los datos o redactando de cero.
1. Información General del Proyecto
2. Relevamiento y Requisitos
Ya viene con el equipo de IDS por defecto -- se puede editar o agregar contactos del cliente abajo (Sponsor, usuario clave, etc.).
3. Alcance e Inclusiones
Modelo de IA sugerido por paso (Opcional -- no tiene que ver con el diagrama de abajo)
Si el proceso no usa IA en ningún paso, dejalo vacío -- esta sección directamente no aparece en el PDD generado.
4. Pasos del Flujo de Automatización (Diagramador) — Parte 1: recepción, clasificación y ejecución

Escriba los pasos secuenciales del flujo (uno por línea). El diagramador automático de Pillow está emulado abajo usando SVG en tiempo real, o cargue un diagrama personalizado del editor de flujos.

Sube un archivo .json de maqueta para cargar los pasos de texto, o un archivo .png exportado para insertarlo en el Word.
Previsualización del Diagrama (Parte 1)
4.b Parte 2: decisión de continuidad y salidas (Opcional)

Solo hace falta completar esto si el flujo es lo bastante largo/complejo como para convenir partirlo en dos diagramas. Si se deja vacío, el PDD queda con un solo diagrama de flujo (sin hablar de "parte 1/parte 2") -- no aparece ninguna nota pendiente ni un diagrama inventado.

Previsualización del Diagrama (Parte 2)
Generador de Propuesta Comercial
Genere la Propuesta Comercial en PowerPoint (formato de marca IDS) a partir de un PDD ya generado.
Trae Cliente, Proyecto, Alcance funcional y Versión del PDD elegido -- todo queda editable después.
1. Información General y Destinatario

La fecha de la carátula se completa sola con la fecha de hoy al generar el documento.

2. Aspectos Técnicos (copia del PDD)

Va a la tabla "Bots propuestos a desarrollar" de la propuesta, en la sección técnica justo después de la introducción.

3. Horas del Proyecto (trasfondo temporal)

Va en "Servicios Estimados y Equipo", justo después de los aspectos técnicos.

4. Parámetros Monetarios (aspectos económicos)
SDD Builder — Diseño Técnico
Complete el diseño de arquitectura y especificación técnica de bots orquestadores e hijos.
A. Datos Generales del SDD
B. Robots del Sistema
Configuración detallada de Bots Hijos
C. Parámetros Transversales
CRM IDS — Gestión de Sprints y Tiempos
Planifique sprints, asigne tareas, registre tiempos de desarrollo reales y controle desvíos.
POWER BI ANALYTICS

Métricas de Rendimiento, Capacidad & Sprints

Telemetría de desarrollo en vivo calculada sobre la base de datos SQL Server (HomeIDSDB).

Filtros de Proyecto / Período y Exportación

Velocidad Promedio
0.0 h
Horas completadas / sprint
Tasa Cumplimiento
0.0 %
Entregado vs. Estimado
Lead Time Promedio
0.0 d
Días desde creación a cierre
Tasa Retrabajo
0.0 %
Reaperturas de tareas Done
Desvío Estimación
0.0 %
Diferencia Real vs. Est.
Horas Restantes
0.0 h
Backlog activo pendiente

Capacidad vs. Horas Reales por Desarrollador

Estimado vs. Real

Categorías de Tareas

Consumo de Horas por Proyecto

Estado del Flujo de Sprints

Tendencia de Actividad

Tareas completadas y horas registradas del período actual contra el período anterior (ventana móvil de 7 y 30 días).

Historial de Carga de Trabajo

Horas pendientes por persona, capturadas una vez por día -- para ver sobrecarga sostenida en el tiempo, no solo el momento puntual en que se mira esta pantalla.

Líneas de Tiempo de Sprints Activos

Estado y Control de Horas por Proyecto

Cliente / Proyecto Sprint Activo Progreso Tareas Horas Estimadas Horas Reales Horas Restantes Acción
CRM Administración
Tablero Kanban de tareas internas de Administración, con datos y analítica propios, independientes de Desarrollo y SMI.
Fichaje de Visitas
Marcá tu entrada y salida en cada visita a cliente, con hora y ubicación, y dejá anotado qué hiciste.

Historial de visitas

Empleado Cliente Entrada Salida Tareas realizadas
Base de Clientes
Ver, corregir y eliminar los datos de clientes cargados en el sistema.
Clientes registrados

Usá "Nuevo Cliente" para registrar clientes sin proyecto asignado: sin proyectos activos, con proyectos ya cerrados, o documentados antes de la implementación del Home.

Nombre Empresa RUT Email Teléfono Referente Técnico Acciones
Área de Empleados - Administración IDS
Gestione sus solicitudes de licencias, adelantos de sueldos, recibos y activos asignados.

PRÓXIMAMENTE

Estamos terminando de preparar el Portal del Empleado. Licencias, recibos de sueldo, adelantos, bienes e insumos van a estar disponibles acá muy pronto.

Calendario Post-Venta
Fidelización comercial. Alertador a los 30 días hábiles de la entrega del proyecto.

A continuación se listan las alertas que han alcanzado o superado los 30 días hábiles post-proyecto. Úselas para realizar la llamada de fidelización.

Registrar Cierre del Desarrollo
Agenda Completa de Seguimiento
ID Cliente Proyecto Fecha Fin Fecha Alerta Estado / Contacto
Tablero Kanban de Proyectos y Oportunidades
Gestión unificada del estado del ciclo de vida de automatizaciones en IDS Ltda.

1. Relevamiento Inicial

2. Diseño PDD / SDD

3. En Desarrollo

4. Pruebas (UAT)

5. En Producción

Generador de Manual de Handover y Operación
Documento oficial PDF con la identidad corporativa IDS Ltda 35 Años para entrega al cliente.
Auto-completar desde el CRM

Elegí un proyecto para prellenar el resumen del proceso y los participantes a partir de las tareas ya completadas (Done) en sus sprints. No pisa lo que ya hayas escrito abajo, solo agrega al final.

1. Configuración del Documento de Entrega
2. Secciones del Manual
Vista Previa del Documento PDF (Formato IDS 35 Años)
DOCUMENTACIÓN TÉCNICA Y HANDOVER

Automatización de descarga y renombrado de comprobantes (CFE)

IDS LTDA / Garino Hnos.
IDS Ltda — 35 años
FECHA DE ENTREGA
20 de julio de 2026
DURACIÓN ESTIMADA
11 min 49 s
MODALIDAD DE EJECUCIÓN
Automatización Programada / Orquestador
PARTICIPANTES
Ignacio Bálsamo (IDS) · Juan Manuel Pacheco (IDS)
1

Resumen del proceso implementado

2

Requisitos y compromisos de operación

→ Plazo estimado: durante el transcurso de los primeros 30 días hábiles post-entrega.
3

Próximos pasos e instrucciones para el cliente

4

Observaciones adicionales

25 de Mayo 741 Oficinas 401
290096009
Estado de Documentación
Qué documentos ya se subieron a SharePoint para un proyecto, y cuáles todavía faltan — sin tener que entrar carpeta por carpeta a buscarlos.
Conversor de Transcripciones a Actas (Teams)
Área Desarrollo — Convierte transcripciones de Teams en actas con formato y diseño corporativo de IDS.
1. Entrada de Transcripción y Configuración

Arrastrá tu archivo acá o hacé clic para buscar

Soporta formatos .docx, .vtt, .srt, .txt

Subir Logo de Cliente

Formatos: PNG, JPG, JPEG
Cualquier aclaración que ayude a que el acta salga mejor: nombres correctos, contexto que la transcripción no deja claro, qué partes ignorar, etc.
Vault Seguro de Credenciales (AES-256)
Área Desarrollo — Almacenamiento seguro y cifrado de llaves, APIs y accesos de clientes.
Agregar / Actualizar Credencial
Credenciales en la Bóveda
Cliente Llave Valor Cifrado Fecha Registro Acciones
Vault Personal de Empleados
Área Desarrollo — Asigná credenciales iniciales (mail institucional, CRM, etc.) a una persona, o recuperá su vault si pierde acceso a su cuenta. Cada vez que entrás al vault de otra persona queda registrado en el log de Seguridad.

Empleados

Nombre Email Rol Credenciales guardadas
Monitor de Procesos
Área Desarrollo — Todos los procesos que HomeIDS corre solo (scraping de licitaciones, catálogos de proveedores, noticias, cotizaciones, avisos, etc.), cuándo corrió cada uno por última vez, cuándo corre de nuevo, y el historial de fallas.
Procesos monitoreados
0
OK en su última corrida
0
Con error reciente
0

Procesos

Proceso Categoría Última corrida Resultado Próxima corrida
Monitor de Bots
Área Desarrollo — Bots RPA entregados a clientes. Cada bot reporta su propio resultado al terminar de correr, autenticado con una API key propia -- HomeIDS no tiene acceso a dónde corren ni a sus logs.
Bots activos
0
En línea
0
Atrasados
0

Bots

Bot Cliente Área Frecuencia esperada Última corrida Éxito Estado
Gestión de Usuarios y Roles
Área Desarrollo — Asignación de rol y nivel. Ya no existe la auto-asignación: toda cuenta nueva espera acá hasta que se le asigne un rol.
Usuarios
Nombre Email Rol Nivel Acciones
Solicitudes de alta de usuario

Administración manda estas solicitudes desde el legajo de una persona que todavía no tiene cuenta en HomeIDS. Al aprobar se crea la cuenta con una contraseña temporal y se le va a pedir que la cambie en su próximo login.

Nombre Email propuesto Pedido por Fecha Acciones
Roles pre-asignados

Para gente que todavía nunca inició sesión en HomeIDS. El rol se aplica solo la primera vez que esa persona se loguea.

No aplica para este rol
Email Rol Nivel Fecha Acciones
Mis Estadísticas
Vista personal de tu actividad registrada en HomeIDS.
Resumen de Actividad
0
Relevamientos de cliente
Formularios completados
0
Propuestas comerciales
Generadas con éxito
0
Licitaciones Asignadas

Cuenta tu actividad registrada en la base de datos SQL Server institucional.

Dashboard BI Director
Métricas consolidadas de las 4 áreas de IDS Ltda., para analizar el rendimiento de toda la empresa.

Comercial

Desarrollo

Comunicación

Administración

Top 5 clientes por ingreso mensual

Proyectos por fase

Control de Ventas & Licencias de Bots
Vista consolidada del pipeline comercial (misma información que el Kanban, en formato tabla, sincronizada 100% desde el servidor).
Cliente Proyecto Fase Contacto Comercial
Asignación de Tareas
Vista transversal de las tareas del CRM de Desarrollo que todavía no están terminadas, con quién las tiene.
Tarea Sprint Asignado a Estado Categoría
Directiva
Tableros ejecutivos con datos en vivo de SQL Server para seguimiento de alto nivel del CRM de Desarrollo y el aporte del Home a la empresa (el análisis de Ventas se ve en "Dashboard Comercial", en este mismo menú). Exportables a PDF o a CSV para Power BI.

Análisis de CRM de Desarrollo

SQL Server en vivo

Desempeño del equipo de Desarrollo, avance acumulado de proyectos y datos de control por desarrollador.

Noticias de IA
Las 5 noticias más importantes de hoy sobre Inteligencia Artificial, con lectura de cómo aplicarlas (y qué cuidados tener) para IDS.
Clima…
Noticias y Finanzas — Administración
Monitoreo de tipo de cambio en tiempo real y 9 noticias clave del día para la gestión administrativa y financiera.
Clima…
🇺🇸 Dólar (USD) Mercado UYU
$40.41
Compra: $39.21 Venta: $41.61
🇪🇺 Euro (EUR) Mercado UYU
$46.91
Compra: $45.61 Venta: $48.21
🇧🇷 Real (BRL) Mercado UYU
$7.80
Compra: $7.40 Venta: $8.20

Reportes de Proyectos

Horas y tareas del CRM de Desarrollo, por cliente, proyecto y sprint (o el total del proyecto).

Elegí un cliente y un proyecto

El reporte se arma con la información de horas y tareas del CRM de Desarrollo.

Informe de Equipo

Tareas y proyectos cerrados en el período, horas por cliente con sprint activo, y carga de cada desarrollador en los sprints que están corriendo.

Elegí un rango de fechas

El informe se arma con las tareas cerradas, los proyectos cerrados y la carga de cada desarrollador en los sprints activos.

Comparador de Sprints

Por cada persona, por separado: cuánto planificó contra cuánto completó, dejó bloqueado o tuvo frenado por un bloqueante externo en sus últimos sprints. No es una comparación entre personas -- cada una se mide contra su propio planificado.

Cargando equipo...

Elegí a quién comparar

Seleccioná una o más personas del equipo y cuántos sprints mirar hacia atrás, después tocá "Comparar".

Licitaciones y Pliegos
Relevamiento diario de compras públicas de ARCE (familia: Tecnologías de la Información). Se actualiza solo todos los días a las 4am.
Organismo Objeto Fecha límite ofertas Asignada a Acciones
Cargando...
Cargando...
Cargando...
Cargando...

Borrador Oferta a pliego

Documento en Word con el formato institucional de IDS, armado con los datos ya leídos del pliego y los artículos cargados en la Planilla Negocio.

Cargando...
Carta DEMOS
Catálogo de automatizaciones y soluciones agénticas para mostrarle al cliente en una reunión comercial, con cómo venderla y un video de demo.
Solicitudes de Venta
Pedí autorización de una venta antes de comprarle a los proveedores -- al validarse, las Órdenes de Compra se generan solas, una por proveedor.
Órdenes de Compra
Se generan solas al validar una Solicitud de Venta (una por proveedor) o se cargan sueltas. Al validarlas se les manda un mail con el PDF al vendedor del proveedor.
Base de Proveedores
Datos de contacto y vendedores de cada proveedor, para armar Solicitudes de Venta y Órdenes de Compra.
Comisiones
Comisión ganada por mes (se cuenta el mes en que la Solicitud se marca Entregada). Queda PENDIENTE hasta que el Líder de Administración marca la Solicitud como Cobrada -- ahí pasa a PAGA.
Dashboard Comercial
Estado consolidado de Solicitudes de Venta y Órdenes de Compra, todo convertido a USD. Los montos son sin IVA -- el IVA se muestra aparte.
Tipo de cambio USD/UYU
Análisis de Precios de Proveedores
Evolución de precios de los artículos en seguimiento (Unicom y StarCenter), comparados contra lo que IDS compró y vendió.
a
RPA Regex Tester (Python Engine)
Área Desarrollo — Validador de expresiones regulares con ejecución nativa en Python.
Resultados de la Extracción
Los resultados de la búsqueda de coincidencias y grupos se listarán aquí al ejecutar la prueba.
OCR Sandbox (Coordenadas para Rocketbot)
Área Desarrollo — Sube una imagen de factura y dibuja el recuadro para extraer sus coordenadas.
1. Subir Imagen del Documento
SQL Server Profiler & Telemetría RPA
Área Desarrollo — Rendimiento de base de datos en tiempo real de los bots.
Salud de la BD
Estado Base
ONLINE
Tamaño en Disco
0 MB
Motor SQL
SQL Server Express
Bloqueos de Tablas Activos (Deadlocks)
Session ID Tipo Recurso Modo Solicitado Estado del Lock
No hay bloqueos activos en las tablas actualmente
Top 5 Consultas más lentas ejecutadas por Robots
CPU Promedio (ms) Cantidad Ejecuciones Sentencia SQL
Conversor de Selectores (XPath <-> CSS)
Área Desarrollo — Traducción rápida y optimización de selectores para automatizaciones RPA.
Traductor Bidireccional de Selectores
El conversor traduce en tiempo real. Modifica cualquiera de los dos lados para ver la traducción equivalente.
Biblioteca de Snippets Python para Rocketbot
Área Desarrollo — Plantillas de código base homologadas para estandarizar el desarrollo de bots.
Agregar Nuevo Snippet a la Biblioteca
Selecciona un bloque de código útil
Conexión Segura a SQL Server (pyodbc)

Establece conexión a base de datos usando el driver recomendado de forma segura con reintentos.

import pyodbc

def obtener_conexion():
    conn_str = (
        "DRIVER={ODBC Driver 17 for SQL Server};"
        "SERVER=localhost\\SQLEXPRESS;"
        "DATABASE=HomeIDSDB;"
        "Trusted_Connection=yes;"
        "TrustServerCertificate=yes;"
    )
    try:
        conn = pyodbc.connect(conn_str, timeout=5)
        return conn
    except Exception as e:
        print(f"[ERROR] Conexión fallida: {e}")
        return None
Captura de Pantalla en Excepciones (Pillow / OpenCV)

Captura la pantalla del servidor del bot cuando se produce un error crítico y la guarda con un timestamp.

import os
from datetime import datetime
from PIL import ImageGrab

def guardar_captura_error(modulo_nombre):
    folder = "errores_capturas"
    os.makedirs(folder, exist_ok=True)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    path = os.path.join(folder, f"error_{modulo_nombre}_{timestamp}.png")
    try:
        screenshot = ImageGrab.grab()
        screenshot.save(path)
        print(f"[AUDIT] Captura de pantalla guardada en: {path}")
        return path
    except Exception as e:
        print(f"[ERROR] No se pudo guardar la captura: {e}")
        return None
Sanitización y Limpieza de Cadenas (Regex)

Limpia strings eliminando acentos, caracteres especiales, saltos de línea y espacios dobles para procesar texto limpio.

import re
import unicodedata

def limpiar_texto(texto):
    if not texto:
        return ""
    # Quitar acentos
    texto = ''.join(c for c in unicodedata.normalize('NFD', texto) if unicodedata.category(c) != 'Mn')
    # Reemplazar múltiples espacios o tabulaciones
    texto = re.sub(r'\s+', ' ', texto)
    # Dejar solo caracteres alfanuméricos y puntuación básica
    texto = re.sub(r'[^a-zA-Z0-9\s.,_\-@]', '', texto)
    return texto.strip()
Envío de Emails SMTP con Adjuntos (Office 365)

Configura el servidor SMTP corporativo para enviar correos transaccionales y de alerta con archivos adjuntos.

import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

def enviar_correo_con_adjunto(destinatario, asunto, cuerpo, archivo_ruta=None):
    remitente = "[email protected]"
    password = "PASSWORD_SEGURA" # Obtener desde el Vault de Credenciales
    
    msg = MIMEMultipart()
    msg['From'] = remitente
    msg['To'] = destinatario
    msg['Subject'] = asunto
    msg.attach(MIMEText(cuerpo, 'plain'))
    
    if archivo_ruta and os.path.exists(archivo_ruta):
        try:
            with open(archivo_ruta, "rb") as attachment:
                part = MIMEBase('application', 'octet-stream')
                part.set_payload(attachment.read())
                encoders.encode_base64(part)
                part.add_header('Content-Disposition', f"attachment; filename= {os.path.basename(archivo_ruta)}")
                msg.attach(part)
        except Exception as e:
            print(f"[ERROR] No se pudo adjuntar el archivo: {e}")
            
    try:
        server = smtplib.SMTP('smtp.office365.com', 587)
        server.starttls()
        server.login(remitente, password)
        server.sendmail(remitente, destinatario, msg.as_string())
        server.quit()
        print("[SUCCESS] Correo enviado exitosamente")
        return True
    except Exception as e:
        print(f"[ERROR] Fallo el envio del correo: {e}")
        return False
Reintentos en peticiones HTTP API (Backoff Exponencial)

Gestiona consultas a APIs externas con tolerancia a fallos temporales de red y esperas exponenciales de seguridad.

import time
import requests

def peticion_api_con_reintentos(url, metodo='GET', payload=None, headers=None, max_reintentos=3):
    reintento = 0
    espera = 2 # Segundos de espera inicial
    while reintento < max_reintentos:
        try:
            if metodo.upper() == 'POST':
                response = requests.post(url, json=payload, headers=headers, timeout=10)
            else:
                response = requests.get(url, headers=headers, timeout=10)
                
            if response.status_code == 200:
                return response.json()
            else:
                print(f"[WARNING] API devolvio status {response.status_code}. Reintentando...")
        except requests.exceptions.RequestException as e:
            print(f"[WARNING] Fallo de red: {e}. Reintentando...")
            
        reintento += 1
        time.sleep(espera)
        espera *= 2 # Backoff exponencial (2s -> 4s -> 8s)
        
    print("[ERROR] Se supero el limite de reintentos para la peticion API")
    return None
Inserción en Lotes (Batch Bulk Insert) a SQL Server (pyodbc)

Inserta miles de registros en un solo lote rápido (executemany) reduciendo la sobrecarga de consultas y latencia.

import pyodbc

def insertar_lote_clientes(lista_clientes):
    conn_str = (
        "DRIVER={ODBC Driver 17 for SQL Server};"
        "SERVER=localhost\\SQLEXPRESS;"
        "DATABASE=HomeIDSDB;"
        "Trusted_Connection=yes;"
    )
    conn = pyodbc.connect(conn_str)
    cursor = conn.cursor()
    
    query = """
        INSERT INTO Clientes (nombre, empresa, email, referente_tecnico, fase_kanban) 
        VALUES (?, ?, ?, ?, 'Propuesta');
    """
    # lista_clientes es una lista de tuplas correspondientes al query:
    # Ejemplo: [("Juan Perez", "Garino Hnos.", "[email protected]", "Lider TI"), ...]
    try:
        cursor.executemany(query, lista_clientes)
        conn.commit()
        print(f"[SUCCESS] Se insertaron {len(lista_clientes)} registros en un solo lote")
        return True
    except Exception as e:
        conn.rollback()
        print(f"[ERROR] Error en insercion masiva: {e}")
        return False
    finally:
        conn.close()
Control de Robots y Sistema
Matar Procesos Colgados (Excel, Chrome, etc.)

Mata de forma forzada procesos colgados en el servidor de automatización antes de iniciar la ejecución.

import os
import subprocess

def forzar_cierre_aplicacion(nombre_proceso):
    # Ejemplo nombre_proceso: "excel.exe", "chrome.exe"
    try:
        subprocess.run(f"taskkill /f /im {nombre_proceso}", shell=True, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        print(f"[SUCCESS] Se cerraron todas las instancias de {nombre_proceso}")
        return True
    except subprocess.CalledProcessError:
        # Ocurre si el proceso no estaba ejecutandose
        print(f"[INFO] No habia instancias activas de {nombre_proceso}")
        return False
Detención Controlada del Robot con Logging

Detiene la ejecución del bot de forma limpia informando la causa del error en el log general.

import sys

def detener_robot_por_error(motivo_critico):
    log_msg = f"[CRITICAL_ERROR] {motivo_critico}. Deteniendo ejecucion del robot..."
    print(log_msg)
    # Aqui se puede invocar una alerta por correo o webhook antes de salir
    # enviar_alerta_teams(log_msg)
    sys.exit(1)
Prevenir Doble Ejecución (Single Instance Lock)

Garantiza que el bot no se ejecute si ya existe otra instancia activa corriendo en el servidor.

import sys
import fcntl # Para Linux/macOS o usar win32event en Windows

# Version robusta compatible con Windows
if sys.platform == 'win32':
    import win32event
    import win32api
    import winerror
    
    # Crear un Mutex global usando el nombre único de tu robot
    mutex_name = "Global\\RobotIDS_DescargaCFE_Mutex"
    hmutex = win32event.CreateMutex(None, 1, mutex_name)
    if win32api.GetLastError() == winerror.ERROR_ALREADY_EXISTS:
        print("[WARNING] El robot ya se encuentra en ejecucion. Saliendo...")
        sys.exit(0)
else:
    # Version compatible con entornos Linux (Colas de procesamiento)
    f = open('/tmp/robot_cfee.lock', 'w')
    try:
        fcntl.lockf(f, fcntl.LOCK_EX | fcntl.LOCK_NB)
    except IOError:
        print("[WARNING] El robot ya se encuentra en ejecucion. Saliendo...")
        sys.exit(0)
Telemetría de Recursos del Servidor (CPU/RAM)

Monitorea y loguea el uso actual de recursos del servidor para auditorías de rendimiento.

import psutil

def obtener_uso_recursos():
    cpu = psutil.cpu_percent(interval=1)
    ram = psutil.virtual_memory().percent
    disco = psutil.disk_usage('C:\\').percent
    print(f"[TELEMETRIA] CPU: {cpu}% | RAM: {ram}% | Disco C: {disco}%")
    return {"cpu": cpu, "ram": ram, "disco": disco}
Excel y Manipulación de Archivos
Leer Celdas y Rangos de Excel (openpyxl)

Abre una planilla Excel en modo lectura rápida de datos (read-only) y extrae valores.

import openpyxl

def leer_datos_columna(ruta_excel, columna_letra="A"):
    wb = openpyxl.load_workbook(ruta_excel, read_only=True, data_only=True)
    sheet = wb.active
    valores = []
    
    for row in range(2, sheet.max_row + 1):
        celda_valor = sheet[f"{columna_letra}{row}"].value
        if celda_valor is not None:
            valores.append(celda_valor)
    wb.close()
    return valores
Escribir y Aplicar Formatos a Excel

Escribe resultados de procesamiento en una celda y aplica negrita y colores.

import openpyxl
from openpyxl.styles import Font, PatternFill

def escribir_resultado_excel(ruta_excel, fila, columna_letra, valor_resultado, es_exito=True):
    wb = openpyxl.load_workbook(ruta_excel)
    sheet = wb.active
    
    celda = sheet[f"{columna_letra}{fila}"]
    celda.value = valor_resultado
    
    # Formatear según el resultado
    if es_exito:
        celda.font = Font(name='Arial', size=10, bold=True, color='155724')
        celda.fill = PatternFill(start_color='D4EDDA', end_color='D4EDDA', fill_type='solid') # Verde claro
    else:
        celda.font = Font(name='Arial', size=10, bold=True, color='721C24')
        celda.fill = PatternFill(start_color='F8D7DA', end_color='F8D7DA', fill_type='solid') # Rojo claro
        
    wb.save(ruta_excel)
    wb.close()
Convertir Planilla Excel a PDF (win32com)

Utiliza el motor nativo de Excel en Windows para exportar una hoja o libro completo a PDF.

import os
import win32com.client

def excel_a_pdf(ruta_excel, ruta_pdf):
    excel = win32com.client.DispatchEx("Excel.Application")
    excel.Visible = False
    excel.DisplayAlerts = False
    try:
        # Abrir el libro
        wb = excel.Workbooks.Open(os.path.abspath(ruta_excel))
        # Guardar como PDF (Tipo de archivo 57 es PDF)
        wb.ExportAsFixedFormat(0, os.path.abspath(ruta_pdf))
        wb.Close(SaveChanges=False)
        print("[SUCCESS] PDF generado de forma nativa")
        return True
    except Exception as e:
        print(f"[ERROR] Error al convertir: {e}")
        return False
    finally:
        excel.Quit()
Buscar Última Fila con Datos en Columna

Busca la última fila que contiene un valor no nulo en una columna específica para saber dónde seguir insertando.

import openpyxl

def buscar_ultima_fila_con_datos(ruta_excel, columna_letra="A"):
    wb = openpyxl.load_workbook(ruta_excel, read_only=True)
    sheet = wb.active
    
    # Empezar desde el final e ir hacia arriba
    for row in range(sheet.max_row, 0, -1):
        if sheet[f"{columna_letra}{row}"].value is not None:
            wb.close()
            return row
            
    wb.close()
    return 0 # Si la columna esta vacia
Dividir un Excel Grande en Fragmentos Pequeños (Splitting)

Toma un archivo Excel masivo y lo divide en lotes de filas menores para procesamiento en paralelo.

import openpyxl

def dividir_excel(ruta_excel_grande, max_filas_por_lote=1000):
    wb_orig = openpyxl.load_workbook(ruta_excel_grande)
    sheet_orig = wb_orig.active
    cabecera = [cell.value for cell in sheet_orig[1]]
    
    lote = 1
    nueva_fila_idx = 1
    wb_nuevo = None
    
    for row_idx in range(2, sheet_orig.max_row + 1):
        if (row_idx - 2) % max_filas_por_lote == 0:
            if wb_nuevo:
                wb_nuevo.save(f"lote_{lote}.xlsx")
                wb_nuevo.close()
                lote += 1
            wb_nuevo = openpyxl.Workbook()
            sheet_nuevo = wb_nuevo.active
            sheet_nuevo.append(cabecera)
            nueva_fila_idx = 2
            
        fila_valores = [cell.value for cell in sheet_orig[row_idx]]
        sheet_nuevo.append(fila_valores)
        nueva_fila_idx += 1
        
    if wb_nuevo:
        wb_nuevo.save(f"lote_{lote}.xlsx")
        wb_nuevo.close()
    wb_orig.close()
    print(f"[SUCCESS] Excel dividido en {lote} archivos.")
Servicios de Correo (Mail / Outlook)
Leer Bandeja de Entrada desde Outlook Local (win32com)

Lee correos no leídos en la cuenta de Outlook local activa en el servidor del bot.

import win32com.client

def leer_correos_outlook():
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    # Carpeta 6 es Bandeja de Entrada (Inbox)
    inbox = outlook.GetDefaultFolder(6)
    messages = inbox.Items
    
    # Filtrar no leidos
    no_leidos = messages.Restrict("[Unread] = true")
    
    for item in no_leidos:
        print(f"De: {item.SenderName} | Asunto: {item.Subject}")
        # Si queremos marcarlos como leidos
        # item.UnRead = False
        # item.Save()
Descargar Adjuntos de Correos por Asunto

Busca un correo no leído por asunto específico y descarga todos sus archivos adjuntos.

import os
import win32com.client

def descargar_adjuntos_outlook(asunto_buscar, carpeta_guardado):
    os.makedirs(carpeta_guardado, exist_ok=True)
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder(6)
    messages = inbox.Items.Restrict(f"[Subject] = '{asunto_buscar}'")
    
    for msg in messages:
        if msg.Attachments.Count > 0:
            for att in msg.Attachments:
                ruta_final = os.path.join(os.path.abspath(carpeta_guardado), att.FileName)
                att.SaveAsFile(ruta_final)
                print(f"[SUCCESS] Adjunto guardado: {ruta_final}")
Envío de Reporte en Email HTML Estético

Envía un reporte corporativo formal maquetado con una tabla HTML estilizada para una correcta visualización.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def enviar_reporte_html(destinatario, total_procesados, total_errores):
    remitente = "[email protected]"
    msg = MIMEMultipart()
    msg['From'] = remitente
    msg['To'] = destinatario
    msg['Subject'] = "📈 Reporte Diario de Procesamiento RPA"
    
    cuerpo_html = f"""
    
      
        

Resultado Operativo RPA

El bot de cobranzas ha finalizado su ejecucion con los siguientes datos:

Métrica Cantidad
Procesados con éxito {total_procesados}
Errores reportados {total_errores}

Este es un mensaje automatico. No responda a este correo.

""" msg.attach(MIMEText(cuerpo_html, 'html')) # Logica de servidor y envio # server = smtplib.SMTP('smtp.office365.com', 587) ...
Leer Correos vía IMAP Seguro (Gmail/Office365)

Se conecta a un servidor de correo corporativo mediante IMAP TLS/SSL para auditar mensajes.

import imaplib
import email

def leer_correos_imap():
    mail = imaplib.IMAP4_SSL('imap.secureserver.net') # Servidor IMAP
    mail.login('[email protected]', 'PASSWORD_SEGURA')
    mail.select('inbox')
    
    # Buscar correos no leidos
    status, data = mail.search(None, 'UNSEEN')
    ids = data[0].split()
    
    for num in ids:
        status, data = mail.fetch(num, '(RFC822)')
        msg = email.message_from_bytes(data[0][1])
        print(f"Asunto: {msg['Subject']} | De: {msg['From']}")
    mail.logout()
🇺🇾 Validaciones de Datos y Uruguay RUT/CI
Validar Sintaxis de Correo Electrónico (Regex)

Valida si un string posee una sintaxis e-mail estructurada válida antes de enviarlo.

import re

def es_correo_valido(email):
    # Regex estandar del W3C para emails
    pattern = r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$"
    return bool(re.match(pattern, email))
🇺🇾 Validar Dígito Verificador de RUT de Uruguay

Valida matemáticamente que el número de RUT uruguayo ingresado sea válido según el módulo 11 de la DGI.

def validar_rut_uruguay(rut):
    # Debe ser de 12 digitos
    rut = str(rut).strip().replace("-", "").replace(".", "")
    if len(rut) != 12 or not rut.isdigit():
        return False
        
    # Verificar los dos primeros digitos (departamento/rango)
    if int(rut[:2]) < 1 or int(rut[:2]) > 22:
        # Los RUTs juridicos en Uruguay inician en el rango 01-21
        pass
        
    factores = [4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    suma = sum(int(digito) * factor for digito, factor in zip(rut[:11], factores))
    
    resto = suma % 11
    digito_verificador = 11 - resto
    
    if digito_verificador == 11:
        dv_esperado = 0
    elif digito_verificador == 10:
        dv_esperado = 1
    else:
        dv_esperado = digito_verificador
        
    return int(rut[11]) == dv_esperado
🇺🇾 Validar Dígito Verificador de Cédula (CI) de Uruguay

Valida si una Cédula de Identidad de Uruguay posee un dígito verificador matemático correcto.

def validar_ci_uruguay(ci):
    # Limpiar
    ci = str(ci).strip().replace(".", "").replace("-", "")
    if len(ci) < 7 or len(ci) > 8 or not ci.isdigit():
        return False
        
    # Si tiene 7 digitos, rellenar con un 0 a la izquierda
    if len(ci) == 7:
        ci = "0" + ci
        
    # Multiplicadores oficiales del digito de la CI
    factores = [2, 9, 8, 7, 6, 3, 4]
    suma = sum(int(digito) * factor for digito, factor in zip(ci[:7], factores))
    
    resto = suma % 10
    digito_verificador = (10 - resto) % 10
    
    return int(ci[7]) == digito_verificador
Validar Rango y Formato de Fechas (DD/MM/AAAA)

Valida si un string de fecha posee el formato esperado y si representa un día real en el calendario.

from datetime import datetime

def es_fecha_valida(fecha_str, formato="%d/%m/%Y"):
    try:
        datetime.strptime(fecha_str, formato)
        return True
    except ValueError:
        return False
Extraer Valor Numérico Limpio (Monedas a Float)

Limpia cadenas con signos monetarios o formato de texto y extrae el float matemático puro (ej: "UYU $ 1.250,50" -> 1250.50).

import re

def extraer_float_moneda(texto_moneda):
    if not texto_moneda:
        return 0.0
    # Eliminar espacios y signos de moneda
    limpio = re.sub(r'[^\d,.-]', '', texto_moneda)
    
    # Manejar separadores del formato español/uruguayo (puntos para mil, coma para decimal)
    if ',' in limpio and '.' in limpio:
        limpio = limpio.replace('.', '') # Quitar punto de mil
        limpio = limpio.replace(',', '.') # Cambiar coma a punto decimal
    elif ',' in limpio:
        limpio = limpio.replace(',', '.') # Cambiar coma decimal a punto decimal
        
    try:
        return float(limpio)
    except ValueError:
        return 0.0
Red y Utilidades de Integración
Descarga Segura de Archivos (con Timeout y Chunking)

Descarga un archivo binario (como PDFs o planillas Excel) de forma fluida por trozos evitando agotar memoria.

import requests

def descargar_archivo_portal(url, destino_ruta):
    try:
        # Timeout de 15 segundos para evitar colgar al robot
        with requests.get(url, stream=True, timeout=15) as r:
            r.raise_for_status()
            with open(destino_ruta, 'wb') as f:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
        print(f"[SUCCESS] Descarga completada en: {destino_ruta}")
        return True
    except Exception as e:
        print(f"[ERROR] No se pudo descargar: {e}")
        return False
Codificar y Decodificar Archivos a Base64

Codifica un archivo local a string Base64 para transportarlo en payloads de APIs REST de orígenes cruzados.

import base64

def archivo_a_base64(ruta_archivo):
    with open(ruta_archivo, "rb") as f:
        # Retorna el string base64 codificado en utf-8
        return base64.b64encode(f.read()).decode('utf-8')

def base64_a_archivo(string_base64, ruta_destino):
    with open(ruta_destino, "wb") as f:
        f.write(base64.b64decode(string_base64))
    print(f"[SUCCESS] Archivo reconstruido en: {ruta_destino}")
Descarga de Recursos de Ingeniería
Área Desarrollo — Drivers, instaladores oficiales y componentes necesarios para configurar entornos de bots.
Cargar / Agregar Nuevo Recurso o Instalador
Componentes de Base de Datos y Sistema
Microsoft ODBC Driver 17
Driver de conexión SQL Server para Windows 64-bit
Descargar
Microsoft ODBC Driver 18
Driver de conexión SQL Server (última versión)
Descargar
SQL Server Management Studio (SSMS)
Entorno de administración oficial de bases de datos MS SQL
Descargar
Python (Última versión estable)
Instalador oficial del intérprete de Python para Windows
Descargar
Herramientas y Plantillas de Desarrollo
Plantilla de Carga de Clientes (Excel)
Formato de Excel oficial para importación masiva de clientes
Descargar
Visual Studio Code (VS Code)
Editor de código fuente para desarrollo de scripts en Python
Descargar
Microsoft 365 (Office Portal)
Acceso al portal corporativo de Microsoft 365 y licencias Office
Abrir Portal
Claude AI Desktop (Anthropic)
Aplicación oficial de escritorio de Claude AI para asistencia de código
Descargar
Antigravity IDE (Plugins & Tools)
Herramientas avanzadas del entorno de desarrollo local de IDS
Operación realizada con éxito