La forma en que desea que funcionen las encuestas es la siguiente: periódicamente, cada viernes, el servidor creará de forma automática una serie de alertas para encuestar a clientes, basándose en ciertas condiciones de negocio (básicamente servicios entregados al cliente en los últimos X días). En este caso, no desean que el sistema seleccione aleatoriamente las encuestas, sino que desean que se notifique a un administrador de forma que sea él quien asigne las encuestas a la persona encargada de hacerlas, que será a su vez notificada mediante otra alerta.
Posteriormente, generaremos también de forma automática y periódica informes con las respuestas dadas por los clientes así como datos estadísticos sobre las mismas entre las fechas deseadas.
La solución ha sido la siguiente. Hemos creado una serie de tablas para la gestión de encuestas, que se detallan a continuación:
Encuestras.Preguntas
En esta tabla almacenaremos las preguntas a realizar para cada tipo de encuesta. Su estructura es la siguiente:
id / nombre / descripción / area / p1 / v1 / t1 / p2 / v2 / t2 / ..... / p20 / v20 / t20 / notas / recomedaciones
Donde p1 = pregunta1, v1 = posibles valores, separados por punto y coma, de la respuesta 1, t1 = peso de la pregunta en la encuesta
Encuestas.Rechazos
Esta tabla almacena las encuestas que se han descartado, de forma que no aparezcan más como posibles para encuestarse. Se compone de:
id / id_encuesta / id_asignacion / tabla_referencia / codigo_referencia / cod_usuario / fecha / tipo / cod_motivo / motivo_rechazo
Encuestas.MotivosRechazo
Es simplemente una tabla auxiliar para cuando se rechaza una encuesta, se indique el motivo. Los motivos pueden ser distintos según el tipo de encuesta, por lo que su estructura es esta:
cod_motivo / descripcion / id_encuesta
Encuestas.Respuestas
Almacena las respuestas de los clientes, y está formada por:
id / id_encuesta / cod_usuario / fecha / id_asignacion / tabla_referencia / codigo_referencia / nombre_encuestado / r1 / r2 / .... / r20 / notas / recomendaciones / fecha_auditoria
Encuestas.Asignacion
Por último tenemos esta tabla, que es la que asocia una encuesta a una persona para que la realice, y se compone de:
id / tipo / tabla_referencia / codigo_referencia / fecha_decision / cod_decisor / encuestar / cod_encuestador
Con esta estructura de tablas, es posible montar el sistema. El código del mismo será publicado en otra entrada.