socialappslab / denguechat

Using mobile phones and gaming tactics to engage citizens in reporting public health risks
https://www.denguechat.org/
Other
0 stars 0 forks source link

Sync worker for ODK forms v1 (for TopaDengue ODK form) #837

Closed cdparra closed 5 years ago

cdparra commented 6 years ago

Given a spreadsheet produced by a ODK Entomological Community form, implement a worker that

  1. Translates the data in the ODK form into DengueChat CSV
  2. Imports the produced CSV into DengueChat, firing the update of charts generation.
  3. Marks the data that was already synced in the spreadsheet

TopaDengue Spreadsheet produced by ODK form for TopaDengue (the URL to this spreadsheet should be a parameter)

Obs.: if it is easier to directly upload the data to DengueChat (without first producing the DengueChat CSV and then importing this CSV, let's follow this path instead). See comments for all the details on how to map data into DengueChat (in spanish).

cdparra commented 6 years ago

Se creó una nueva versión del formulario de relevamiento entomológico que permite cargar múltiples visitas y múltiples criaderos por visita. La última versión del spreadsheet donde se carga es la siguiente

SPECS de la planilla resultante de ODK

1. Hoja Sheet 1 = mapear a locations existente

La hoja Sheet 1 contiene la información de la casa. En DC, cada casa es un registro en la tabla locations cuya columna address contiene el ID que utilizamos para identificar a las casas. Todos los IDs tienen la siguiente forma MMMMMCCCT donde MMMMM es un número de 5 cifras que identifica el número de manzana, CCC es el número relativo de la casa en dicha manzana y T es uno o dos caracteres que representan el tipo de ubicación (e.g., V = Vivienda, C = Casa). Esta hoja de la planilla contiene las siguientes columnas: data-metadata_collection_date = fecha de carga del formulario data-metadata_start_time = tiempo de inicio de la carga data-location-location_code = código de barras leído (e.g., 29030001C) data-location_data-location_code_manual = sección del código de barras que corresponde a address en DC data-location_data-location_type = parte del código de barras que corresponde al tipo de location data-location_data-location_coordinates = nuevas coordenadas (lat,lon) registradas (por ahora no usamos, hay que definir una estrategia para decidir cuando reemplazar las coordenadas previamente establecidas) data-location_data-location_coordinates-altitude = nuevas coordenadas (altitud) registradas (por ahora no usamos, hay que definir una estrategia para decidir cuando reemplazar las coordenadas previamente establecidas) data-location_data-location_coordinates-accuracy = nuevas coordenadas (precisión) registradas (por ahora no usamos, hay que definir una estrategia para decidir cuando reemplazar las coordenadas previamente establecidas) data-visit_group = enlace a la hoja en la que están registradas las visitas correspondientes a este registro data-metadata_end_time = tiempo en que se finalizó la carga data-metadata_device_id = ID del dispositivo desde donde se cargó KEY = identificador único de este registro de location para la carga de la fecha

2. Hoja data-visit_group = crear nuevo registro en visits

La hoja data-visit_group contiene la información cada visita registrada para cada location que se cargó en Sheet 1. Las visitas se guardan en la tabla visit de DC, que se asocia a a un location por medio del location_id. Contiene las siguientes columnas: data-visit_group-visit_date = fecha de la visita (mapear a columna visited_at de tabla visit de DC) data-visit_group-location_status = estado de la casa. Si es C (cerrada) o R (rechazada) no se realizó la visita y no se important los datos data-visit_group-visit_form-visit-visit_host_gender = sexo de la persona que recibió a los voluntarios data-visit_group-visit_form-visit-visit_host_age = edad de la persona que recibió a los voluntarios data-visit_group-visit_form-visit-services_fumigation = si senepa visitó la casa para fumigar en los últimos 15 días data-visit_group-visit_form-visit-services_larvicide = si senepa visitó la casa para aplicar larvicidas en los últimos 15 días data-visit_group-visit_form-visit-visit_obs = otras observaciones de la visita data-visit_group-visit_form-autoreporte = si es 1, la persona reporta que hubieron casos de dengue, zika o chik en esta casa data-visit_group-visit_form-auto_report_numbers-auto_report_number_dengue = número de casos de dengue reportados data-visit_group-visit_form-auto_report_numbers-auto_report_number_chik = número de casos de chikungunya reportados data-visit_group-visit_form-auto_report_numbers-auto_reporte_number_zika = número de casos de zika reportados data-visit_group-visit_form-auto_report_numbers-auto_report_zika_number_pregnant = número de embarazadas con zika reportados data-visit_group-visit_form-symptoms = si es 1, existe alguien con síntomas en la casa data-visit_group-visit_form-symptoms_report-symptoms_gender = sexo de la persona con síntomas data-visit_group-visit_form-symptoms_report-symptom_list = síntomas que se reportan (números que corresponden a una lista presentada en el formulario) data-visit_group-inspection = enlace a la hoja en la que están registradas las inspecciones correspondientes a esta visita PARENT_KEY = id del location en el Sheet 1 al que corresponde esta visita KEY = ID único de este registro en el formulario

Observaciones: para cada visita, los datos adicionales que aquí se registran se guardarán en la columan questions en formato JSON siguiendo el siguiente formato:

[
    {
        "code":"[nombre del campo en spreadsheet, e.g., data-visit_group-visit_form-visit-visit_host_age]",
        "body": "[texto de la pregunta, si está disponible, esto está en nuestro formulario ODK]"
        "answer":"[valor de la respuesta]"
    }
]

Para los datos de casos de dengue, zika o chikungunya reportado, usar la siguiente fórmula para poner el dato en la columna health_reports de la tabla visits: nDmClZ donde n es el número de casos de dengue, m es el número de casos de Chikungunya, y l es el número de casos de Zika. Por ejemplo, una casa que reportó 1 caso de dengue entonces tendría 1D en esta columna (omitimos los 0).

En la columna source de visits, usemos la fórmula ODK_build_DengueChat-Ento-Form_1536101844 (este nombre debería ser configurable para identificar al formulario ODK desde el que se cargó).

En csv_id se hace referencia a la tabla csvs. En esta tabla se crea un registro cuando se importan CSVs (archivos en excel en formato de DC) a través de la web app de DC. Hay que ver si es necesario crear o no este registro para asegurar que se ejecuten los workers que generan los charts.

Para referencia, la lista de síntomas es la siguiente:

    1. Fiebre
    2. Malestar
    3. Dolor muscular
    4. Dolor articular
    5. Dolor abdominal
    6. Brote de color rojo en el cuerpo
    7. Conjunctivitis
    8. Dolor de cabeza
    9. Otro

3. Hoja data-visit_group-inspection = crear nuevo registro en inspections

La hoja data-visit_group-inspection contiene la información cada criadero registrado en la visita correspondiente, identificada por la columna PARENT_KEY en la hoja data-visit_group. Las inspecciones se guardan en la tabla inspections de DC, que se asocia a a una visita por medio del visit_id. Contiene las siguientes columnas: data-visit_group-inspection-breeding_site_code = código del criadero que identifica a un tipo de criadero según la lista de la tabla breeding_sites cuya columna code se iguala a este código. data-visit_group-inspection-breeding_site_amount = cantidad de criaderos del tipo identificados, implica crear múltiples inspections del mismo tipo y con el mismo estado data-visit_group-inspection-br_protected = si está protegido, mapea a columna protected que es booleano data-visit_group-inspection-br_larvae = si tenía larvas, mapea a columna larvae que es booleano data-visit_group-inspection-br_pupae = si tenía pupas, mapea a columna pupae que es booleano data-visit_group-inspection-breeding_site_description = observación adicional, mapea a columna description data-visit_group-inspection-br_picture = enlace a una imagen, se debe subir según el servicio de file upload de DC y luego completar before_photo_file_name y before_photo_content_type data-visit_group-inspection-br_elimination_date = eliminated_at data-visit_group-inspection-br_elimination_picture = enlace a una imagen de la eliminación, se debe subir según el servicio de file upload de DC y luego completar after_photo_file_name y after_photo_content_type PARENT_KEY = id del visit en el data-visit_group al que corresponde esta visita KEY = ID único de este registro en el formulario

la fecha de la visita se debe usar para la columna inspected_at

Observaciones: para cada visita, los datos adicionales que aquí se registran se guardarán en la columan questions en formato JSON siguiendo el siguiente formato:

[
    {
        "code":"[nombre del campo en spreadsheet, e.g., data-visit_group-visit_form-visit-visit_host_age]",
        "body": "[texto de la pregunta, si está disponible, esto está en nuestro formulario ODK]"
        "answer":"[valor de la respuesta]"
    }
]
cdparra commented 6 years ago

Si se usa el import de DC, el import de DC espera un archivo .xls como este. El método de import a usar es el mismo que está disponible en esta ruta de DC: https://www.denguechat.org/csv_reports/batch que se usa para hacer import de CSVs con datos correspondientes a locations que ya existen.

Verificar según los SPECs del comentario anterior para entender como mapear a este spreadsheet. Lo importante es que el archivo .xls tenga como nombre de archivo el nombre (i.e., address) del location (e.g., 29030001.xls). Las columnas de esta planilla son las siguientes:

Fecha de visita (YYYY-MM-DD) = contiene fechas de visitas Auto-reporte dengue/chik = lo mismo que health_reports de visits Tipo de criadero = código de criadero seguido del número (e.g., B4) Localización = no usamos ¿Protegido? = protected ¿Abatizado? = o usamos ¿Larvas? = larvas ¿Pupas? = pupas ¿Foto de criadero? = solo indica si hay o no foto Fecha de eliminación (YYYY-MM-DD) = eliminated_at ¿Foto de eliminación? = solo indica si hay o no foto de eliminación Comentarios sobre tipo y/o eliminación = description de eliminación

cdparra commented 6 years ago

@vanecanhete @morozevich si no pueden levantar denguetorpedo localmente, usen directamente la instancia de testing (@morozevich puede agregar public keys para acceso ssh y también @yolile puede hacerlo)

cdparra commented 5 years ago

@ricpar11 below requested changes:

cdparra commented 5 years ago

Done on PR #858