app_user— administrators, supervisors, surveyors.refresh_token— hashed refresh tokens with rotation and reuse detection.questionnaire— title, description, language support (JSONB), soft delete.question_group— grouping of questions within a questionnaire.question— multilingual text, type, options (JSONB), skip logic (JSONB).survey— respondent info, GPS, sync status, client survey id for idempotency.survey_response— answers as JSONB.sync_log— per-survey sync attempts.import_log/export_log— audit logs for Excel operations.
- Unique
(surveyor_id, client_survey_id)onsurveyto prevent duplicates. - Soft deletes via
deleted_atonapp_userandquestionnaire.