Consentimiento completo

main
Juan David Lopez Regalado 1 month ago
parent ea5b250776
commit 6e217d812a

@ -216,7 +216,7 @@ public var ConsentDocument: ORKConsentDocument{
let consentDocument = ORKConsentDocument() let consentDocument = ORKConsentDocument()
consentDocument.title = "Introducción a ResearchKit" // O título de tu preferencia consentDocument.title = "Introducción a ResearchKit" // O título de tu preferencia
// Tipos de secciones // Tipos de secciones y sus contenidos
let sectionTypes: [ORKConsentSectionType] = [ let sectionTypes: [ORKConsentSectionType] = [
.overview, .overview,
.dataGathering, .dataGathering,
@ -228,7 +228,6 @@ public var ConsentDocument: ORKConsentDocument{
.withdrawing .withdrawing
] ]
// Contenido de las secciones
let text = [ let text = [
"Sección 1: Bienvenido. Este estudio trata sobre...", "Sección 1: Bienvenido. Este estudio trata sobre...",
"Sección 2: Recopilación de datos. Este estudio recopilará datos...", "Sección 2: Recopilación de datos. Este estudio recopilará datos...",
@ -240,28 +239,152 @@ public var ConsentDocument: ORKConsentDocument{
"Sección 8: Retiro. Para retirarse del estudio..." "Sección 8: Retiro. Para retirarse del estudio..."
] ]
// Agregar Secciones // Crear secciones y añadirlas al documento de consentimiento
for sectionType in sectionTypes { var sections: [ORKConsentSection] = []
let section = ORKConsentSection(type: sectionType)
let localizedText = NSLocalizedString(text[sectionTypes.firstIndex(of: sectionType)!], comment: "") for (index, sectionType) in sectionTypes.enumerated() {
let section = ORKConsentSection(type: sectionType)
let localizedText = NSLocalizedString(text[index], comment: "")
let localizedSummary = localizedText.components(separatedBy: ".")[0] + "." let localizedSummary = localizedText.components(separatedBy: ".")[0] + "."
section.summary = localizedSummary section.summary = localizedSummary
section.content = localizedText section.content = localizedText
sections.append(section)
}
consentDocument.sections = sections
if consentDocument.sections == nil { // Agregar la firma de consentimiento
consentDocument.sections = [section] let signature = ORKConsentSignature(forPersonWithTitle: "Participante", dateFormatString: nil, identifier: "ConsentDocumentParticipantSignature")
} else { consentDocument.addSignature(signature)
consentDocument.sections!.append(section)
return consentDocument
} }
```
Para que el documento del consentimiento pueda ser activado, se requiere un tarea de consentimiento, por lo cual, se debe crear un archivo tipo Cocoa Touch Class, con la clase ORKOrderedTask, que lleve por nombre ConsentTask. Al que de igual manera se desarrollará un código base para que se vaya llenando de acuerdo a las necesidades, y como en el ConsentDocument se pusieron ya algunas secciones, se pondrán las misas para que haya una congruencia.
```
import UIKit
import ResearchKit
public var ConsentTask: ORKOrderedTask {
var steps = [ORKStep]()
// Visualización de secciones
let consentDocument = ConsentDocument
// Sección 1: Bienvenido
let section1 = ORKInstructionStep(identifier: "consentSection1InstructionStep")
section1.title = "Bienvenido"
section1.iconImage = UIImage(systemName: "hand.wave")
section1.detailText = "Sección 1: Bienvenido. Este estudio trata sobre..."
steps += [section1]
// Sección 2: Recopilación de datos
let section2 = ORKInstructionStep(identifier: "consentSection2InstructionStep")
section2.title = "Recopilación de datos"
section2.iconImage = UIImage(systemName: "doc.text")
section2.detailText = "Sección 2: Recopilación de datos. Este estudio recopilará datos..."
steps += [section2]
// Sección 3: Privacidad
let section3 = ORKInstructionStep(identifier: "consentSection3InstructionStep")
section3.title = "Privacidad"
section3.iconImage = UIImage(systemName: "lock.shield")
section3.detailText = "Sección 3: Privacidad. Valoramos su privacidad..."
steps += [section3]
// Sección 4: Uso de datos
let section4 = ORKInstructionStep(identifier: "consentSection4InstructionStep")
section4.title = "Uso de datos"
section4.iconImage = UIImage(systemName: "chart.bar")
section4.detailText = "Sección 4: Uso de datos. Los datos recopilados se utilizarán para..."
steps += [section4]
// Sección 5: Compromiso de tiempo
let section5 = ORKInstructionStep(identifier: "consentSection5InstructionStep")
section5.title = "Compromiso de tiempo"
section5.iconImage = UIImage(systemName: "clock")
section5.detailText = "Sección 5: Compromiso de tiempo. Este estudio le llevará aproximadamente..."
steps += [section5]
// Sección 6: Encuesta del estudio
let section6 = ORKInstructionStep(identifier: "consentSection6InstructionStep")
section6.title = "Encuesta del estudio"
section6.iconImage = UIImage(systemName: "list.bullet.rectangle")
section6.detailText = "Sección 6: Encuesta del estudio. Para este estudio, deberá completar una encuesta..."
steps += [section6]
// Sección 7: Tareas del estudio
let section7 = ORKInstructionStep(identifier: "consentSection7InstructionStep")
section7.title = "Tareas del estudio"
section7.iconImage = UIImage(systemName: "pencil.and.outline")
section7.detailText = "Sección 7: Tareas del estudio. Se le solicitará que realice estas tareas..."
steps += [section7]
// Sección 8: Retiro
let section8 = ORKInstructionStep(identifier: "consentSection8InstructionStep")
section8.title = "Retiro"
section8.iconImage = UIImage(systemName: "arrow.backward.circle")
section8.detailText = "Sección 8: Retiro. Para retirarse del estudio..."
steps += [section8]
// Revisar y firmar
let signature = consentDocument.signatures!.first!
let reviewConsentStep = ORKConsentReviewStep(identifier: "ConsentReviewStep", signature: signature, in: consentDocument)
reviewConsentStep.text = "Revise el formulario de consentimiento."
reviewConsentStep.reasonForConsent = "Consentimiento para unirse al estudio"
steps += [reviewConsentStep]
// Passcode/TouchID Protection
let passcodeStep = ORKPasscodeStep(identifier: "Passcode")
passcodeStep.iconImage = UIImage(systemName: "lock.circle")
passcodeStep.text = "Ahora creará un código de acceso para identificarse en la aplicación y proteger la información ingresada."
steps += [passcodeStep]
// Completion
let completionStep = ORKCompletionStep(identifier: "CompletionStep")
completionStep.iconImage = UIImage(systemName: "checkmark.seal")
completionStep.title = "Bienvenido a bordo"
completionStep.text = "Gracias por unirse a este estudio."
steps += [completionStep]
return ORKOrderedTask(identifier: "ConsentTask", steps: steps)
} }
// Firmar Consentimiento ```
consentDocument.addSignature(ORKConsentSignature(forPersonWithTitle: "Participante", dateFormatString: nil, identifier: "ConsentDocumentParticipantSignature")) Para que al presionar el botón se acceda al consentimiento, es necesario crear la acción en el ConsentViewController, en el segue que se arrastró desde el botón, por lo cuál el código quedaría de la isguiente manera:
return consentDocument ```
@IBAction func joinButtonTapped(_ sender: UIButton) {
let taskViewController = ORKTaskViewController(task: ConsentTask, taskRun: nil)
taskViewController.delegate = self
taskViewController.modalPresentationStyle = .fullScreen
present(taskViewController, animated: true, completion: nil)
} }
```
también se necesita crear un metodo el cual se asegura de que la vista de la tarea se cierre automáticamente cuando el usuario termine o abandone la tarea, independientemente del motivo (reason) y se coloca debado de la acción del botón.
``` ```
func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskFinishReason, error: Error?) {
dismiss(animated: true, completion: nil) //Dismisses the view controller when we finish our consent task
}
```
Al finalizar, se puede correr la aplicación y observar las diferentes secciones que ya se programaron:
![](imagenes/cel1.png)
![](imagenes/cel2.png)
![](imagenes/cel3.png)
![](imagenes/cel4.png)
![](imagenes/cel5.png)
![](imagenes/cel6.png)
Debido a que los desarroladores de Apple, utilizan el idioma para hacer sus aplicaciones y el soporte, algunas de las secciones en la aplicación, podrían estar en idioma inglés.

@ -45,7 +45,7 @@
<!--Consent View Controller--> <!--Consent View Controller-->
<scene sceneID="acU-c7-nQQ"> <scene sceneID="acU-c7-nQQ">
<objects> <objects>
<viewController id="B7d-i6-kuM" customClass="ConsentViewController" sceneMemberID="viewController"> <viewController id="B7d-i6-kuM" customClass="ConsentViewController" customModule="RK_Journals" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="qDt-sx-u4m"> <view key="view" contentMode="scaleToFill" id="qDt-sx-u4m">
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>

@ -0,0 +1,99 @@
//
// ConsentTask.swift
// RK-Journals
//
// Created by Juan David Lopez Regalado on 12/11/24.
//
import UIKit
import ResearchKit
public var ConsentTask: ORKOrderedTask {
var steps = [ORKStep]()
// Visualización de secciones
let consentDocument = ConsentDocument
// Sección 1: Bienvenido
let section1 = ORKInstructionStep(identifier: "consentSection1InstructionStep")
section1.title = "Bienvenido"
section1.iconImage = UIImage(systemName: "hand.wave")
section1.detailText = "Sección 1: Bienvenido. Este estudio trata sobre..."
steps += [section1]
// Sección 2: Recopilación de datos
let section2 = ORKInstructionStep(identifier: "consentSection2InstructionStep")
section2.title = "Recopilación de datos"
section2.iconImage = UIImage(systemName: "doc.text")
section2.detailText = "Sección 2: Recopilación de datos. Este estudio recopilará datos..."
steps += [section2]
// Sección 3: Privacidad
let section3 = ORKInstructionStep(identifier: "consentSection3InstructionStep")
section3.title = "Privacidad"
section3.iconImage = UIImage(systemName: "lock.shield")
section3.detailText = "Sección 3: Privacidad. Valoramos su privacidad..."
steps += [section3]
// Sección 4: Uso de datos
let section4 = ORKInstructionStep(identifier: "consentSection4InstructionStep")
section4.title = "Uso de datos"
section4.iconImage = UIImage(systemName: "chart.bar")
section4.detailText = "Sección 4: Uso de datos. Los datos recopilados se utilizarán para..."
steps += [section4]
// Sección 5: Compromiso de tiempo
let section5 = ORKInstructionStep(identifier: "consentSection5InstructionStep")
section5.title = "Compromiso de tiempo"
section5.iconImage = UIImage(systemName: "clock")
section5.detailText = "Sección 5: Compromiso de tiempo. Este estudio le llevará aproximadamente..."
steps += [section5]
// Sección 6: Encuesta del estudio
let section6 = ORKInstructionStep(identifier: "consentSection6InstructionStep")
section6.title = "Encuesta del estudio"
section6.iconImage = UIImage(systemName: "list.bullet.rectangle")
section6.detailText = "Sección 6: Encuesta del estudio. Para este estudio, deberá completar una encuesta..."
steps += [section6]
// Sección 7: Tareas del estudio
let section7 = ORKInstructionStep(identifier: "consentSection7InstructionStep")
section7.title = "Tareas del estudio"
section7.iconImage = UIImage(systemName: "pencil.and.outline")
section7.detailText = "Sección 7: Tareas del estudio. Se le solicitará que realice estas tareas..."
steps += [section7]
// Sección 8: Retiro
let section8 = ORKInstructionStep(identifier: "consentSection8InstructionStep")
section8.title = "Retiro"
section8.iconImage = UIImage(systemName: "arrow.backward.circle")
section8.detailText = "Sección 8: Retiro. Para retirarse del estudio..."
steps += [section8]
// Revisar y firmar
let signature = consentDocument.signatures!.first!
let reviewConsentStep = ORKConsentReviewStep(identifier: "ConsentReviewStep", signature: signature, in: consentDocument)
reviewConsentStep.title = "Revision"
reviewConsentStep.text = "Revise el formulario de consentimiento."
reviewConsentStep.reasonForConsent = "Consentimiento para unirse al estudio"
steps += [reviewConsentStep]
// Passcode/TouchID Protection
let passcodeStep = ORKPasscodeStep(identifier: "Passcode")
passcodeStep.iconImage = UIImage(systemName: "lock.circle")
passcodeStep.text = "Ahora creará un código de acceso para identificarse en la aplicación y proteger la información ingresada."
steps += [passcodeStep]
// Completion
let completionStep = ORKCompletionStep(identifier: "CompletionStep")
completionStep.iconImage = UIImage(systemName: "checkmark.seal")
completionStep.title = "Bienvenido a bordo"
completionStep.text = "Gracias por unirse a este estudio."
steps += [completionStep]
return ORKOrderedTask(identifier: "ConsentTask", steps: steps)
}

@ -6,8 +6,9 @@
// //
import UIKit import UIKit
import ResearchKitUI
class ConsentViewController: UIViewController { class ConsentViewController: UIViewController, ORKTaskViewControllerDelegate {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
@ -16,7 +17,17 @@ class ConsentViewController: UIViewController {
} }
@IBAction func joinButtonTapped(_ sender: UIButton) { @IBAction func joinButtonTapped(_ sender: UIButton) {
let taskViewController = ORKTaskViewController(task: ConsentTask, taskRun: nil)
taskViewController.delegate = self
taskViewController.modalPresentationStyle = .fullScreen
present(taskViewController, animated: true, completion: nil)
} }
func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskFinishReason, error: Error?) {
dismiss(animated: true, completion: nil) //Dismisses the view controller when we finish our consent task
} }
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Loading…
Cancel
Save