 Todos los días estamos grabando estas presentaciones, pero vemos que algunos participantes han tenido problemas en exceder a las grabaciones anteriores. Entonces lo que vamos a hacer es que lo voy a pedir a Marco que nos muestre un poquito cómo exceder a los videos dentro del Moodoo y también que ya que está haciendo eso que nos va el repaso del día anterior. Y luego de ahí vamos a pasar directamente a Juan Manuel Alcántara que es uno de nuestros senior engineers aquí en la Universidad de Oslo y que va a hablarles un poquito acerca de las reglas de programa. Ok, adelante Marco. Gracias Enzo, hola, buenos días a todos. Vamos entonces a hacer el resumen del día anterior y vamos a ver cómo podemos revisar las grabaciones del día anterior porque algunas personas me han preguntado. Entonces voy a compartir mi pantalla. Me dicen si la pueden ver. ¿Puedes ver Enzo? Estamos viendo los días. Ok, cuando ustedes entren al curso tienen que desviarse pues que estamos en el curso de adaptación de configuraciones y configuraciones estándar y va a conocer contra COVID-19. En la parte superior del curso aquí van a encontrar este link de zoom. Entonces le van a dar click sobre el click de zoom. Y acá vamos a ver Cloud Recordings, vamos a ver las grabaciones que están en la nube, en este tab. A ver si me siguen aquí, en este tab, que está al lado derecho. Le damos click aquí y podemos ver... Aquí podemos ver las grabaciones por la fecha. Así que si quisiéramos ver la del día 21, el día 26, perdón. Le damos click sobre el link y aquí ya podemos ver, la podemos descargar, podemos escuchar sobre el audio. Y podemos ver también los chats. Entonces para ver la grabación, le damos click aquí en Play. Y aquí mire que me apareció copy, el copy o el código. En algunas ocasiones ese código está copiado en... Ese código queda copiado en el portapapeles y si se les pide solamente es decirle control V y ya queda pegado. Pero en esta oportunidad no me lo pidió, vamos a ver si hay otra que le esté pidiendo. Vamos a ver aquí. Vamos a ver si... Ah mira Jeremías, que es el que estaba interesado, voy a repetir porque llegó Jeremías aquí. Hola Jeremías, buenos días. Estamos haciendo un demo de cómo podemos ver las grabaciones. Entonces vuelvo a empezar. Entramos aquí a la adaptación de configuraciones de standard. Verificamos que estemos en el programa, en la capacitación, en el curso. Y vamos a darle click aquí sobre Zoom. Aquí vamos a darle... Y vamos a dar las grabaciones de los días previos. Entonces vamos a probar con otra. Al darle click vamos a ver que me aparece un mensaje de que se copió un código en el portapapeles. Vamos a ver aquí. Aquí no me salió. Y luego, o sea hace un momento me salió. Eso quiere decir que está copiado en el portapapeles cuando le de click acá en el vídeo. Mira aquí me dice ahí lo copió. Y luego si me lo pide solo tengo que darle control V o pegar. Y el vídeo empieza a reproducir. Aquí no me lo pidió. Esa es la forma de ver las grabaciones. Entonces creo que si alguien tiene dudas, voy a hacer otro vídeo de Proton YouTube para que puedan ingresar. Porque hay algunas personas que han tenido problemas. Pero es por ese código que les pido un código. Como les digo, ese código ya está copiado en el portapapeles. Solo darle control V o pegar. Y ya queda listo. Entonces, vamos a continuar con el resumen del día a día ayer. Rápidamente lo que vimos era la diferencia entre atributos y elementos de datos. Luego, digamos que aquí rápidamente vemos que la idea es que podamos caracterizar los atributos que utilizan para caracterizar las personas. Y los elementos de datos van a servirnos para caracterizar los atributos. Bueno, cuando se den modificar o crear nuevos elementos de datos, también vimos esto. O sea que hay modificaciones, digamos, cuando hay que cambiar el nombre o adicionar opciones o hacer traducciones. Es algo sencillo de hacer. Cuando las variables nos encuentran, las podemos crear nuevas. Y no es recomendable modificar opciones si se tienen datos previos o eliminar elementos de datos si quiero consultar datos históricos. Y cuando vamos a crear elementos de datos nuevos, se deben crear siempre pensando en la salida de la información. Bueno, vimos también cómo se modifican los atributos, cómo se modifican y adicionan los elementos de datos. Y, pues, se mostró algo de cómo, por ejemplo, puede ser la modificación de un custom form también. Esto es entre algo sencillo. Y ya hicimos los elementos. Eso sería todo, Juan Manuel. Puedes continuar con la presentación del día. Espero que te dejo el compartimiento. Perfecto. Muchas gracias, Marco. Pues, muy buenos días a todos. Vamos a iniciar la presentación del día de hoy. Como les comentaba a Enzo, hoy lo que nos toca es ver las reglas de programa. Me indiquen, por favor, si pueden ver pantalla. Si se puede ver, Juan Manuel. Muchas gracias, Marco. Ok, entonces, reglas de programa. Ya pasamos por el repaso del día anterior. Vamos a ver una breve introducción de las reglas de programa. Trabajaremos unos ejemplos basado en la información que vieron el día de ayer, la configuración de ayer. Y tenemos al final un ejercicio en el que vamos a hacer la modificación del programa. Vamos a activar una regla que nos permita controlar en qué momento se hacen estas preguntas sobre el embarazo, derivada de la información que capturamos en el perfil del individuo registrado en el programa. Vamos a revisar las reglas que toman los valores de las condiciones subyacentes. Y finalmente, ocultaremos las vacunas que no estén disponibles en el país. Creo que vamos a agregar una regla más para el tema de lo SAVI, las reacciones que agregaron el día de ayer con Marco. Y bueno, con eso empezamos. Para qué utilizamos las reglas de programa? Aquí tenemos tres ejemplos muy claros de uso. El primero es la calidad de los datos, así como tenemos diferentes tipos de elementos de datos que nos permite controlar si capturamos texto, si capturamos un número, si es un número positivo, si permite o no fracciones. De igual manera, en las reglas de programa nos permite valorar la coherencia de la información y con lo que apoyamos la calidad de los datos. Prevenimos errores de captura, por ejemplo, donde pudiéramos tener la pregunta de embarazo para una persona registrada de sexo masculino o que no está en edad reproductiva. Y podemos hacer datos que algunos datos sean obligatorios, donde sabemos que si, por ejemplo, existe una condición subyacente y esa condición no está dentro de la lista que presentamos en el programa, podemos hacer obligatorio que nos den una descripción en un elemento de datos referido como otro. También podemos controlar el flujo de trabajo, donde derivado de los valores capturados en el proceso de captura, podemos ocultar un elemento de datos, podemos ocultar grupos de opciones para un elemento de datos o secciones completas en la captura en el programa. También podemos dar soporte a las decisiones y retroalimentación al usuario, donde, por ejemplo, si sabemos que el usuario tiene una condición subyacente, podemos mostrar una advertencia diciendo a la persona que está realizando el proceso que debe de tomar ciertas precauciones o que alguna o alguna no está indicada de acuerdo a la condición subyacente de la persona o la edad. Y en el procesamiento de datos, podemos traer información de otros eventos de cálculos, como es el caso del cálculo de la edad, que se determina de acuerdo con la fecha de nacimiento y la fecha del evento que se está capturando. Ahí tendríamos que tomar una decisión, por ejemplo, sobre si vamos a calcular la fecha al momento de la captura o la fecha con respecto de la fecha del evento, al momento de aplicar la vacuna o la edad al momento de estar capturando la información. Y con respecto de obtener valores de otros eventos, en el caso del programa de vacunación, sabemos que requerimos de transferir las condiciones subyacentes declaradas en la primera vacuna a la segunda vacuna. Demó que la información sea coherente entre el primer evento y el segundo y que podamos tomar una decisión correcta de acuerdo a la información anterior, tanto para condiciones subyacentes como para el tipo de vacuna que se aplicó en la primera dosis, por ejemplo. Entonces, para llegar al módulo donde vamos a dar las reglas de programa y las variables, que son algo importante en el proceso de realizar las reglas o de configurar las reglas, vamos a ir al módulo de mantenimiento, después seleccionamos programa y ya dentro de la sección de programa en el módulo de mantenimiento, veremos en el menú de la parte izquierda inferior, tenemos dos opciones que son las que nos interesan para el tema de las reglas de programa. Una es program rule, que aparece de hecho en el sistema aparece en inglés y la otra es program rule variable, que son los dos puntos que nos interesan para configurar las reglas. Una vez que hemos llegado ahí, vamos a seleccionar program rule y podemos editar una regla y veremos que se divide en varias secciones, las partes de una regla incluyen los detalles, dentro de los detalles, ponemos tres secciones importantes, la primera es el contexto de la ejecución, lo cual indica en qué programa se ejecuta la regla, donde la vamos a ejecutar con respecto de las etapas y aquí hay que tomar en cuenta que, por ejemplo, una regla que debe de aplicar para el perfil de una persona, donde evaluamos, por ejemplo, la edad al momento de capturar la fecha de nacimiento, esta regla vamos a querer definitivamente que se ejecute tanto al momento de ingresar el perfil o el registro de la persona, como en todos los eventos, al momento de estar trabajando en el programa. Por lo tanto, en el contexto de ejecución no vamos a elegir una etapa de programa. Sin embargo, en una regla que evalúa, por ejemplo, condiciones subyacentes o reacciones secundarias, esta regla sí, definitivamente, queremos que se ejecute exclusivamente en el evento de vacunación y no es necesario que se ejecute al momento de ingresar el perfil de la persona. Por lo tanto, en el contexto de ejecución seleccionaríamos la etapa específica donde queremos que se ejecute esa regla. De no hacerlo así, la regla se ejecutaría en todas las etapas y al momento de estar editando o ingresando el perfil de una persona, lo cual pudiera ser completamente innecesario. Entonces ahí la recomendación es que tengamos muy en cuenta cuál es el contexto en el que nuestra regla debe ejecutarse. Luego tenemos el nombre y la descripción que nos permite, por supuesto, llevar un control sobre las reglas que ponemos agregadas al programa. Aquí la recomendación, por supuesto, es que llevemos la nomenclatura que tengamos definida para la configuración del sistema con un prefijo y un nombre que sea descriptivo y que se puede entender incluso fuera de contexto. Y la descripción que ya puede incluir un poco más de información que nos diga cuál es la evaluación que hacemos y cuál es la acción que la regla debería tomar. Finalmente tenemos la prioridad en esta sección y esta se utiliza para determinar el flujo de ejecución o el orden de ejecución de las reglas. De modo que si yo tengo reglas que tienen prioridad 1, vamos a decir, estas reglas siempre se van a ejecutar antes que las reglas que tienen prioridad 3 como es el caso de la que vemos aquí en la pantalla. Aquí es muy importante tomar en cuenta esto ya que en algunos casos el orden de la ejecución está subeditado al contar con valores que pudieran calcularse en las reglas de prioridad 1 y posteriormente ser utilizadas en las reglas de prioridad 2 o prioridad 3. Este sería el caso, por ejemplo, de una regla que calcula la edad y otra regla que toma el valor de la edad y lo almacena en una variable. O que realiza una validación de acuerdo a la edad de la persona. Entonces, si nosotros calculamos, lo dejamos sin específicar la prioridad, el orden en el que se ejecutan las reglas pudiera no ser adecuado y el valor pudiera no estar disponible para asignarlo a la variable, por ejemplo. O para calcular la edad de la persona. La siguiente sección se refiere a la expresión de la regla, donde tenemos una condición que siempre nos debe dar un resultado verdadero o falso para poder ejecutar la regla. Es decir, que cuando la condición de un valor verdadero. Vamos a ejecutar la acción de la regla y cuando de falso se va a omitir esa ejecución en la parte derecha de la pantalla verán que tenemos las variables integradas. Luego las variables configuradas por por nosotros y las funciones que todas todas estas funciones empiezan con el prefijo de dos. No vamos a ver al momento de realizar el ejercicio. Entonces, aquí vemos por ejemplo la condición que se muestra en la presentación. Estamos viendo una condición que utiliza una función que verifica si la variable gr 47 h o edad tiene valor. Y si tiene valor, entonces ya realizamos una una acción. En la parte inferior vemos este cuadro en verde que nos indica que la la variable se refiere a la fecha de nacimiento. Entonces, luego entonces esta variable está haciendo referencia a un atributo y está en verde, lo cual nos indica que la condición evalúa correctamente a verdadero o falso. Luego tenemos por último. Las acciones de la regla. Que son aquellas. Medidas que vamos a tomar una vez que la regla se evalúe a verdadero. Yo aquí he agregado la lista de acciones traducido en español. Cuando ustedes hagan el ejercicio verán que la lista de acciones se muestra en inglés. No pueden tener aquí la referencia en español y vemos que esta regla en particular. Nos muestra realiza dos acciones la no hay no tenemos un límite en el número de acciones que se realizan dentro de una regla de programa. Sin embargo, como les decía, el orden de la ejecución pudiera ser importante al momento de tomar las acciones. Por lo tanto, deberíamos de evaluar cuidadosamente si las acciones es correcto llevarlas a cabo en una sola regla o en algunas situaciones es mejor. Llevar a cabo las acciones en reglas separadas y aplicar la prioridad para poder controlar el orden en el que esto ocurre. Entonces aquí vemos que podemos asignar valores. Podemos desplegar llaves y valor. La llave sería un título y el valor sería un valor calculado o que proviene de otra variable. Y esto se puede desplegar en diferentes secciones del módulo de tracker. Podemos desplegar texto, lo cual nos permite dar retroalimentación a la persona que está haciendo la captura. Podemos enviar mensajes, en este caso puede ser un mensaje de correo electrónico, por ejemplo. Dar errores al momento de completar y todas estas acciones de ocultar que puede ser como dice aquí podemos ocultar un campo podemos ocultar una opción. Grupos de opciones, etapas y secciones. Y luego hacer obligatorios campos de captura o elementos de datos o atributos. Lo cual es importante ya que no siempre requerimos que estos campos sean obligatorios. Sobre todo pensando que pudiéramos tener un elemento de datos que dentro de nuestro flujo de trabajo. No se captura todo el tiempo y derivado de una regla, por ejemplo, el el estatus de embarazo de una persona. Si la persona está embarazada o no, pudiera hacerse obligatorio si la persona es de sexo femenino y está en edad reproductiva. Pero si el si esta condición no se cumple ocultaríamos este elemento de datos. Por lo tanto hacerlo obligatorio de manera permanente en la configuración del programa. No es conveniente ya que el sistema al momento de recibir el evento rechazaría la información dado que falta ese dato. Por lo tanto lo haríamos obligatorio de manera dinámica de acuerdo a la información que el usuario nos captura tanto en el perfil como en el evento. Podemos al igual que podemos enviar un mensaje podemos programar el envío de un mensaje si no se envía en ese momento. Podemos mostrar un error. La diferencia entre mostrar el error y mostrar el error a completar es en qué momento se ocurre esto. Simplemente mostrar un error ocurre al momento en el que capturamos el dato y el error ocurre. Y error al completar se muestra al momento en el que damos clic en el botón de completar el botón al terminar el evento al terminar nuestra captura. Luego tenemos la diferencia por ejemplo entre advertencias. Aquí tenemos a mostrar una advertencia al completar o mostrar una advertencia. Versus mostrar un error o un error al completar. Aquí la diferencia entre uno y otro es que un error no nos va a permitir completar el evento hasta que resolvamos aquello que provoca el error. Y una advertencia simplemente va a ser para darle retroalimentación al usuario y mostrar algo que tal vez sea fuera de lo común. O que deba de poner atención por ejemplo que estamos indicando una vacuna que no está recomendada de acuerdo a la primera dosis. Cuando seleccionamos una vacuna distinta entre la primera y la segunda dosis podríamos mostrar una advertencia. Pero que no fuera un error porque se podría dar el caso de que la persona recibirá distintas vacunas en la primera y en la segunda dosis. Y si mostrarmos un error esto no nos permitiría registrar el evento y completarlo. Sin embargo la advertencia llama la atención de la persona que captura para indicarle que está eligiendo la vacuna distinta a la primera dosis. Sin embargo no obligarle a que elija la misma opción. Entonces aquí vamos a ver en las acciones que estamos tomando en esta regla que yo tomado como ejemplo. Primero tenemos el despliegue de un valor en el widget de indicadores que nos muestre la edad, el resultado del cálculo de la edad. Y luego que asigne el valor del cálculo a un elemento de datos que es la edad calculada. Luego veamos entonces las variables para que utilizamos una variable en una regla de programa. En este caso a diferencia de otras áreas del sistema donde hacemos referencia directa a los elementos de datos o los atributos. Una en las reglas de programa utilizamos variables ya que es importante poder determinar de dónde proviene la información y la temporalidad de esta información. Entonces creamos una variable para hacer referencia a un elemento de datos, un atributo o un valor calculado. Un valor calculado podría ser en el caso del cálculo de la edad. En vez de guardar la edad en un elemento de datos o al mismo tiempo que guardamos el valor en un elemento de datos podríamos también guardar este valor o asignarlo a una variable calculada. Que no necesariamente se va a guardar en un sistema sino que vamos a hacer referencia a esta variable en otras reglas. Y que se calcula el momento de ejecución siempre que se cumpla la regla del programa. Y luego el origen, controlar no solo el tipo sino el origen en control a la temporalidad puede ser que esta variable provenga o el valor provenga del elemento más nuevo de una etapa. Aquí tendríamos que especificar una etapa de la que se va a tomar este valor. El elemento del evento más nuevo, lo cual implica que no importa cuál sea la etapa, siempre que venga del evento más nuevo que tenga el programa. Un elemento en el evento actual, es decir la información que estamos capturando en este momento. O un elemento de un evento anterior. Aquí como pueden ver esta temporalidad o el origen de la información no incluye ni los atributos ni los valores calculados. Porque los atributos siempre van a ser un valor único que no tiene temporalidad. Y los valores calculados siempre van a ser o tener como origen la captura actual. Por lo tanto, este control sobre el origen del dato con respecto de una etapa o la temporalidad, la fecha del evento, el orden del evento únicamente es aplicable para elementos de datos. Por favor, me dicen si estoy viendo muy rápido o si tenemos alguna consulta. Hay una consulta por aquí que es un poquito avanzada, quizá Juan León nos pregunta acerca de fechas basadas en el calendario epidemiológico específicamente en la semana epidemiológica. Me pregunta si te va a hacer esto en la plataforma, en las settings de la plataforma, si se puede cambiar este tipo de visualización del calendario con reglas como la que tú estás mostrando, Juan León. Bueno, aquí creo que estaríamos hablando básicamente de la configuración del evento. Si el evento se va a agregar por, el evento podría ser modificado para utilizar un periodo o una fecha calendario específicamente. Y de ahí ya podríamos tomar en cuenta la evaluación y las valoraciones también podrían tener que ver más con indicadores que con reglas de programa. Entonces, listo. Y de aquí recomendaciones sobre nuestra configuración de una regla. Definitivamente con respecto de las variables que utilizamos nombres claros, que al momento de ver el nombre de la variable, la variable misma, se puede entender que es lo que estamos viendo. Aquí podría intervenir una política sobre nomenclatura que nos permita diferenciar entre una variable que hace referencia a un valor de un evento del actual, el que estamos capturando ahora o un evento anterior específico de una etapa. Por supuesto, evitar símbolos porque esto pudiera ocasionar problemas en el momento de ejecutar nuestra. Nuestra validación y tomar en cuenta que el valor de una de una variable que se refiere a un elemento de datos de tipo si o no. Nos va a dar falso cuando la respuesta es no y nos va a dar falso cuando no tiene dato. Esto es una cuestión importante ya que si nosotros estamos evaluando cuando la persona nos está respondiendo no en el elemento de datos, si únicamente nos limitamos a evaluar que la variable sea igual a falso. Entonces la regla se va a ejecutar tanto cuando no haya dato como cuando la persona nos haya respondido no. Esto por supuesto se puede ser útil siempre que tengamos que ocultar un elemento de datos cuando la respuesta sea falso, por ejemplo. Y que solo se muestre o se haga obligatorio un elemento cuando la respuesta sea verdadera o si. Pero en muchas ocasiones esto podría llevarnos a una falsa ejecución donde si requerimos hacer obligatorio por ejemplo un elemento de datos. Cuando la respuesta es no, esto va a ocurrir también cuando la respuesta no esté presente y que no tengamos valor, lo cual sería equivocado. Y para esto nos sirve mucho tener esta función de dos as value donde evaluamos que la variable tenga valor. Entonces vamos a formular nuestra, nuestra condición que sea que la variable tenga valor y que ese valor sea falso. Con lo cual estamos asegurándonos que tenemos una respuesta y que la respuesta es no. Y luego entonces vamos a, vamos al sistema y veamos algunos ejemplos. Entonces como yo les comentaba, si a la hora de ingresar al sistema, vamos al menú principal, abrimos el módulo de mantenimiento. De aquí vamos a programas. Y como pueden ver en la parte en el menú del lado izquierdo, las últimas dos opciones son las reglas de programas y las variables de reglas de programas. Entonces vamos a revisar aquí nuestras reglas de programas. Voy a filtrar aquí para poder ver las reglas que son específicas del programa que ha utilizado Marco el día de ayer. Y vemos que tenemos esta regla. Voy a buscar la regla que estábamos utilizando hace un momento donde calculamos la edad. Aquí está. Tenemos la expresión donde tengo las variables integradas al sistema que me permite utilizar, por ejemplo, la fecha, evaluar la fecha del evento. Una fecha programada. El ID específico del evento o el código de una unidad organizativa. Las variables que hemos programado nosotros en la configuración. Aquí podemos ver una diferencia importante y es que aquellas variables que se refieren a elementos de datos. Inician con el hash. Y las variables que se refieren a atributos. Inician con la letra mayúscula. Entonces, como podrán ver, tenemos un gran número de variables programados en el sistema. Estas variables que se muestran son específicas del programa que hemos indicado aquí. Si yo dentro de mi ámbito de ejecución selecciono una etapa. En el caso del programa de vacunación por supuesto sólo tenemos la etapa de vacunación. Entonces que ocurre si yo selecciono la etapa de vacunación. La edad se va a calcule no se va a calcular al momento de. Estar capturando la información del perfil de la persona. Únicamente se se ejecutaría al momento de estar agregando un evento al programa de tipo vacunación. No dejar sin valor para que se ejecute todo el tiempo. Y luego aquí ven como yo he ingresado una una variable que está fuera de la nomenclatura normal de nuestra expresión. Por supuesto me está dando un error. Aquí podría decir por ejemplo que. Que aparte de que tenga valor que la fecha por ejemplo aquí podríamos decir esta. Esta fecha de nacimiento que entonces la fecha de nacimiento sea mayor o igual. Ya podría poner yo aquí otra parte de la expresión donde puedo decir que la persona haya nacido después de el año 2000. Una fecha específica. Bueno vamos a quitarlo de momento y luego tenemos las acciones que como les comentaba. Están se nos muestran en inglés pero tienen en la presentación la traducción de las opciones. Y aquí por ejemplo vemos que. Nos despliega el valor lo calcula como una función. Calcula la diferencia entre la fecha actual. Y la. La fecha de nacimiento. Y lo despliega en el en el widget. Y asigna el valor. Esta es nuestra atracción. Que quise asigna el valor en el evento. De. Tomeando nuevamente la diferencia entre. La fecha actual. Y la fecha de nacimiento. Y aquí tenemos que ver una un punto importante y es la la regla asignó el valor. A una variable. No a un elemento de datos o a un atributo, sino a una variable. De modo que este dato no se guarda en el evento. Pero si se tiene disponible para poder hacer cálculos. Entonces vamos a. Vamos a la pantalla de captura. Atracar. Y damos el ejemplo. Yo tengo la persona que registraron. Como parte de los ejercicios de los 10 anteriores. Y podemos ver que la edad se calcula. Y se muestra en el widget de indicadores. Y el resultado es 63. Si yo hago este cálculo de modo que. Como les comentaba. Si yo al momento de calcular la edad digo que esto únicamente ocurre. Cuando. Agregó el evento de vacunación. Lo que va a suceder es que este cálculo no va a ocurrir. Cuando yo estoy registrando la persona. Si yo tengo que hacer un tomar una decisión. Sobre mostrar un elemento de datos o ser lo obligatorio. Derivado de la edad. Y esto ocurre al momento de registrar a la persona. Pero yo tengo aquí asignado la etapa. La regla no va a correr. Entonces en este caso particular. Nos interesa que la regla corra. Tanto al momento de registro como al momento de agregar. El evento. Luego vamos a ver un. Una herramienta importante al momento de estar. Configurando nuestras reglas. Muchas veces tenemos problemas para que la regla. Se ejecute correctamente. Y lo que vamos a hacer es utilizar. Aquí las herramientas de. Programación o herramientas de desarrollador. Y vemos la consola. Entonces. Viendo la captura. Estando en el en la captura del evento. Lo que vamos a querer hacer es. En la dirección de la página. Al final. Vamos a agregarle. La indicación de que queremos. Que lo haga. Verboos. O sea que nos muestre todos los mensajes producidos. Por la ejecución. Del sistema. Y entonces que ocurre que las reglas. Nos van a mostrar. La expresión. El resultado y el resultado de la expresión. Y aquí lo podemos ver. Que podemos ver en pantalla. Que la expresión con. La regla con este ahí. Se ejecutó de manera exitosa. Y nos dice cuál fue la condición. Y la condición sea. El tipo de vacuna. Tenga valor. Cuales se hace una evaluación sobre el tipo de vacuna. Y que el resultado de la regla sea. Aquí vemos al final nuestro resultado de la regla sea verdadero o falso. Entonces yo voy a buscar. Si tuviera yo un problema con una regla. Lo que voy a hacer es revisar por ejemplo el cálculo de la edad. Yo sé que mi cálculo de la edad tiene. Este id que vemos en el. En el url del sistema. Voy a regresar a mi consola. Y voy a poner en el filtro el id de la regla. Lo cual. Me va a mostrar específicamente los mensajes. Que se producen al momento que esta regla se ejecuta. Y aquí vemos que se ha ejecutado aquí dos veces. Aquí una vez aquí y otras dos veces aquí. Y que mi resultado es en todos los casos verdadero. El resultado de la evaluación. Donde tengo que la condición era de dos has value. Mi variable de age. Que se refiere. A la fecha de nacimiento. Y por lo tanto tiene valor. Y entonces el resultado es. Si yo edito. El perfil. Y quito el valor. Que es lo que tendría que ocurrir. El momento en el que la regla se ejecute nuevamente. Me tendría que dar falso. Porque no tengo fecha. Y aquí podemos verlo. En la ejecución más reciente. Tenemos que la condición pregunta si tiene valor. Y el resultado es falso. Porque porque no tiene valor. Entonces vamos a regresar a ponerle. Una fecha. Y vamos a decir que esta persona. Nació. Los noventas. Ya tiene valor. Y me tiene que dar nuevamente. Verdadero. Y al dar verdadero tendría que. Calcular la edad. Nuevamente. Listo. Aquí está. Una vez que yo guardado mi. Mi dato. Ahora me dice que la persona tiene 26 años. Y ahí tenemos que. Entonces. La edad se calcula nuevamente. Derivado. Del cambio que yo hice. En el valor del atributo. Y bueno, vamos a. Vamos a ver el. El ejercicio de hoy. Provisemos. Entonces. Agregar el filtro. Para la edad reproductiva. Bueno, y voy a tomar como ejemplo. Edad reproductiva. Que sea de entre 15. Y 49 años. Que son. Los valores más comunes que se. Que manejamos como edad reproductiva. Entonces para mi ejercicio. Vamos a. Voy a escribirlo yo aquí. Entonces. Una. Mi regla va a ser. Primero. Voy a. Que es lo que voy a hacer? Voy a. Pultar las preguntas. Puntas de embarazo. ¿Cuál va a ser mi condición? Es que. Las preguntas de embarazo se ocultan. Siempre que la persona. No sea de sexo. Cuando el sexo sea. Distinto de. Menino. Y que la edad. Sea. No. A 15 años. Mayor de. Yo. O igual. A 50 años. Entonces. Aquí hay que tomar en cuenta algo. Algo importante. Que yo he mencionado. Yo dije. Quería. Edad reproductiva. Puntar las preguntas de embarazo. De acuerdo. Y la edad. Cuando yo dije. Reproductiva. Dije. 11. A 49 años. Sin embargo. Lo que yo he hecho. No. No. No. No. No. Sin embargo. Lo que yo he hecho aquí. Es escribir mi condición. Menor a 15. Pero igual. O mayor. A 50 años. Y por qué lo he hecho así. Porque si lo calcula. Si vamos a calcular la edad. Y tenemos una fracción. Digamos que la persona tiene. 49 años. Casi 50 años cumplidos. Si yo le pongo aquí. Si yo pongo aquí que mi. Mi. Mi validación sea. Menor. A 15. O mayor. Mayor. 49. Que es lo que va a suceder en esta situación. Si la persona tiene. Exacto 49 años cumplidos. Esto funciona. Sin embargo. Si la persona tiene 49 años. Meses. Esto ya no. Ya no se. Ya no se cumple. Porque está. Es tres meses. Meses mayor. A 49 años. Por lo tanto. La evaluación recomendada sería. Mayor. O igual. A 50 años. Entonces voy a regresar. Al sistema. Empezó a configurar mi. Mi regla. Por supuesto, siempre. Tomando en cuenta la nomenclatura. Voy a decir que. Voy a. Y en mi descripción voy a decir que. Voy a ocultar. Cultar. Los. En barazo. Y cuál va a ser mi prioridad aquí. Por supuesto. Y recordamos que. La prioridad para el cálculo de la edad. Es tres. De modo que si yo no pongo la prioridad o pongo una prioridad. Menor a tres. Esta regla se va a ejecutar antes de que haya yo calculado la edad. Por lo tanto. Lo mejor que podemos hacer aquí es asignar una prop. Una prioridad mayor. Que tres. Y que ocurre. Dado que voy a capturar a ocultar campos. Relacionados con. Con la captura del evento de vacunación. No tiene sentido que yo ejecute mi regla dentro de la. El registro o la edición del perfil de la persona. Por lo tanto. Y luego voy a decir que quiero que se ejecute únicamente. Cuando estoy agregando. Un. Un evento de tipo etapa de vacunación. Y luego voy a ir aquí a mi regla de programa. Por supuesto dice que la. Que la regla está vacía. Y lo que yo voy a hacer aquí es. Buscar una variable. Voy a decir que es la edad calculada. Si la edad calculada es. Menor a 15. O. La edad calculada. Es. Mayor. O. Igual. 50. Entonces. Como tengo aquí una. Esta evaluación que es un. O. Voy a. Cerrar. Mi. Mi condición entre paréntesis. Entonces. Si la persona está fuera de la reproductiva. Que es lo que voy a hacer aquí. Y lo voy a decir. Que. Oculte. Un campo. Buscar mis. Elementos de datos. Aquí está. El campo de embarazo. El campo de embarazo. El campo de embarazo. El campo de embarazo. El campo de embarazo. El campo de embarazo. El campo de embarazo. Listo. Aquí me falta todavía algo. Y es el sexo. No nada más quiero el tema de. De ocultarlo por la edad. Sino que también lo quiero ocultar por el por el sexo. Entonces voy a decir. Y. Me decir que si la persona. No es. Mi condición va a ser. Que esté dentro o fuera de la reproductiva. O. Que el sexo. No sea femenino. Yo en este momento no tengo claro cuál es el código del sexo femenino. Pero lo voy a agregar así. Lo que voy a hacer es ir a. Nuevamente al modo de mantenimiento. Y voy a la sección otro. Y los. Voy a revisar a los sets de opciones. Buscar. Y opción de sexo. Entonces vemos que el nombre es femenino. Sin embargo, el código es femenino. El código está en inglés. Entonces yo voy a valorar de acuerdo al código. Es muy importante tomar esto en cuenta que nuestras variables pueden evaluar. El nombre o el código. Nosotros siempre recomendamos evaluar el código ya que como pueden ver aquí. La persona que configura o un administrador puede. Cambiar el valor de la opción en el nombre. Pero no el valor de la opción en el código. Y el sistema en la base de datos siempre va a registrar el valor del código. Por lo tanto, este, este nombre pudiera cambiar. Sin necesidad de que esto tenga un efecto en nuestros datos. Enlesados en el sistema. Sin embargo, si yo hago la evaluación contra el nombre y no el código. Cuando esto cambia. Tendría que ir. Mi regla de programa. La condición para que entonces sea coherente con el valor. Del nombre. Sin embargo, como estoy evaluando contra el código. No importa cuántas veces cambió el nombre ni regla la condición de mi regla. Va a seguir funcionando sin ningún problema. Entonces voy a guardar ahora sin regla. Es siempre recordar que cuando estamos trabajando con. Con la configuración y hagamos estos este tipo de cambios. No hay que limpiar el coche. Vamos a revisar. Entonces qué pasa con una regla. También en cuenta que si tienen tienen abiertas múltiples ventanas o múltiples. El explorador. Del sistema. La carga de la de los metábatos podría haberse bloqueado por esto ya que. Una de diferentes tabs pudieran estar. Utilizando el archivo. De de caché. El explorador y evitar que y evitando que se guarde esta información. Un momento que cargamos los metábatos. Entonces siempre siempre que vean que se tarda mucho encargar. Revisen que no tengan abierto otro. Otra tab otra cejilla del explorador al sistema. Para que esto no les ocurra. Y vamos a ver. Entonces dicemos qué sucede con mi regla. Bueno que dijimos que íbamos a ocultar el elemento datos de embarazo. Si la persona es no es de sexo femenino. O está fuera del del rango de edad reproductiva. Y aquí en mi expresión. Que fue lo que yo hice entonces yo dije. Entonces lo que dije fue. Edad. Menudo. Enhorab 15. O. La mayor o igual. 50. Aquí yo lo he configurado así. De modo que. Otra forma de hacerlo sería. Que el sexo. Si el sexo es. El sexo es masculino. Que oculte la pregunta del embarazo. Pero qué pasaría. Si yo escribo mi regla de esta. De esta forma. Y lo que ocurre es que. Entonces si no tengo valor. La regla me va a dar falso. La evanesia me va a dar falso. Lo mismo que si tengo. El. El valor femenino. Tenemos. Una mano levantada. Hola. Una preguntita que está aquí de parte de César. La pregunta acerca de los códigos. No dice si los códigos para las reglas están definidos por defecto en la herramienta de hs2. O solo se han configurado para esta cadena. Los códigos. A ver que nos diga César. Que se refiere con los códigos. Porque no. Imagino que estás hablando dentro de las variables o de los. De los códigos que se ponen. O lo que se pone en el cómo en la expresión verdad. Pero si nos escribes por ahí César te agradecemos. A ver, vamos a. Los códigos de las variables. Los códigos de las variables. Ok. Precisamente lo platicamos al. Al inicio de la. De la presentación. Las. Las variables las define el usuario. Hay dos tipos de variables en el sistema. Están las variables integradas. Vamos a regresar a la presentación. Entonces tenemos. Aquí está. Tenemos dos tipos de variables. Están las variables integradas que es un referencia a valores. Existentes en el sistema como la fecha de un evento por ejemplo. Y están las variables configuradas que hacen referencia a un atributo o a un elemento de datos o a un valor calculado. Que estas son variables que nosotros declaramos en la configuración. Lo que yo he utilizado en este ejemplo que estamos viendo. Es una variable de edad calculada. Es una variable configurada por nosotros. Vamos a. En 47. Vamos a seleccionar el programa con el que estoy trabajando. Y aquí tengo la edad, la variable age y age calculado. Estos son dos variables que hemos. Programado nosotros en el sistema. La primera hace referencia a un atributo. Aquí lo podemos ver. Y la segunda. Es un valor calculado. Luego he utilizado también. La variable sexo. Que es. Esta ligada al programa gr 47. El nombre es aquello que vamos a utilizar. Este es el código o el nombre de la variable. Es lo que vamos a utilizar como nuestro. Nuestra evaluación. Nuestra condición en la regla de programa. No hemos dicho que. Utilice el código de la opción. Del set de opciones. Y esto. Y el valor viene de un atributo. Y este atributo es sexo. Entonces. Esos son los dos tipos de variables. Espero que esto resuelta la pregunta. Y realizamos la pantalla de captura. Y lo que vamos a ver aquí. Es tengo dentro de mi perfil. Esta persona es de sexo femenino. La edad es 26 años. Por lo tanto. Si yo abro mi consola. Vamos a las herramientas de desarrollador. Y regresamos a la regla de programa. Me voy a pedir que. Vamos a buscar. La regla que yo he agregado es esta. Aquí vemos cuando yo selecciono. En. Embarazo vamos a ver. Esta es la regla que yo he agregado. Embarazo solo para mujeres en la reproductiva. Si yo le clic en el menú de tres puntos. Y selecciono la opción mostrar detalles. Aparte. De detalles. Me va a mostrar que la idea de la regla es este. Internamente este es el idea que el sistema le ha asignado. Yo voy a utilizar esa idea para. En la consola filtrar y que me muestre únicamente la. Los datos de ejecución de mi regla. Y que es lo que ocurre ahora no me muestre nada. Pero esto es porque. Yo todavía no le he indicado al sistema. Que me tiene que mostrar. Toda la. La retroalimentación. Entonces voy a agregar esta opción de. La voz. Y entonces ahora sí. Tendría que ejecutarse. Mi regla. Vamos a evitar el perfil. Y voy a hacer un cambio aquí. Y lo voy a decir. Que. El sexo sea masculino o lo voy a dejar sin dato. Me he escrito mal. Aquí está mi regla. Entonces. Que es lo que me está diciendo la regla que dice. Si el sexo. Si la edad no está dentro de la edad reproductiva. El sexo es distinto de. O femenino. Mi resultado es verdadero. Por lo tanto tendría que ejecutar. La acción. Y ocultar. El elemento de datos de embarazo. Y que ocurrió aquí. Vemos que efectivamente en la parte. En la parte inicial del evento. No tenemos la pregunta de embarazo. Entonces voy a regresar a editar mi perfil. Y ahora sí voy a seleccionar. Sexo femenino. Y aquí se ejecuta la regla nuevamente. Y qué es lo que ocurre. Dice. Si está dentro del rango de la edad. Y el sexo es femenino. Mi evaluación tiene que resultar falsa. Y por lo tanto. Tiene que mostrar. Dejar de ocultar. La pregunta sobre embarazo. Vamos a hacer el cambio ahora en la fecha de nacimiento. Voy a elegir un año. De modo que quede fuera de. Del rango de edad reproductivo. Y entonces la. Aquí la persona tiene 72 años. Por lo tanto está fuera de. Del rango. La condición me da verdadero. Y entonces ya no tengo la pregunta de embarazo. Listo. Ahora. Con esto. Tenemos cubierta nuestra primera. Parte del ejercicio. Dicimos. Que no sea femenino. Entonces con esto cubrimos. Tanto el rango de edad como el que tenga. Que no tenga valor o que el valor sea masculino. Es decir, siempre que sea cualquier cosa, pero que no sea femenino. Me da verdadero. Entonces listo. Cubierto la primera parte del ejercicio. Luego. Vamos a revisar. Vamos a contar las vacunas que no están. O si no utilizadas en el país. Entonces para esto vamos a hacer algo un poco. Un poco. Más. Difícil. Un poquito más involucrado. Y es. En la lista de vacunas administradas. Como se dice entonces si existen vacunas que no estén permitidas, no estén autorizadas o que no se estén utilizando en el país, vamos a ocultar estas vacunas. Y para facilitar para facilitar la administración. De nuestra regla. Ser aquí. Mi segundo apunte. Entonces. Quiero hacer. Dar las vacunas. Listo. Entonces qué es lo que quiero hacer aquí. Entonces es. Ejecutar la regla. Cuando se va a ejecutar mi regla. El ámbito va a ser. En el evento. ¿Cuál será mi condición? Quiero que se ejecute siempre. Lo tanto mi condición. ¿Cuál tendría que ser? Tendría que ser siempre verdadero. Y. La acción va a ser. Dar un grupo de opciones. Entonces. Vamos a iniciar. Al set de opciones. Yo voy a crear aquí un set de opciones. Se va a llamar. 47. Bueno estoy aquí. Creando un set de opciones. Vamos a ver. 47. Vamos a ver. Nombres de vacunas. Listo. Tenemos. Estas cinco vacunas. Esas son mis opciones. Y vamos al grupo de opciones. Voy a crear un grupo. Se llama. 47. Porque voy a utilizar un grupo. Esto es. Yo puedo hacer mi regla de dos maneras. Puedo indicar. En la regla específicamente una opción a ocultar. O puedo optar por ocultar un grupo. De acuerdo. En el tema de mantenimiento de los grupos. Mi regla. Yo no voy a. Tocar mi regla. Pero voy a darle. Mantenimiento a mi grupo. Y eso puede ser. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. Esa. aquí voy a decir que Sputnik AstraZeneca no están disponibles en el país, listo, ya tengo aquí mi grupo, para tomar en cuenta que los grupos tienen, se comparten también, entonces voy a revisar que mi grupo esté disponible para ser utilizado, en este caso yo voy a ser solo de lectura, mi mejor práctica en este sentido es, yo no quiero que todos los administradores del sistema, o quienes tengan acceso a esta sección del sistema modifiquen mi grupo, pero pudiera agregar aquí un grupo de usuarios que sí puedan modificar tanto mi grupo y el resto que solo puedan verlo. Entonces, vamos ahora a la sección de reglas de programa y lo que voy a hacer es, para en mi contexto es, quiero que esta regla se fecute al momento de la captura de vacunación, porque no tiene sentido que oculte yo el grupo cuando estoy editando el perfil, cuando estoy registrando la persona, y que voy a decir que GR47 oculta vacunas no disponibles, mi prioridad va a ser uno, porque quiero que se ejecute, antes que otras reglas, mi condición es aquí, qué es lo que yo quiero, quiero que esta regla se ejecute todo el tiempo, por lo tanto, no voy a hacer una evaluación de una variable, voy a decirle que es verdadero todo el tiempo, y mi acción va a ser ocultar un grupo de opciones, del elemento de datos, nombre de vacuna, y el grupo que voy a ocultar son las vacunas fuera de uso. Como yo les decía, puedo también notar por ocultar una opción, y entonces cuando yo elijo mi elemento de datos o mi atributo, me va a dar la lista de opciones que están disponibles en el set de opciones que está configurado para mi elemento de datos, y aquí yo podría decir aparte, quiero que me ocultes la CinoFarm, entonces adicional al grupo, me tendría que ocultar esta otra vacuna. Realmente lo que nos interesa, es que no se oculta el grupo, entonces yo me voy a quitar esto, y creo que mi regla está lista, voy a guardar la regla, y que es lo que sigue, como siempre, borrar el parche, y luego regresar al tracker, a la vez que he cargado los metadatos, y veamos que oculta. Como podemos ver, se ha ejecutado la regla, y únicamente están disponibles las opciones que no son parte del grupo de opciones, entonces tenemos lista nuestra segunda parte de justicia, y tenemos, ok, este es un poco más difícil. Ya, antes de seguir, dice Edward que no le aparece el botón para crear Option Group. ¿Tú consideras que es necesario usar el Option Group para resolver este ejercicio? No, realmente no, creo que pueden optar para ocultar una opción específica, y podemos revisar después qué es lo que ha pasado, porque no pueden tener este botón, pero a ver, si no se aclara específicamente dónde es que no le aparece este botón. Cuando van a crear el Option Group. Ok, entonces voy a regresar ahí, con mantenimiento otros, u otro, Option Group, que no le aparece este botón, ¿será eso? Exactamente, es probablemente uno del aceite cuando quisimos los usuarios autogenerados. Entonces, vamos a revisar rápidamente las permisos para los usuarios. Creo que esto tiene una solución de la intervápida. Entonces, tenemos que usar el permiso de crear Option Groups. Listo, ya les he dado los permisos, de modo que ya pueden crear grupos. Creo que van a tener que salir y entrar en el sistema, o limpiar el cachet y regresar a la sección de Option Groups, para poder ver que ya tienen este botón activado. Entonces, veamos, yo cubrí, ya cubrí el 1. Hacimos como número 2, de las vacunas que no están siendo utilizadas en el país, y vamos a ver como número 3, esta otra opción, las reglas para esconder y transferir valores a condiciones subyacentes. Esto es un poco más complicado. Vamos a ver cómo ocurre esto en las reglas actuales del programa. Entonces, aquí pueden ver en pantalla que tenemos condiciones subyacentes previas, condiciones subyacentes, y condiciones subyacentes de la etapa más nueva. Aquí, como mencionaba yo en las recomendaciones, el nombre de mi variable hace referencia al origen del dato, de acuerdo a la temporalidad del evento. Por lo tanto, vamos a ver aquí Underline Conditions Previous, dice que mi variable usa el código de la opción de un elemento de datos anterior. Aquí, claro, no es necesario que yo marque específicamente de cuál etapa, porque solo tenemos una etapa en el programa, pero si tuviéramos múltiples etapas, no habría que hacer esa distinción y decir, en vez de decir del evento anterior, tal vez tendríamos que decir del evento más nuevo de una etapa específica. Y aquí tendría que seleccionar yo cuál es la etapa. Vamos a seleccionar la etapa, el etapa de comisión, y entonces sí tendría la condición subyacente. Claro, entonces, vamos a ver cómo ocurre esta regla. Enza que te parece si cambiamos esta parte del ejercicio por modificar la fecha sugerida para una vacuna en particular. Parece perfecto. Si alguien después quiere meterse un poquito a investigar y ver algo un poco más avanzado, puede ver eso si quiero. Pero vamos a ver. Aquí tenemos esta serie de reglas de las condiciones subyacentes. Vamos a cambiar esa parte del ejercicio, pero sí vamos a revisar este tema de las condiciones subyacentes. Entonces, tenemos aquí, esta evaluación dice si el cliente tiene antecedentes de diabetes, asigne un valor al evento actual. Entonces, ¿qué es lo que está haciendo? Del anterior, el valor de diabetes. Si es verdadero, entonces, ¿qué es lo que va a hacer? Me va a asignar un valor verdadero en el campo actual, tanto en el día diabetes como en el de la variable current morbidity diabetes. Entonces, veamos cómo ocurre esto. Me voy a agregar un evento nuevo y ¿qué es lo que ocurre? Si yo tengo, y que dice que tengo, que sí tengo condiciones subyacentes y me muestra la lista. Si yo le digo que no, tendría que ocultar la lista, por supuesto, lo mismo que si no tengo valor, o es desconocido, lo que voy a decir es que sí tiene condiciones subyacentes. Como pueden ver, estoy viendo el evento anterior, y tengo uno más nuevo, confrecha de día de hoy, este es confrecha de día 25. Aquí voy a decir que la persona tiene diabetes y ¿qué es lo que hace mi regla? Va a evaluar del evento anterior, como decía la nomenclatura de la regla, de la variable de regla, de programa, incluye la referencia a qué es en el evento anterior. Para que yo sepa que estoy utilizando mi variable, la variable correcta, que estoy hablando un dato del evento anterior. Si esto es verdadero, entonces que en el actual diga, número uno, que sí tiene, que me asigne verdadero a diabetes, y aparte que en la variable, en el current mobility diabetes, que me asigne también el valor a verdadero. ¿Tú sufriste un poco con estas reglas cuando configuramos el paquete, cierto? ¿Tienes alguna recomendación que nos puedas hacer con respecto a este tipo de reglas? Sí, la verdad que sí, es verdad, sufrí bastante con ellas, por suerte Juan Manuel me ayudó un montón. Un par de cosas que son importantes es que cuando configuramos, no hay una pantalla en la web, sino que pensamos mucho en qué funciona para los dispositivos de Android también, ¿verdad? Y si vas de vuelta a la regla, Juan Manuel, y vamos a la expresión, ahí está, déjame pensar, lo primero que es importante sería eso, siempre testear las reglas tanto en web como en Android para ver qué es lo que hay. Hay documentación en la página de ADHS2 para ver cuáles son las reglas, algunas no se soportan del todo. Y ahora, no recuerdo del todo Juan Manuel, pero una de las cosas que hacíamos antes, era que lo que yo hice y que no funcionó, lo que yo utilizaba era el signo de inclamación y el de igual, para decir y lo ponía, si no era falso, digamos, o si no había valor, para ver si no había valor y eso nos daba problemas, ¿verdad? Sí, aquí podríamos escribir, por ejemplo, podríamos tener aquí una evaluación que diga dentro de mis funciones, decir, el valor que tenga valor, entonces tomaría aquí el texto de mi variable y lo voy a poner entre comillas simples, que me diga si tiene valor y ese valor es verdadero. Esto es otra opción, ¿verdad? Exacto. Que tiene valor y que ese valor es diferente de falso. Otra cosa con la que sufrimos un poquito fue el orden también, importante verificar si las cosas no están funcionando y si hay varias reglas que están a la vez, es verificar que el orden esté correcto y la otra, si hay varias acciones al final y si no funciona, a veces conviene hacer todas las reglas separadas y para asegurarse que todo pasa en el orden correcto. Creo que esa era lo más importante. Porque las reglas, las acciones no se les puede cambiar el orden, una vez son hechas, ¿verdad? Entonces hay que borrarles y hacerlas nuevos, entonces a veces conviene tener las reglas separadas. Ciertamente. Entonces, bueno, hice aquí algunos cambios, pero nos voy a aguantar. Lo que vamos a hacer es revisar la ejecución de la regla, que la regla se ejecuta en el evento de vacunación, no en el perfil. Y voy a abrir nuevamente mi herramienta de desarrollador para ver la consola, activar nuevamente la opción está al final de verbose y le voy a decir que me muestre el resultado de esta regla. ¿Cuál es mi resultado actual? Tengo en mi evento del día 25, tengo el valor de diabetes activo y que es lo que va a ocurrir, que si yo tengo mi evento del día 25, mi regla va a evaluar, tiene que evaluar a falso, no tengo un evento anterior con ese valor. Sin embargo, cuando yo paso al evento del día 27, aquí sí que tengo un evento anterior donde el valor es verdadero. Por lo tanto, mi regla tiene que evaluar a verdadero y al ejecutarse la acción, tiene que traerme este valor de diabetes, asignarlo al elemento de datos. Por lo cual tenemos un resultado adicional de que me asignó el valor. Mi otro resultado interesante es que ahora el valor está deshabilitado para la edición del usuario porque el valor es capturado por la regla. Por lo tanto, yo no quiero que mi usuario venga y me cambie este valor. Sin embargo, sí que me lo traiga del otro evento. Si yo podría jugar un poco con mi regla, voy a hacer un cambio aquí, que ustedes podrían hacer este cambio también y le voy a decir que si en el anterior es tú y además, vamos a buscar como Orbidity Diabetes, o sea que este es el del evento actual, lo que voy a decir es que me evalúe si tiene valor que solo me ponga el valor si el elemento de datos no tiene valor. ¿Cuál sería el efecto aquí? Y es que al momento en el que yo ejecuto la regla o el que el sistema ejecuta la regla, si el elemento de datos no tiene valor, me lo va a asignar a verdadero. Y la siguiente vez que se ejecute, esto va a dar a falso, por lo tanto, me dejaría aquí abierto y habilitado el elemento de datos para que el usuario pueda deshabilitarlo o pueda evitar ese valor. De modo que esto es útil cuando tenemos un campo de texto que pudiera cambiar. Y si era, por ejemplo, traer el valor anterior, pero una vez que lo he traído, dejar la posibilidad de que mi usuario lo cambie. En vez de deshabilitarlo, entonces ya verifico, una vez que yo he traído ese valor, ya tiene valor y, por lo tanto, puedo deshabilitar esa regla, dejar de hacer esa asignación del valor cada vez que corre y permitir con esto que mi usuario me modifique la información. Vamos a ver este efecto. Como pueden ver, tengo el valor asignado en ambos, pero no lo tengo deshabilitado. Entonces yo aquí podría, estoy permitiendo que mi usuario decida que lo quiere quitar, aunque en el evento anterior sí está ahí. Claro, cuando vuelvo a ejecutarse la regla, como lo va a haber vacío, lo va a asignar otra vez, o sea que se vuelva a ejecutar mi regla. Entonces, vamos. Reslemos ese valor o esa regla a su condición original. Entonces, cambiamos esto, modificar las reglas para, creo que esto es sencillo, vayamos aquí a nuestra regla. Entonces, asignar una fecha sugerida, lo vamos a hacer aquí, yo lo voy a hacer sobre la moderna y qué es lo que hace. Aquí no le ha asignado una prioridad, aquí siempre debemos tener una prioridad y qué es lo que me dice. Si la vacuna es moderna y no es la última dosis, entonces, que me calcule el número de días y asigné la fecha para la fecha sugerida para la próxima dosis. Aquí vamos a decir que en vez de 28 días vamos a cambiarlo y yo voy a decir que en vez de 28 que me van a 40 días. Vamos a revisar cómo está ejecutando esa regla. Entonces dije que iba a utilizar moderna. Y siempre que la dosis no sea la última, voy a decir que es la primera dosis, que me calcule la fecha. Aquí dijimos, estaba sumando 28 días a la fecha del evento. Por lo tanto, podemos ver que me sugiere que es el 22 de junio, porque la primera dosis se aplicó el 25 de mayo. Vamos a cambiarlo a 40 días y dijimos que esta era moderna. Ok, vamos a guardar. Borramos caché, como siempre. Cierro, como podrán ver, la costumbre de cerrar estos stars del sistema para no tener problemas con la carga de metadatos y digamos que es lo que ha ocurrido. Aquí podrán ver que la siguiente dosis me ha cambiado la fecha de acuerdo al número de días que yo he puesto en mi regla. Y por supuesto, el mensaje ya no es coherente porque me sigue diciendo que son 28 días cuando en realidad deberían de ser 40, como yo no he puesto en mi regla, pero yo no cambié aquí este mensaje. Entonces, este sería el tercer ejercicio. Entonces, en mi tercer ejercicio, que fue lo que hice, la regla que calcula. Entonces, yo elegí moderna, que decía en la condición, vamos a verlo nuevamente. Aquí tenemos esta función predefinida que dice agregar días updates a la fecha del evento. Como pueden ver, las variables predefinidas o integradas en el sistema que inician con la letra de mayúscula. Entonces, la fecha del evento yo decidí agregarle 40 días. Y para completar este cambio, tendría que, en la advertencia, tendría que modificar el texto y ponerle aquí 40 días también. Recuerda, y con eso ya queda listo. Con eso ya queda lista en mi regla. Ok, pues por favor, hagan sus tres ejercicios y envíenos captura de pantalla y una breve explicación de lo que hicieron en cada una de las reglas. ¿Por qué decidieron hacerlo así? No olviden que tenemos un quiz también, que lo vamos a habilitar ya para el día de hoy. Y por favor, marquen su asistencia para el día 4 y estaremos pendientes para cualquier duda que tenga. Seguimos por aquí. Tenemos alguna pregunta. No veo ninguna pregunta en el chat. Vamos a ver si aparece algo en Slack. Un comentario que vamos a hacer. Los reloj sobre eso. Lo que sí que es importante decirle es que mañana vamos a hacer un poco un repaso de esto también. O sea que si se quedan atascados bueno, pregunten en el Slack y sería bueno que se pense pueden ayudar un poco entre ustedes, ¿verdad? Pero, pero, pero, pero si mañana vamos a repasar un poquito esto y podemos contestar alguna pregunta más si aparece. ¿Verdad, Juan Manuel? Porque sabemos que el Program Rules es bastante, que puede ser un poquito complicado. Puede ser ligeramente complicado, ¿verdad? Exactamente. Bueno, tenemos todavía una hora para la sesión de hoy. Así que yo lo dejo abierto las preguntas. Unos minutos en lo que voy configurando aquí una variable. Voy a decir que quiero evaluar el elemento de datos en el evento actual. Si quiero evaluar si hay sabios preficientes. Tenemos una reacción. Tenemos estos datos los han agregado con Marco. Entonces tenemos que si hay un si es la respuesta si o no, ¿verdad? Entonces, yo quiero evaluar precisamente el 7 variable y crear entonces una regla. Probablemente lo voy a hacer construir la ejecución dentro del evento es lo que quiero hacer ahora. Quiero ocultar la explicación de la reacción adversa. Si mi prioridad es 2 o 3 voy a buscar mi variable que acabo de configurar. Y como es un elemento de datos de tipo si no, sabemos que internamente el código debería de dar a verdadero o falso. Por lo tanto, le voy a evaluar a que si el valor sea distinto de verdadero. Por lo tanto, si no tengo valor o la respuesta es no. Que oculte la explicación de Sabi. Vamos aquí al acción. Voy a decir que oculte la opción. Perdón, que oculte un campo. No una opción. Quiero ocultar la explicación de Sabi. Ya lo he abordado. Revisamos qué ha pasado. Tengo una respuesta de nuevo. Por lo tanto, la explicación ya no está. Si yo borro el valor no me lo muestra. Si yo le digo que sí ahora me muestra el campo de explicación. Listo. Bueno, pues esto por terminar la sesión. Si no tenemos más preguntas. Alguna duda que tengan ustedes. De todos modos como les ha comentado. Enzo. Estamos disponibles en Slack. Si tienen alguna consulta o si tienen alguna pregunta con respecto algún problema con respecto de los ejercicios de día de hoy. Yo voy a actualizar el documento de los ejercicios porque tenemos el ejercicio de los valores de anteriores. Pero que lo lo actualizaremos con el cambio que hicimos aquí. El número de días para que este es el ejercicio. El ejercicio. Entonces. Por favor. Incluyanos sus capturas de pantalla de la regla que hayan configurado y una breve explicación en el documento que nos envíen sobre lo que hicieron tipo lo que yo he capturado aquí. A la hora de estar haciendo el ejercicio y evaluar lo que quiero cumplir con mi regla. Incluyanlo por favor. Genial, Juan Manuel. Yo creo que las reglas de programas son una de las cosas que tardan un poquito más, pero más que nada es lógica, es pensar, es probar un poquito y ver qué es lo que sale, ¿verdad? Pero con un poquito de práctica, no enseguida se sale bien. Pero una vez que uno lo maneja bien puede hacer un montón de cosas muy interesantes con los programas. Así que recomiendo usar un poquito de tiempo para aprenderlas del todo. Listo, pues muchas gracias. Con eso ya hemos terminado siempre el día de hoy. Pero como os he dicho, quedamos el pendiente.