// Initialized when job is enqueued await redis.hset(`batch:${batchId}`, { status: 'PENDING', totalFiles: 0, // updated when ZIP is extracted processed: 0, linked: 0, skipped_no_match: 0, skipped_already_exists: 0, failed: 0, createdAt: Date.now() }); await redis.expire(`batch:${batchId}`, 3600); // 1 hour TTL __ __