# Guía de Despliegue en Servidor Strato y Especificación Técnica
# Plataforma `misdocumentosdeca` (PHP 8.x + MySQL / Sin Node.js)

> **Destino**: Servidor Web Hosting / VPS Strato (Apache 2.4 + PHP 8.1/8.2/8.3 + MariaDB/MySQL)  
> **Directorio de Fuentes del Servidor**: `c:\fuentes\proyectos delphi\DECA\server`  
> **Esquema de Base de Datos**: `c:\fuentes\proyectos delphi\DECA\database\schema_misdocumentosdeca.sql`  
> **Cumplimiento Normativo**: Resolución DGT 5 de junio de 2026 (BOE-A-2026-12784), Ley 9/2025 y Orden FOM/2861/2012.

---

## 1. Procedimiento de Instalación en Strato

### Paso 1: Crear la Base de Datos en Strato
1. Accede al panel de control de Strato -> **Bases de datos MySQL**.
2. Pulsa en **"Crear nueva base de datos"**:
   - Nombre de la BD: Ej. `DB1234567` (o `misdocumentosdeca`).
   - Asigna una contraseña segura y anota el nombre de host (suele ser `rdbms.strato.de` o `localhost`).
3. Abre **phpMyAdmin** desde el panel de Strato y selecciona la base de datos creada.
4. Ve a la pestaña **Importar** y selecciona el archivo:
   `c:\fuentes\proyectos delphi\DECA\database\schema_misdocumentosdeca.sql`
5. Ejecuta la importación. Se crearán todas las tablas InnoDB con soporte multi-tenant y la empresa demo `JOSE JAVIER MARTINEZ` (Código: `EBF9F8614B5`).

### Paso 2: Subir los Archivos por FTP / SFTP
1. Conecta con tu cliente FTP (FileZilla o similar) usando los datos de acceso FTP de Strato.
2. Sube todo el contenido de la carpeta `c:\fuentes\proyectos delphi\DECA\server\` a la raíz de tu dominio (habitualmente `/` o `/htdocs/` o `/misdocumentosdeca/` según la configuración de tu dominio en Strato).
3. Asegúrate de que el archivo `.htaccess` se suba correctamente (en FileZilla activar *Servidor -> Forzar mostrar archivos ocultos*).

### Paso 3: Ajustar `config.php`
Abre el archivo `config.php` en el servidor y configura tus datos de conexión:
```php
define('DB_HOST', 'rdbms.strato.de'); // Host MySQL de Strato
define('DB_PORT', 3306);
define('DB_NAME', 'DB1234567');       // Nombre de tu BD en Strato
define('DB_USER', 'U1234567');        // Usuario MySQL de Strato
define('DB_PASS', 'TuPasswordStrato'); // Contraseña asignada
define('BASE_URL', 'https://www.misdeca.es'); // Dominio oficial definitivo HTTPS
```

### Paso 4: Permisos de Almacenamiento
Asegúrate de que el directorio `storage/pdfs/` tenga permisos de escritura (`755` o `775`) para que el motor PHP pueda guardar los PDFs oficiales generados.

---

## 2. Verificación del Cumplimiento con la Normativa de Tráfico

| Requisito Legal (BOE-A-2026-12784) | Implementación en `misdocumentosdeca` | Estado |
| :--- | :--- | :---: |
| **PDF Nativo Digital (< 5 MB)** | Generado mediante `lib/DecaPdf.php` y `lib/fpdf.php` sin escaneos de papel. Tamaño medio: ~50 KB. | Cumplido |
| **Código QR de Inspección** | Incrustado en la esquina superior derecha del PDF mediante rectángulos vectoriales limpios sin librerías externas. | Cumplido |
| **Acceso Directo Sin Login** | Endpoint público `GET /doc/{token}` en `doc.php` que entrega directamente el archivo PDF oficial con cabeceras `inline`. Prohibidas pantallas de login o interacción para la Guardia Civil. | Cumplido |
| **Metadatos Temporales ISO** | El PDF embebe `/CreationDate` y `/ModDate` con fecha/hora exacta UTC de emisión y rectificación. | Cumplido |
| **Diferenciación de Sujetos** | Desglose legal obligatorio de **Cargador Contractual**, **Transportista Efectivo** y conductor con DNI. | Cumplido |
| **Matrículas y Peso Neto** | Matrícula de camión y remolque/semirremolque; peso neto en Kg (sin MMA ni tara). | Cumplido |
| **Distribución Inmediata** | Botones de WhatsApp, Web Share y enlace directo móvil para enviar al conductor antes de la salida. | Cumplido |

---

## 3. Especificación de la API REST para los ERPs Delphi

Para emitir documentos de carga desde `RAUL_ASENCIO\GESTION` y `AGRIGEST\GESTION`:

### Endpoint de Emisión
- **Método**: `POST`
- **URL**: `https://misdocumentosdeca.es/api/deca/emitir`
- **Cabeceras**:
  ```http
  Content-Type: application/json
  X-API-Key: deca_live_sec_ebf9f8614b5_2026_key9876543210
  ```

