APIs & services / Reporting datasets (rtld)

Cadre dashboard figures.

Endpointtoday's app
Call
GET /rtld/api/dataset/v1/execute?name=PlusOneCadreAnalytics
Service
Reporting datasets (rtld)
Features
Analytics dashboard
When
Periodic 12 h and on demand
Auth
X-SESSIONID set by CoreAPI (dooNowOrThrow)
In the App Service

Use case

Main cadre dashboard numbers. FetchAnalyticsDataWorker calls it for a cadre login with no VO selected (enqueued from the dashboard; endpoints.json lists a 12 h periodic run as well). IeRepositoryImpl.getFarmerDataForCadreId also calls it on demand. The whole list is stored as JSON in SharedPreferences KEY_ANALYTICS_DATA with KEY_ANALYTICS_DATA_LAST_DATE / _MILLIS; DashboardFragment and OverallMisFragment read it from there (no Room table). A failure caches an empty list, so the dashboard shows zeros.

Headers

HeaderValueNotes
X-SESSIONID<session token>Passed explicitly as @Header from AndroidSessionManager.sessionId. AuthInterceptor still retries once with a fresh token on 401 or 400.

Parameters

ParamInRequiredExampleNotes
namequeryYesPlusOneCadreAnalyticsDataset name. The rtld executor (/rtld/api/dataset/v1/execute) picks the dataset by this query param.
versionqueryYes1Dataset version. Always 1.
formatqueryYesjsonResponse format. Always json, so the body is a JSON array of row objects.
paramsqueryYesCADRE_LOGIN=9XXXXXXXX1Dataset input parameters as KEY=value pairs joined with "--". CADRE_LOGIN = user login before "@@".

Request

No body. cadre params

Response

Example response body (synthetic data)
[
  {
    "CadreLogin": "9XXXXXXXX1",
    "VOCode": "VO-ALIAS-001",
    "FarmersSurveyedTillDate": 120,
    "FarmersSurveyedUnderMIS": 110,
    "SHGCovered": 8,
    "SHGTarget": 10,
    "TotalAcerage": 240.5,
    "TotalC1Farmers": 60,
    "TotalFarmersC1C3": 150,
    "S2SFarmers": 40,
    "FarmersSurveyedTodayCount": 3,
    "FarmersSurveyedTodayC1Count": 2,
    "FarmersSurveyedTodayC1Acreage": 3.5,
    "FarmersSurveyedTodayS2SCount": 1,
    "FarmersSurveyedTodayS2SAcreage": 1,
    "FarmersSurveyedTodayPMDSCount": 1,
    "FarmersSurveyedTodayPMDSAcreage": 1.5,
    "FarmersSurveyedTodayS2SWCount": 0,
    "FarmersSurveyedTodayS2SWAcreage": 0,
    "FarmersSurveyedTodayRDSCount": 0,
    "FarmersSurveyedTodayRDSAcreage": 0,
    "FarmersSurveyedToday365DKGCount": 1,
    "FarmersToBeSurveyedC1": 60,
    "FarmersToBeSurveyedS2S": 40,
    "FarmersToBeSurveyedPMDS": 30,
    "FarmersToBeSurveyedS2SW": 10,
    "FarmersToBeSurveyedRDS": 5,
    "FarmersToBeSurveyed365DKG": 50,
    "C1Acreage": 90,
    "S2SAcreage": 40,
    "PMDSAcreage": 30,
    "S2SWAcreage": 10,
    "FarmersSurveyedThisMonthC1Count": 12,
    "FarmersSurveyedThisMonthC1Acreage": 18,
    "FarmersSurveyedThisMonthS2SCount": 6,
    "FarmersSurveyedThisMonthS2SAcreage": 6.5,
    "FarmersSurveyedThisMonthPMDSCount": 5,
    "FarmersSurveyedThisMonthPMDSAcreage": 7,
    "FarmersSurveyedThisMonthS2SWCount": 1,
    "FarmersSurveyedThisMonthS2SWAcreage": 1,
    "FarmersSurveyedThisMonthRDSCount": 0,
    "FarmersSurveyedThisMonthRDSAcreage": 0,
    "FarmersSurveyedThisMonth365DKGCount": 4,
    "FarmersSurveyedOverallC1Count": 55,
    "FarmersSurveyedOverallC1Acreage": 80,
    "FarmersSurveyedOverallC1TargetAcreage": 90,
    "FarmersSurveyedOverallS2SCount": 35,
    "FarmersSurveyedOverallS2SAcreage": 36,
    "FarmersSurveyedOverallS2STargetAcreage": 40,
    "FarmersSurveyedOverallPMDSCount": 28,
    "FarmersSurveyedOverallPMDSAcreage": 27,
    "FarmersSurveyedOverallPMDSTargetAcreage": 30,
    "FarmersSurveyedOverallS2SWCount": 8,
    "FarmersSurveyedOverallS2SWAcreage": 8,
    "FarmersSurveyedOverallS2SWTargetAcreage": 10,
    "FarmersSurveyedOverallRDSCount": 4,
    "FarmersSurveyedOverallRDSAcreage": 3,
    "FarmersSurveyedOverallRDSTargetAcreage": 5,
    "FarmersSurveyedOverall365DKGCount": 45
  }
]
FieldTypeRequiredNotes
CadreLoginstringCadre login the row belongs to.
VOCodestringVO alias for VO-wise rows.
FarmersSurveyedTillDate, FarmersSurveyedUnderMIS, SHGCovered, SHGTarget, TotalAcerage, TotalC1Farmers, TotalFarmersC1C3, S2SFarmersnumberHeadline tiles on the analytics dashboard.
FarmersSurveyedToday{C1,S2S,PMDS,S2SW,RDS,365DKG}{Count,Acreage}numberDaily figures per model (C1, S2S, PMDS, S2SW, RDS, 365-day kitchen garden).
FarmersSurveyedThisMonth{model}{Count,Acreage}numberMonthly figures per model.
FarmersSurveyedOverall{model}{Count,Acreage,TargetAcreage}numberSeason-to-date figures and targets per model.
FarmersToBeSurveyed{model}, {C1,S2S,PMDS,S2SW}AcreagenumberTarget farmer counts and acreage per model.

Errors

StatusWhenWhat the app does
401 / 400Session token expired or rejectedAuthInterceptor refreshes the token and retries once; if the retry also fails, Worker caches an empty list (dashboard zeros); repository path posts Resource.error.
5xxDataset query failed on the serverWorker caches an empty list (dashboard zeros); repository path posts Resource.error.
network errorNo connectivity or timeoutWorker caches an empty list (dashboard zeros); repository path posts Resource.error.

Source

  • app/src/main/java/org/platformcommons/urvi/datasource/network/retrofit/APIInterface.kt
  • app/src/main/java/org/platformcommons/urvi/datasource/network/URLInjector.kt
  • app/src/main/java/org/platformcommons/urvi/datasource/service/FetchAnalyticsDataWorker.kt
  • app/src/main/java/org/platformcommons/urvi/datasource/repository/impl/IeRepositoryImpl.kt
  • app/src/main/java/org/platformcommons/urvi/datasource/network/responsedto/MisDataDtoItem.kt
  • app/src/main/java/org/platformcommons/urvi/view/dashboard/DashboardFragment.kt