Script para chequear nuevos turnos en el Registro Civil

Hace poco tiempo en casa nos dimos cuenta que todos nuestros pasaportes habían caducado. Hubo algunas situaciones que nos llevaron a obviar este tema, nos habíamos cambiado de casa recientemente, la pandemia, etc. Simplemente no era nuestra prioridad.

Con los sucesos recientes del paro en Ecuador, pensamos que sería bueno tenerlos listos.

Así que hace un mes estuve en el proceso de tomar turnos para toda mi familia, y este post va como una queja/sugerencia para el pésimo servicio y los malavares que hay que hacer para obtener un turno, para lo cual tuve que usar mis conocimientos técnicos para sortearlos.

Entonces, hace unas 4 semanas decidimos comenzar el proceso de renovación de los pasaportes, ya que hace un par de meses habíamos también renovado nuestras cédulas no creí que sería problema.

Ya tenía la cuenta que hay que crear en Registro Civil en línea entré y fui al Pago en línea Pasaporte, luego de ingresar cada cédula y crear el pedido viene mi primera queja, cuando hay que realizar el pago hay que hacerlo uno por uno, es decir pido de mi esposa, pago, luego pido el mío, pago, luego el de mi hija y pago. No creo que sea complicado poder añadir al carrito de compras todos los pedidos y hacer un solo pago, pero está bien puedo vivir con hacer varios pagos.

Mi siguiente queja va a que cuando quiero pagar con tarjeta, no lo puedo hacer con pago corriente, las únicas opciones disponibles son desde 3 hasta 12 meses todo con intereses. Y adicional no se si esto fue un problema del Registro Civil o de PlaceToPay que al querer pagar con la xperta y hacerlo en un solo pago no funcionó (decía que no fue posible obtener los tipos de crédito para esta tarjeta, aunque ya la había usado en otras tiendas).

Ok luego de aceptar tener que pagar intereses a 3 meses en cada pago de cada pasaporte, el siguiente problema es la gota que derramo mi vaso de paciencia y que motiva este post, tomar el turno para obtener el pasaporte.

Primero no había turnos para los siguientes 3 meses. El momento que realice el pago estaba completamente lleno hasta finales de septiembre y todavía no habilitaban el mes de octubre. Busqué información en su sitio para saber si hay días específicos en los que habiliten los siguientes meses, pero no pude encontrar nada. Fui a twitter a leer si hay algún anuncio con respecto de este tema, lo único que hay es retweets de las giras mediáticas de su director indicando que se está expandiendo la atención en el mes de julio para atender los turnos que no pudieron ser atendidos durante el paro.

Las respuestas a otros ciudadanos eran solo que hay que estar pendientes que los turnos se habilitan paulatinamente o que si es de urgencia por trabajo, salud o estudios había que escribir a un email para solicitar la atención priorizada.

Ahora la pregunta es cuántas veces debo estar pendiente de que habiliten turnos? Tengo que entrar cada vez al sitio, ir a la opción de tomar turno, seleccionar provincia y agencia, y comenzar a buscar un espacio desde julio, agosto, septiembre para encontrar que nunca hay nada y octubre aún no se habilita.

Entonces mi dificultad para hacer tareas manuales repetitivas sin valor, me empujo a hacer un pequeño script para automatizar la consulta de los turnos:

#!/bin/bash

while true
do 

curl 'https://apps.registrocivil.gob.ec/portalCiudadano/turnos/agenda.jsf' \
    -X POST -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0' \
    -H 'Accept: application/xml, text/xml, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.7,es-EC;q=0.3' \
    -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
    -H 'Faces-Request: partial/ajax' -H 'X-Requested-With: XMLHttpRequest' \
    -H 'Origin: https://apps.registrocivil.gob.ec' -H 'DNT: 1' -H 'Connection: keep-alive' \
    -H 'Referer: https://apps.registrocivil.gob.ec/portalCiudadano/turnos/agenda.jsf?id=1' \
    -H 'Cookie: JSESSIONID="XXX-XXX-XXX"' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: cors' \
    -H 'Sec-Fetch-Site: same-origin' \
    --data-raw 'javax.faces.partial.ajax=true&javax.faces.source=frmContenedor%3Aschedule&javax.faces.partial.execute=frmContenedor%3Aschedule&javax.faces.partial.render=frmContenedor%3Aschedule&frmContenedor%3Aschedule=frmContenedor%3Aschedule&frmContenedor%3Aschedule_start=1664773200000&frmContenedor%3Aschedule_end=1665205200000&frmContenedor=frmContenedor&frmContenedor%3Aschedule_view=agendaWeek&javax.faces.ViewState=6762655471292756199%3A-6543132266005548827' \
    --silent | \
	 xq | \
	 jq '.["partial-response"]["changes"]["update"][0]["#text"]|fromjson | .events | sort_by(.start) | .[] | map(.) | @csv' | \
	 grep -v "Reservado" \
	 > /tmp/rc.txt