### Ejemplo de Payload JSON (Albarán de Carga Agrupado)
```json
{
  "origen_sistema": "ERP_DELPHI",
  "referencia_albaran": "ALB-2026-135, ALB-2026-136",
  "fecha_servicio": "2026-09-28",
  "hora_servicio": "17:50",

  "cargador_nombre": "JOSE JAVIER MARTINEZ",
  "cargador_nif": "79101412L",
  "cargador_direccion": "SAN JUAN, 25",
  "cargador_cp": "03680",
  "cargador_localidad": "ASPE",
  "cargador_provincia": "ALICANTE",

  "transportista_nombre": "JOSE JAVIER MARTINEZ",
  "transportista_nif": "79101412L",
  "transportista_direccion": "SAN JUAN, 25",
  "transportista_cp": "03680",
  "transportista_localidad": "ASPE",
  "transportista_provincia": "ALICANTE",

  "matricula_tractora": "1061CHH",
  "matricula_remolque": "0688HKP",
  "tipo_vehiculo": "Articulado",
  "conductor_nombre": "JOSE JAVIER MARTINEZ GALIPIENSO",
  "conductor_nif": "79101412L",

  "origen_nombre": "JOSE JAVIER MARTINEZ (ORIGEN)",
  "origen_nif": "79101412L",
  "origen_direccion": "SAN JUAN, 25",
  "origen_cp": "03680",
  "origen_localidad": "ASPE",
  "origen_provincia": "ALICANTE",

  "destino_nombre": "FRUTAS PRIETO",
  "destino_nif": "B53966594",
  "destino_direccion": "CTRA, NOVELDA KM 1.5",
  "destino_cp": "03680",
  "destino_localidad": "ASPE",
  "destino_provincia": "ALICANTE",

  "mercancia_naturaleza": "UVA DE MESA ENVASADA",
  "cantidad_bultos": "2 Palés",
  "peso_neto_kg": 1540.00,
  "peso_determinacion": "Peso conocido",
  "autorizacion_especial": "No necesaria, según declaración del emisor.",
  "observaciones": "NINGUNA OBSERVACION RESEÑABLE",

  "paradas": [
    {
      "orden": 1,
      "nombre": "MERCALICANTE - PUESTO 14",
      "nif": "A03000111",
      "operacion": "descarga",
      "kg_descarga": 700.00,
      "direccion": "Ctra. Madrid Km 4",
      "cp": "03007",
      "localidad": "Alicante",
      "provincia": "Alicante",
      "detalle": "Descarga de 1 palé correspondiente al albarán 26-135"
    }
  ]
}
```

### Respuesta Exitosa (`200 OK`)
```json
{
  "success": true,
  "id_deca": 1,
  "codigo_deca": "DECA-EBF9F8614B5-2026-000001",
  "token_publico": "7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b",
  "url_descarga_qr": "https://misdocumentosdeca.es/doc/7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b",
  "pdf_url": "https://misdocumentosdeca.es/doc/7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b",
  "fecha_emision": "2026-09-28 17:50:00",
  "pdf_tamano_bytes": 48210
}
```
