# Sistema MTO MEDSURSA — Control de Mantenimiento Preventivo y Correctivo

Sistema web Laravel 13 + PHP 8.4 + MariaDB para reemplazar el `LIBRO.xlsx` de mantenimiento. Responsive (PC, tablet, celular), white-label completo, importador de Excel, dashboard con 12 KPI y 10 gráficos, planes maestros preventivo/correctivo, órdenes de trabajo con checklist LILA, evidencias fotográficas, firma con clave personal, costos, repuestos, reportes Excel/PDF y API REST.

## Credenciales por defecto

| Usuario     | Contraseña  | Rol                | Clave de firma |
|-------------|-------------|--------------------|----------------|
| `admin`     | `admin`     | Administrador      | `admin`        |
| `supervisor`| `supervisor`| Supervisor         | `super`        |
| `tecnico`   | `tecnico`   | Tecnico            | `tec`          |
| `almacen`   | `almacen`   | Almacen            | `alm`          |
| `consulta`  | `consulta`  | Consulta           | `con`          |

> Cambia las contraseñas y claves de firma desde **Usuarios** o **Mi perfil**.

## Desarrollo local (XAMPP)

1. PHP ≥ 8.3, Composer y MariaDB activos.
2. Crear base de datos:
   ```sql
   CREATE DATABASE mto CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
   ```
3. `composer install`
4. Configurar `.env` con tus credenciales.
5. `php artisan migrate --seed && php artisan storage:link`
6. `php artisan serve --port=8000` → `http://127.0.0.1:8000/login`

## Estructura

```
mto/
├── app/
│   ├── Http/Controllers/      # Áreas, Equipos, Planes, Órdenes...
│   ├── Imports/               # PlanMantenimientoImporter (LIBRO.xlsx)
│   ├── Exports/               # OrdenesExport (Excel)
│   ├── Models/                # Eloquent en PHP
│   └── View/Composers/        # ConfigComposer (white-label)
├── database/
│   ├── migrations/            # Tablas en español
│   └── seeders/               # Configuración, catálogos, roles, usuarios
├── public/
│   ├── img/                   # Logos, fondo y favicon
│   └── storage/               # Symlink a storage/app/public
├── resources/views/           # Blade + Bootstrap 5 (CDN)
└── routes/                    # web.php y api.php
```

## Despliegue en cPanel

Ver `docs/cpanel.md`.

## API REST

Base URL: `https://tu-dominio/api`

| Método | Endpoint              | Descripción           |
|--------|-----------------------|-----------------------|
| GET    | `/ping`               | Estado del servicio   |
| GET    | `/areas`              | Lista de áreas        |
| GET    | `/equipos`            | Equipos con área      |
| GET    | `/planes`             | Planes con ítems      |
| GET    | `/ordenes`            | Órdenes filtradas     |
| GET    | `/ordenes/{orden}`    | Detalle de OT         |

## Buenas prácticas de seguridad

- Contraseñas con bcrypt (`BCRYPT_ROUNDS=12`).
- CSRF en todos los formularios.
- Roles y permisos granulares (Spatie Permission).
- Login por usuario (sin email) y bloqueo de inactivos.
- Soft-deletes en `usuarios`, `planes` y `ordenes_trabajo`.
- Optimización de fotos (JPEG 80%, ancho máximo configurable).
- Clave de firma cifrada (`Hash::make()`).
- Bitácora de cambios en `ordenes_logs`.
- Archivos en `storage/` (no expuestos directamente, vía `storage:link`).
