' ============================================================================ ' Privacy Template: Data Portability/Export Request ' LGPD Art. 18 V / GDPR Art. 20 - Right to Data Portability ' ============================================================================ ' This dialog enables users to export their data in portable formats ' Supports JSON, CSV, and XML export for interoperability TALK "📦 **Data Portability Request**" TALK "You have the right to receive your personal data in a structured, commonly used, and machine-readable format." TALK "" ' Verify user identity TALK "First, I need to verify your identity." HEAR email AS EMAIL WITH "Please enter your registered email address:" user = FIND "users" WHERE email = email IF user IS NULL THEN TALK "❌ No account found with that email address." TALK "Please check and try again, or contact support." EXIT END IF ' Send verification code code = GENERATE CODE 6 SET SESSION "export_verification_code", code SET SESSION "export_email", email SEND MAIL email, "Data Export Request - Verification Code", " Your verification code is: " + code + " This code expires in 15 minutes. If you did not request this data export, please ignore this email. Pragmatismo Privacy Team " HEAR entered_code AS TEXT WITH "📧 Enter the verification code sent to your email:" IF entered_code <> code THEN TALK "❌ Invalid verification code. Please start over." EXIT END IF TALK "✅ Identity verified!" TALK "" ' Ask for export format TALK "**Choose your export format:**" TALK "" TALK "1️⃣ **JSON** - Best for importing into other systems" TALK "2️⃣ **CSV** - Best for spreadsheets (Excel, Google Sheets)" TALK "3️⃣ **XML** - Universal interchange format" TALK "4️⃣ **All formats** - Get all three formats in a ZIP file" HEAR format_choice WITH "Enter your choice (1-4):" SELECT CASE format_choice CASE "1", "json", "JSON" export_format = "json" format_name = "JSON" CASE "2", "csv", "CSV" export_format = "csv" format_name = "CSV" CASE "3", "xml", "XML" export_format = "xml" format_name = "XML" CASE "4", "all", "ALL" export_format = "all" format_name = "All Formats (ZIP)" CASE ELSE export_format = "json" format_name = "JSON" TALK "Defaulting to JSON format." END SELECT TALK "" TALK "**Select data categories to export:**" TALK "" TALK "1️⃣ Everything (complete data export)" TALK "2️⃣ Profile information only" TALK "3️⃣ Conversations and messages" TALK "4️⃣ Files and documents" TALK "5️⃣ Activity history" TALK "6️⃣ Custom selection" HEAR data_choice WITH "Enter your choice (1-6):" ' Define what data to export based on choice SELECT CASE data_choice CASE "1" include_profile = TRUE include_conversations = TRUE include_files = TRUE include_activity = TRUE include_consents = TRUE data_scope = "complete" CASE "2" include_profile = TRUE include_conversations = FALSE include_files = FALSE include_activity = FALSE include_consents = TRUE data_scope = "profile" CASE "3" include_profile = FALSE include_conversations = TRUE include_files = FALSE include_activity = FALSE include_consents = FALSE data_scope = "conversations" CASE "4" include_profile = FALSE include_conversations = FALSE include_files = TRUE include_activity = FALSE include_consents = FALSE data_scope = "files" CASE "5" include_profile = FALSE include_conversations = FALSE include_files = FALSE include_activity = TRUE include_consents = FALSE data_scope = "activity" CASE "6" TALK "Select categories (yes/no for each):" HEAR include_profile AS BOOLEAN WITH "Include profile information?" HEAR include_conversations AS BOOLEAN WITH "Include conversations?" HEAR include_files AS BOOLEAN WITH "Include files metadata?" HEAR include_activity AS BOOLEAN WITH "Include activity logs?" HEAR include_consents AS BOOLEAN WITH "Include consent records?" data_scope = "custom" CASE ELSE include_profile = TRUE include_conversations = TRUE include_files = TRUE include_activity = TRUE include_consents = TRUE data_scope = "complete" END SELECT TALK "" TALK "🔄 Preparing your data export... This may take a few minutes." TALK "" ' Gather the data export_data = {} request_id = "EXP-" + FORMAT(NOW(), "YYYYMMDD-HHmmss") + "-" + user.id ' Export metadata export_data.metadata = { "export_id": request_id, "export_date": NOW(), "format": format_name, "data_scope": data_scope, "legal_basis": "LGPD Art. 18 V / GDPR Art. 20", "data_controller": "Your Organization Name", "contact": "privacy@company.com" } ' Gather profile data IF include_profile THEN profile = FIND "users" WHERE id = user.id export_data.profile = { "name": profile.name, "email": profile.email, "phone": profile.phone, "address": profile.address, "created_at": profile.created_at, "last_login": profile.last_login, "timezone": profile.timezone, "language": profile.language, "preferences": profile.preferences } TALK "✓ Profile data collected" END IF ' Gather conversations IF include_conversations THEN messages = FIND "messages" WHERE user_id = user.id ORDER BY created_at sessions = FIND "sessions" WHERE user_id = user.id export_data.conversations = { "total_sessions": COUNT(sessions), "total_messages": COUNT(messages), "sessions": sessions, "messages": messages } TALK "✓ Conversation data collected (" + COUNT(messages) + " messages)" END IF ' Gather files metadata IF include_files THEN files = FIND "user_files" WHERE user_id = user.id file_list = [] FOR EACH file IN files file_info = { "filename": file.name, "size": file.size, "type": file.mime_type, "uploaded_at": file.created_at, "last_accessed": file.last_accessed, "path": file.path } APPEND file_list, file_info NEXT export_data.files = { "total_files": COUNT(files), "total_size": SUM(files, "size"), "file_list": file_list } TALK "✓ Files metadata collected (" + COUNT(files) + " files)" END IF ' Gather activity logs IF include_activity THEN activity = FIND "activity_logs" WHERE user_id = user.id ORDER BY timestamp DESC LIMIT 10000 export_data.activity = { "total_events": COUNT(activity), "events": activity } TALK "✓ Activity logs collected (" + COUNT(activity) + " events)" END IF ' Gather consent records IF include_consents THEN consents = FIND "user_consents" WHERE user_id = user.id export_data.consents = { "consent_records": consents, "current_preferences": { "marketing_emails": user.marketing_consent, "analytics": user.analytics_consent, "third_party_sharing": user.sharing_consent } } TALK "✓ Consent records collected" END IF TALK "" TALK "📁 Generating export files..." ' Generate export files based on format timestamp = FORMAT(NOW(), "YYYYMMDD_HHmmss") base_filename = "data_export_" + timestamp SELECT CASE export_format CASE "json" filename = base_filename + ".json" WRITE filename, JSON(export_data) CASE "csv" ' Generate multiple CSV files for different data types IF include_profile THEN WRITE base_filename + "_profile.csv", CSV(export_data.profile) END IF IF include_conversations THEN WRITE base_filename + "_messages.csv", CSV(export_data.conversations.messages) END IF IF include_files THEN WRITE base_filename + "_files.csv", CSV(export_data.files.file_list) END IF IF include_activity THEN WRITE base_filename + "_activity.csv", CSV(export_data.activity.events) END IF ' Create ZIP of all CSVs filename = base_filename + "_csv.zip" COMPRESS filename, base_filename + "_*.csv" CASE "xml" filename = base_filename + ".xml" WRITE filename, XML(export_data) CASE "all" ' Generate all formats WRITE base_filename + ".json", JSON(export_data) WRITE base_filename + ".xml", XML(export_data) IF include_profile THEN WRITE base_filename + "_profile.csv", CSV(export_data.profile) END IF IF include_conversations THEN WRITE base_filename + "_messages.csv", CSV(export_data.conversations.messages) END IF IF include_files THEN WRITE base_filename + "_files.csv", CSV(export_data.files.file_list) END IF filename = base_filename + "_complete.zip" COMPRESS filename, base_filename + ".*" END SELECT ' Upload to secure storage secure_path = "/secure/exports/" + user.id + "/" UPLOAD filename TO secure_path ' Generate download link (expires in 7 days) download_link = GENERATE SECURE LINK secure_path + filename EXPIRES 7 DAYS ' Log the export request for compliance INSERT INTO "privacy_requests" VALUES { "id": request_id, "user_id": user.id, "request_type": "data_portability", "data_scope": data_scope, "format": format_name, "requested_at": NOW(), "completed_at": NOW(), "status": "completed", "legal_basis": "LGPD Art. 18 V / GDPR Art. 20" } ' Send email with download link SEND MAIL email, "Your Data Export is Ready - " + request_id, " Dear " + user.name + ", Your data export request has been completed. **Export Details:** - Request ID: " + request_id + " - Format: " + format_name + " - Data Included: " + data_scope + " - Generated: " + FORMAT(NOW(), "DD/MM/YYYY HH:mm") + " **Download Your Data:** " + download_link + " ⚠️ This link expires in 7 days for security purposes. **What's Included:** " + IF(include_profile, "✓ Profile information\n", "") + IF(include_conversations, "✓ Conversation history\n", "") + IF(include_files, "✓ Files metadata\n", "") + IF(include_activity, "✓ Activity logs\n", "") + IF(include_consents, "✓ Consent records\n", "") + " **Your Rights Under LGPD/GDPR:** - Import this data to another service provider - Request data deletion after export - Request additional data categories - File a complaint with data protection authorities If you have questions, contact privacy@company.com Pragmatismo Privacy Team " TALK "" TALK "✅ **Export Complete!**" TALK "" TALK "📧 A download link has been sent to: " + email TALK "" TALK "**Export Details:**" TALK "• Request ID: " + request_id TALK "• Format: " + format_name TALK "• Link expires in: 7 days" TALK "" TALK "You can use this data to:" TALK "• Import into another service" TALK "• Keep a personal backup" TALK "• Review what data we hold" TALK "" TALK "🔒 Need anything else?" TALK "• Say **'delete my data'** to request deletion" TALK "• Say **'privacy settings'** to manage consents" TALK "• Say **'help'** for other options"