Audit Data Export
Overview
The Audit Data Export feature provides comprehensive JSON export functionality for all audit types within the Nimbly mobile application. This capability enables users to export their audit data in raw JSON format for external analysis, compliance documentation, backup purposes, and integration with third-party systems.
Key Capabilities π
- Universal Coverage: Exports all audit types (Single, Section, Team)
- Raw Data Format: Preserves exact data structure without transformation
- Non-Blocking Architecture: Export failures donβt interrupt core workflows
- Platform-Optimized: Tailored implementations for Android, iOS, and Web
- Feature Flag Control: Organization-level enablement via
EXPORT_JSON_REPORT_ON_SUBMIT_SYNC
Audit Export Types
1. Single Audit Export π
Single audit exports occur during audit synchronization, capturing the complete questionnaire data.
When It Triggers
- During audit sync via βSyncβ button
- When synchronizing audit data with server
- Feature flag must be enabled
Data Exported
- Complete
ReportFormobject - All questions and answers
- Metadata (site, auditor, timestamps)
- Signatures and attachments (as references)
File Naming
report_[reportID]_[timestamp].json
2. Team Audit Export π₯
Team audit exports support both full team submissions and individual section synchronization.
2.1 Team Summary Export
When It Triggers
- During team report submission
- After team lead confirms submission
- Feature flag must be enabled
Data Exported
- Complete
ITeamAuditSummaryobject - Section summaries and approval statuses
- Team member contributions
- Aggregated scores and flags
File Naming
team_report_[reportID]_[timestamp].json
2.2 Section Export π
Section exports are a sub-feature of team audits, enabling granular data capture during section synchronization.
When It Triggers
- During section sync via βSyncβ button
- Feature flag must be enabled
Data Exported
- Section-specific
ReportFormdata - Questions within that section
- Section metadata and progress
File Naming
report_[reportID]_section_[sectionIndex]_[timestamp].json
Platform Implementation
Android (10+) π€
Storage Access Framework (SAF)
For Android 10 and above, the feature utilizes the Storage Access Framework:
graph LR A[Export Triggered] --> B{Android Version} B -->|10+| C[SAF Dialog] B -->|<10| D[Legacy Storage] C --> E[User Selects Directory] E --> F[Save JSON File] D --> G[Save to Downloads]
User Experience:
- System presents directory picker
- User selects save location
- File saved with proper permissions
- Fallback to sharing if SAF fails
iOS π
Native Sharing
iOS implementation uses the native sharing dialog:
User Experience:
- Share sheet appears
- User selects destination (Files, AirDrop, etc.)
- File saved to chosen location
- Success confirmation displayed
Web π
Browser Download
Web platform triggers standard browser download:
User Experience:
- Download initiated automatically
- File saved to default downloads folder
- Browser shows download progress
- File accessible via downloads manager
Technical Architecture
Component Hierarchy
graph TB subgraph Controllers SC[SubmitQuestionnaireController] UC[UpdateQuestionnaireController] TC[TeamSummaryController] end subgraph Use Cases ADEU[AuditDataExportUseCase] end subgraph Services ES[ExportService] FS[FileSystemService] end SC --> ADEU UC --> ADEU TC --> ADEU ADEU --> ES ES --> FS
Export Flow
sequenceDiagram participant User participant Controller participant UseCase as AuditDataExportUseCase participant ExportService participant FileSystem User->>Controller: Trigger Action Controller->>Controller: Check Feature Flag Controller->>UseCase: exportAuditData() UseCase->>ExportService: exportRawData() ExportService->>ExportService: JSON.stringify() ExportService->>FileSystem: saveToDownloads() FileSystem->>FileSystem: Platform-specific save FileSystem-->>User: Success/Failure notification Controller->>Controller: Continue main workflow
Configuration
Feature Flag Setup
The export feature for submissions is controlled by the EXPORT_JSON_REPORT_ON_SUBMIT_SYNC feature flag:
// Organization-level configuration
{
"organizationId": "org_123",
"features": {
"EXPORT_JSON_REPORT_ON_SUBMIT_SYNC": true
}
}Enabling Export
-
For Submissions (Single & Team Audits):
- Enable feature flag in organization settings
- No app update required
- Takes effect immediately
-
For Section Sync (Team Audits):
- Feature Flag Required:
EXPORT_JSON_REPORT_ON_SUBMIT_SYNCmust be enabled - Enable feature flag in organization settings
- Takes effect immediately after enabling
- Feature Flag Required:
Data Format
Note: The following JSON structures use sample/placeholder values for illustration purposes only. Actual export files will contain your real audit data.
Single Audit JSON Structure
{
"questions": [...],
"sections": [...],
"status": "complete",
"site": "site_456",
"auditor": "user_123",
"datetimeSubmitted": "2025-01-19T10:30:00Z",
"coordinates": {
"latitude": 1.3521,
"longitude": 103.8198
},
"signatures": [...],
"questionnaire": "questionnaire_id",
"grade": "A",
"maxScore": 100
}Team Audit JSON Structure
{
"auditName": "Monthly Team Audit",
"siteName": "Main Branch",
"datetimeIn": "2025-01-19T10:00:00Z",
"flagCount": {
"red": 5,
"green": 20,
"yellow": 3
},
"sections": [
{
"approvalIndex": 0,
"sectionIndex": 0,
"sectionName": "Kitchen",
"isRequired": true,
"approvalStatus": "approved"
}
],
"signatures": [
{
"isSigned": true,
"name": "John Doe",
"path": "signatures/sign_12345.png",
"position": "Manager"
}
],
"emailTargets": [
{
"email": "manager@company.com",
"enabled": true,
"status": "sent"
}
],
"reportID": "team_123",
"siteID": "site_456"
}Error Handling
Non-Blocking Design
Export operations are designed to be non-blocking:
try {
const result = await exportAuditData(data);
if (result.success) {
// Log success
}
} catch (error) {
// Log error but continue
observabilitySentry.logEvent('Export failed', error);
}
// Main workflow continues regardlessCommon Error Scenarios
| Error Type | Cause | User Impact | Resolution |
|---|---|---|---|
| Permission Denied | Storage access not granted | Export skipped | Grant permissions in settings |
| Storage Full | Insufficient device space | Export failed | Free up device storage |
| File System Error | Write operation failed | Export failed | Retry or use share option |
| Serialization Error | Invalid data structure | Partial export | Contact support |
User Experience
Success Flow
- Trigger: User completes audit/sync action
- Export: Background export initiated
- Save: File saved to accessible location
- Notification: Success toast displayed
- Continue: Main workflow proceeds
Failure Flow
- Trigger: User completes audit/sync action
- Export: Background export attempted
- Error: Export fails (logged)
- Continue: Main workflow proceeds uninterrupted
- No Impact: User experience unchanged
Performance Considerations
File Size Management
- Compression: Automatic gzip for files > 1MB
- Chunking: Large reports split if needed
- Memory: Efficient streaming for large datasets
Background Processing
- Export runs in background thread
- Non-blocking UI operations
- Progress tracking for large exports
Security & Privacy
Data Protection
- Sanitization: Sensitive data removed
- No Credentials: Tokens/passwords excluded
- User Data: Privacy rules applied
Access Control
- Feature Flag: Organization-level control
- Permissions: Platform storage permissions required
- Audit Trail: All exports logged with metadata
Troubleshooting
Export Not Working
- Check Feature Flag: Verify
EXPORT_JSON_REPORT_ON_SUBMIT_SYNCenabled - Storage Permissions: Ensure app has storage access
- Available Space: Confirm sufficient device storage
- App Version: Update to latest version
Files Not Accessible
- Android: Check Files app or selected directory
- iOS: Look in Files app or chosen destination
- File Search: Search device for
.jsonfiles
Integration Use Cases
Business Intelligence π
Export audit data for analysis in BI tools:
- Import JSON into PowerBI/Tableau
- Create custom dashboards
- Trend analysis across audits
Compliance Documentation π
Maintain audit trails for regulatory requirements:
- Archive completed audits
- Provide evidence for inspections
- Document operational compliance
Backup & Recovery πΎ
Create local backups of critical audit data:
- Protect against data loss
- Maintain offline copies
- Enable data portability
Related Features
- Reports - Report generation and management
- Single Audit - Individual audit workflows
- Team Audit - Collaborative audit processes
- Data Visibility - Data access controls
- Authentication - User permissions and roles
Technical References
- Controller:
packages/app/features/questionnaire/questionnaire-summary/controller/submit-questionnaire-controller.ts - Use Case:
packages/app/features/team-report/export/_use-cases/audit-data-export-usecase.ts - Service:
packages/app/features/team-report/export/_services/export-service.ts - File System:
packages/app/features/team-report/export/_services/file-system-service.ts