Creación de encuestas para CareSuite

La creación de encuestas es un requisito fundamental para operacionalizar tanto las aplicaciones Contact como Care. CareSuite trabaja con Kobotoolbox como un complemento de creación de formularios para permitir a los usuarios

Guía para la creación de encuestas en CareSuite

Esta guía proporciona las mejores prácticas completas y los anti-patróns para crear encuestas en CareSuite

Tipos de encuestas en CareSuite

CareSuite admite cuatro tipos principales de encuestas:

1. Encuesta de ingreso

  • Propósito: Recopilación de datos para la creación de casos en un proyecto

  • Alcance: A nivel de proyecto (cada proyecto tiene una encuesta de ingreso)

  • Uso: Se utiliza al crear o actualizar casos

  • Almacenamiento: Las respuestas de la encuesta se almacenan en la entidad Caso

  • Características clave: Requerida para todos los proyectos, utilizada para la creación de casos

2. Encuesta demográfica

  • Propósito: Recopilación de información demográfica a nivel de perfil

  • Alcance: A nivel de organización (cada organización tiene una encuesta demográfica)

  • Uso: Utilizada para recopilar y actualizar los datos demográficos del perfil

  • Almacenamiento: Las respuestas de la encuesta se almacenan en la entidad Perfil (profile.survey)

  • Características clave: Utilizada para la búsqueda global de perfiles y la recopilación de datos demográficos

3. Encuesta de seguimiento

  • Propósito: Recopilación de datos de seguimiento posterior a la derivación

  • Alcance: A nivel de proyecto (opcional, cada proyecto puede tener una encuesta de seguimiento)

  • Uso: Completada por los gestores de casos después de la prestación del servicio

  • Almacenamiento: Las respuestas de la encuesta se almacenan como respuestas de encuesta de seguimiento por derivación

4. Encuestas adicionales

  • Propósito: Recopilación de datos complementaria y personalizada

  • Alcance: A nivel de proyecto (se permiten múltiples encuestas adicionales por proyecto)

  • Uso: Encuestas personalizadas para necesidades específicas de recopilación de datos

  • Almacenamiento: Las respuestas de la encuesta se almacenan en additionalSurveyResponse tabla

  • Características clave: Admite respuestas únicas y múltiples por caso por encuesta


Requisitos de formato de la encuesta

Formato de archivo

  • Tipo de archivo: XML (.xml extensión)

  • Tipo MIME: text/xml

  • Tamaño máximo de archivo: 10 MB (MAX_SURVEY_FILESIZE = 10 * 1024 * 1024)

  • Estándar de formato: Formato XForms/ODK (Open Data Kit)

  • Compatibilidad: Debe ser compatible con el formato Kobo Toolbox

Requisitos de estructura XML

Las encuestas deben seguir la estructura XML XForms/ODK:

Espacios de nombres requeridos

  • http://www.w3.org/2002/xforms

  • http://www.w3.org/2001/xml-events

  • http://www.w3.org/1999/xhtml

  • http://openrosa.org/javarosa

  • http://www.opendatakit.org/xforms

  • http://openrosa.org/xforms

  • http://www.w3.org/2001/XMLSchema


Tipos de datos compatibles

Para un desglose más detallado de los tipos de datos vea Tipos de datos compatibles

✅ Tipos totalmente compatibles

1. string (Texto)

  • Tipo XML: type="string"

  • Uso: Campos de entrada de texto, nombres, descripciones, notas

  • Operadores de consulta: Igual, No igual, Comienza con, Termina con, Contiene, No contiene, Está vacío, No está vacío, En, No en

  • Ejemplo:

2. int (Entero)

  • Tipo XML: type="int"

  • Uso: Números enteros (edad, conteos, puntuaciones)

  • Operadores de consulta: Igual, No igual, Mayor que, Menor que

  • Ejemplo:

3. date (Fecha)

  • Tipo XML: type="date"

  • Uso: Campos de fecha (sin componente de hora)

  • Operadores de consulta: Igual a, Después, Antes, Entre

  • Formato: Formato de fecha ISO (AAAA-MM-DD)

  • Ejemplo:

