# Subir receta médica y validación farmacéutica en PrestaShop: documentación

> Principio de funcionamiento Usted decide qué productos están regulados. Cuando un cliente añade uno a su carrito, aparece un bloque «Receta y validación farmacéutica» bajo el carrito. El cliente sube…

- Página: <https://www.datafirefly.com/es/documentation/prescription-upload-pharmacist-validation-prestashop/>
- Idioma: es
- Actualizado el: 2026-10-07
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [en](https://www.datafirefly.com/en/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [it](https://www.datafirefly.com/it/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/prescription-upload-pharmacist-validation-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/prescription-upload-pharmacist-validation-prestashop/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

## Principio de funcionamiento

Usted decide qué productos están regulados. Cuando un cliente añade uno a su carrito, aparece un bloque «Receta y validación farmacéutica» bajo el carrito. El cliente sube allí su receta y hace el pedido. El pedido queda en el estado _En espera de validación farmacéutica_ hasta que el farmacéutico decide en el back office. Los documentos se cifran en su servidor y el servidor web nunca los sirve directamente.

- **Receta obligatoria**: hay que subir un documento antes de hacer el pedido.
- **Revisión farmacéutica**: no se exige documento, pero el pedido se revisa antes del envío.
- **Venta libre**: sin validación, solo se aplica la cantidad máxima por pedido. En un producto, este modo lo excluye también de la regla de su categoría.

La venta en línea de medicamentos con receta está prohibida en varios países, entre ellos España y Francia, y una receta contiene datos de salud. El módulo aporta las herramientas técnicas; la autorización de venta y el alojamiento siguen siendo responsabilidad suya.

## Requisitos

- PrestaShop 8.0 a 9.x.
- Extensión PHP `openssl` (se comprueba en la instalación).
- Una tarea cron cada hora, recomendada para recordatorios, alertas y purga.
- HTTPS en la tienda.

## Instalación

1. En _Módulos > Gestor de módulos_, haga clic en _Subir un módulo_ y envíe el ZIP.
2. El módulo crea el estado de pedido _En espera de validación farmacéutica_, la carpeta de almacenamiento cifrado y dos menús: _Pedidos > Recetas_ y _Pedidos > Reglas de receta_.
3. Abra la configuración del módulo: el panel _Estado_ indica si la carpeta de almacenamiento está lista y protegida contra el acceso directo.

## Definir los productos regulados

Menú _Pedidos > Reglas de receta_, botón _Añadir una regla_:

- **Se aplica a**: un producto (búsqueda por nombre, referencia, EAN o ID) o una categoría con sus subcategorías.
- **Modo**: receta obligatoria, revisión farmacéutica o venta libre.
- **Cantidad máxima por pedido**: por producto, sumando todas las combinaciones. Por encima, el paso por caja se bloquea. 0 significa sin límite.

Una regla de producto prevalece siempre sobre las reglas de categoría. Si un producto pertenece a varias categorías reguladas, «Receta obligatoria» prevalece sobre «Revisión farmacéutica» y se aplica la cantidad máxima más pequeña.

La regla de un producto también se define desde la pestaña _Módulos_ de su ficha. Se guarda al instante, sin guardar el producto.

## Configuración del módulo

### Flujo de validación

- **Después del pedido** (por defecto): el cliente paga y el pedido espera la validación. Un rechazo obliga a reembolsar al cliente desde la página del pedido.
- **Antes del pago**: el cliente conectado envía su carrito al farmacéutico y solo puede pagar tras la validación. Si el carrito cambia después, debe enviarse de nuevo.

### Documentos

- **Tipos aceptados**: PDF, JPEG, PNG, WebP. El tipo real se comprueba por la firma del archivo, y se rechazan los PDF con JavaScript, acciones de ejecución o archivos adjuntos.
- **Tamaño máximo** (8 MB por defecto) y **número máximo de archivos por solicitud** (5 por defecto).
- **Reutilización de recetas validadas**: un cliente conectado puede adjuntar una receta ya validada a un nuevo carrito hasta su fecha de validez.
- **Validez por defecto** (90 días): se rellena en el formulario de validación.
- **Texto de consentimiento**, por idioma: el cliente debe marcar la casilla antes de cada envío.

### Cuestionario de salud

Si se activa, pregunta por el paciente (uno mismo u otra persona), la edad, el peso, la altura, el sexo, el embarazo o la lactancia, las alergias, los tratamientos en curso y los antecedentes. El paso por caja espera las respuestas. Se cifran y se rellenan en el siguiente pedido para un cliente conectado.

### Recordatorios y plazos

- **Recordatorio al cliente** (2 días): correo cuando el cliente no ha respondido a una solicitud de información.
- **Cancelación automática** (10 días): la solicitud se rechaza con el motivo «Sin respuesta del cliente».
- **Alerta al farmacéutico** (24 horas): resumen de las solicitudes y mensajes de clientes que esperan más allá del plazo.

0 desactiva cada función.

### Notificaciones y estados

- **Correos de notificación al farmacéutico**: una o varias direcciones separadas por comas.
- **Estado de los pedidos rechazados**: Cancelado por defecto, que repone el stock.
- **Respuestas guardadas**: una por línea y por idioma, se insertan con un clic en un mensaje o una decisión.

### Almacenamiento y conservación

- **Carpeta de almacenamiento**: `var/dfprescription/` por defecto. Se recomienda una ruta absoluta fuera de la raíz web. No se puede cambiar una vez almacenados documentos.
- **Conservación de documentos** (365 días): los archivos se eliminan tras este plazo, salvo en las solicitudes en curso y las recetas aún válidas. Los metadatos y el registro de auditoría se conservan.

## Recorrido del cliente

1. La ficha de producto muestra un distintivo: receta obligatoria, revisión farmacéutica o límite por pedido.
2. En el carrito, el cliente arrastra sus documentos o hace una foto con el móvil, marca el consentimiento, rellena el cuestionario si hace falta y puede dejar una nota al farmacéutico.
3. Mientras falte algo, los enlaces al pedido se desactivan y el acceso directo a la página de pedido lo devuelve al carrito con un mensaje.
4. Tras el pedido, la página de confirmación, el detalle del pedido y la página _Mis recetas_ de la cuenta muestran el estado de la solicitud. Los invitados siguen su solicitud mediante un enlace privado enviado por correo.

## Tratar una solicitud

Menú _Pedidos > Recetas_. La lista muestra el estado, el número de documentos y los mensajes no leídos, con contadores en la parte superior. La ficha de una solicitud reúne:

- los documentos en un visor (PDF integrado, imágenes con rotación y zoom), con apertura y descarga;
- el cliente, el pedido o pedidos, los productos afectados y su regla;
- las respuestas al cuestionario de salud, con los puntos de riesgo resaltados;
- el hilo de mensajes con el cliente;
- el formulario de decisión y el registro de auditoría.

### Decidir

- **Validar**: fije la fecha de validez de la receta. El pedido recupera el estado que tenía antes de la espera, por ejemplo Pago aceptado.
- **Solicitar información**: el mensaje es obligatorio. El cliente recibe un correo y responde desde su cuenta o el enlace privado.
- **Rechazar**: elija un motivo. El pedido pasa al estado configurado para los rechazos.

El nombre del farmacéutico y su número profesional se guardan con cada decisión y se recuerdan para el empleado. Se puede añadir una nota interna, nunca visible para el cliente, a cada solicitud.

Si un módulo de pago cambia el estado de un pedido en espera (por ejemplo, un webhook de pago), el módulo guarda ese estado y vuelve a poner el pedido en espera. Un cambio manual de un empleado se respeta y queda registrado.

## Mensajería cliente ↔ farmacéutico

Cada solicitud tiene su hilo de mensajes, cifrado como los documentos. El farmacéutico responde desde la ficha de la solicitud, insertando si quiere una respuesta guardada. El cliente recibe el texto por correo y responde desde _Mis recetas_. El farmacéutico recibe un correo que no contiene el mensaje, solo un enlace a la solicitud. El cliente está limitado a 20 mensajes al día por solicitud.

## Código QR de las recetas electrónicas

Al abrir una solicitud, el código QR de cada documento se lee en su navegador, en las imágenes y en las 3 primeras páginas de los PDF. El bloque _Código QR de la receta electrónica_ muestra:

- el identificador detectado y el contenido completo del código QR;
- una alerta si la misma receta ya se envió en otra solicitud de la tienda, con la indicación «otro cliente» si procede;
- un campo para introducir el número a mano si el código QR es ilegible, y un botón para volver a leerlo.

Solo un software de farmacia certificado puede consultar los servicios oficiales de receta electrónica. El módulo prepara la comprobación y detecta las reutilizaciones; el farmacéutico verifica después el identificador en su software.

## Tarea programada

La configuración del módulo muestra la URL del cron. Llámela cada hora:

```
0 * * * * curl -s "https://su-tienda.com/module/dfprescription/cron?key=SU_CLAVE" >/dev/null
```

Envía los recordatorios y alertas, cancela las solicitudes sin respuesta y purga los archivos caducados. Sin cron, estas tareas se ejecutan como máximo una vez por hora al abrir la página _Recetas_.

## Seguridad y cumplimiento

- Cifrado AES-256-GCM de documentos, respuestas al cuestionario, mensajes y contenido de los códigos QR. La clave se deriva de un secreto del módulo y del `_COOKIE_KEY_` de la tienda.
- Registro de auditoría de cada envío, consulta, descarga, mensaje y decisión, con la dirección IP.
- Exportación CSV del registro desde _Pedidos > Recetas_ (botón _Exportar el registro_), sin documentos ni respuestas de salud.
- Compatible con el módulo RGPD oficial: la exportación de datos del cliente incluye las solicitudes, y eliminar un cliente borra sus documentos y mensajes.

En una migración, conserve el `_COOKIE_KEY_` de la tienda y el valor de configuración `DFPRESCRIPTION_KEY`. Sin uno de los dos, los documentos almacenados ya no se pueden descifrar.

## Solución de problemas

### El panel Estado indica que la carpeta es accesible desde la web

Los archivos siguen cifrados, pero nginx ignora el archivo `.htaccess`. Añada una regla `deny all` a la carpeta o elija una carpeta fuera de la raíz web.

### El cliente no ve el bloque de receta

Compruebe que una regla cubre el producto o una de sus categorías, y que su tema muestra el hook `displayShoppingCartFooter` en la página del carrito.

### El código QR no se lee

El código QR debe ser nítido y verse entero. Use _Volver a leer_ tras recibir una foto mejor, o introduzca el número de receta a mano.

## Desinstalación

La desinstalación elimina definitivamente todos los documentos almacenados y las tablas del módulo. El estado de pedido dedicado se oculta, pero se conserva para el historial de pedidos. Exporte el registro antes de desinstalar si necesita conservar una traza.
