Data model

Every API key / app token belongs to exactly ONE farm (workspace) — all data returned is already scoped to it. Every identifier is a UUID.

ConceptIDServiceLinks to
Farm (workspace)workspace_idgisEverything below
Zonezone_idgisFarm; contains parcels, devices
Parcelparcel_idgisZone, owner household, crop type, seasons
Farmer householdfarmer_idgisParcels (owner)
Crop typecrop_type_idgisParcels, seasons, harvest records
Seasonseason_idgisParcel; harvest records, QR labels
Device / controllerdevice_idiotZone, parcels; readings, alerts, commands
Sensor alertalert_idiotDevice; event iot.alert.raised
Harvest recordharvest_record_idharvestParcel, crop type, season; traceability lot
Traceability lot / QR labelid · codeharvestHarvest record; public scan page
CertificateidharvestFarm; VietGAP, GlobalGAP, organic
Book / table / rowapp_id · table_id · record_idofficeThe farm's custom books; values keyed by field_id
Reportcode (SX-01…)reportReads from the services above