feat: roadmap y diseño inicial — iteración 1 antes de feedback del usuario

Inventario de dispositivos electrónicos no prestables para administración
pública. Esta primera iteración contiene el diseño y la planificación
antes de contactar con el usuario para su validación.

Contenido:
- especificaciones.md: requisitos detallados del programa
- docs/arquitectura.md: propuesta de arquitectura con alternativas
- docs/roadmap-iteracion-1.md: plan de desarrollo iteración 1
- docs/arquitectura-diagrama.html: diagrama visual de arquitectura
- sketches/: mockups de las 4 pantallas principales
  - 001-dashboard: vista resumen
  - 002-inventario: tabla de dispositivos
  - 003-formulario: alta/edición de dispositivos
  - 004-configuracion: ajustes generales

Stack propuesto: Python + Flask + SQLite + Alpine.js
Distribución: PyInstaller → un único .exe autocontenido
Entorno: Windows 11 Pro unida a dominio, sin privilegios de admin
This commit is contained in:
pikaos 2026-08-03 01:34:56 +01:00
commit ee849eb9a8
14 changed files with 3761 additions and 0 deletions

184
docs/roadmap-iteracion-1.md Normal file
View file

@ -0,0 +1,184 @@
# Inventschario — Roadmap Iteración 1
**Fecha:** 2026-08-03
**Objetivo:** MVP funcional con gestión de dispositivos, copias de seguridad
e importación/exportación CSV.
---
## Fase 0: Infraestructura del Proyecto
- [ ] Inicializar repositorio git
- [ ] Crear estructura de directorios
- [ ] Configurar `pyproject.toml` con dependencias
- [ ] Crear `requirements.txt`
- [ ] Configurar `.gitignore` (Python, SQLite, backups, __pycache__)
- [ ] Escribir `README.md` con instrucciones de desarrollo
## Fase 1: Capa de Datos
- [ ] Implementar `schema.sql` con el esquema completo
- [ ] Implementar `connection.py` (conexión SQLite, WAL mode, foreign keys)
- [ ] Implementar `migrations.py` (creación de tablas, upgrades futuros)
- [ ] Implementar `DeviceRepository` (CRUD completo)
- [ ] Implementar `HistoryRepository` (log de cambios)
- [ ] Implementar `ConfigRepository` (key-value store)
- [ ] Implementar `BackupRepository` (log de backups)
- [ ] Tests unitarios para todos los repositories
## Fase 2: Capa de Servicios
- [ ] Implementar `DeviceService` (CRUD, baja, enajenación, historial)
- [ ] Implementar `BackupService` (crear, restaurar, eliminar, verificar antigüedad)
- [ ] Implementar `ConfigService` (leer/actualizar config, labels, setup)
- [ ] Implementar `ImportService` (parse CSV, mapeo, validación, duplicados)
- [ ] Implementar `ExportService` (generar CSV con etiquetas renombradas)
- [ ] Tests unitarios para todos los services
## Fase 3: API Gateway
- [ ] Configurar Flask app con Blueprint pattern
- [ ] Implementar CORS para localhost
- [ ] Implementar middleware de errores
- [ ] Rutas: `/api/v1/devices` (CRUD, búsqueda, filtros)
- [ ] Rutas: `/api/v1/devices/:id/decommission`, `/dispose`
- [ ] Rutas: `/api/v1/devices/:id/history`
- [ ] Rutas: `/api/v1/config`, `/api/v1/config/labels`
- [ ] Rutas: `/api/v1/config/initialize`
- [ ] Rutas: `/api/v1/backups` (listar, crear, restaurar, eliminar)
- [ ] Rutas: `/api/v1/import/csv`, `/api/v1/export/csv`
- [ ] Rutas: `/api/v1/locations`, `/api/v1/departments`
- [ ] Tests de integración para todos los endpoints
## Fase 4: Frontend — Estructura Base
- [ ] Crear `index.html` con estructura SPA
- [ ] Implementar `app.js` (router hash-based)
- [ ] Implementar `api.js` (cliente HTTP con manejo de errores)
- [ ] Implementar sistema de componentes (table, form, modal, toast, sidebar)
- [ ] Crear estilos globales con CSS custom properties
- [ ] Implementar responsive layout (sidebar collapse)
## Fase 5: Frontend — Páginas
### 5.1 Dashboard
- [ ] Estadísticas: total dispositivos, por estado, por tipo
- [ ] Últimos dispositivos añadidos
- [ ] Alertas de garantía próxima (futuro, placeholder)
- [ ] Recordatorio de backups antiguos
### 5.2 Inventario (Tabla)
- [ ] Tabla paginada con sorting por columnas
- [ ] Barra de búsqueda full-text
- [ ] Filtros: tipo, estado, departamento, ubicación
- [ ] Acciones por fila: ver, editar, baja, enajenar
- [ ] Selección múltiple para exportación
### 5.3 Formulario de Dispositivo
- [ ] Campos obligatorios marcados
- [ ] Validación en tiempo real
- [ ] Autocompletado de campos de registro
- [ ] Selector de tipo de dispositivo
- [ ] Selector de ubicación / departamento
- [ ] Modo creación y modo edición
### 5.4 Detalle del Dispositivo
- [ ] Ficha completa con todos los campos
- [ ] Historial de cambios cronológico
- [ ] Botones de acción: editar, baja, enajenar
- [ ] Foto del dispositivo (futuro)
### 5.5 Baja / Enajenación
- [ ] Modal con tipo de baja/enajenación
- [ ] Campo de fecha efectiva
- [ ] Campo de motivo / observaciones
- [ ] Campo de responsable autorizador
- [ ] Confirmación antes de ejecutar
### 5.6 Importar / Exportar
- [ ] Selector de archivo CSV para importar
- [ ] Vista previa de los primeros 10 registros
- [ ] Mapeo de columnas (automático por nombre/posición)
- [ ] Opciones ante duplicados
- [ ] Registro de errores por fila
- [ ] Botón de exportación con filtros actuales
- [ ] Selector de separador CSV
### 5.7 Configuración
- [ ] Nombre de institución
- [ ] Edición de etiquetas de campos de registro
- [ ] Configuración de backups (hora, retención)
- [ ] Gestión de ubicaciones
- [ ] Gestión de departamentos
### 5.8 Wizard de Configuración Inicial
- [ ] Detección de primera ejecución
- [ ] 6 pasos del wizard
- [ ] Validación en cada paso
- [ ] Creación de la BD al finalizar
## Fase 6: Copias de Seguridad
- [ ] Implementar scheduler con `schedule` library
- [ ] Backup automático a la hora configurada
- [ ] Compresión gzip del archivo .db
- [ ] Registro en `backup_log`
- [ ] Verificación de backups antiguos al iniciar
- [ ] Toast de recordatorio al usuario
- [ ] Función de restaurar desde backup
## Fase 7: Empaquetado
- [ ] Configurar PyInstaller spec file
- [ ] Incluir frontend estático en el bundle
- [ ] Crear icono de la aplicación (.ico)
- [ ] Script de instalación (crear directorio + acceso directo Menú Inicio)
- [ ] Test de distribución: ejecutar en máquina limpia de Windows
## Fase 8: Testing y Calidad
- [ ] Tests unitarios: > 80% cobertura en services
- [ ] Tests de integración: todos los endpoints API
- [ ] Prueba manual de flujo completo
- [ ] Revisión de accesibilidad (WCAG 2.1 AA)
- [ ] Prueba de rendimiento con 1,000 dispositivos
---
## Estimación de Esfuerzo
| Fase | Días estimados | Dependencias |
|-------|:--------------:|-----------------|
| 0 | 0.5 | — |
| 1 | 2 | Fase 0 |
| 2 | 2 | Fase 1 |
| 3 | 2 | Fase 2 |
| 4 | 2 | Fase 0 |
| 5 | 5 | Fases 3, 4 |
| 6 | 1 | Fase 1 |
| 7 | 1 | Fases 3-6 |
| 8 | 1 | Fases 3-7 |
| **Total** | **~16 días** | |
---
## Criterios de Salida de la Iteración 1
1. El usuario puede instalar la app en su perfil de Windows
2. El wizard de configuración crea la BD correctamente
3. Se pueden crear, editar, ver y eliminar dispositivos
4. Se pueden dar de baja y enajenar dispositivos
5. La tabla de inventario tiene búsqueda, filtros y ordenación
6. Las etiquetas de campos son renombrables
7. Los backups se ejecutan diariamente
8. Se muestra recordatorio de backups antiguos
9. Se puede exportar a CSV
10. Se puede importar desde CSV
11. El historial de cambios se registra
12. La interfaz es navegable por teclado
13. Los colores cumplen WCAG 2.1 AA
---
*Roadmap generado como parte de la primera iteración del proyecto Inventschario.*
*Este documento es la base para el feedback del usuario antes de comenzar la implementación.*