Esto era un hueco real del producto cuando TradelyHQ fue construido inicialmente: un técnico termina un trabajo, el cliente está ocupado / molesto / olvidó, la firma nunca se captura, y la OT queda en estado complete indefinidamente. Peor, el cliente podía seguir "reabriéndola" semanas después porque no había un cierre formal.
La solución
Un cron diario de Postgres corre a las 3 AM hora del tenant y busca:
- Estado de la OT =
complete - La OT no tiene
customer_signature_data_url completed_ates de hace más de 3 días hábiles (saltando sábados / domingos)
Si las tres son verdaderas, la OT se renuncia automáticamente: signature_waived_at se establece en ahora, la auditoría registra la renuncia, y la OT queda bloqueada para más reaperturas del lado del cliente.
3 días hábiles, no 3 días calendario
Sábados y domingos no cuentan. Entonces:
- Completada el lunes → renunciada automáticamente el jueves
- Completada el miércoles → renunciada automáticamente el lunes (salta el fin de semana)
- Completada el viernes → renunciada automáticamente el miércoles (salta el fin de semana)
Lo que ve el cliente
- Día 0 (finalización): reciben un correo "OT #N está completa — por favor firme aquí"
- Día +1: correo de recordatorio amable (BACKLOG)
- Día +3 (hábil): correo de renuncia "OT #N ha sido cerrada automáticamente; si necesita una revisita, abra una nueva solicitud"
Lo que ve el administrador
Las OT con renuncia automática se marcan en la auditoría con action='signature_waived' + el nombre del técnico original. Siguen estando completas y facturables; lo único que cambia es la capacidad del cliente de reabrirlas.
Lo que ve el técnico
El "Primer arreglo correcto" en su dashboard cuenta las OT con renuncia automática como completadas-sin-incidente (ya que no hubo reapertura). Su cumplimiento NTE no se ve afectado.
Si el cliente firma dentro de los 3 días hábiles
La renuncia automática no se dispara. La OT cierra correctamente con la firma archivada. Misma forma de entrada en la auditoría, solo action='completion_signed' en vez de 'signature_waived'.