4. select1 (Selección única)

  • Tipo XML: type="string" con <select1> entrada

  • Uso: Menú desplegable de opción única / botones de opción

  • Operadores de consulta: Igual, No igual, Está vacío, No está vacío

  • Ejemplo:

5. select (Selección múltiple)

  • Tipo XML: type="string" con <select> entrada

  • Uso: Casillas/listas de opciones múltiples

  • Almacenamiento: Valores almacenados como cadena separada por espacios (por ejemplo, "value1 value2 value3")

  • Operadores de consulta: Igual, No igual, Está vacío, No está vacío

  • Ejemplo:

❌ Tipos no compatibles

Los siguientes tipos de datos no están compatibleS y deben evitarse:

  • time - Campos solo de hora (use string o un campo de fecha separado)

  • dateTime - Fecha y hora combinadas (use date como tipo y almacene la hora por separado si es necesario)

  • decimal - Números decimales (pueden funcionar como int, pero no son explícitamente compatibles)

  • boolean - Valores booleanos (use select1 con opciones "yes"/"no" en su lugar)

  • geopoint - Coordenadas geográficas (almacenar como lat/lng separados string o int campos)

  • geotrace - Rutas geográficas

  • geoshape - Formas/polígonos geográficos

  • binary - Cargas de archivos (no compatibles en encuestas)

  • barcode - Escaneo de códigos de barras

  • intent - Intenciones de aplicaciones externas


Mejores prácticas

1. Nomenclatura de campos

HACER:

  • Use nombres de campo descriptivos, en minúsculas y con guiones bajos: caller_age, first_time_caller, hear_about_211

  • Use convenciones de nombres consistentes en toda la encuesta

  • Mantenga los nombres de campo concisos pero significativos

  • Use snake_case para nombres de campo con varias palabras

NO HAGA:

  • Usar espacios en los nombres de campo

  • Usar caracteres especiales (excepto guiones bajos)

  • Usar camelCase (use snake_case en su lugar)

  • Usar nombres de campo extremadamente largos

Ejemplo:

2. Organización de campos con grupos

HACER:

  • Organice campos relacionados usando <group> elementos

  • Use nombres de grupo descriptivos: group_AARP_careprovider, group_kick_it

  • Anide grupos cuando sea necesario para crear jerarquías lógicas

Ejemplo:

3. Use itext para todo el contenido de texto

HACER:

  • Siempre use <itext> traducciones para etiquetas, pistas y etiquetas de opciones

  • Referencia el texto usando jr:itext() función

  • Mantenga el contenido de texto real en la sección itext, no en línea

Ejemplo:

4. Lógica condicional (atributos relevant)

HACER:

  • Use relevant atributos para la visualización condicional de campos

  • Use expresiones XPath claras y legibles

  • Pruebe todas las rutas de lógica condicional

Ejemplo:

5. Campos obligatorios

HACER:

  • Use required atributos con condiciones XPath claras

  • Considere usar lógica condicional de obligatoriedad cuando sea apropiado

  • Permita que los campos sean opcionales cuando los datos puedan no estar disponibles

Ejemplo:

6. Validación y restricciones

HACER:

  • Use restricciones regex para la validación de formatos (números de teléfono, correos electrónicos, etc.)

  • Proporcione mensajes de restricción claros usando jr:constraintMsg

  • Valide los datos a nivel de campo cuando sea posible

Ejemplo:

7. Campos calculados

HACER:

  • Use calculate atributos para valores computados

  • Marque los campos calculados como readonly="true()"

  • Incluya restricciones que impidan la modificación manual si es necesario

Ejemplo:

8. Valores precargados

HACER:

  • Use jr:preload para valores auto-poblados (marcas de tiempo, IDs de instancia)

  • Use parámetros de preload apropiados

Ejemplo:

9. Manejo de fechas

