Implementando un flujo de firmas en nuestro workflow

A continuación vamos a explicar cómo aprovechar las bondades de tres componentes habituales en nuestros desarrollos para implementar un sencillo flujo de firma de formularios.

Los jugadores son:

  1. Jbpm 3.2 como motor de workflow.
  2. Formula 2 como motor de formularios.
  3. Viafirma 1.3.5 como motor de firma digital.

La aplicación que los implementa está desarrollada con Seam + JSF + JPA.

La Descripción

Básicamente el requisito era el siguiente: un formulario completado por un usuario entraba en un flujo de transiciones en el que distintos departamentos y/o personas tenían que ir aprobándolo con su firma digital.

La solución tradicional con la que contábamos se basaba en recuperar los datos del primer formulario, y en la transición adecuada los mostrábamos para que el firmante pudiera comprobar los datos (tareas).

Esto implicaba un esfuerzo en la redendirización nuevamente de los datos facilitados por el usuario, por lo que decidimos aprovechar las características de los componentes usados para simplicarlo todo.

Solución

Formula2 permite la identificación de los campos creados en el formulario. De esta manera nuestra solución consisitirá en identificar un mismo nombre de campo dentro de un mismo ProcessId.

Una vez asegurado en nuestro proceso esta identificación de campos, ahora toca el turno de Formula2; duplicaremos el formulario original, y modificaremos todos sus campos al tipo ReadOnly, de manera que el firmante no pueda modificar los datos mostrados en el formulario inicial.


Copiar un formulario en Formula2

Opcionalmente, a esta copia del formulario se le podrán añadir campos adicionales, como por ejemplo, un campo de observaciones o bien otros campos para informar valores necesarios en la siguiente transición.

Esta tarea de modificar cada campo de un formulario podría resultar algo engorrosa, pero solo habrá que hacerlo una vez, ya que la primera copia con todos sus campos «ReadOnly» nos serviría  de base para las sucesivas copias que necesitemos, y para estas copias ya no será necesario modificar la propiedad de sus campos.

Modificar propiedad campo

Resultado

A medida que el diseño del flujo (process-definition) va ejecutando las tareas e invocando los distintos formularios, los actores propietarios de dichas tareas van firmando con su certificado digital los formularios.

El proceso de firma es delegado a nuestro al motor de firma VIAFIRMA. Cuando éste completa la transacción de firma, devuelve todos los datos necesarios a nuestro sistema. En este caso, Jbpm interpreta estos datos de firma como variables del proceso, añadiéndolos como un dato más de la transición.

Como valor agregado, estos datos de firma y los contenidos en el formulario son indexados mediante Lucene (implementando openSearch), y de esta forma ofrecemos al usuario la posibilidad de buscar su proceso por el código de firma que se le informó.

Histórico del Proceso

Tras el proceso de firma, se le muestra al usuario una pantalla de recibo, donde se le accede a toda la información del proceso con las distintas opciones:

  • Descarga del formulario que fue firmado.
  • Descarga del comprobante de firma, con los datos del firmante y de la transacción (fecha, hora y certificado usado).
  • Id. de las tarea y proceso.
  • Link permanente a su proceso.
  • Todo ello apoyado con imágenes bidimensionales como el Qr-Code con el resumen de la firma y el BarCode con el código de la firma.

Justificante de Firma

Posibles Conflictos

Seguro que a alguno ya se le ha pasado por la cabeza un posible conflicto:

¿Qué ocurre si para un mismo ProcessId se ven involucrados 2 formularios que no son copias el uno del otro, pero el identificador que le pusimos al campo es el mismo, por ejemplo ID_PROFESOR?

  • si el segundo formulario NO es una copia del primero, pero tiene un campo con el mismo Id., efectivamente nuestro proceso hará que este segundo formulario se renderice con el valor introducido para ese campo en el primer formulario. Pero, al no tratarse de una copia, el campo no será del tipo ReadOnly (o no debiera), por lo que el valor podría ser modificado por el usuario.
  • La solución a este tipo de conflictos en nuestro caso: anteponer un identificador del formulario a modo de prefijo en el identificador del campo. Por ejemplo: FRM_9_ID_PROFESOR.

Resumen

Gracias a la funcionalidad de Formula2 para identificar los campos y duplicar formularios conseguiremos una sencilla implementación de un ESCRITORIO DE FIRMA.

  • Nos ahorramos construir N formularios.
  • Nos ahorramos la lógica para recuperar y renderizar los datos asociados al formulario original y que necesitamos ir mostrando a cada firmante.

Comentarios

  1. Enhorabuena, qué buena conjunción de buenas prácticas en una sola aplicación!
    Lo único que no me gusta mucho es lo de las copias de un mismo formulario. Dado que el API de Formul@ te promete modificar el comportamiento de un campo para marcarlo como «solo lectura», tal vez se podría haber utilizado la misma instancia de formulario. En todo caso, chapeau!!

  2. Aunque pensándolo bien, si necesitáis meter nuevos campos ahí sí que hace falta la copia sí o sí 😀

  3. Teneis pensado liberar una aplicación así?
    El otro día intenté descargarme Formul@ y la verdad no encontré como llegar a hacerlo o utilizarla de un modo claro y sencillo.
    Creo que es un proyecto muy interesante y si está tan bien acabado como viafirma, me espero lo mejor de el.

    Un saludo

  4. @Ernesto
    Como explicaba Javier en su post de la semana pasada, Formul@ ha sido desarrollado para la Junta de Andalucía, por lo que está liberado como software libre dentro del Repositorio de Software Libre de la Junta de Andalucía.
    http://xnoccio.com/169-formul-20/

    Saludos.

  5. @Ernesto, @Beni… Lo que no estoy tan seguro es que Formul@ ya esté publicado en el Repositorio de Software Libre de la Junta de Andalucía (http://www.juntadeandalucia.es/repositorio), pero si no lo está, lo estará.
    También habrá que ver el nivel de liberación, si será para todo el público (EUPL) o sólo para Administraciones Públicas. Desde luego por parte de VIAVANSI apostamos por liberación total (de hecho nos hubiera gustado meterlo en alguna forja para abrir el desarrollo), pero al final la responsabilidad última recae la Junta de Andalucía.

  6. Sí, pero el Formul@ del que se habla aquí es el 2.0…
    El 1.0 era una aplicación que asumía demasiados conceptos, no era una herramienta únicamente especializada en formularios.
    Vamos, que no es el mismo sistema 😉

Comments are closed.