The background download (Setup.fetchGapStartDate) sends farmer ids in chunks of 50 and saves each farmer's gapStartDate, which sets when the member category can next be changed. On the endorsement Resolve Comments screen, EndorsementRepositoryImpl.checkIfCategoryIsFreezed saves gap date and category for the given farmers and returns the ids whose category is not frozen. Failures are logged (worker) or shown as an error (screen).
Headers
Header
Value
Notes
X-SESSIONID
<session token>
Passed explicitly as @Header from AndroidSessionManager.sessionId. AuthInterceptor still retries once with a fresh token on 401 or 400.
Parameters
Param
In
Required
Example
Notes
datasetName
path
Yes
PLUS_ONE_FARMING_CATEGORY_LAST_UPDATE_DATE
Dataset name in the path of commons-report-service /api/v1/datasets/name/{name}/execute.
version
query
Yes
1
Hard-coded in the @GET path.
format
query
Yes
json
Hard-coded in the @GET path.
params
query
Yes
IN_PARAM_IEID_LIST=100001,100002
Dataset input parameters as KEY=value pairs joined with "--". IN_PARAM_IEID_LIST = comma-separated IE ids (50 per call from the worker).
Last category change (epoch millis as string); saved in ie_flat_entity.gapStartDate and checked by AppUtils.checkCategoryUpdateStatus.
FarmingCategory
string
Current category; saved on the endorsement path (updateCategoryAndGapStartDate).
currentCategoryFormatted
string
Display form of the category; saved on the endorsement path.
Errors
Status
When
What the app does
401 / 400
Session token expired or rejected
AuthInterceptor refreshes the token and retries once; if the retry also fails, Worker: Crashlytics log, 401 triggers a session refresh, chunk skipped. Screen: Resource.error "Some error occurred".