This was a real product hole when TradelyHQ was first built: a tech finishes a job, the customer is busy / annoyed / forgot, the signature never gets captured, and the WO sits in complete status indefinitely. Worse, the client could keep "reopening" it weeks later because there was no formal close.
The fix
A daily Postgres cron job runs at 3 AM your tenant time and looks for:
- WO status =
complete - WO has no
customer_signature_data_url completed_atis more than 3 business days ago (skipping Sat / Sun)
If all three are true, the WO is auto-waived: signature_waived_at is set to now, the audit log records the waiver, and the WO is locked from further client-side reopens.
3 business days, not 3 calendar days
Saturdays and Sundays don't count. So:
- Completed Monday → auto-waived Thursday
- Completed Wednesday → auto-waived Monday (skips weekend)
- Completed Friday → auto-waived Wednesday (skips weekend)
What the customer sees
- Day 0 (completion): they get an email "WO #N is complete — please sign here"
- Day +1: gentle reminder email (BACKLOG)
- Day +3 (business): waiver email "WO #N has been auto-closed; if you need a re-visit, please open a new request"
What the admin sees
Auto-waived WOs are flagged in the audit log with action='signature_waived' + the original tech's name. They're still complete and invoice-able; the only thing that changes is the client's ability to reopen them.
What the tech sees
Their dashboard "First-time-fix" rate counts auto-waived WOs as completed-without-issue (since there was no reopen). Their NTE compliance is unaffected.
If the client does sign within 3 business days
Auto-waiver doesn't fire. The WO closes properly with the signature on file. Same audit-log entry shape, just action='completion_signed' instead of 'signature_waived'.