Cómo incorporar un consentimiento informado adecuado a la RGPD en un portal PHP

Son muchos los clientes que nos llaman para incorporar en sus soluciones o webs tecnología de firma electrónica adecuado a la RGPD. Aunque contamos con varios productos que encajan en diferentes escenarios, hoy vamos a centrarnos en uno de ellos Viafirma Documents y en un caso de uso muy específico: firmar electrónicamente un consentimiento informado.

Para ponernos un poco en contexto el consentimiento es uno de los pilares básicos que caracteriza toda política de protección de datos, en este sentido, el apartado 11 del artículo 4 del Reglamento General de Protección de Datos (RGPD) nos dice que consentimiento del interesado es «Toda manifestación de voluntad libre, específica, informada e inequívoca por la que el interesado acepta, ya sea mediante una declaración o una clara acción afirmativa, el tratamiento de datos personales que le conciernen”.

Es decir, el RGPD determina cómo ha de prestar el consentimiento, el cual tiene 4 características, que son:

  • Consentimiento Libre: No puede prestarse bajo ningún tipo de coacción ni tampoco puede condicionarse como puede ser (por ejemplo) ante una rebaja de un servicio.
  • Consentimiento específico: No procede otorgar un consentimiento general, tal y como se venía realizando, sino que debe especificarse la finalidad del consentimiento.
  • Consentimiento informado: Se trata de informar al usuario de la finalidad del tratamiento, el nombre del responsable del tratamiento, cómo van a ser tratados los datos y los derechos de los que es titular la persona.
  • Consentimiento inequívoco: Es aquel que se ha prestado mediante una manifestación del interesado o mediante una clara acción afirmativa. Se entiende que el interesado presta este consentimiento cuando sabe, sin lugar a dudas, que está otorgando su beneplácito. Es por ello que no admite formas de consentimiento tácito o por omisión (que se basan en la inacción).

Para dar por válido un consentimiento el responsable deberá ser capaz de demostrar que aquel consintió el tratamiento de sus datos y para ello en nuestro caso usaremos evidencias electrónicas que nos ayudarán a demostrarlo.

Existen diferentes formas de firmar un documento electrónico: firma con certificado electrónico, firma biométrica, firma mediante OTP/SMS además de otras evidencias como puede ser la situación geográfica en el momento de la firma, fotografías, incluir anexos, sello de tiempo…


Si cuentas con un portal o aplicación web en PHP para gestionar tu clínica  y quieres generar el consentimiento basado en un documento/plantilla propio donde tus clientes puedan rellenar sus datos y firmar sigue leyendo…

Vamos a intentar explicarlo paso a paso. Tienes el ejemplo on line disponible aquí.

Para comenzar vamos a hacer uso de una API con PHP con soporte para cURL que permite realizar peticiones a servidores remotos. En nuestro caso, integraremos con los servicios REST expuestos para integradores por Viafirma Documents y que están securizados con OAuth, para lo que usaremos la librería que encontrarás en este enlace. Si lo prefieres puedes descargar el ejemplo completo junto con las librerías usadas.

En nuestro ejemplo usaremos un solo fichero php que nombraremos demo-consentimiento.php y que describiremos brevemente a continuación:

Librería y Definición de constantes:


//Definimos la ruta a las librerías oAuth indicadas con anterioridad, en nuestro caso la hemos dejado en el raíz dentro de una carpeta que hemos nombrado library

require_once dirname(__FILE__) . '/library/OAuthRequestSigner.php';

define(DOCUMENTS_API_URL, "https://sandbox.viafirma.com/documents/api/v3");

define(DOCUMENTS_CONSUMER_KEY, "xxxxx");

define(DOCUMENTS_CONSUMER_SECRET, "xxxxxxxxxx");

Las variables DOCUMENTS_CONSUMER_KEY y DOCUMENTS_CONSUMER_SECRET nos serán proporcionadas por Viafirma a través del formulario de contacto de su web para integradores: https://www.viafirma.com/developers/es/

Función send_message().


function send_message ()
{
    error_reporting(E_ALL);

    //Construcción de la URL del servicio a invocar
    $url=DOCUMENTS_API_URL."/messages/";

    //Acceso a los servicios securizados mediante oAuth
    OAuthStore::instance('MySQL', array('conn'=>false));

    $req = new OAuthRequestSigner($url, 'POST');

    $fecha = new DateTime();

    $secrets = array(
                'consumer_key'      =>; DOCUMENTS_CONSUMER_KEY,
                'consumer_secret'   =>; DOCUMENTS_CONSUMER_SECRET,
                'token'             =>"",
                'token_secret'      =>"",
                'signature_methods' => array(‘HMAC-SHA1’),
                'nonce'             => '',
                'timestamp'         => $fecha->getTimestamp(),
                );

    $req->sign(0, $secrets);

    //JSON con datos necesarios para Viafirma Documents que describiremos más adelante

    $string_json = file_get_contents("./demo_consentimiento.json");

    //Iniciamos y ejecutamos CuRL

    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $string_json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

     // OAuth Header
    $headr = array();
    $headr[] = 'Content-Length: ' . strlen($string_json);
    $headr[] = 'Content-type: application/json';
    $headr[] = ''.$req->getAuthorizationHeader();
    curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);

    $result = curl_exec($ch);
    $array = json_decode($result);
    $link=$array->notification->sharedLink->link;

    //Obtenemos el link de respuesta enviado por Viafirma Documents 
    return $link;

    echo 'NombreiFrame.location.href = "'.$link.'";'; 
    echo "Url para redireccionar o montar iframe: ";
    echo prettyPrint($result); 

    // Closing
    curl_close($ch);

}

demo-consentimiento.json

Aunque podríamos definir muchas más variables, con este simple .json y una plantilla definida en Viafirma Documents nos valdría para llevar a acabo el ejemplo:


{
 "groupCode" : "String",
 "workflow" : {
   "type" : "PRESENTIAL"
 },
 "notification" : {
   "text" : "Texto de la petición de firma",
   "detail" : "Detalle de la petición de firma"
 },
  "document": {
    "templateCode": "nombre_plantilla",
    "formRequired": true
  },
 "callbackMails" : "tucorreoderespuesta@xxx.com"
}


code.hljs { background: #fafafa !important; padding: 2em 4em; border: 1px solid #eaeaea; border-radius: 4px; }

Importante:

  • Recuerda sustituir los valores del ejemplo por los que te proporcione Viafirma para el atributo: groupCode. El grupo determinará comportamiento preconfigurado relativo factores como transferencias automáticas, hojas de estilos, permisos, etc. Es importante que el groupCode coincida con el grupo con el que pretendes completar tu proceso de firma.
  • Define en esta variable el código de tu plantilla existente en Viafirma documents document.templateCode
  • En el campo callbackMails podrás informar una cuenta de correo, o varias separadas por coma, a las que informaremos automáticamente cuando tu proceso haya finalizado, pudiendo incluir como anexo el documento firmado y con un mensaje y estilo personalizado.

Una vez tengas implementados ambos ficheros solo nos queda llamarlos desde el botón de tu página o dentro de tu aplicación y generará una petición automática de firma basándose en la plantilla definida en Viafirma Documents como podéis ver en el ejemplo que os incluimos al principio de este artículo.

El resultado es que desde una página web en PHP puedo conseguir que mis pacientes rellenen y firmen el consentimiento de una manera ágil y segura.

Esperamos os haya sido útil.

A seguir firmando con Viafirma!!!