Esse era um furo real do produto quando o TradelyHQ foi construído pela primeira vez: um técnico termina um serviço, o cliente está ocupado / chateado / esqueceu, a assinatura nunca é capturada, e a OS fica no status complete indefinidamente. Pior, o cliente podia continuar "reabrindo" semanas depois porque não havia um fechamento formal.
A solução
Um cron diário do Postgres roda às 3h da manhã no fuso do tenant e procura por:
- Status da OS =
complete - A OS não tem
customer_signature_data_url completed_atfoi há mais de 3 dias úteis (pulando sábado / domingo)
Se as três condições são verdadeiras, a OS recebe renúncia automática: signature_waived_at é definido como agora, a auditoria registra a renúncia, e a OS fica travada contra novas reaberturas pelo cliente.
3 dias úteis, não 3 dias corridos
Sábados e domingos não contam. Então:
- Concluída na segunda → renúncia automática na quinta
- Concluída na quarta → renúncia automática na segunda (pula o fim de semana)
- Concluída na sexta → renúncia automática na quarta (pula o fim de semana)
O que o cliente vê
- Dia 0 (conclusão): recebe um e-mail "OS #N está concluída — por favor assine aqui"
- Dia +1: lembrete amigável por e-mail (BACKLOG)
- Dia +3 (útil): e-mail de renúncia "OS #N foi fechada automaticamente; se precisar de revisita, abra uma nova solicitação"
O que o administrador vê
OS com renúncia automática são marcadas na auditoria com action='signature_waived' + o nome do técnico original. Continuam completas e faturáveis; o único que muda é a capacidade do cliente de reabrir.
O que o técnico vê
O "Primeiro reparo correto" no painel dele conta OS com renúncia automática como concluídas-sem-problema (já que não houve reabertura). A conformidade NTE não é afetada.
Se o cliente assinar dentro dos 3 dias úteis
A renúncia automática não dispara. A OS fecha corretamente com a assinatura arquivada. Mesma forma de entrada na auditoria, só action='completion_signed' em vez de 'signature_waived'.