HACER:

  • Use date() función para valores de fecha por defecto

  • Establezca fechas por defecto usando <setvalue> eventos cuando sea apropiado

  • Use restricciones de fecha para la validación

Ejemplo:

10. Manejo de datos incompletos

HACER:

  • Incluya opciones para manejar la recopilación de datos incompleta

  • Proporcione opciones estándar: "No se preguntó", "Se negó a responder", "Llamada terminada temprano", "Llamada de crisis - No se preguntó"

  • Haga que los campos sean condicionalmente obligatorios según el estado de finalización

Ejemplo:


Anti-patrones comunes y cosas a evitar

1. ❌ Uso de tipos de datos no compatibles

Problema: El uso de tipos de datos que no son compatibles (dateTime, time, binary, etc.) causará problemas con el almacenamiento de datos, las consultas y la visualización.

Solución:

  • Use date en lugar de dateTime (almacenar la hora por separado si es necesario)

  • Use string para valores booleanos con opciones select1

  • Use string o campos separados int para coordenadas geográficas

2. ❌ Nomenclatura de campos inconsistente

Problema: La nomenclatura inconsistente (mezclar camelCase, snake_case, espacios) hace que las encuestas sean más difíciles de mantener y consultar.

Solución:

  • Use siempre snake_case para los nombres de campo

  • Establezca y siga un documento de convenciones de nomenclatura

  • Use nombres descriptivos que indiquen el propósito del campo

3. ❌ Texto en línea en lugar de itext

Problema: Incrustar texto directamente en las definiciones de campos dificulta las traducciones y el mantenimiento.

Solución:

  • Siempre use <itext> traducciones

  • Referencia el texto usando jr:itext()

  • Mantenga todo el texto visible por el usuario en la sección itext

4. ❌ Espacios de nombres XML faltantes o incorrectos

Problema: Los espacios de nombres faltantes o incorrectos pueden causar errores de análisis.

Solución:

  • Incluya todos los espacios de nombres requeridos en el <h:html> elemento raíz

  • Use las URIs de espacios de nombres exactas especificadas en los requisitos de formato

5. ❌ Lógica condicional demasiado compleja

Problema: Expresiones muy complejas son difíciles de mantener y depurar. relevant o required Divida las condiciones complejas en expresiones más simples y comprobables

Solución:

  • Use campos calculados intermedios cuando sea necesario

  • Documente la lógica compleja con comentarios (si los comentarios XML son compatibles)

  • 6. ❌ Enlaces de campo faltantes

Los campos definidos en el cuerpo sin las correspondientes

Problema: declaraciones pueden no funcionar correctamente. <bind> Cree siempre un

Solución:

  • elemento para cada campo en el cuerpo del formulario <bind> Asegúrese de que las rutas nodeset coincidan exactamente entre los elementos bind y input

  • Incluya atributos apropiados de tipo, required y relevant

  • 7. ❌ Almacenamiento incorrecto de valores de selección múltiple

Esperar que los valores de selección múltiple se almacenen como matrices cuando en realidad son cadenas separadas por espacios.

Problema: Recuerde que

Solución:

  • (selección múltiple) los valores se almacenan como cadenas separadas por espacios <select> Al consultar, use operadores de cadena apropiados

  • Al mostrar, divida la cadena para obtener valores individuales

  • // Valor de selección múltiple: "value1 value2 value3"

Ejemplo:

Las encuestas que excedan los 10 MB serán rechazadas durante la carga.

Problema: Mantenga las encuestas enfocadas y evite campos innecesarios

Solución:

  • Optimice el contenido itext (evite texto duplicado)

  • Elimine campos y grupos no utilizados

  • Considere dividir encuestas muy grandes en varias encuestas adicionales

  • 9. ❌ Falta de validación para campos críticos

Los campos críticos (números de teléfono, correos electrónicos, etc.) sin validación pueden conducir a mala calidad de datos.

Problema: Agregue siempre restricciones regex para números de teléfono, correos electrónicos, códigos postales

