Synchronize Validation Statuses with KoboToolbox
sync_validation_submissions.RdSynchronizes validation statuses between the local system and KoboToolbox by processing validation flags and updating submission statuses accordingly. This function follows the Kenya pipeline pattern with rate limiting, manual approval respect, and optimized API usage.
Usage
sync_validation_submissions(asset_id = c("adnap", "lurio"))Details
The function follows these steps:
Downloads the current validation flags from cloud storage
Sets up parallel processing with rate limiting
Fetches current validation status from KoboToolbox FIRST (before any updates)
Identifies manually approved submissions (excluding system username)
Updates flagged submissions as "not approved" (EXCLUDING manual approvals)
Updates clean submissions as "approved" (SKIPPING already-approved ones)
Fetches final validation status after updates
Combines results and pushes to MongoDB for record-keeping
Key improvements over previous implementation:
Rate limiting prevents overwhelming KoboToolbox API
Manual approvals are respected and never overwritten
Already-approved submissions are skipped to minimize API calls
Better error tracking and logging
Note
This function requires proper configuration in the config file, including:
MongoDB connection parameters
KoboToolbox asset ID and token (configured under ingestion$kobo-adnap or ingestion$kobo-lurio)
KoboToolbox username (to identify system approvals)
Google cloud storage parameters
Parallel Processing
The function uses the future and furrr packages for parallel processing, with the number of workers set to system cores minus 2 to prevent resource exhaustion. Rate limiting is implemented via Sys.sleep() to respect API constraints.
See also
process_submissions_parallel()for the helper function with rate limitingget_validation_status()for fetching KoboToolbox validation statusupdate_validation_status()for updating KoboToolbox validation status