Test y Ficha de identificacion completado
parent
963dcc2103
commit
d4e9431d38
Binary file not shown.
@ -0,0 +1,90 @@
|
|||||||
|
//
|
||||||
|
// FichaManager.swift
|
||||||
|
// RK-Journals
|
||||||
|
//
|
||||||
|
// Created by Juan David López Regalado on 20/11/24.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import ResearchKit
|
||||||
|
|
||||||
|
class FichaManager {
|
||||||
|
static let shared = FichaManager()
|
||||||
|
|
||||||
|
func createFichaTask() -> ORKTask {
|
||||||
|
|
||||||
|
let bienvenida = ORKInstructionStep(identifier: "bienvenida")
|
||||||
|
bienvenida.title = "Ficha Identificación"
|
||||||
|
bienvenida.iconImage = UIImage(systemName: "person.text.rectangle")
|
||||||
|
bienvenida.detailText = "Por favor, llena la siguiente ficha de identificación con tus datos"
|
||||||
|
|
||||||
|
// Nombre
|
||||||
|
let textQuestionStepTitle = "Nombre"
|
||||||
|
let textAnswerFormat = ORKTextAnswerFormat(maximumLength: 30)
|
||||||
|
textAnswerFormat.multipleLines = false
|
||||||
|
let textQuestionStep = ORKQuestionStep(identifier: "Nombre", title: textQuestionStepTitle, question: "¿Cuál es tu nombre?", answer: textAnswerFormat)
|
||||||
|
textQuestionStep.isOptional = false
|
||||||
|
|
||||||
|
// Sexo
|
||||||
|
let multiGenderChoice = "Sexo"
|
||||||
|
let gendChoices = [
|
||||||
|
ORKTextChoice(text: "Hombre", value: "hombre" as NSString),
|
||||||
|
ORKTextChoice(text: "Mujer", value: "mujer" as NSString),
|
||||||
|
ORKTextChoice(text: "Prefiero no decirlo", value: "Inf" as NSString)]
|
||||||
|
|
||||||
|
let genderChoiceFormat = ORKTextChoiceAnswerFormat(style: .singleChoice, textChoices: gendChoices)
|
||||||
|
let multiGenderQuestionStep = ORKQuestionStep(identifier: "Sexo", title: multiGenderChoice,question: "¿Cuál es tu sexo?", answer: genderChoiceFormat)
|
||||||
|
multiGenderQuestionStep.isOptional = false
|
||||||
|
|
||||||
|
// Edad
|
||||||
|
var ageChoices: [ORKTextChoice] = []
|
||||||
|
for age in 16...50 {
|
||||||
|
let ageChoice = ORKTextChoice(text: "\(age) años", value: "\(age)" as NSString)
|
||||||
|
ageChoices.append(ageChoice)
|
||||||
|
}
|
||||||
|
|
||||||
|
let ageQuestionStep = ORKQuestionStep(
|
||||||
|
identifier: "ageQuestionStep",
|
||||||
|
title: "Pregunta sobre Edad",
|
||||||
|
question: "¿Qué edad tienes?",
|
||||||
|
answer: ORKValuePickerAnswerFormat(textChoices: ageChoices)
|
||||||
|
)
|
||||||
|
ageQuestionStep.isOptional = false // Hacemos que esta pregunta sea obligatoria
|
||||||
|
|
||||||
|
// Peso
|
||||||
|
let pesoQuestionStep = ORKQuestionStep(identifier: "peso", title: "Peso", question: "¿Cuál es tu peso en kilogramos?", answer: ORKNumericAnswerFormat(style: .integer, unit: "kg"))
|
||||||
|
pesoQuestionStep.isOptional = false
|
||||||
|
|
||||||
|
// Altura
|
||||||
|
let alturaQuestionStep = ORKQuestionStep(identifier: "altura", title: "Altura", question: "¿Cuál es tu altura en metros?", answer: ORKNumericAnswerFormat(style: .decimal, unit: "m"))
|
||||||
|
alturaQuestionStep.isOptional = false
|
||||||
|
|
||||||
|
|
||||||
|
// Sintomas
|
||||||
|
let symptomsChoices = [
|
||||||
|
ORKTextChoice(text: "Dolor de cabeza", value: "dolor_de_cabeza" as NSString),
|
||||||
|
ORKTextChoice(text: "Fiebre", value: "fiebre" as NSString),
|
||||||
|
ORKTextChoice(text: "Tos", value: "tos" as NSString),
|
||||||
|
ORKTextChoice(text: "Dificultad para respirar", value: "dificultad_respirar" as NSString),
|
||||||
|
ORKTextChoice(text: "Dolor en el pecho", value: "dolor_pecho" as NSString),
|
||||||
|
ORKTextChoice(text: "Fatiga", value: "fatiga" as NSString),
|
||||||
|
ORKTextChoice(text: "Náuseas", value: "nauseas" as NSString),
|
||||||
|
ORKTextChoice(text: "Otros", value: "otros" as NSString)
|
||||||
|
]
|
||||||
|
|
||||||
|
// Crear la pregunta de síntomas
|
||||||
|
let symptomsStep = ORKQuestionStep(
|
||||||
|
identifier: "sintomas",
|
||||||
|
title: "¿Qué síntomas estás presentando?",
|
||||||
|
answer: ORKAnswerFormat.choiceAnswerFormat(with: .multipleChoice, textChoices: symptomsChoices)
|
||||||
|
)
|
||||||
|
symptomsStep.isOptional = false
|
||||||
|
|
||||||
|
let termino = ORKInstructionStep(identifier: "termino")
|
||||||
|
termino.title = "Gracias"
|
||||||
|
termino.iconImage = UIImage(systemName: "checkmark.circle.fill")
|
||||||
|
termino.detailText = "Gracias por llenar la ficha de identificación"
|
||||||
|
|
||||||
|
return ORKOrderedTask(identifier: "FichaIdentificacion", steps: [bienvenida, textQuestionStep, multiGenderQuestionStep, ageQuestionStep, pesoQuestionStep, alturaQuestionStep, symptomsStep, termino])
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,129 @@
|
|||||||
|
import Foundation
|
||||||
|
import ResearchKit
|
||||||
|
|
||||||
|
class TestManager {
|
||||||
|
static let shared = TestManager()
|
||||||
|
|
||||||
|
func createTestTask() -> ORKTask {
|
||||||
|
|
||||||
|
// Paso 1: Bienvenida
|
||||||
|
let bienvenidaStep = ORKInstructionStep(identifier: "bienvenida")
|
||||||
|
bienvenidaStep.title = "Evaluación de Ansiedad y Estado de Ánimo"
|
||||||
|
bienvenidaStep.text = "Este test nos ayudará a evaluar cómo te sientes actualmente. Responde con sinceridad."
|
||||||
|
|
||||||
|
// Paso 2: Nivel de ansiedad (escala del 1 al 10)
|
||||||
|
let ansiedadPregunta = ORKQuestionStep(
|
||||||
|
identifier: "nivelAnsiedad",
|
||||||
|
title: "¿Qué tan ansioso/a te sientes en una escala del 1 al 10?",
|
||||||
|
answer: ORKScaleAnswerFormat(
|
||||||
|
maximumValue: 10,
|
||||||
|
minimumValue: 1,
|
||||||
|
defaultValue: 5,
|
||||||
|
step: 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
ansiedadPregunta.isOptional = false
|
||||||
|
|
||||||
|
// Paso 3: Estado de ánimo general (rueda de opciones)
|
||||||
|
let estadoAnimoChoices = [
|
||||||
|
ORKTextChoice(text: "Muy feliz", value: "muy_feliz" as NSString),
|
||||||
|
ORKTextChoice(text: "Feliz", value: "feliz" as NSString),
|
||||||
|
ORKTextChoice(text: "Neutral", value: "neutral" as NSString),
|
||||||
|
ORKTextChoice(text: "Triste", value: "triste" as NSString),
|
||||||
|
ORKTextChoice(text: "Muy triste", value: "muy_triste" as NSString)
|
||||||
|
]
|
||||||
|
let estadoAnimoPregunta = ORKQuestionStep(
|
||||||
|
identifier: "estadoAnimo",
|
||||||
|
title: "¿Cómo describirías tu estado de ánimo actual?",
|
||||||
|
answer: ORKValuePickerAnswerFormat(textChoices: estadoAnimoChoices)
|
||||||
|
)
|
||||||
|
estadoAnimoPregunta.isOptional = false
|
||||||
|
|
||||||
|
|
||||||
|
// Paso 4: Frecuencia de síntomas (escala Likert)
|
||||||
|
let frecuenciaSintomasPregunta = ORKQuestionStep(
|
||||||
|
identifier: "frecuenciaSintomas",
|
||||||
|
title: "En la última semana, ¿con qué frecuencia has experimentado estos síntomas?",
|
||||||
|
answer: ORKAnswerFormat.textScale(
|
||||||
|
with: [
|
||||||
|
ORKTextChoice(text: "Nunca", value: "nunca" as NSString),
|
||||||
|
ORKTextChoice(text: "Rara vez", value: "rara_vez" as NSString),
|
||||||
|
ORKTextChoice(text: "A veces", value: "a_veces" as NSString),
|
||||||
|
ORKTextChoice(text: "Frecuentemente", value: "frecuentemente" as NSString),
|
||||||
|
ORKTextChoice(text: "Todo el tiempo", value: "todo_el_tiempo" as NSString)
|
||||||
|
],
|
||||||
|
defaultIndex: 2, // Neutral ("A veces")
|
||||||
|
vertical: true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
frecuenciaSintomasPregunta.isOptional = false
|
||||||
|
|
||||||
|
// Paso 5: Situaciones específicas (múltiples opciones)
|
||||||
|
let situacionesChoices = [
|
||||||
|
ORKTextChoice(text: "Dificultad para concentrarte", value: "concentracion" as NSString),
|
||||||
|
ORKTextChoice(text: "Pérdida de interés en actividades", value: "interes" as NSString),
|
||||||
|
ORKTextChoice(text: "Sensación de nerviosismo", value: "nerviosismo" as NSString),
|
||||||
|
ORKTextChoice(text: "Problemas para dormir", value: "sueño" as NSString),
|
||||||
|
ORKTextChoice(text: "Cambios en el apetito", value: "apetito" as NSString),
|
||||||
|
ORKTextChoice(text: "Ninguno de los anteriores", value: "ninguno" as NSString)
|
||||||
|
]
|
||||||
|
let situacionesPregunta = ORKQuestionStep(
|
||||||
|
identifier: "situaciones",
|
||||||
|
title: "¿Cuáles de las siguientes situaciones has experimentado recientemente?",
|
||||||
|
answer: ORKAnswerFormat.choiceAnswerFormat(with: .multipleChoice, textChoices: situacionesChoices)
|
||||||
|
)
|
||||||
|
|
||||||
|
situacionesPregunta.isOptional = false
|
||||||
|
|
||||||
|
// Paso 6: Tiempo al aire libre (respuesta numérica)
|
||||||
|
let tiempoAireLibrePregunta = ORKQuestionStep(
|
||||||
|
identifier: "tiempoAireLibre",
|
||||||
|
title: "¿Cuántas horas pasas al aire libre por día?",
|
||||||
|
answer: ORKNumericAnswerFormat(style: .integer, unit: "horas")
|
||||||
|
)
|
||||||
|
tiempoAireLibrePregunta.isOptional = false
|
||||||
|
|
||||||
|
|
||||||
|
// Paso 7: Ejercicio (texto corto)
|
||||||
|
let ejercicioPregunta = ORKQuestionStep(
|
||||||
|
identifier: "ejercicio",
|
||||||
|
title: "¿Qué tipo de ejercicio realizas regularmente?",
|
||||||
|
answer: ORKTextAnswerFormat(maximumLength: 100)
|
||||||
|
)
|
||||||
|
ejercicioPregunta.isOptional = false
|
||||||
|
|
||||||
|
// Paso 8: Comentarios adicionales (texto largo)
|
||||||
|
let comentariosPregunta = ORKQuestionStep(
|
||||||
|
identifier: "comentarios",
|
||||||
|
title: "¿Hay algo más que quieras compartir sobre cómo te sientes?",
|
||||||
|
answer: {
|
||||||
|
let formatoTexto = ORKTextAnswerFormat(maximumLength: 500)
|
||||||
|
formatoTexto.multipleLines = true // Permite que el cuadro sea más grande
|
||||||
|
return formatoTexto
|
||||||
|
}()
|
||||||
|
)
|
||||||
|
|
||||||
|
comentariosPregunta.isOptional = false
|
||||||
|
|
||||||
|
// Paso final: Agradecimiento
|
||||||
|
let finStep = ORKInstructionStep(identifier: "fin")
|
||||||
|
finStep.title = "¡Gracias por completar el test!"
|
||||||
|
finStep.text = "Tus respuestas serán analizadas para ofrecerte mejores recomendaciones."
|
||||||
|
|
||||||
|
// Crear el test con todos los pasos
|
||||||
|
return ORKOrderedTask(
|
||||||
|
identifier: "AnxietyMoodTest",
|
||||||
|
steps: [
|
||||||
|
bienvenidaStep,
|
||||||
|
ansiedadPregunta,
|
||||||
|
estadoAnimoPregunta,
|
||||||
|
frecuenciaSintomasPregunta,
|
||||||
|
situacionesPregunta,
|
||||||
|
tiempoAireLibrePregunta,
|
||||||
|
ejercicioPregunta,
|
||||||
|
comentariosPregunta,
|
||||||
|
finStep
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 289 KiB |
Binary file not shown.
After Width: | Height: | Size: 234 KiB |
Binary file not shown.
After Width: | Height: | Size: 757 KiB |
Binary file not shown.
After Width: | Height: | Size: 317 KiB |
Loading…
Reference in New Issue