Solución:

  • Proporcione mensajes de restricción claros y útiles

  • Pruebe la validación con diversas entradas válidas e inválidas

  • 10. ❌ Uso del tipo dateTime para fechas

Usar

Problema: el tipo no es compatible y puede causar errores. dateTime para campos de fecha

Solución:

  • Siempre use type="date" Si se necesita la hora, almacénela en un

  • campo separado string Nota: El sistema puede aceptar

  • en declaraciones bind para campos de metadatos (como marcas de tiempo de inicio/fin), pero use dateTime para fechas ingresadas por el usuario date 11. ❌ Falta de opciones para datos incompletos

No proporcionar opciones para la recopilación de datos incompleta dificulta el seguimiento de por qué las encuestas están incompletas.

Problema: Incluya un campo "Incomplete General Screener" o similar al inicio

Solución:

  • Proporcione opciones estándar para escenarios incompletos

  • Haga que otros campos sean condicionalmente obligatorios según el estado de finalización

  • 12. ❌ Valores de opción codificados en duro

Usar las etiquetas de opción como valores dificulta el análisis de datos y es propenso a errores.

Problema: Use siempre valores en minúsculas y separados por guiones bajos

Solución:

  • Mantenga las etiquetas legibles para humanos pero valores consistentes

  • Ejemplo: label="Female", value="female" (no "Female" como valor)

  • 13. ❌ No usar grupos para campos relacionados

Las estructuras de campos planas hacen que las encuestas sean más difíciles de navegar y comprender.

Problema: Agrupe campos relacionados usando

Solución:

  • Cree jerarquías lógicas (por ejemplo, <group> elementos

  • group_callback_contact/telephone_001 group_callback_contact/telephone_001)

  • Use nombres de grupo descriptivos

14. ❌ Falta el ID de instancia en Meta

Problema: No incluir un campo meta/instanceID dificulta rastrear instancias de encuestas.

Solución:

  • Incluya siempre una sección meta con instanceID

  • Use jr:preload="uid" para generar automáticamente IDs únicos

  • Mantenlo de solo lectura

Ejemplo:


Convenciones de nomenclatura de campos

Patrones de nomenclatura recomendados

  1. Use snake_case: caller_age, first_time_caller, hear_about_211

  2. Sea descriptivo: caller_frequency no freq

  3. Use prefijos para grupos: group_AARP_careprovider, group_kick_it

  4. Use sufijos para campos relacionados: telephone_001, email_001, givenName, familyName

  5. Mantenga los nombres concisos: Evite nombres extremadamente largos, pero priorice la claridad

Ejemplos de encuestas en producción

Buenos ejemplos:

  • Incomplete_General_Screener

  • caller_frequency

  • caller_age

  • BTS_Date

  • group_kick_it

  • group_callback_contact

Evitar:

  • Mayúsculas y minúsculas mezcladas sin separación: callerAge, CallerFrequency

  • Espacios: caller age, first time caller

  • Caracteres especiales: caller-age, caller.age

  • Demasiado genérico: field1, data, value


Directrices de estructura de la encuesta

1. Flujo lógico

  • Comience con opciones de filtro/incompletas

  • Agrupe las preguntas relacionadas

  • Use lógica condicional para mostrar/ocultar secciones

  • Finalice con campos de metadatos opcionales

2. Campos obligatorios vs opcionales

  • Haga que los campos sean obligatorios solo cuando sea absolutamente necesario

  • Use lógica condicional de obligatoriedad cuando corresponda

  • Considere escenarios de recopilación de datos (llamadas incompletas, respuestas rechazadas)

3. Organización de grupos

  • Use grupos para organizar campos relacionados

  • Cree grupos anidados para subsecciones

  • Nombre los grupos de forma descriptiva

4. Orden de los campos

  • Ordene los campos lógicamente (de general a específico, de obligatorios a opcionales)

  • Mantenga los campos condicionales cerca de sus campos principales

  • Agrupe tipos de campo similares cuando sea posible


Pruebas y validación

