You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
4.2 KiB
Swift

//
// 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])
}
}