Validaciones en formularios

Mientras se ingresan los datos en las historias clínicas, es posible validarlos

Las validaciones pueden ser individuales para cada variable (por ejemplo, validaciones de rango correcto) o pueden incluir varias variables, utilizando sus valores para realizar validaciones cruzadas.

Las validaciones van en el archivo Validators.scala, que se encuentra en la carpeta SIPMobile\app\src\main\scala\org\paho\sip\app\services\validation

Se indican la o las variables que provocan que se haga la validación y luego la validación y el mensaje que saldrá, en el siguiente formato:

("0013", "0014") -> { implicit doc =>
  iif("0013".int === 0 && "0014".int > 0) {
    Warning("0014", Spanish -> "No debe definirse si no tiene estudios.", English -> "Must not be defined if there are no studies.")
  }
},

Esta validación se dispara al pasar por las variables 0013 (estudios) y 0014 (años de estudio en el mayor nivel) del SIP standard o near miss. Se valida que si se puso que no tiene estudios (variable 0013=0) no se pueden indicar años en el mayor nivel. La función Warning que se llama indica el mensaje de error en el idioma que corresponda, y el mensaje sale sobre fondo amarillo.

Las validaciones de rango correcto utilizan para mostrar el mensaje de error la función Alert(), que pone el mensaje sobre fondo rojo. Por ejemplo, para la presión arterial sistólica:

// PA sistólica
"0121" -> { implicit doc =>
  iif("0121".int < 95 || "0121".int > 139) {
    Alert("0121", Spanish -> "La PA sistólica debe estar entre 95 y 139 mmHg", English -> "The systolic BP should be between 95 and 139 mmHg")
  }
},

Para las validaciones de fechas se han implementado algunas funciones que detectan si la fecha es correcta o no y otras:

"0051" -> { implicit doc =>
  iif(!"0051".date.isValid) {
    Warning("0051", Spanish -> "Fecha incorrecta", English -> "Invalid date")
  }
},
"0051" -> { implicit doc =>
  iif("0051".date > Date.today) {
    Warning("0051", Spanish -> "La fecha no puede superar la fecha actual", English -> "Date must not be after current date")
  }
},

Más ejemplos de validaciones cruzadas:

"0321" -> { implicit doc =>
  iif("0321".int > 0 && "0282".int =!= 0) {
    Warning("0321", Spanish -> "Revisar valores Apgar 1er minuto y variable Nacimiento", English -> "Review values Apgar 1st minute and variable Birth")
  }
},

("0039", "0040", "0041", "0046", "0409") -> { implicit doc =>
  iif(("0040".int =!= ("0041".int + "0046".int + "0409".int)) && ("0039".int === 0 || "0039".isEmpty)) {
    Warning("0040", Spanish -> "Debe ser igual a la suma de abortos + partos + embarazos ectópicos", English -> "It must be equal to the sum of abortions + deliveries + tubal pregnancies")
  }
},
("0040", "0051") -> { implicit doc =>
  iif("0040".int =!= 0 && "0051".date.isEmpty) {
    Warning("0051", Spanish -> "Si tiene gestas previas, la fecha de fin de embarazo anterior debe completarse", English -> "If have previous gestations, the end date of previous pregnancy must be completed")
  }
},
("0042", "0046", "0047") -> { implicit doc =>
  iif("0046".int =!= ("0042".int + "0047".int)) {
    Warning("0046", Spanish -> "Debe ser igual a la suma de vaginales + cesáreas.", English -> "It must be equal to the sum of vaginal + caesarean sections.")
  }
},

Para el reverso de la historia de SIP NM se generaron validaciones para las variables de resumen. Si marcan «NO» en la variable resumen, automáticamente se marcan en «NO» todas las variables individuales y si alguna es marcada como «SI» le salta la validación, por ejemplo:

("0258", "0650", "0260", "0651", "0261", "0498", "0652", "0653") -> { implicit doc =>
  iif("0258".int === 0 && ("0650".int === 1 || "0260".int === 1 || "0651".int === 1 || "0261".int === 1 || "0498".int === 1 ||
    "0652".int === 1 || "0653".int === 1)) {
    Warning("0258", Spanish -> "Está marcado como 'no' pero hay algún trastorno marcado como 'si'", English -> "It is marked as 'no' but there is some disorder marked 'yes'")
  }
},

Finalmente, para las validaciones de rangos no es necesario especificar mensaje de error porque hay una función que lo hace. Por ejemplo, para edad materna:

"0009" -> { implicit doc =>
  iif("0009".int < 10 || "0009".int > 55) {
    Warning("0009", outOfRange: _*)
  }
},