Doña Rosa es una aplicación de escritorio, desarrollada en Python, orientada a la gestión completa de bodegas y comercios minoristas. Su objetivo es centralizar operaciones (inventario, ventas, compras, proveedores, empleados y reportes) para mejorar la eficiencia operativa y reducir pérdidas por control deficiente de stock.
Este README ofrece instrucciones técnicas y operativas pensadas tanto para administradores de la solución como para desarrolladores que contribuyan al código.
- Instalación y ejecución (Windows / Linux / macOS)
- Configuración y variables de entorno
- Inicialización de la base de datos y seeds
- Guía de desarrollo: linters, tests y hooks
- Empaquetado y creación de instalador (Windows)
- Seguridad, backup y recuperación
- Requisitos
- Instalación y ejecución
- Configuración
- Inicialización de la base de datos
- Uso rápido
- Estructura del proyecto
- Desarrollo y pruebas
- Empaquetado y distribución
- Seguridad
- Contribuir
- FAQ y troubleshooting
- Licencia y contacto
- Python 3.8+ (recomendado 3.10/3.11)
- pip
- MySQL (opcional — para despliegues centralizados)
- Windows / macOS / Linux
Instrucciones pensadas para desarrollo local.
Windows (PowerShell):
# Activar entorno virtual (si existe)
& "C:/Users/jose/Desktop/PROYECTOS GIT/Sistema-Integral-de-Gesti-n-Comercial/.venv/Scripts/Activate.ps1"
# Actualizar pip e instalar dependencias
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
# (Opcional) Inicializar base de datos y cargar seeds
python scripts/setup_mysql_and_seeds.py
# Ejecutar la aplicación
python main.pyLinux / macOS (bash):
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python scripts/setup_mysql_and_seeds.py
python main.py- Activa
DEBUG=Trueen.envoconfig/environment.pypara logging más detallado. - Revisa
core/logger.pypara la configuración del logger y niveles.
Crea un archivo .env en la raíz o ajusta config/environment.py con los valores de conexión y entorno.
Ejemplo mínimo:
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=secret
DB_NAME=dona_rosa
DEBUG=True
SECRET_KEY=clave_seguraRevisa config/settings.py para opciones adicionales: rutas de datos, políticas de backup y parámetros de la UI.
- Si usas MySQL: crea la base de datos y el usuario antes de correr los scripts.
- Ejecuta
python scripts/setup_mysql_and_seeds.pypara crear tablas y cargar datos iniciales. - El directorio
data/seeds/contiene ejemplos de usuarios y productos; puedes editarlos antes de cargar.
Comandos útiles:
python scripts/test_mysql_connection.py
python scripts/setup_mysql_and_seeds.pypython main.py— inicia la aplicación.- Login con credenciales de seed (revisar
data/seeds). - Módulos principales: Inventario, Proveedores, Compras, Ventas, Trabajadores.
- Navega a
Procesos → Venta. - Selecciona o crea cliente, agrega ítems desde inventario.
- Finaliza venta y genera ticket (guardar copia en
data/backups/tickets/).
.
├── app/
│ ├── app_context.py # Inicializa contexto de la app, DI y singletons
│ ├── controller.py # Controlador principal / orquestación de flujos
│ └── router.py # Registro de rutas/vistas entre módulos
├── assets/
│ ├── icons/ # Iconos SVG/PNG usados en la UI
│ └── images/ # Capturas, logos y recursos estáticos
├── build/
│ ├── installer.iss # Plantilla Inno Setup (Windows installer)
│ └── build.ps1 # Script PowerShell para generar instalador
├── config/
│ ├── database.py # Conexiones y adaptadores a BD
│ ├── environment.py # Lectura de variables de entorno / .env
│ └── settings.py # Ajustes generales (paths, constantes)
├── core/
│ ├── auth.py # Lógica de autenticación y sesiones
│ ├── authorization.py # Reglas / roles / permisos
│ ├── logger.py # Configuración del logging central
│ ├── security.py # Funciones de seguridad (hash, salt)
│ └── utils.py # Utilidades generales reutilizables
├── data/
│ ├── backups/ # Backups automáticos y manuales
│ ├── logs/ # Logs generados por la app
│ └── seeds/ # Datos de ejemplo y scripts de seed
├── models/
│ ├── producto.py # Modelo Producto
│ ├── proveedor.py # Modelo Proveedor
│ ├── venta.py # Modelo Venta / Ticket
│ └── ... # Otros modelos del dominio
├── modules/
│ ├── inicio/ # Dashboard, vistas iniciales
│ ├── inventario/ # Vistas y lógica de inventario
│ └── procesos/ # Compras, ventas, emisión de tickets
├── services/
│ ├── producto_service.py # Operaciones del dominio (CRUD, validaciones)
│ ├── venta_service.py
│ └── ...
├── scripts/
│ ├── setup_mysql_and_seeds.py
│ ├── test_mysql_connection.py
│ └── tools/ # Scripts auxiliares (export, backup)
├── ui/
│ ├── components/ # Botones, tablas, modales reutilizables
│ │ ├── button.py
│ │ └── table.py
│ ├── login/ # Login view + controller
│ └── styles/ # Temas CSS/Python para la UI
├── requirements.txt
├── build.ps1
└── main.py # Punto de entrada de la aplicación
Descripción y convenciones útiles
app/: punto donde se inicializan dependencias y se monta la aplicación. Si añades un nuevo módulo, registra su ruta enrouter.py.config/: mantiene la configuración por ambiente. No guardar credenciales en texto; usa variables de entorno o un gestor de secretos.core/: lógica transversal (auth, logging, seguridad). Evita introducir lógica de negocio aquí; usaservices/.modules/+ui/: la UI se organiza por módulos; cada módulo debe contener sus vistas y controladores locales. Sigue la convenciónmodules/<nombre>/ <nombre>_view.py.services/ymodels/: losservicesimplementan reglas de negocio usandomodelscomo entidad; los controladores deben invocar a los services.scripts/: scripts de ayuda (migrations, seeds, export/import). Son utilitarios y no forman parte del runtime normal.data/: carpeta para backups y seeds; configúrala en.gitignoresegún tu política de backups.
Buenas prácticas recomendadas
- Añade tests en una carpeta
tests/(unidad y/o integración) y usapytest. - Usa
pre-commitconblack,isortyflake8para mantener consistencia. - Documenta nuevas rutas y comandos en
README.mdo endocs/si creas un conjunto mayor de documentación.
Si quieres, puedo:
- Generar automáticamente un
ARCHITECTURE.mdcon diagramas y responsabilidades por módulo. - Crear la carpeta
tests/con un ejemplo de prueba y configurarpytestenrequirements-dev.txt. - Añadir un fichero
CODE_CONVENTIONS.mdcon reglas de commit, style y estructura.
Recomendaciones para colaboradores:
- Crea un entorno virtual.
- Instala dependencias:
pip install -r requirements.txt. - Ejecuta linters y formateadores antes de commitear.
Instalación de herramientas de calidad:
python -m pip install pre-commit black flake8 isort
pre-commit installEjecutar tests:
python -m pip install pytest
pytest -qPR checklist (sugerido):
- Tests añadidos/actualizados
- Documentación actualizada
- Código formateado (
black) y revisado (flake8)
El repositorio incluye build/installer.iss y build.ps1 para crear instaladores en Windows.
Flujo recomendado:
- Generar ejecutable con PyInstaller (opcional):
pyinstaller --onefile main.py-
Crear instalador con Inno Setup usando
build/installer.iss. -
Probar instalador en máquinas objetivo y validar permisos y dependencias.
- No subir credenciales a VCS. Usa
.envo variables de entorno. - Limita privilegios de la cuenta DB usada por la app.
- Valida y sanitiza entradas de usuario en puntos de persistencia.
- Respaldos regulares:
data/backups/— automatiza con tareas programadas.
Si quieres, añado una guía de hardening y rotación de secrets.
- Fork del repositorio.
- Crea una rama:
feature/<descripcion>ofix/<descripcion>. - Incluye tests y documentación si aplican.
- Abre un PR con descripción, cambios y pasos para probar.
Suggested commit message format:
type(scope): short description
body (optional)
footer (issue reference)
Ejemplo:
docs(readme): mejorar documentación de instalación Windows
Q: No arranca la aplicación después de instalar dependencias.
A: Verifica la versión de Python, activa el entorno virtual y revisa core/logger.py para la traza. Ejecuta python -m pip install -r requirements.txt de nuevo.
Q: Error de conexión a MySQL.
A: Comprueba config/environment.py y ejecuta python scripts/test_mysql_connection.py.
Revisa LICENSE para detalles legales. Mantenedor: Ezer Zúñiga — abre un issue para soporte o propuestas de mejora.