SIP PLUS - DESARROLLO DE REPORTES¶
Indicadores¶
La definición de indicadores se realiza dentro del archivo Indicators.scala, que se encuentra en la carpeta SIPMobile\app\src\main\scala\org\paho\sip\app\services\indicators
En ese archivo la definición del indicador incluye lo siguiente:
"00753" -> Indicator(
// ((var_0114='C' AND (var_0421<>'B')) AND var_0343='B')
(v"0114" === 2 && (v"0421" =!= 1)) && v"0343" === 1,
Name(Spanish -> "Prueba >= 20 semanas se desconoce para RN con VDRL+"),
Description(Spanish -> "SE DESCONOCE", English -> "UNKNOWN"),
Detail(
Spanish -> "Prueba >= 20 semanas se desconoce para RN con VDRL+",
English -> "Test >= 20 weeks not known for newborn with VDRL+"
)
),
La primera línea contiene el número de indicador (5 cifras), la segunda la condición para calcularlo y luego se pone el texto que lo describe en todos los idiomas en los que se disponga el texto, en tres secciones diferentes:
- Name: nombre del indicador
- Description: descripción “corta” (la que aparece en primera columna de las tablas de los informes)
- Detail: Descripción detallada (la que aparece al posicionar el mouse sobre el indicador en los informes) Para la definición del indicador se dispone de algunas funciones que se pueden aplicar a las variables, como por ejemplo .max, .isEmpty, etc.
Cálculos entre indicadores¶
Es posible realizar cálculos entre indicadores, para el cálculo de porcentajes, tasas y cualquier otra operación. Estos cálculos se colocan en el archivo IndicatorOperations.scala, que se encuentra en la misma carpeta que contiene a Indicators.scala.
Se especifica el indicador resultante, luego el símbolo -> y a la derecha la operación entre indicadores que se realizará. A modo de ejemplo, para el cálculo de porcentajes y tasas:
"00648V" -> i"00648" / i"10168" * 100,
"00608T" -> i"00608" / i"00682" * 1000,
Para los denominadores, existen funciones que retornan la cantidad registros en cada uno de los tres niveles en los que está organizado el diccionario de variables:
- MOTHERS = Cantidad de mujeres
- PREGNANCIES = Cantidad de embarazos
- NEWBORNS = Cantidad de recién nacidos
Para el cálculo de porcentajes no se usan estos denominadores porque existe una función llamada Percentage() que calcula el porcentaje de un indicador cualquiera. Esta función determina automáticamente cuál de los 3 denominadores utiliza, de acuerdo a los indicadores que se usan en el numerador. A modo de ejemplo, si alguno de los indicadores del numerador utiliza variables de recién nacido (grupo “child” del diccionario), automáticamente tomará NEWBORNS como denominador.
Por eso los porcentajes comunes no están en este archivo de operaciones entre indicadores. Solo están los porcentajes que llevan un denominador especial, más restrictivo.
Otro ejemplo de operaciones puede ser una resta:
"01316R" -> (PREGNANCIES - i"10167" - i"00627" - i"00626" - i"00625"),
En este caso además se utiliza la función PREGNANCIES como operador en la resta, valor al cual se le restan los otros indicadores.
Armado del reporte¶
Todos los reportes son archivos .scala cuyo nombre es GestionXXX.scala, donde XXX es un número correlativo desde 001 hasta (hoy en día) 017. La excepción es el de estadísticas básicas del SIP, que se llama EstBasica.scala.
El menú de los reportes está en un archivo llamado Reportes.scala que se encuentra en la carpeta SIPMobile\app\src\main\scala\org\paho\sip\app\services\indicators\reports. El orden en el que están ubicados en ese archivo es el oren en que aparecen en el menú.
En cada reporte podemos distinguir los siguientes elementos:
La primera línea contiene el nombre del reporte y la llamada a una función Report en la cual se le pasa el identificador del mensaje título del reporte, el subtítulo y el país al que corresponde, por ejemplo en el de Reordenamiento Hospitalario de Honduras es:
object Gestion006 extends Report("1050", "", customization = "HN")
(
Los mensajes en todos los idiomas se encuentran en el archivo ReportMessages.scala que está también en la carpeta SIPMobile\app\src\main\scala\org\paho\sip\app\services\indicators\reports
Los reportes en sí están en una subcarpeta definitions de la carpeta anterior.
Cada uno de los reportes contiene diversas tablas con los datos de los indicadores. Entre las tablas pueden haber títulos y subtítulos que se ponen con las funciones:
Header(«1051»)
SubHeader(«0552»)
En ambos casos el parámetro es un número de mensaje del archivo ReportMessages.scala
Las tablas se arman con una función Table() que dentro utiliza funciones para el encabezado, cuerpo y pie de la tabla (THead()), TBody() y TFoot())
Table(
THead( ….
TBody(
…......
),
TFoot()
),
Dentro de la función THead() se llama a la función TRHead() para cada uno de los títulos de las columnas. La función HMessage() pone mensajes si se pone un código, o un espacio en blanco (columnas sin t´titulo) si se la llama sin parámetros.
Ejemplo:
THead(TRHead(HMessage(), HMessage("0100"), HMessage("0367"), HMessage("0368"))),
Dentro de la función TBody() se incorporan todas las filas de la tabla utilizando una función TR() para cada una. Dentro de las columnas se puede utilizar las siguientes funciones:
**Description() **– Muestra la descripción corta de un indicador (campo Description() del indicador)
**Message() **– Pone un mensaje del archivo de mensajes
**Indicator() **– Pone el valor del indicador
**Operation() **– Pone el resultado de la operación, sacado del archivo IndicatorOperations.scala, con una cantidad de decimales
**Percentage() **– Pone el porcentaje del indicador (el denominador lo deduce de acuerdo a las variables que lo componen
**Text() **– Pone un carácter
Ejemplo:
TBody(
TR(Description("00978"), Indicator("00978"), Percentage("00978"), Operation("00978V")),
TR(Description("00979"), Operation("00979R", 0), Operation("00979T"), Operation("00979V")),
TR(Message("0105"), Indicator("10592"), Percentage("10592"), Text("-"))
),
Finalmente, dentro de la función TFoot() se coloca el contenido de la última fila de la tabla. Las columnas se especifican mediante la función TRFoot(). Dentro de esta función se puede utilizar la función Empty() que deja columnas sin contenido, y la función Total() a la cual se le pasa un código de mensaje y un indicador para que los ponga dentro de la columna, con un signo de “=” entre ellos.
Ejemplo:
TFoot(TRFoot(Empty(2), Total("0103", "PREGNANCIES"), Total("0104", "10593")))
De esta forma se agregan todas las tablas que componen el reporte.