Ferramentas de usuario

Ferramentas do sitio


informe_estado_establo

Con este informe vamos a obtener información sobre el estado de la explotación, así como algunos gráficos.

El botón que genera está en Reproducción → Informes → Informes RE, el id de referencia es impEstadoEstablo, el id del informe es admin/central/102. La interfaz está definida en client/principal/f_informes_RE.xml.

La ejecución comienza impEstadoEstablo.addActionListener

  1. Primero obtenemos los registros de los animales que tenemos en la tabla de la interfaz de Informes RE
  2. Consultamos la entidad EAnimales para obtener los registros de la base de datos para los animales de la explotaión que no estén de baja o que la baja sea posterior a la fecha en la que se consulta
  3. Con estos datos conformamos un Hashtable y hacemos una consulta a la entidad EEstado_Establo con el flag de consulta estadoestablo con valor si
  4. Con este flag se nos ejecuta el método fai_informe
  5. Primero obtenemos los valores del nombre, el apellido y el móvil de la tabla de Técnicos
  6. Inicializamos las variables que tienen la información para el informe
  7. Comenzamos a iterar por todos lo animales
  8. Buscamos el registro más reciente del historial de un animal que fue registrado en o antes de la fecha de consulta.
  9. Si el registro existe obtenemos los campos “fecha_parto”, “fecha_secado”, “fecha_baja”, “fecha_ins_fecundante”, “tipo”, “estado” y “n_inseminaciones”
  10. Si el tipo de animal es “Vaca” y el estado no es “Seca” ni “Cebo”, entonces se evalúan más condiciones. Si el estado es “Baja”, entonces se calcula la diferencia de días entre la fecha del último parto y la fecha de baja del animal. Si no es “Baja”, entonces se asigna DEL a la diferencia de días entre la fecha del último parto y la fecha actual. Si el estado es “Cebo” y es “Baja”, entonces se asigna DEL a la diferencia de días entre la fecha del último parto y la fecha de baja del animal. Los resultados de estas operaciones se suman a la variable media_del y se incrementa el contador conta_del para calcular la media de estas diferencias más adelante.
  11. Ahora si el animal es una vaca, y es su primera lactación entonces en dependencia de su estado vamos contando en los arrays que declaramos en el principio, y así vamos contando para cada número de lactación
  12. También vamos contando animales por tramos de DEL como DEL
  13. Rellenamos un Hashtable con las variables calculadas y lo insertamos en la tabla gnd_inf_estado_establo
  14. A continuación ejecutamos el método fai_media_del que lo que nos hace es insertar en gnd_inf_estado_establo. Rellnamos un Hashtable con los valores “user_”, “id_explotacion”, “propietario”, “cea”, “tecnico”, “movil”, “fecha_inf”, además de estos campos “tipo”, “total”, “2parto”, “3parto”, “4parto”, “5parto”, “media” a cero. A continuación el rellenamos los campos “1parto” y estado en dependencia de el tramo en el que se encuentra la media de DEL, si por ejemplo la media de días en leche está entre 30 y 60 días, entonces los valores serían “1parto”=media_del y estado=“30-60 del”
  15. A continuación ejecutamos el método fai_indices
  16. Este método primero vacía los registros de gnd_inf_indices_abreviado para el presente usuario.
  17. Luego creamos dos variables con la fecha de consulta y la fecha de un año atrás y se las pasamos el método captura_datos_repro
  18. Dentro de este método primero vamos a consultar en la entidad EHistorial_indices con el flag “indices” en “si” y le pasamos los argumentos: “id_explotacion”, “animales”, “fech”, “fecha”, “fech_ini”, “fecha_ini”, “fech_fin”, “fecha_fin”, “vac_gest”, “med_del”, “vac_prob”, “par_1_ins”, “par_ins_fec”, “ferti”, “int_par_par_i”, “int_par_ins_f”, “int_par_par_p”, “int_par_par”, “edad_par”, “dias_sec_par”, “por_par_prem”, “por_abortos”, “por_repos”, “por_elim”, “por_bajas”, “por_ani_per”, “por_ani_gan”, “por_vac_sec”, “por_vac_sec_a”, “edad_ins_1”, “por_nov_pre”, “edad_ins_fec”, “edad_par_pre”, “nov_pro”, “int_ins”, “nov_ret”, “ferti_nov”, “por_abortos_nov”, “nov_pro_ins”, “nov_pro_mes”, “nov_ret_mes”, “nov_ret_kil”, “nov_ret_cm”, “con_cor_per”, “con_cor_gan”, “por_abortos_int”, “por_abortos_nov_int”, “por_bajas_nov”, “por_bajas_int” y “por_bajas_nov_int”. Estos argumentos los utilizamos más adelante para decidir que cálculos utilizar.
  19. Con estos argumentos ejecutamos el método fai_indices
  20. Dentro de este método inicializamos las variables numero_ani, numero_vac, numero_vac_baj, numero_nov, numero_nov_baj, fecha_alta, fecha_nac, fecha_1_parto, edad_1_parto
  21. Ahora consultamos EExplotaciones para obtener los datos días de secado previsto, días de parto previsto y días de primer parto previsto
  22. Luego ejecutamos el método inicializa varibles que nos rellena las variables globales que tenemos declaradas que tiene la información que utilizará el informe
  23. Inicializamos más arrays que tendrán más información del informe
  24. En este caso en el código miramos si la variable rse2 no está vacía y ejecutamos un bloque de código, como en este caso no utilizamos esa variable, entonces ignoramos este bloque y vamos directamente al siguiente
  25. Ahora comenzamos a iterar sobre los resultados del rse que contiene la consulta de los animales del paso 2
  26. Para cada animal sobre el que iteramos buscamos primero la información de técnico, el administrador o el ganadero.
  27. Luego consultamos la tabla historial animales para la última acción antes de la fecha y que no sea ni mamitis ni baja
  28. De esta acción obtenemos la fecha de parto, la fecha de baja, la fecha de secado, la fecha de secado previsto, la fecha de parto previsto y la fecha de alta
  29. Ahora vamos a distinguir entre los argumentos que mencionamos en el paso 18, entonces vamos a ejecutar las siguientes acciones
  30. Comprobamos que la línea de historial sea de una Vaca y que no esté Seca ni sea Gestante. En dependencia del número de lactación contamos en el número de partos.
  31. Obtenemos la diferencia de días entre los días de inseminación fecundante y los días de parto previsto
  32. Si existe el día de inseminación fecundante entonces
  33. Si la fecha de inseminación fecundante es posterior a la fecha de parto, entonces
  34. Si no hay aborto, entonces vamos contando las vacas paridas y la cantidad de días de días desde el parto en dependencia de la diferencia entre los días de inseminación fecundante y los días de parto previsto de menor a 330, entre 330 y 349, 350 y 369, 370 y 399, 400 y 430 y de 431 en adelante. También sumo vacas gestantes.
  35. Si hay aborto entonces hago lo mismo pero comparo la fecha de inseminación fecundante con la fecha de aborto
  36. Ahora comprobamos las vacas con problemas, para ello primero hallamos los días en leche y si es más de 150 y su estado no es ni Descarte, ni Seca, ni Cebo, ni Gestante, entonces las contamos en dependencia del número de lactación.
  37. A continuación vamos a ejecutar otro bloque en el que primeramente comprobamos que exista fecha de primera inseminación y que exista la fecha del último parto, si la fecha de primera inseminación es posterior a la fecha del último parto, entonces continuamos
  38. Obtenemos los días en leche y vamos rellenando las variables del informe en dependencia del número de lactación en el que nos encontramos y de los días de parto de la primera inseminación
  39. A continuación vamos a ejecutar otro bloque en el que primeramente comprobamos que exista fecha de inseminación fecundante y que exista fecha de último parto
  40. Si la fecha del último parto es posterior a la fecha de inseminación fecundante continuamos
  41. En función de varias condiciones, calculamos los días en leche como la diferencia de días entre fecha del último parto y la fecha de baja;
  42. Ahora continuamos contando las vacas inseminación fecundante en función del número de lactación y los días de inseminación fecundante
  43. Si hay aborto, comprobamos que la fecha de inseminación fecundante es posterior a la fecha de aborto, si es así entonces calculamos los días en leche contamos las vacas inseminadas fecundantes en base al número de lactación y también en base a la diferencia de días.
  44. Ahora ejecutamos el bloque de código que tenemos en el flag 'int_par_par', que lo que hace es calcular la cantidad de vacas clasificadas por rango de días entre parto y parto
  45. Ejecutamos el bloque de código que tenemos en el flag 'edad_par', este bloque nos cuenta los animales clasificados por edad.
  46. Ejecutamos el bloque de código que tenemos en el flag 'dias_sec_par'. Aquí contamos las vacas secas por número de lactación.
  47. Ejecutamos el bloque de código que tenemos en el flag 'por_par_prem'. En este bloque de código consultamos la tabla de acciones animales para el animal que estamos iterando y para las acciones del tipo Parto entres las fecha inicial y final, en este caso un año atrás, vamos iterando entre estas acciones y rellenamos los valores de partos, partos muerta, partos hembra, partos macho.
  48. Vamos a ejecutar el bloque de código que tenemos luego del if que chequea el flag 'por_abortos' o 'por_abortos_int'. Primero con consultamos nuevamente la tabla de acciones animales para las acciones del animal en la fecha inicial y final y que sean del tipo aborto, luego iteramos mes por mes de los resultados. Luego vamos agrupando los abortos por tercio y también por número de lactación.
  49. Ahora se ejecuta el bloque de código que se activa por el flag 'por_repos', 'por_bajas', 'por_bajas_nov', 'por_bajas_int' o por 'por_bajas_nov_int'. Consultamos los datos de la acción de parto que corresponde al primer parto, entra la fecha inicio y fin
  50. Si hay resultados contamos esos animales como vacas, s no hay resultado, comprobamos que la fecha de alta está entre la fecha inicio y fin, y si es así la contamos como vaca
  51. Si el animal que estamos mirando no es vaca entonces la contamos como novilla
  52. Pasamos ahora al bloque que se nos ejecuta con el flag activado de 'edad_ins_1'
  53. Si el animal es Novilla, consultamos la última acción de reproducción que consta en gnd_historial y en gnd_acciones_animales que es del tipo 'Inseminación'
  54. Si existe un resultado, entonces en función de la edad de la novilla se van contando.
  55. Ejecutamos el bloque de código que se activa con el flag 'edad_ins_fec'
  56. Si el animal es de tipo novilla y es 'Gestante' entonces
  57. Obtenemos la fecha de inseminación fecundante, luego obtenemos los datos de la acción para esa fecha y si devuelve resultados, entonces atendiendo a la edad de la novilla las vamos contando de forma agrupada.
  58. Ejecutamos el bloque de código que se activa con el flag 'edad_par_pre'
  59. Aquí vamos contando los animales que sean Novillas, Gestantes y que tengan edad de parto previsto, las contamos por grupos de edad menor de 24 meses, igual a 25 meses, 26 meses, 27 meses o mayores que 27 meses.
  60. Ejecutamos el bloque de código que se activa con el flag 'por_abortos_nov'
  61. En este bloque primero comprobamos si es Novilla, luego buscamos si hay una acción que incluya aborto entre las fechas de inicio y fin para el animal, contamos los agrupados por cada mes, mirando los 12 últimos meses. Además también se agrupan por el Tercio del aborto.
  62. Ejecutamos el bloque de código que se activa con el flag 'ferti'
  63. Primeramente generamos unos arrays de meses y años entre fecha_ini y fecha_fin, donde cada entrada representa el mes y el año de una fecha incrementada por un mes desde fecha_ini.
  64. Ahora comenzamos a recorrer estos arrays y lo que hacer que estemos iterando por los meses del paso anterior
  65. En cada mes miramos el historial del animal para el mes de iteración que sea del tipo inseminación
  66. Recorremos el resultado de la consulta anterior. Si el animal es una Vaca, que tengo fecha de ultima inseminación, y que el estado sea Vacía, en base a esto se crea una matriz para contar los animales en función de el número de inseminación y el mes en el que estamos iterando.
  67. Consultamos para este mismo mes el historial para las acciones de diagnóstico de gestación y si hay resultados, entonces creamos otra matriz con el conteo de animales atendiendo al número de inseminación y al mes en el que estamos iterando.
  68. Si el animal no es una Vaca entonces creamos la mismas matrices que en los pasos anteriores pero para las novillas.
  69. En el paso 27 si no obtenemos resultados de la consulta del historial, entonces hacemos los siguientes pasos.
  70. Primero consultamos si es una vaca y la contamos si es el caso, si no la contaos como novilla
  71. Ejecutamos el bloque de código que se activa con el flag 'por_bajas'
  72. Aquí vamos iterando sobre la matriz v_vac_baj, y rellenamos las variables que guardan lo porcentajes de bajas.
  73. Luego calculamos otras variables de porcentajes de partos.
  74. Luego como tenemos activado el flag 'por_bajas' se nos ejecuta el bloque de código correspondiente, que lo que hace es añadir un registro al EntityResult que vamos a devolver con el contenido del hashtable que devuelve el método fai_vac_baixas que nos crea un hashtable con los campos “texto_sup”, “tit_numero_ani”, “tit_inter_1”, “tit_inter_2”, “tit_inter_3”, “tit_inter_4”, “tit_inter_5”, “tit_inter_6”, “indice”, “resultado_indice”, “numero_ani”, “numero_ind_1”, “por_ind_1”, “numero_ind_2”, “por_ind_2”, “numero_ind_3”, “por_ind_3”, “numero_ind_4”, “por_ind_4”, “numero_ind_5”, “por_ind_5”, “numero_ind_6”, “por_ind_6”, “tipo”, “accidente”, “mamitis”, “repro”, “patas”, “prod”, “enfermedad”, “voluntaria”, “muerte”, “edad”, “venta”, “propietario”, “cea”, “fecha_inf”, “fecha_ana”, “aux1”, “aux2”, “aux3”, “tecnico”, “telefono” que obtuvimos en los pasos anteriores.
  75. Ejecutamos el bloque de código que se activa con el flag 'ferti_nov'
  76. Dentro de este bloque comenzamos recorriendo los arrays v_nov_ges_f y v_nov_inse_f para rellenar los valores de por_gesf, por_partof, fmedia_del que son valores medios y porcentuales.
  77. Luego estos valores se lo pasamos la función fai_ferti_nov_fec y no se devuelve un hashtable con los valores “texto_sup”, “tit_numero_ani”, “tit_inter_1”, “tit_inter_2”, “tit_inter_3”, “tit_inter_4”, “tit_inter_5”, “tit_inter_6”, “indice”, “resultado_indice”, “numero_ani”, “numero_ind_1”, “por_ind_1”, “numero_ind_2”, “por_ind_2”, “numero_ind_3”, “por_ind_3”, “numero_ind_4”, “por_ind_4”, “numero_ind_5”, “por_ind_5”, “numero_ind_6”, “por_ind_6”, “tipo”, “propietario”, “cea”, “fecha_inf”, “fecha_ana”, “aux1”, “aux2”, “aux3”, “tecnico”, “telefono” y luego se lo pasamos al EntityResult que devolveremos.
  78. A continuación calculamos los porcentajes de novillas gestantes fecundadas para cada uno de los 6 meses para los que se obtuvieron datos.
  79. Ejecutamos la función fai_ferti_nov_fec similar a los pasos anteriores pero le pasamos el número de vacas y nos devuelve una hashtable el cual le pasamos al EntityResult que devolveremos.
  80. Ejecutamos el bloque de código que se activa con el flag 'ferti'.
  81. En este bloque calculamos los porcentajes de fertilidad para las vacas, con estos datos calculados se los pasamos el método fai_ferti_nov_fec para luego añadirlo al EntityResult que devolveremos. También hacemos lo mismo para los porcentajes de partos.
  82. Ejecutamos el bloque de código que se activa con el flag 'por_abortos_nov'.
  83. En este bloque los que calculamos es el porcentaje de abortos en novillas por tercios y por edad, tanto con el total de abortos por tercios, como analizando por tercio específico y edad.
  84. Ejecutamos el bloque de código que se activa con el flag 'edad_par_pre'.
  85. En este bloque primero calculamos la media de la suma de las edades de animales con parto previsto. Luego hacemos lo mismo para cada novilla para las edades de 24, 25, 26 y 27 meses. Le pasamos estos valores al método 'fai_edad_par_pre' que no devuelve un hashtable con estos valores para luego añadirlo al EntityResult que devuelve la función.
  86. Ejecutamos el bloque de código que se activa con el flag 'edad_ins_fec'. Aquí hacemos las mismas operaciones que en el paso anterior pero para las edades de las novillas fecundadas en las edades de entre 14 y 15, 16 y 17, 18 y 19, 20 y 21 y mayor de 21 meses.
  87. Ejecutamos el bloque de código que se activa con el flag 'por_abortos'. En el que calculamos los porcentajes de abortos e insertamos el resultado del método fai_abort_vac1 en el EntityResult que devolveremos
  88. Ejecutamos el bloque de código que se activa con el flag 'por_par_prem'. Aquí calculamos los porcentajes de partos prematuros.
  89. Ejecutamos el bloque de código que se activa con el flag 'dias_sec_par'. Este bloque calculamos las medias de días de vacas secas, tanto en el total como agrupadas por lactación.
  90. Ejecutamos el bloque de código que se activa con el flag 'edad_par'. Calculamos primeramente la edad media de parto en general y agrupada por mes de parto. Lo hacemos también por lactación. Luego estos datos lo pasamos al método fai_edad_par1 que nos devuelve un hastable que pasamos al EntityResult que se va a devolver.
  91. Ejecutamos el bloque de código que se activa con el flag 'int_par_par'. Calculamos la media de las vacas clasificadas por rango de días entre parto y parto.
  92. Ejecutamos el bloque de código que se activa con el flag 'int_par_par_p'. Con este bloque calculamos la media de diferencias de días entre fecha de inseminación fecundante y fecha de parto previsto.
  93. Ejecutamos el bloque de código que se activa con el flag 'int_par_par_f'. Con este bloque calculamos la media de diferencias de días entre fecha de inseminación fecundante y fecha de parto previsto también con referencia al los aborto.
  94. Ejecutamos el bloque de código que se activa con el flag 'par_ins_fec'. Con este bloque calculamos el porcentaje de vacas con inseminación fecundante después de un aborto para cada lactación.
  95. Ejecutamos el bloque de código que se activa con el flag 'par_1_ins'. Con este bloque calculamos las medias de partos de primera inseminación.
  96. Ejecutamos el bloque de código que se activa con el flag 'vac_prob'. Aquí sacamos los porcentajes de vacas con problemas.
  97. Con todos estos datos devolvemos el EntityResult al método captura_datos_repro.
  98. A continuación creamos un hashtable con los valores de captura_datos_repro y lo vamos insertando en la entidad EInf_indices_reproductivos_abreviado
  99. Luego ejecutamos el método fai_media_del_1_ia en el que insertamos los datos de las medias de DEL de la primera inseminación en la entidad EInf_indices_reproductivos_abreviado
  100. Ahora ejecutamos el método de fai_ritmo_prenez, en el que hacemos lo siguiente.
  101. Primero borramos el contenido de la tabla gnd_inf_pulsografo
  102. Hacemos una consulta a la entidad EHistorial_indices pero como no tenemos el flag de 'indices' entonces no ejecutamos la mayoría del bloque de código, por lo que este método devuelve un EntityResult vacío.
  103. Dado que el EntityResult que devuelve es vacío no ejecutamos el siguiente bloque de código.
  104. A continuación como no tenemos ningún dato en la tabla de gnd_inf_pulsografo entonces no se realizan más operaciones para este método
  105. Ejecutamos ahora el método fai_ritmo_prenez_novi en el que hacemos los siguiente
  106. Primero borramos el contenido de la tabla gnd_inf_pulsografo
  107. Hacemos una consulta a la entidad EHistorial_indices pero como no tenemos el flag de 'indices' entonces no ejecutamos la mayoría del bloque de código, por lo que este método devuelve un EntityResult vacío.
  108. Dado que el EntityResult que devuelve es vacío no ejecutamos el siguiente bloque de código.
  109. A continuación como no tenemos ningún dato en la tabla de gnd_inf_pulsografo entonces no se realizan más operaciones para este método
  110. Ahora ejecutamos el método fai_dias_seca que ocurre lo mismo que en el método anterior.
  111. Seguimos insertando datos en la entidad EInf_indices_reproductivos_abreviado
  112. Luego le pasamos estos datos al EntityResult del método captura_datos_repro y a su vez terminamos el métodos fai_indices
  113. Con esto terminaríamos la parte del query de la entidad EEstado_establo
  114. Ya con estos datos se los pasamos al método generador de informes
informe_estado_establo.txt · Última modificación: 2023/04/25 16:17 por admin