{"id":24059641,"url":"https://github.com/mateogiuffra/autogs","last_synced_at":"2025-04-23T03:42:08.927Z","repository":{"id":268489003,"uuid":"904005384","full_name":"MateoGiuffra/autogs","owner":"MateoGiuffra","description":"Automatización de tareas web y una API REST, diseñada para generar y gestionar resúmenes financieros a partir de sistemas externos. Utiliza Flask, Selenium y Pandas.","archived":false,"fork":false,"pushed_at":"2025-04-01T01:26:05.000Z","size":35303,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-01T02:28:03.613Z","etag":null,"topics":["automation","css","deploy","dockerfile","firebase","firebase-database","flask-api","html","javascript","pandas","poo","python","selenium","webscraping","website"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MateoGiuffra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-16T04:21:45.000Z","updated_at":"2025-04-01T01:26:08.000Z","dependencies_parsed_at":"2024-12-17T04:35:49.488Z","dependency_job_id":"a922ec38-250d-4077-a1a9-229409b50a03","html_url":"https://github.com/MateoGiuffra/autogs","commit_stats":null,"previous_names":["mateogiuffra/autogs"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fautogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fautogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fautogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MateoGiuffra%2Fautogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MateoGiuffra","download_url":"https://codeload.github.com/MateoGiuffra/autogs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250366663,"owners_count":21418767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","css","deploy","dockerfile","firebase","firebase-database","flask-api","html","javascript","pandas","poo","python","selenium","webscraping","website"],"created_at":"2025-01-09T06:15:38.025Z","updated_at":"2025-04-23T03:42:08.919Z","avatar_url":"https://github.com/MateoGiuffra.png","language":"Python","readme":"# Proyecto: Sistema de Automatización y API REST para Resúmenes\n\n## Descripción General\nEste proyecto es una combinación de automatización de tareas y una API REST que permite generar y obtener un resumen financiero a partir de un sistema externo. Utiliza herramientas modernas como Flask, Selenium y Pandas para ofrecer una solución robusta y escalable.\n\n## Características Principales\n- **Automatización Web**: Navega automáticamente por el sistema externo, ingresa credenciales, descarga reportes y procesa la información.\n- **API REST**: Ofrece endpoints para interactuar con la automatización y obtener resúmenes financieros.\n- **Procesamiento de Datos**: Analiza reportes descargados utilizando Pandas y extrae información relevante.\n- **SchedulerService**: Automatiza procesos recurrentes como generación de reportes y actualización de datos mediante tareas programadas, optimizando tiempo y reduciendo intervención manual.\n- **Frontend Interactivo**: Interfaz web diseñada para interactuar con los endpoints de la API. Está optimizada para dispositivos móviles, \n  permitiendo al usuario acceder fácilmente desde su celular y obtener los resúmenes financieros con facilidad\n\n![Muestra del GIF](./front/static/assets/muestra-version-nueva.gif)\n\n\n## Estructura del Proyecto\n```\nautogs/\n├── abs_path.py\n├── application/\n│   ├── configuration/\n│   │   └── firebase_config.py\n│   ├── controller/\n│   │   ├── rest/\n│   │   │   ├── wsgi.py\n│   │   │   └── SummaryREST.py\n│   ├── models/\n|   |   ├── Summary.py\n│   │   ├── automation/\n│   │   │   ├── date_setter/\n│   │   │   │   ├── DateSetter.py \n│   │   │   │   ├── DateSetterLastMonth.py\n│   │   │   │   ├── DateSetterLastMonthToday.py\n│   │   │   │   └── DateSetterCurrentMonth.py\n│   │   │   ├── file_downloader_module.py\n│   │   │   ├── login_module.py\n│   │   │   ├── report_module.py\n│   │   │   └── WebDriverManager.py\n│   │   ├── pandas/\n│   │   └── excel_reader.py\n│   ├── service/\n│   │   ├── SchedulerService.py\n│   │   └── SummaryService.py\n│   ├── persistence/\n│   │   └── SummaryDAO.py\n├── front/\n│   ├── static/\n│   │   ├── css/\n│   │   │   └── mystyle.css           \n│   │   ├── js/\n│   │   │   └── scripts.css  \n│   │   ├── assets/\n│   ├── templates/\n│   │   │   └── index.html\n├── Dockerfile.py\n└── requirements.txt\n```\n\n\n### Descripción de Carpetas y Archivos\n- **configuration/**: Configuracion de la base de datos.\n  - `firebase_config.py`: Encargado de leer las credenciales para inicializar la app de firebase y crear una instancia de firestore.  \n- **controller/**: Implementa la API REST con Flask.\n  - `SummaryApi.py`: Define los endpoints `/diferenciaResumenes`,  `/diferenciaResumenesHoy` y `/obtenerResumen` para interactuar con el servicio.\n- **models/**: Contiene el modelo del proyecto. En el se encuentra el objeto Summary el cual almacena la informacion de los reportes, las carpetas automation y pandas. \n- **automation/**: Contiene los scripts de automatización basados en Selenium.\n  - `WebDriverManager.py`: Trabaja como Orquestador usando el resto de las clases. Configura el WebDriver, navega y descarga reportes.\n  - `DateSetter.py`: Establece rangos de fechas en formularios dependiendo lo requerido.\n  - `login_module.py`: Realiza el inicio de sesión en el sistema externo.\n  - `report_module.py`: Navega al reporte deseado dentro del sistema.\n  - `file_downloader_module.py`: Descarga el archivo del reporte y verifica su existencia.\n  - `Summary.py`: Define la lógica del negocio. Orquesta los pasos de automatización y procesamiento de datos. Almacena los datos de valor.  \n- **pandas/**: Procesa los datos del reporte descargado.\n  - `ExcelReader.py`: Lee y analiza el archivo descargado para extraer el total. Se maneja de forma eficiente borrando al anterior \n    para ahorrar espacio en memoria y recursos.\n- **service/**: Se encarga de interactuar con el modelo y la capa de persistencia.\n  - `SummaryService.py`: Interviene como intermediario entre el negocio y la persistencia de datos para asegurar consistencia en los datos.\n  - `SchedulerService.py`: Implementacion de APScheduler para ejecutar registro de reportes en dias y horarios especificos. Especificamente, obtiene el resumen de este mismo dia pero de un mes atras cada dia que pasa y el resumen total del mes pasado cada vez que cambia el mes.  \n- **persistencia/**: Se encarga de interactuar con la base de datos (firestore).\n  - `SummaryDAO.py`: Crea y actualiza instancias de Summary con lo suficiente para asegurar su correcto funcionamiento.\n- **abs_path.py**: Define rutas absolutas para asegura que el archivo se almacene correctamente.\n- **requeriments.txt**: Lista de dependencias necesarias para ejecutar el proyecto.\n- **Dockerfile**: Archivo de Docker preparado para que todo funcione correctamente en produccion. \n- **front/**: Un mini front para interactuar con la aplicación. Hecho solo con CSS, HTML y JavaScript para que la app sea lo menos pesado y eficiente.\n\n## Tecnologías Utilizadas\n- **Selenium**: Para la automatización de navegación y descargas.\n- **APScheduler**: Librería para programar y gestionar tareas automatizadas como la ejecución recurrente de procesos.\n- **Pandas**: Para el análisis y procesamiento de datos.\n- **Flask**: Framework para construir la API REST.\n- **dotenv y decouple**: Manejo de configuraciones sensibles como credenciales y variables de entorno.\n\n\n## Requisitos Previos\n1. **Python 3.12+**\n2. Instalación de dependencias:\n   ```bash\n   pip install -r requirements.txt\n   ```\n3. **Google Chrome** y su correspondiente **ChromeDriver**.\n4. Configurar un archivo `.env` con las credenciales:\n   ```env\n   DB_USER=usuario\n   DB_PASSWORD=contraseña\n   DB_KEY=key de firebase (tiene que estar en una sola linea)\n   TIMEZONE=declaras la zona horaria de tu preferencia, por defecto esta la de BsAs \n   ```\n\n## Cómo Ejecutar el Proyecto\n1. Clona el repositorio y navega al directorio principal:\n   ```bash\n   git clone \u003curl_repositorio\u003e\n   cd carpeta_raiz\n   ```\n2. Instala las dependencias:\n   ```bash\n   pip install -r requirements.txt\n   ```\n3. Ejecuta la API REST:\n   ```bash\n   python -m application.controller.APIREST.SummaryApi\n   ```\n4. Accede a los endpoints:\n   - PUT `/resumenDelMesPasado`: Actualizar el monto obtenido en todo el mes anterior y en la pagina se muestra su diferencia con el resumen actual en forma de porcentaje. \n     -- ``Ejemplo``: Suponiendo que hoy es 26/12/2024, entonces la resta es entre el resumen del 30/11/2024 y del 26/12/2024 \n   - PUT `/resumenDeUnMesAtras`: Actualizar el monto obtenido este mismo dia pero de un mes anterior y en la pagina se muestra su diferencia con el resumen actual en forma de porcentaje.\n     -- ``Ejemplo``: La resta es entre el resumen del 26/11/2024 y del 26/12/2024\n   - PUT `/resumenActual`: Actualiza los datos obteniendo el resumen del dia actual, fecha con hora de cuando se solicito por ult vez el resumen y la diferencia con el total anteriormente pedido.\n\n## Ventajas del Proyecto\n- **Escalabilidad**: Diseñado con una arquitectura modular para agregar nuevas funcionalidades.\n- **Automatización Eficiente**: Reduce significativamente el tiempo empleado en tareas repetitivas, aumentando la productividad.\n- **Fácil Integración**: Puede ser integrado en otros sistemas mediante la API REST.\n- **Eficiencia**: Optimizado para consumir únicamente los recursos necesarios, garantizando un desempeño eficiente.\n- **Consistencia de Datos**: Utiliza Firestore como base de datos, asegurando la consistencia, alta disponibilidad y escalabilidad de los datos en tiempo real.\n\n## Deploy\n- El proyecto ya esta listo para el deploy a traves del Dockerfile.\n-  *¿Donde y como hacerlo?*\n  - Primero carga la variables de entorno de USER, PASSWORD y DB_KEY.    \n  - Render: Carga la variable de entorno PORT con 10000\n  - Railway: no hagas nada mas.  \n\n## Contacto\nCualquier consulta o mejora, no dudes en contactarme: matteogiuffrah40@gmail.com\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmateogiuffra%2Fautogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmateogiuffra%2Fautogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmateogiuffra%2Fautogs/lists"}