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
additionalSurveyResponsetablaCaracterí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 (
.xmlextensión)Tipo MIME:
text/xmlTamañ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/xformshttp://www.w3.org/2001/xml-eventshttp://www.w3.org/1999/xhtmlhttp://openrosa.org/javarosahttp://www.opendatakit.org/xformshttp://openrosa.org/xformshttp://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>entradaUso: 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>entradaUso: 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
stringo un campo de fecha separado)dateTime - Fecha y hora combinadas (use
datecomo 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
select1con opciones "yes"/"no" en su lugar)geopoint - Coordenadas geográficas (almacenar como lat/lng separados
stringointcampos)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_211Use 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>elementosUse nombres de grupo descriptivos:
group_AARP_careprovider,group_kick_itAnide 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 opcionesReferencia el texto usando
jr:itext()funciónMantenga el contenido de texto real en la sección itext, no en línea
Ejemplo:
4. Lógica condicional (atributos relevant)
✅ HACER:
Use
relevantatributos para la visualización condicional de camposUse expresiones XPath claras y legibles
Pruebe todas las rutas de lógica condicional
Ejemplo:
5. Campos obligatorios
✅ HACER:
Use
requiredatributos con condiciones XPath clarasConsidere 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:constraintMsgValide los datos a nivel de campo cuando sea posible
Ejemplo:
7. Campos calculados
✅ HACER:
Use
calculateatributos para valores computadosMarque los campos calculados como
readonly="true()"Incluya restricciones que impidan la modificación manual si es necesario
Ejemplo:
8. Valores precargados
✅ HACER:
Use
jr:preloadpara 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 defectoEstablezca fechas por defecto usando
<setvalue>eventos cuando sea apropiadoUse 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
dateen lugar dedateTime(almacenar la hora por separado si es necesario)Use
stringpara valores booleanos con opciones select1Use
stringo campos separadosintpara 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>traduccionesReferencia 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ízUse 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 inputIncluya 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 apropiadosAl 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 uncampo separado
stringNota: El sistema puede aceptaren declaraciones bind para campos de metadatos (como marcas de tiempo de inicio/fin), pero use
dateTimepara fechas ingresadas por el usuariodate11. ❌ 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>elementosgroup_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 únicosMantenlo de solo lectura
Ejemplo:
Convenciones de nomenclatura de campos
Patrones de nomenclatura recomendados
Use snake_case:
caller_age,first_time_caller,hear_about_211Sea descriptivo:
caller_frequencynofreqUse prefijos para grupos:
group_AARP_careprovider,group_kick_itUse sufijos para campos relacionados:
telephone_001,email_001,givenName,familyNameMantenga los nombres concisos: Evite nombres extremadamente largos, pero priorice la claridad
Ejemplos de encuestas en producción
✅ Buenos ejemplos:
Incomplete_General_Screenercaller_frequencycaller_ageBTS_Dategroup_kick_itgroup_callback_contact
❌ Evitar:
Mayúsculas y minúsculas mezcladas sin separación:
callerAge,CallerFrequencyEspacios:
caller age,first time callerCaracteres especiales:
caller-age,caller.ageDemasiado 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
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
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
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
Probar lógica condicional
Pruebe todas las condiciones relevantes/obligatorias
Verifique que los campos calculados funcionen correctamente
Compruebe que los valores precargados se llenen
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
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
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
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
.xmlextensió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
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
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
Probar de forma incremental
Comience con una encuesta simple y agregue complejidad gradualmente
Pruebe después de cada cambio importante
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?