if [[ $(cat /tmp/rc.txt | wc -l) -ne 3 ]]; then
   echo -e "Subject:registro civil\nfrom:email@example.com" | sendmail -f "marcelo@example.com" -t "xxx-xxx-xxx@pomail.net" 
else
    echo "--------------$(date)--------"
    cat /tmp/rc.txt
fi

sleep 300

done

Para esto use las herramientas de desarrollo del navegador para obtener el request curl que se usa para obtener el resultado que normalmente había que hacerlo a mano. Este request devuelve xml y dentro del xml json. No quiero ahondar en porque de estas decisiones técnicas, solo voy a pensar que fue por alguna razón muy válida.

En el script el resultado de este request HTTP, alimenta la herramienta xq que permite transformar un xml en json.

Luego este resultado json se alimenta a la herramienta jq con un filtro específico para encontrar un path específico dentro del json inicial y en el valor donde están los resultados de la agenda que en sí están como otro json, se usa fromjson para transformar y luego se obtiene la lista de eventos, se los ordena y luego se hace un mapping de los registros a csv.

Luego se filtra los eventos “Reservados” que eran todos excepto 3 unos que estaban como No disponibles y otro que estaba por habilitar.

Ese resultado lo guardo en el archivo /tmp/rc.txt

Luego en el if cuento el número de líneas, que como se que son 3, solo verifico que sean diferentes, si son diferentes algo cambió en el resultado y tiene que notificarme.

Cuando eso pasa envío un email usando sendmail a una dirección @pomail.net que se creo usando Pushover que permite generar notificaciones hacia mi celular via un API o un email, en mi caso uso un email para generar una notificación push en mi teléfono.

Si no ha cambiado el número de líneas reportadas simplemente imprimo la fecha y las líneas. Y luego espero 5 minutos para volver a intentar.

Luego de ejecutar este script por un par de días, llego lo esperado:

Pushover screenshot

Entre al sitio y en efecto hubo turnos para finales de agosto. Y comencé la tarea de tomar turno para cada uno.

Ya tome para mí y mi esposa, pero para mis hijas ya no alcanzaron en el mismo espacio de ese día y ya no había más, así que tuve que tomar para el siguiente día. Ahora tengo que ir 2 días seguidos a la agencia del registro civil porque no se pudo tomar turnos en un solo día para todos.

Sugerencias

No quiero ser solo de los que se quejan, quiero aportar con mi opinión acerca de cómo debería ser el servicio.

1. Transparencia

Creo que a nadie le gusta andar por el mundo sin tener claro hacia dónde va, como parte del servicio del registro civil debería haber información acerca de cuántas personas se están atendiendo a diario, cuántos funcionarios encargados atienden cada día, las fechas más próximas para tomar un turno.

Cuando estoy agendando un turno, mostrar cuántos espacios libres quedan en cada hora del día, para poder planificar y escojer un día y hora que tenga espacio suficiente para toda la familia.

No estoy seguro por qué días antes no había turnos, y luego se abrieron turnos para un día más cercano, no se sabe que pasó se cancelaron turnos de otras personas? se incrementó la capacidad?

Tener público los días de habilitación de nuevos días para tomar turnos. Entiendo que otras personas tienen que hacer este proceso manualmente que cada consulta toma al menos 5 minutos, pero cada qué tiempo se debe consultar? a qué horas del día?, es un trabajo que se puede automatizar y se puede agendar conforme fueron pagando los pasaportes.

2. Facilitar experiencia del usuario

Permitir pagar una sola vez por varios pedidos.

Permitir pagar con tarjeta en un solo pago.

Mostrar información adicional en la agenda, cómo número de personas agendadas vs disponibles.

Pero bueno creo que me desahogado un poco y espero que se tomen en cuenta las sugerencias para el futuro.