# AutoBackups - Decisiones Técnicas Finalizadas ## Decisiones Técnicas Confirmadas ### 1. Everything API - Integración ✅ **Decisión**: Everything SDK está instalado bajo `Everything-SDK\dll\Everything64.dll` **Implementación**: Usar PyEverything (Wrapper) sin fallback **Ruta DLL**: `Everything-SDK\dll\Everything64.dll` ### 2. Estructura de Backup - Clarificación de Rutas ✅ **Decisión**: Estructura específica con formato de fecha personalizado **Ejemplo**: - Directorio base: `C:\Projects\Siemens` - Proyecto: `C:\Projects\Siemens\LineA\Project1\project.s7p` - Backup: `backup_destination/LineA/Project1/2025-09-01/14-30-15_projects.zip` **Formato**: YYYY-MM-DD para fechas, HH-MM-SS formato 24 horas ### 3. Configuración de Schedules - Granularidad ✅ **Decisión**: Ambos niveles (global con override por proyecto) **Implementación**: - Configuración global por defecto - Override individual por proyecto - Interfaz web para modificar ambos niveles ### 4. Hash de Archivos - Algoritmo y Almacenamiento ✅ **Decisión**: Hash de timestamps + tamaño (NO contenido) **Algoritmo**: MD5 para velocidad **Incluye**: timestamp + tamaño de archivo **Prioridad**: Velocidad sobre seguridad criptográfica ### 5. Detección de Archivos en Uso - Método ✅ **Decisión**: Detección por intento de compresión **Método Primario**: Intentar comprimir y detectar errores de exclusividad **Método Rápido**: Verificar archivo .s7p antes de comprimir proyecto completo **Manejo de Errores**: Marcar como problema de exclusividad si falla ### 6. Manejo de Proyectos Grandes - Performance ✅ **Decisión**: Sin límites de tamaño, tiempo o archivos **Implementación**: Sin throttling, procesar cualquier tamaño de proyecto **Prioridad**: Baja prioridad de sistema para no interferir ### 7. Configuración de Directorios - Recursividad ✅ **Decisión**: Búsqueda recursiva con optimización para .s7p **Implementación**: - Búsqueda recursiva en toda la jerarquía - Optimización: evitar último nivel para archivos .s7p - Razón: archivos .s7p no pueden estar en el último nivel del árbol ### 8. Backup Incremental vs Completo ✅ **Decisión**: Siempre backup completo **Implementación**: Todo el proyecto cada vez **Razón**: Simplicidad y asegurar integridad completa ### 9. Web Interface - Características Específicas ✅ **Must-have**: - Lista de proyectos con estado ✅ - Trigger manual de backup ✅ - Ver logs básicos ✅ - Configurar schedules por proyecto ✅ - **Modificar configuración general (config.json) ✅** **Nice-to-have**: - Ver progreso de backup en tiempo real - Estadísticas históricas - Configurar nuevos directorios ### 10. Error Handling - Estrategias de Recuperación ✅ **Espacio Insuficiente**: - Área de status en página web mostrando espacio libre - Límite mínimo: 100MB libres para ejecutar backups - Sin backups si espacio < 100MB **Otros Errores**: - Marcar para reintento en 1 hora - Log de errores para diagnóstico ### 11. Startup Behavior - Inicialización ✅ **Decisión**: Aplicación de background con timers específicos **Comportamiento**: - Escaneos programados: cada 1 hora - Backups mínimo: cada 10 minutos - Aplicación siempre en background - Baja prioridad de sistema ### 12. Multi-threading - Concurrencia ✅ **Decisión**: Ejecución secuencial (uno por vez) **Implementación**: - Backups secuenciales para economizar recursos - Baja prioridad de sistema - Orientado a operación en background sin interferir ## Especificación Técnica Finalizada ✅ ### Resumen de Decisiones Clave: 1. **Everything SDK**: PyEverything wrapper con DLL local 2. **Estructura de Backup**: `backup_destination/ProjectPath/YYYY-MM-DD/HH-MM-SS_projects.zip` 3. **Hash**: MD5 de (timestamp + tamaño) para velocidad 4. **Detección de Uso**: Por intento de compresión + verificación .s7p 5. **Performance**: Sin límites, baja prioridad, secuencial 6. **Búsqueda**: Recursiva evitando último nivel para .s7p 7. **Backups**: Siempre completos 8. **Interfaz**: Flask con configuración de config.json 9. **Espacio**: Mínimo 100MB libres, status visible 10. **Background**: Escaneos 1h, backups min 10min 11. **Concurrencia**: Secuencial, baja prioridad ### Próximos Pasos: 1. ✅ Finalizar diseño técnico basado en decisiones 2. ⏳ Actualizar `requirements.txt` con PyEverything 3. ⏳ Comenzar implementación por fases 4. ⏳ Crear estructura básica del proyecto