=== finish_pipeline START 09:02:50 ===
enum DONE detected 13:59:51
--- fetch_contacts ---
updated_patients rows: 670
keys: ['id', 'name', 'ssn', 'changedat', 'createdat', 'updatestatus']
--- resolve_s1_pending ---
17618606: anchor 2026-03-20 type IP-MED MGMT NEW -> qualifies=True (has_followup=False)
17617430: anchor 2026-03-19 type IP-MED MGMT NEW -> qualifies=False (has_followup=True)
17618224: anchor 2026-03-19 type IP-MED MGMT NEW -> qualifies=False (has_followup=True)
17617637: anchor 2026-03-17 type IP-MED MGMT NEW -> qualifies=False (has_followup=True)
Sheet1 NEW qualifying rows: 1
--- compute_s2_final ---
day-files loaded: 137 range 2026-04-01 .. 2026-08-15
distinct pids in universe: 649
kept-in-window pids: 478
Active No-Followup pids: 108
updated_patients keys: ['changedat', 'createdat', 'id', 'name', 'ssn', 'updatestatus']
FINAL Sheet2 rows: 108 | phone 21/108 | email 54/108
--- build_final ---
Sheet1 rows appended: 1
saved /tmp/Reactivations_out.xlsx
sheets: ['New No-Show-Cancel No-Followup', 'Active No-Followup', 'README']
Sheet2 header: ['Patient Name', 'Phone', 'Email', 'Last Kept Appt Date', 'Provider', 'Days Since', 'Patient ID']
Sheet2 data rows: 108
Sheet1 data rows: 28
coverage phone 21/108 email 54/108
--- refresh token + upload ---
token refreshed, len: 2823
UPLOAD ok. id: 01QCTU7EN3BTFEVE5IFJBKQUIJTUYUSCJJ name: Reactivation Campaign.xlsx size: 16495
itemId preserved: True
--- verify re-read ---
token refreshed, len: 2824
VERIFY sheets: ['New No-Show-Cancel No-Followup', 'Active No-Followup', 'README']
VERIFY Sheet2 header: ['Patient Name', 'Phone', 'Email', 'Last Kept Appt Date', 'Provider', 'Days Since', 'Patient ID']
VERIFY Sheet2 data rows: 108
VERIFY Sheet1 data rows: 28
VERIFY PASS: Sheet 2 row count > 0
=== finish_pipeline DONE 14:00:03 ===
