botserver/templates/compliance/privacy.gbai/privacy.gbdialog/export-data.bas
Rodrigo Rodriguez (Pragmatismo) 48c1ae0b51 , dt.month, dt.hour, dt.is_weekend, etc.)
- Add startup wizard module for first-run configuration
- Add white-label branding system with .product file support
- Add bot manager for lifecycle, MinIO buckets, and templates
- Add version tracking registry for component updates
- Create comparison doc: BASIC vs n8n/Zapier/Make/Copilot
- Add WhatsApp-style sample dialogs to template documentation
- Add data traceability SVG diagram ```
2025-11-30 15:07:29 -03:00

372 lines
11 KiB
QBasic
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

' ============================================================================
' 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"