# Simprofire

App de **Inspecciones** y **Reportes** para SIMPRO Fire Protection (Querétaro).
CodeIgniter 4.7 · PHP 8.2 · mPDF 8.3.

## Qué hace

- **Inspecciones**: el técnico captura en campo desde celular/tablet, con auto-guardado local + servidor (resiste mala conexión WiFi). Cada inspección usa una **Plantilla** (SIM1 Tablero AyD, SIM6 Cuarto de Bombas, SIM9 Gas, SIM11 Válvulas, etc.).
- **Plantillas dinámicas** con 7 tipos de campo: Sí/No/N-A, texto, numérico, casilla, conmutador, adjunto y firma.
- **Tabla de equipos** (modo `equipment_table`) para plantillas tabulares como SIM11.
- **Folio único** `SIM-YYYY-####` (inspecciones) o `SIM-R-YYYY-####` (reportes), sin huecos.
- **Firma digital** en canvas HTML5 (dibujo con dedo o mouse).
- **Reportes posteriores** que agrupan inspecciones firmadas y se entregan al cliente con PDF maestro predefinido, folio y QR.
- **Validación pública vía QR**: cada PDF lleva un QR a `/verify/{token}` (sin login) que muestra folio, cliente, fecha, inspector y descarga del PDF original.

## Requisitos

- PHP 8.2+ con extensiones `intl`, `gd`, `mbstring`, `mysqli`
- MySQL/MariaDB (XAMPP, MAMP, etc.)
- Composer (solo si necesitas reinstalar `vendor/`)

## Cómo correrlo

1. Inicia MySQL (XAMPP) en `127.0.0.1:3306`.
2. Crea la BD:
   ```sql
   CREATE DATABASE simprofire CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
   ```
3. Desde esta carpeta:
   ```bash
   php spark migrate
   php spark db:seed InitialSeeder
   php spark serve --host 127.0.0.1 --port 8082
   ```
4. Abre <http://127.0.0.1:8082/login> con:
   - Usuario: `admin@simprofire.local`
   - Contraseña: `Admin12345`
   (configurable en `.env`)

El seed crea: admin, branding por defecto, cliente "Hospital Demo" y plantillas adaptativas **SIM1-SIM13**. SIM1, SIM3-SIM10 y SIM12 son checklist; SIM2, SIM11 y SIM13 son tablas de equipos/dispositivos.

## Tablas nuevas

- `clients`, `inspection_templates`, `inspection_template_sections`, `inspection_template_items`
- `inspections`, `inspection_answers`, `inspection_attachments`
- `reports`, `report_inspections`, `signatures`, `audit_log`, `folio_sequences`
- Base: `users`, `system_settings`
- Las tablas antiguas `pdf_templates` y `pdf_template_assets` pueden existir por compatibilidad de migraciones, pero ya no forman parte del flujo normal de SIMPRO.

## Flujo end-to-end

1. `/inspection-templates` → revisar o ajustar cualquier formato SIM1-SIM13 sin tocar código.
2. `/inspections/create` → elegir cliente y formato.
3. Llenar respuestas, adjuntar foto, firmar en canvas → en Network se ven los POST de autosave cada ~800 ms.
4. Recargar a mitad → confirmar que el borrador local se restaura (toast).
5. "Finalizar y firmar" → folio `SIM-YYYY-####` asignado, status `signed`, PDF descargable con QR.
6. Escanear el QR con el celular → abre `/verify/{token}` pública.
7. `/reports/create` → agrupar inspecciones firmadas en un Reporte.

## Branding

`/settings/branding` (PIN `2468` por defecto, configurable en `.env`). Logo y colores se aplican al panel admin, al PDF y a la página pública de verificación.

## Estructura principal

- `app/Controllers/Inspection*Controller.php`, `ClientController.php`, `ReportController.php`, `VerifyController.php`, `SignatureController.php`
- `app/Libraries/FolioService.php`
- `app/Views/inspections/form.php` + `fields/*.php` (renderer dinámico)
- `app/Views/pdf/inspection.php`, `inspection_equipment.php`, `report.php`
- `app/Views/verify/show.php`
- `public/assets/js/autosave.js`, `signature_pad.js`
- `app/Database/Migrations/2026-05-26-*` (12 migraciones nuevas)
- `app/Database/Seeds/InitialSeeder.php`