Antes de subir

  1. Validar la estructura XML

    • Compruebe que el XML esté bien formado

    • Verifique que todos los espacios de nombres estén presentes

    • Asegúrese de que todos los campos tengan declaraciones bind correspondientes

  2. Pruebe en Kobo Toolbox (Requerido)

    • Construya/pruebe encuestas en Kobo Toolbox primero

    • Verifique que toda la lógica condicional funcione correctamente

    • Pruebe con varios datos de entrada

  3. Revisar nombres de campos

    • Asegure una convención de nombres consistente

    • Verifique errores tipográficos en las rutas nodeset

    • Verifique que las rutas bind coincidan con las rutas ref de entrada

  4. Probar lógica condicional

    • Pruebe todas las condiciones relevantes/obligatorias

    • Verifique que los campos calculados funcionen correctamente

    • Compruebe que los valores precargados se llenen

  5. Comprobar tamaño de archivo

    • Asegúrese de que el archivo esté por debajo de 10 MB

    • Optimice si es necesario

Después de subir

  1. Probar el flujo de la encuesta

    • Complete una respuesta de prueba de la encuesta

    • Verifique que todos los campos aparezcan/desaparezcan correctamente

    • Compruebe los mensajes de validación

  2. Verificar almacenamiento de datos

    • Envíe una respuesta de prueba

    • Compruebe que los datos se almacenen correctamente

    • Verifique que los valores de selección múltiple se guarden correctamente

  3. Probar consultas

    • Pruebe búsquedas avanzadas con campos de la encuesta

    • Verifique que las consultas de fecha funcionen correctamente

    • Compruebe el filtrado de campos de selección


Solución de problemas

Errores comunes

1. "Solo se permite archivo xml"

  • Causa: El archivo no se reconoce como XML

  • Solución: Asegúrese de que el archivo tenga .xml extensión y el tipo MIME correcto (text/xml)

2. "Se debe proporcionar el archivo de la encuesta"

  • Causa: No se cargó ningún archivo

  • Solución: Asegúrese de que el input de archivo tenga un archivo válido seleccionado

3. "El tamaño del archivo excede el límite"

  • Causa: El archivo es mayor de 10 MB

  • Solución: Reduzca el tamaño del archivo eliminando campos no utilizados, optimizando el contenido de texto o dividiéndolo en varias encuestas

4. Los campos de la encuesta no aparecen en la búsqueda

  • Causa: El tipo de campo puede no ser compatible o los metadatos no se han analizado correctamente

  • Solución: Verifique que el campo use un tipo compatible (string, int, date, select1, select)

5. Valores de selección múltiple que no se muestran correctamente

  • Causa: Se espera un arreglo cuando los valores son cadenas separadas por espacios

  • Solución: Divida la cadena separada por espacios al procesar: value.split(' ')

6. Campos de fecha que no se pueden consultar

  • Causa: Uso del tipo dateTime en lugar de date

  • Solución: Cambiar a type="date" en la declaración bind

Consejos de depuración

  1. Descargar encuesta existente

    • Use el botón "Descargar encuesta" para ver el XML de la encuesta actual

    • Compare con su nueva encuesta para identificar diferencias

  2. Comprobar metadatos de la encuesta

    • Vea los metadatos de la encuesta en la configuración del proyecto

    • Verifique que todos los campos estén listados con los tipos correctos

  3. Probar de forma incremental

    • Comience con una encuesta simple y agregue complejidad gradualmente

    • Pruebe después de cada cambio importante

  4. Revisar registros

    • Compruebe los registros del servidor en busca de errores de análisis XML

    • Busque errores específicos de campos o de espacios de nombres


Recursos adicionales

  • Kobo Toolbox: https://kobotoolbox.org (Herramienta recomendada para construir y probar encuestas)

  • Especificación ODK XForms: https://getodk.github.io/xforms-spec/

  • Documentación XForms: https://www.w3.org/TR/xforms/


Lista de verificación resumida

Al construir una encuesta, asegúrese de:

Última actualización

¿Te fue útil?