Sistema web farmacéutico y punto de venta (POS) desarrollado en Laravel 10, evaluado bajo ISO/IEC 25010, con índice global de calidad del 91.6%.
Requisito único: Tener Docker Desktop instalado y corriendo.
:: 1. Clona el repositorio
git clone https://github.com/AmsselFern10/FarmaBien.git
cd FarmaBien
:: 2. Ejecuta el script de instalación (doble clic o desde terminal)
setup.batEl script setup.bat resuelve automáticamente:
- ✅ Detecta si el puerto 80 está ocupado → usa 8080
- ✅ Detecta si el puerto 3306 está ocupado (XAMPP) → usa 3307
- ✅ Crea el archivo
.envcon la configuración correcta para Docker - ✅ Instala dependencias PHP sin necesidad de tener PHP instalado en Windows
- ✅ Espera a que MySQL esté listo antes de migrar
- ✅ Ejecuta migraciones, seeders y compila el frontend dentro del contenedor
- ✅ Te dice exactamente en qué URL abrir la app
Haz clic para expandir el proceso manual
- Docker Desktop instalado y corriendo
- Git
:: 1. Clonar
git clone https://github.com/AmsselFern10/FarmaBien.git
cd FarmaBien
:: 2. Crear .env (usa la plantilla preconfigurada para Docker)
copy .env.local.example .env
:: 3. Instalar dependencias PHP via contenedor temporal
:: (no necesitas PHP instalado en tu PC)
docker run --rm -v "%cd%:/app" -w /app composer:2 install --no-interaction --ignore-platform-reqs
:: 4. Levantar contenedores
docker compose up -d --build
:: 5. Esperar ~20 segundos a que MySQL inicie, luego:
docker compose exec laravel.test php artisan key:generate
docker compose exec laravel.test php artisan migrate:fresh --seed --force
docker compose exec laravel.test php artisan storage:link
:: 6. Compilar el frontend DENTRO del contenedor
:: (no ejecutes npm directamente en PowerShell — bloqueado por política de seguridad)
docker compose exec laravel.test npm run buildAcceder en: http://localhost
| Rol | Contraseña | |
|---|---|---|
| Administrador | admin@farmabien.com |
password |
| Farmacéutico | farmaceutico@farmabien.com |
password |
| Cajero | cajero@farmabien.com |
password |
| Inventario | inventario@farmabien.com |
password |
⚠️ Cambiar las contraseñas antes de usar en producción.
:: Apagar los contenedores (conserva la base de datos)
docker compose down
:: Volver a encender
docker compose up -d
:: Ver logs en tiempo real si algo falla
docker compose logs -f laravel.test
docker compose logs -f mysql
:: Resetear toda la base de datos (borra y vuelve a sembrar)
docker compose exec laravel.test php artisan migrate:fresh --seed
:: Limpiar caché de Laravel
docker compose exec laravel.test php artisan optimize:clear
:: Abrir una terminal dentro del contenedor
docker compose exec laravel.test bash| Síntoma | Causa | Solución |
|---|---|---|
SQLSTATE[HY000] Connection refused |
.env.example original usa DB_HOST=127.0.0.1 |
Usa .env.local.example que tiene DB_HOST=mysql |
| Puerto 80 ocupado | IIS, XAMPP o proceso del Sistema | El setup.bat lo detecta y usa 8080 automáticamente |
| Puerto 3306 ocupado | XAMPP u otro MySQL local | El setup.bat lo detecta y usa 3307 automáticamente |
PSSecurityException al ejecutar npm |
Política de PowerShell bloquea scripts | Ejecuta npm dentro del contenedor: docker compose exec laravel.test npm run build |
| Contenedor no inicia, error de permisos | Storage creado como root | docker compose exec laravel.test chmod -R 775 storage bootstrap/cache |
| Blank page / error 500 | Falta APP_KEY o caché vieja |
docker compose exec laravel.test php artisan key:generate && php artisan optimize:clear |
vendor/ no existe y Docker no inicia |
Git no sube carpetas vacías | El setup.bat instala con contenedor temporal automáticamente |
| Módulo | Descripción |
|---|---|
| 🛒 Punto de Venta (POS) | Ventas con búsqueda reactiva, descuentos, múltiples métodos de pago y ticket |
| 📦 Inventario FEFO | Control de stock por lotes, política First Expired First Out, alertas |
| 🛍️ Compras y Lotes | Registro de compras a proveedores con control de lotes y vencimientos |
| 💊 Recetas Médicas | Retención digital de recetas, control de dispensación y saldo |
| 💰 Cajas y Turnos | Apertura/cierre de turno, fondo, arqueo y consolidación automática |
| 📊 Reportes | PDF (DomPDF) y Excel de ventas, compras, Kardex e inventario |
| 🤖 Asistente IA | Consulta farmacológica por síntoma o principio activo (Gemini/offline) |
| 👥 RBAC + Seguridad | Roles, permisos granulares, bloqueo por intentos fallidos, audit log |
| 🔒 Imágenes Privadas | Imágenes de productos protegidas — solo accesibles con sesión activa |
| Capa | Tecnología |
|---|---|
| Backend | PHP 8.2, Laravel 10, MySQL 8.0 |
| Frontend | Tailwind CSS 3, Alpine.js 3, Vite |
| Auth / RBAC | Laravel Breeze + Spatie Permission |
| DevOps local | Docker Compose + Laravel Sail |
| Cloud | Render (Docker) + Aiven MySQL |
| Característica | Índice | Estado |
|---|---|---|
| Adecuación Funcional | 0.936 | ✅ |
| Eficiencia de Desempeño | 1.000 | ✅ |
| Compatibilidad | 1.000 | ✅ |
| Usabilidad | 0.817 | ✅ |
| Fiabilidad | 0.928 | ✅ |
| Seguridad | 0.937 | ✅ |
| Mantenibilidad | 1.000 | ✅ |
| Portabilidad | 0.550 → mejorando con setup.bat |
|
| ÍNDICE GLOBAL | 0.916 | ✅ APROBADO |
Desarrollado con ❤️ — FarmaBien v1.0.0 · Laravel 10 · ISO/IEC 25010