botserver/templates/sales/crm.gbai/crm.gbdialog/tables.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

391 lines
12 KiB
QBasic

' CRM Database Tables Definition
' This file defines all CRM tables using the TABLE keyword
' Tables are automatically created and managed by the system
' Leads table - stores potential customers
TABLE leads
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
company_name VARCHAR(255) NOT NULL
contact_name VARCHAR(255)
email VARCHAR(255) UNIQUE
phone VARCHAR(50)
website VARCHAR(255)
industry VARCHAR(100)
company_size VARCHAR(50)
lead_source VARCHAR(100)
lead_status VARCHAR(50) DEFAULT 'new'
score INTEGER DEFAULT 0
assigned_to VARCHAR(100)
notes TEXT
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
converted_at TIMESTAMP
converted_to_account_id UUID
END TABLE
' Accounts table - stores customer organizations
TABLE accounts
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
name VARCHAR(255) NOT NULL
type VARCHAR(50) DEFAULT 'customer'
industry VARCHAR(100)
annual_revenue DECIMAL(15,2)
employees INTEGER
website VARCHAR(255)
phone VARCHAR(50)
billing_address TEXT
shipping_address TEXT
owner_id VARCHAR(100)
parent_account_id UUID
status VARCHAR(50) DEFAULT 'active'
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Contacts table - stores individual people
TABLE contacts
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
account_id UUID REFERENCES accounts(id)
first_name VARCHAR(100)
last_name VARCHAR(100)
full_name VARCHAR(255) GENERATED ALWAYS AS (first_name || ' ' || last_name) STORED
email VARCHAR(255) UNIQUE
phone VARCHAR(50)
mobile VARCHAR(50)
title VARCHAR(100)
department VARCHAR(100)
lead_id UUID REFERENCES leads(id)
primary_contact BOOLEAN DEFAULT FALSE
do_not_call BOOLEAN DEFAULT FALSE
do_not_email BOOLEAN DEFAULT FALSE
preferred_contact_method VARCHAR(50)
linkedin_url VARCHAR(255)
twitter_handle VARCHAR(100)
notes TEXT
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Opportunities table - stores sales opportunities
TABLE opportunities
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
name VARCHAR(255) NOT NULL
account_id UUID REFERENCES accounts(id)
contact_id UUID REFERENCES contacts(id)
amount DECIMAL(15,2)
probability INTEGER CHECK (probability >= 0 AND probability <= 100)
expected_revenue DECIMAL(15,2) GENERATED ALWAYS AS (amount * probability / 100) STORED
stage VARCHAR(100) DEFAULT 'qualification'
close_date DATE
type VARCHAR(50)
lead_source VARCHAR(100)
next_step TEXT
description TEXT
owner_id VARCHAR(100)
campaign_id UUID
competitor_names TEXT[]
won BOOLEAN
closed_at TIMESTAMP
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Activities table - stores all customer interactions
TABLE activities
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
type VARCHAR(50) NOT NULL
subject VARCHAR(255) NOT NULL
description TEXT
status VARCHAR(50) DEFAULT 'open'
priority VARCHAR(20) DEFAULT 'normal'
due_date TIMESTAMP
completed_date TIMESTAMP
duration_minutes INTEGER
location VARCHAR(255)
' Related entities
account_id UUID REFERENCES accounts(id)
contact_id UUID REFERENCES contacts(id)
opportunity_id UUID REFERENCES opportunities(id)
lead_id UUID REFERENCES leads(id)
parent_activity_id UUID REFERENCES activities(id)
' Assignment and tracking
assigned_to VARCHAR(100)
created_by VARCHAR(100)
modified_by VARCHAR(100)
' Activity-specific fields
call_result VARCHAR(100)
call_duration INTEGER
email_message_id VARCHAR(255)
meeting_notes TEXT
meeting_attendees TEXT[]
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Products table - stores product catalog
TABLE products
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
name VARCHAR(255) NOT NULL
code VARCHAR(100) UNIQUE
description TEXT
category VARCHAR(100)
unit_price DECIMAL(10,2)
cost DECIMAL(10,2)
margin DECIMAL(5,2) GENERATED ALWAYS AS ((unit_price - cost) / unit_price * 100) STORED
quantity_in_stock INTEGER DEFAULT 0
active BOOLEAN DEFAULT TRUE
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Quotes table - stores sales quotes
TABLE quotes
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
quote_number VARCHAR(50) UNIQUE
opportunity_id UUID REFERENCES opportunities(id)
account_id UUID REFERENCES accounts(id)
contact_id UUID REFERENCES contacts(id)
status VARCHAR(50) DEFAULT 'draft'
valid_until DATE
subtotal DECIMAL(15,2)
discount_percent DECIMAL(5,2) DEFAULT 0
discount_amount DECIMAL(15,2) DEFAULT 0
tax_rate DECIMAL(5,2) DEFAULT 0
tax_amount DECIMAL(15,2)
total DECIMAL(15,2)
terms_conditions TEXT
notes TEXT
approved_by VARCHAR(100)
approved_at TIMESTAMP
sent_at TIMESTAMP
created_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Quote line items
TABLE quote_items
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
quote_id UUID REFERENCES quotes(id) ON DELETE CASCADE
product_id UUID REFERENCES products(id)
description TEXT
quantity INTEGER NOT NULL
unit_price DECIMAL(10,2) NOT NULL
discount_percent DECIMAL(5,2) DEFAULT 0
total DECIMAL(10,2) GENERATED ALWAYS AS (quantity * unit_price * (1 - discount_percent/100)) STORED
position INTEGER
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Campaigns table - stores marketing campaigns
TABLE campaigns
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
name VARCHAR(255) NOT NULL
type VARCHAR(50)
status VARCHAR(50) DEFAULT 'planning'
start_date DATE
end_date DATE
budget DECIMAL(15,2)
actual_cost DECIMAL(15,2)
expected_revenue DECIMAL(15,2)
expected_response DECIMAL(5,2)
description TEXT
objective TEXT
num_sent INTEGER DEFAULT 0
num_responses INTEGER DEFAULT 0
num_leads INTEGER DEFAULT 0
num_opportunities INTEGER DEFAULT 0
num_won_opportunities INTEGER DEFAULT 0
revenue_generated DECIMAL(15,2)
roi DECIMAL(10,2) GENERATED ALWAYS AS
(CASE WHEN actual_cost > 0 THEN (revenue_generated - actual_cost) / actual_cost * 100 ELSE 0 END) STORED
owner_id VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Campaign members
TABLE campaign_members
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
campaign_id UUID REFERENCES campaigns(id) ON DELETE CASCADE
lead_id UUID REFERENCES leads(id)
contact_id UUID REFERENCES contacts(id)
status VARCHAR(50) DEFAULT 'sent'
responded BOOLEAN DEFAULT FALSE
response_date TIMESTAMP
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Cases/Tickets table - stores customer support cases
TABLE cases
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
case_number VARCHAR(50) UNIQUE
subject VARCHAR(255) NOT NULL
description TEXT
status VARCHAR(50) DEFAULT 'new'
priority VARCHAR(20) DEFAULT 'medium'
type VARCHAR(50)
origin VARCHAR(50)
reason VARCHAR(100)
account_id UUID REFERENCES accounts(id)
contact_id UUID REFERENCES contacts(id)
parent_case_id UUID REFERENCES cases(id)
assigned_to VARCHAR(100)
escalated_to VARCHAR(100)
resolution TEXT
resolved_at TIMESTAMP
satisfaction_score INTEGER CHECK (satisfaction_score >= 1 AND satisfaction_score <= 5)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
closed_at TIMESTAMP
END TABLE
' Email tracking table
TABLE email_tracking
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
message_id VARCHAR(255) UNIQUE
from_address VARCHAR(255)
to_addresses TEXT[]
cc_addresses TEXT[]
subject VARCHAR(255)
body TEXT
html_body TEXT
' Related entities
account_id UUID REFERENCES accounts(id)
contact_id UUID REFERENCES contacts(id)
opportunity_id UUID REFERENCES opportunities(id)
lead_id UUID REFERENCES leads(id)
case_id UUID REFERENCES cases(id)
activity_id UUID REFERENCES activities(id)
' Tracking
sent_at TIMESTAMP
delivered_at TIMESTAMP
opened_at TIMESTAMP
clicked_at TIMESTAMP
bounced BOOLEAN DEFAULT FALSE
bounce_reason TEXT
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Documents/Attachments table
TABLE documents
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
name VARCHAR(255) NOT NULL
file_path VARCHAR(500)
file_size INTEGER
mime_type VARCHAR(100)
description TEXT
' Polymorphic associations
entity_type VARCHAR(50)
entity_id UUID
uploaded_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Notes table - stores notes for any entity
TABLE notes
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
title VARCHAR(255)
body TEXT NOT NULL
' Polymorphic associations
entity_type VARCHAR(50)
entity_id UUID
is_private BOOLEAN DEFAULT FALSE
created_by VARCHAR(100)
modified_by VARCHAR(100)
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Tags table for categorization
TABLE tags
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
name VARCHAR(100) UNIQUE NOT NULL
color VARCHAR(7)
description TEXT
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Entity tags junction table
TABLE entity_tags
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
tag_id UUID REFERENCES tags(id) ON DELETE CASCADE
entity_type VARCHAR(50)
entity_id UUID
created_at TIMESTAMP DEFAULT NOW()
UNIQUE(tag_id, entity_type, entity_id)
END TABLE
' Pipeline stages configuration
TABLE pipeline_stages
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
pipeline_type VARCHAR(50) NOT NULL
stage_name VARCHAR(100) NOT NULL
stage_order INTEGER NOT NULL
probability INTEGER DEFAULT 0
is_won BOOLEAN DEFAULT FALSE
is_closed BOOLEAN DEFAULT FALSE
color VARCHAR(7)
created_at TIMESTAMP DEFAULT NOW()
UNIQUE(pipeline_type, stage_order)
END TABLE
' User preferences and settings
TABLE crm_user_settings
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
user_id VARCHAR(100) UNIQUE NOT NULL
default_pipeline VARCHAR(50)
email_signature TEXT
notification_preferences JSONB
dashboard_layout JSONB
list_view_preferences JSONB
timezone VARCHAR(50) DEFAULT 'UTC'
date_format VARCHAR(20) DEFAULT 'YYYY-MM-DD'
created_at TIMESTAMP DEFAULT NOW()
updated_at TIMESTAMP DEFAULT NOW()
END TABLE
' Audit log for tracking changes
TABLE audit_log
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
entity_type VARCHAR(50) NOT NULL
entity_id UUID NOT NULL
action VARCHAR(50) NOT NULL
field_name VARCHAR(100)
old_value TEXT
new_value TEXT
user_id VARCHAR(100)
ip_address VARCHAR(45)
user_agent TEXT
created_at TIMESTAMP DEFAULT NOW()
END TABLE
' Indexes for performance
CREATE INDEX idx_leads_status ON leads(lead_status)
CREATE INDEX idx_leads_assigned ON leads(assigned_to)
CREATE INDEX idx_accounts_owner ON accounts(owner_id)
CREATE INDEX idx_contacts_account ON contacts(account_id)
CREATE INDEX idx_opportunities_account ON opportunities(account_id)
CREATE INDEX idx_opportunities_stage ON opportunities(stage)
CREATE INDEX idx_opportunities_close_date ON opportunities(close_date)
CREATE INDEX idx_activities_due_date ON activities(due_date)
CREATE INDEX idx_activities_assigned ON activities(assigned_to)
CREATE INDEX idx_cases_status ON cases(status)
CREATE INDEX idx_cases_assigned ON cases(assigned_to)
CREATE INDEX idx_audit_entity ON audit_log(entity_type, entity_id)
CREATE INDEX idx_entity_tags ON entity_tags(entity_type, entity_id)